fix: Generation d'une fiche d'élève avec le nouveau modèle PayementMode

et PayementPlans
This commit is contained in:
N3WT DE COMPET
2025-05-20 18:31:40 +02:00
parent 95b449ddfd
commit 4f40d1f29d
4 changed files with 73 additions and 43 deletions

View File

@ -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

View File

@ -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

View File

@ -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 = {

View File

@ -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({
<RadioList
sectionLabel="Choisissez une option"
required
items={paymentPlansOptions
.filter((option) =>
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({
<RadioList
sectionLabel="Choisissez une option"
required
items={paymentPlansOptions
.filter((option) =>
tuitionPaymentPlans.some((plan) => plan.plan_type === option.id)
)
.map((option) => ({
id: option.id,
label: option.name,
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}
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"