My question is in title. I have had read the same case but doesn’t help me.
I want to display a sion click field on a radio button. If a match is made, then there is a fill. If there is no match, then another fill is made in the same field. The latter case is defined in a function, the first case is defined in the controller
My FormType
->add('meeting', EntityType::class,[
'class' => Meeting::class,
'choice_label' => function ($meeting) {
return 'RDV-'.$meeting->getId() . ' : ' . $meeting->getCompanyName();
},
'query_builder' => function(MeetingRepository $repository) use ($data) {
$date = new DateTimeImmutable( 'now - 420 days');
return $repository->createQueryBuilder('m')
->where("m.siren = :siren")
->andWhere('m.commercial = :commercial')
->andWhere('m.status = 9')
->andWhere('m.date > :date')
->setParameters(['siren' => $data['siren'], 'commercial' => $data['commercial'], 'date' => $date]);
},
'expanded' => false,
'multiple' => false,
'label' => 'RDV *',
'label_attr' => [
'class' => 'form-label',
],
'attr' => [
'class' => 'js-select form-select',
'autocomplete' => "off",
'data-hs-tom-select-options' => "{ "placeholder": "Sélectionnez un rendez-vous...", "dropup": true}"
],
'row_attr' => [
'class' => 'mb-3 col-2 tom-select-custom',
'data-hs-validation-validate-class'
],
]);
My controller :
let siren = $('#order_odyc_siren').val();
let commercial = $('#order_odyc_commercial').val();
let rdvTmkOui = $('#order_odyc_rdvTmk_0');
let data = $(event.currentTarget).prop('id') === 'order_odyc_rdvTmk_0'
? {
"order_odyc[rdvTmk]": 1,
"order_odyc[siren]": siren,
"order_odyc[commercial]": commercial,
"order_odyc[match]": false
}
: ''
const form = $(event.currentTarget).closest('form');
$(event.currentTarget).parent().after('<div id="load-rdv-tmk" class="d-inline"><div class="spinner-border spinner-border-sm ms-2 text-primary" role="status" aria-hidden="true"></div>')
$.ajax({
"url": form.attr('action'),
"method": 'POST',
"headers": {
"Content-Type": "application/x-www-form-urlencoded;charset:UTF-8"
},
"data": data,
"complete": (function (html) {
if($('#order_odyc_tmk').length === 0){
$('#order_odyc_rdvTmk_0').parent().parent().after($(html.responseText).find('#order_odyc_tmk').parent())
$('#order_odyc_tmk').parent().after($(html.responseText).find('#order_odyc_meeting').parent())
console.log('Siren : ' + siren + ' et commercial : ' + commercial)
SireneV3.getRdvBySirenAndCommercial(siren, commercial, rdvTmkOui);
}else{
$('#order_odyc_tmk').parent().replaceWith($(html.responseText).find('#order_odyc_tmk').parent())
$('#order_odyc_meeting').parent().replaceWith($(html.responseText).find('#order_odyc_meeting').parent())
}
$('#load-rdv-tmk').remove()
HSCore.components.HSTomSelect.init('#order_odyc_tmk')
HSCore.components.HSTomSelect.init('#order_odyc_meeting')
})
});
In function if field in controller will not print :
function valid(){
let choice = $('input[name=formRadio]:checked')
//window.alert('RDV-' + choice[0].dataset.id + ' : ' + choice[0].dataset.companyname + ' (' + choice[0].dataset.siren + ')')
let div = $('<div class="mb-3 col-2 tom-select-custom" data-hs-validation-validate-class><label class="form-label" for="order_odyc_meeting">RDV *</label></div>')
let select = $('<select class="js-select form-select" id="order_odyc_meeting" name="order_odyc[meeting]" data-hs-tom-select_option="{ \\"placeholder\\": \\"Sélectionnez un rendez-vous...\\", \\"dropup\\": true}"></select>');
let option = $('<option value="'+choice[0].dataset.id+'" selected >RDV-' + choice[0].dataset.id + ' : ' + choice[0].dataset.companyname+'</option>')
$(select).append(option)
$(div).append(select)
//$('#order_odyc_rdvTmk_0').trigger('click');
setTimeout(()=>{
$('#order_odyc_meeting').parent().replaceWith(div)
HSCore.components.HSTomSelect.init('#order_odyc_meeting')
},250)
$('#order_odyc_rdvTmk_0').data('meeting', choice[0].dataset.siren)
$('#btn_modal_lastMeetings').trigger('click')
}
</script>`
break;