diff --git a/Back-End/Subscriptions/templatetags/myTemplateTag.py b/Back-End/Subscriptions/templatetags/myTemplateTag.py index 5dc0986..9485195 100644 --- a/Back-End/Subscriptions/templatetags/myTemplateTag.py +++ b/Back-End/Subscriptions/templatetags/myTemplateTag.py @@ -8,28 +8,28 @@ register = template.Library() def getRegistrationPaymentPlan(pk): registerForm = RegistrationForm.objects.get(student=pk) if registerForm.registration_payment_plan: - return registerForm.registration_payment_plan.label + return registerForm.registration_payment_plan.plan_type.label return "" @register.filter def getTuitionPaymentPlan(pk): registerForm = RegistrationForm.objects.get(student=pk) if registerForm.tuition_payment_plan: - return registerForm.tuition_payment_plan.label + return registerForm.tuition_payment_plan.plan_type.label return "" @register.filter def getRegistrationPaymentMethod(pk): registerForm = RegistrationForm.objects.get(student=pk) if registerForm.registration_payment: - return registerForm.registration_payment.label + return registerForm.registration_payment.mode.label return "" @register.filter def getTuitionPaymentMethod(pk): registerForm = RegistrationForm.objects.get(student=pk) if registerForm.tuition_payment: - return registerForm.tuition_payment.label + return registerForm.tuition_payment.mode.label return "" @register.filter diff --git a/Back-End/Subscriptions/views/register_form_views.py b/Back-End/Subscriptions/views/register_form_views.py index 059cf75..1d44d50 100644 --- a/Back-End/Subscriptions/views/register_form_views.py +++ b/Back-End/Subscriptions/views/register_form_views.py @@ -306,13 +306,13 @@ class RegisterFormWithIdView(APIView): # L'école doit désormais valider le dossier d'inscription try: # Génération de la fiche d'inscription au format PDF - # base_dir = os.path.join(settings.MEDIA_ROOT, f"registration_files/dossier_rf_{registerForm.pk}") - # os.makedirs(base_dir, exist_ok=True) + base_dir = os.path.join(settings.MEDIA_ROOT, f"registration_files/dossier_rf_{registerForm.pk}") + os.makedirs(base_dir, exist_ok=True) - # # Fichier PDF initial - # initial_pdf = f"{base_dir}/Inscription_{registerForm.student.last_name}_{registerForm.student.first_name}.pdf" - # registerForm.registration_file = util.rfToPDF(registerForm, initial_pdf) - # registerForm.save() + # Fichier PDF initial + initial_pdf = f"{base_dir}/Inscription_{registerForm.student.last_name}_{registerForm.student.first_name}.pdf" + registerForm.registration_file = util.rfToPDF(registerForm, initial_pdf) + registerForm.save() # Mise à jour de l'automate # Vérification de la présence du fichier SEPA diff --git a/Front-End/src/components/Inscription/InscriptionFormShared.js b/Front-End/src/components/Inscription/InscriptionFormShared.js index cfe3ebe..d4b7e2e 100644 --- a/Front-End/src/components/Inscription/InscriptionFormShared.js +++ b/Front-End/src/components/Inscription/InscriptionFormShared.js @@ -375,8 +375,7 @@ export default function InscriptionFormShared({ e.preventDefault(); // Vérifier si le mode de paiement sélectionné est un prélèvement SEPA - const isSepaPayment = - formData.registration_payment === 1 || formData.tuition_payment === 1; + const isSepaPayment = formData.isSepa === 1; // Préparer les données JSON const jsonData = { diff --git a/Front-End/src/components/Inscription/PaymentMethodSelector.js b/Front-End/src/components/Inscription/PaymentMethodSelector.js index 4b99012..612e702 100644 --- a/Front-End/src/components/Inscription/PaymentMethodSelector.js +++ b/Front-End/src/components/Inscription/PaymentMethodSelector.js @@ -64,6 +64,14 @@ export default function PaymentMethodSelector({ 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 */} @@ -84,11 +92,21 @@ export default function PaymentMethodSelector({ label="Mode de Paiement" placeHolder="Sélectionner un mode de paiement" selected={formData.registration_payment} - callback={(e) => - onChange('registration_payment', parseInt(e.target.value, 10)) - } + callback={(e) => { + const selectedId = parseInt(e.target.value, 10); + const selectedMode = registrationPaymentModes.find( + (mode) => mode.id === selectedId + ); + onChange('registration_payment', selectedId); + // Ajoute ou retire isSepa selon le mode choisi + if (selectedMode && selectedMode.mode === 1) { + onChange('isSepa', 1); + } else { + onChange('isSepa', 0); + } + }} choices={registrationPaymentModes.map((mode) => ({ - value: mode.mode, + value: mode.id, // <-- utiliser l'id du mode de paiement label: paymentModesOptions.find((option) => option.id === mode.mode) ?.name || 'Mode inconnu', @@ -102,26 +120,25 @@ export default function PaymentMethodSelector({ - registrationPaymentPlans.some( - (plan) => plan.plan_type === option.id - ) - ) - .map((option) => ({ - id: option.id, - label: option.name, - }))} + items={sortPlansByOptions( + registrationPaymentPlans, + paymentPlansOptions + ).map((plan) => ({ + 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 - ), // S'assurer que la valeur est un entier + ), }} handleChange={(e) => { const value = parseInt(e.target.value, 10); - onChange('registration_payment_plan', value); // Convertir la valeur en entier + onChange('registration_payment_plan', value); }} fieldName="registration_payment_plan" className="mt-4" @@ -147,11 +164,21 @@ export default function PaymentMethodSelector({ label="Mode de Paiement" placeHolder="Sélectionner un mode de paiement" selected={formData.tuition_payment} - callback={(e) => - onChange('tuition_payment', parseInt(e.target.value, 10)) - } + callback={(e) => { + const selectedId = parseInt(e.target.value, 10); + const selectedMode = tuitionPaymentModes.find( + (mode) => mode.id === selectedId + ); + onChange('tuition_payment', selectedId); + // Ajoute ou retire isSepa selon le mode choisi + if (selectedMode && selectedMode.mode === 1) { + onChange('isSepa', 1); + } else { + onChange('isSepa', 0); + } + }} choices={tuitionPaymentModes.map((mode) => ({ - value: mode.mode, + value: mode.id, label: paymentModesOptions.find((option) => option.id === mode.mode) ?.name || 'Mode inconnu', @@ -165,18 +192,22 @@ export default function PaymentMethodSelector({ - tuitionPaymentPlans.some((plan) => plan.plan_type === option.id) - ) - .map((option) => ({ - id: option.id, - label: option.name, - }))} - formData={formData} + items={sortPlansByOptions( + tuitionPaymentPlans, + paymentPlansOptions + ).map((plan) => ({ + 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); - onChange('tuition_payment_plan', value); // Convertir la valeur en entier + const value = parseInt(e.target.value, 10); // valeur = id du plan + onChange('tuition_payment_plan', value); }} fieldName="tuition_payment_plan" className="mt-4"