import React, { useEffect } from 'react'; import SelectChoice from '@/components/Form/SelectChoice'; import RadioList from '@/components/Form/RadioList'; import logger from '@/utils/logger'; export default function PaymentMethodSelector({ formData, setFormData, registrationPaymentModes, tuitionPaymentModes, registrationPaymentPlans, tuitionPaymentPlans, errors, setIsPageValid, enable = true, }) { useEffect(() => { const isValid = !Object.keys(formData).some( (field) => getLocalError(field) !== '' ); setIsPageValid(isValid); logger.debug('formdata : ', formData); }, [formData, setIsPageValid]); const paymentModesOptions = [ { id: 1, name: 'Prélèvement SEPA' }, { id: 2, name: 'Virement' }, { id: 3, name: 'Chèque' }, { id: 4, name: 'Espèce' }, ]; const paymentPlansOptions = [ { id: 1, name: '1 fois' }, { id: 2, name: '3 fois' }, { id: 3, name: '10 fois' }, { id: 4, name: '12 fois' }, ]; const getError = (field) => { return errors?.student?.[field]?.[0]; }; const getLocalError = (field) => { if ( (field === 'registration_payment' && (!formData.registration_payment || String(formData.registration_payment).trim() === '')) || (field === 'tuition_payment' && (!formData.tuition_payment || String(formData.tuition_payment).trim() === '')) || (field === 'registration_payment_plan' && (!formData.registration_payment_plan || String(formData.registration_payment_plan).trim() === '')) || (field === 'tuition_payment_plan' && (!formData.tuition_payment_plan || String(formData.tuition_payment_plan).trim() === '')) ) { return 'Champs requis'; } return ''; }; const onChange = (field, value) => { setFormData((prev) => ({ ...prev, [field]: value })); }; // Fonction utilitaire pour trier selon paymentPlansOptions const sortPlansByOptions = (plans, options) => { const order = options.map((opt) => opt.id); return [...plans].sort( (a, b) => order.indexOf(a.plan_type) - order.indexOf(b.plan_type) ); }; return ( <> {/* Frais d'inscription */}

Frais d'inscription

Montant :{' '} {formData.totalRegistrationFees} €

{ const selectedId = parseInt(e.target.value, 10); const selectedMode = registrationPaymentModes.find( (mode) => mode.id === selectedId ); // Pour le mode de paiement d'inscription onChange('registration_payment', selectedId); // Ajoute ou retire isSepa selon le mode choisi if (selectedMode && selectedMode.mode === 1) { onChange('isSepa', 1); } else { // Vérifie si le mode de paiement scolarité n'est pas SEPA const tuitionMode = tuitionPaymentModes.find( (mode) => mode.id === formData.tuition_payment ); if (!tuitionMode || tuitionMode.mode !== 1) { onChange('isSepa', 0); } } }} choices={registrationPaymentModes.map((mode) => ({ value: mode.id, // <-- utiliser l'id du mode de paiement label: paymentModesOptions.find((option) => option.id === mode.mode) ?.name || 'Mode inconnu', }))} errorMsg={getError('registration_payment')} errorLocalMsg={getLocalError('registration_payment')} required disabled={!enable} /> ({ id: plan.id, label: paymentPlansOptions.find((opt) => opt.id === plan.plan_type) ?.name || `Option ${plan.plan_type}`, }))} formData={{ ...formData, registration_payment_plan: parseInt( formData.registration_payment_plan, 10 ), }} handleChange={(e) => { const value = parseInt(e.target.value, 10); onChange('registration_payment_plan', value); }} fieldName="registration_payment_plan" className="mt-4" disabled={!enable} />
{/* Frais de scolarité */}

Frais de scolarité

Montant :{' '} {formData.totalTuitionFees} €

{ const selectedId = parseInt(e.target.value, 10); const selectedMode = tuitionPaymentModes.find( (mode) => mode.id === selectedId ); // Pour le mode de paiement de scolarité onChange('tuition_payment', selectedId); // Ajoute ou retire isSepa selon le mode choisi if (selectedMode && selectedMode.mode === 1) { onChange('isSepa', 1); } else { // Vérifie si le mode de paiement inscription n'est pas SEPA const registrationMode = registrationPaymentModes.find( (mode) => mode.id === formData.registration_payment ); if (!registrationMode || registrationMode.mode !== 1) { onChange('isSepa', 0); } } }} choices={tuitionPaymentModes.map((mode) => ({ value: mode.id, label: paymentModesOptions.find((option) => option.id === mode.mode) ?.name || 'Mode inconnu', }))} errorMsg={getError('tuition_payment')} errorLocalMsg={getLocalError('tuition_payment')} required disabled={!enable} /> ({ id: plan.id, label: paymentPlansOptions.find((opt) => opt.id === plan.plan_type) ?.name || `Option ${plan.plan_type}`, }))} formData={{ ...formData, tuition_payment_plan: parseInt(formData.tuition_payment_plan, 10), }} handleChange={(e) => { const value = parseInt(e.target.value, 10); // valeur = id du plan onChange('tuition_payment_plan', value); }} fieldName="tuition_payment_plan" className="mt-4" errorMsg={ getError('tuition_payment_plan') || getLocalError('tuition_payment_plan') } disabled={!enable} />
); }