import React from 'react'; import FeesSection from '@/components/Structure/Tarification/FeesSection'; import DiscountsSection from '@/components/Structure/Tarification/DiscountsSection'; import PaymentPlanSelector from '@/components/PaymentPlanSelector'; import PaymentModeSelector from '@/components/PaymentModeSelector'; import { BE_SCHOOL_FEES_URL, BE_SCHOOL_DISCOUNTS_URL, BE_SCHOOL_PAYMENT_PLANS_URL, BE_SCHOOL_PAYMENT_MODES_URL, } from '@/utils/Url'; const FeesManagement = ({ registrationDiscounts, setRegistrationDiscounts, tuitionDiscounts, setTuitionDiscounts, registrationFees, setRegistrationFees, tuitionFees, setTuitionFees, registrationPaymentPlans, setRegistrationPaymentPlans, tuitionPaymentPlans, setTuitionPaymentPlans, registrationPaymentModes, setRegistrationPaymentModes, tuitionPaymentModes, setTuitionPaymentModes, handleCreate, handleEdit, handleDelete, }) => { // Liste unique triée par type puis par nom const allFees = [...(registrationFees ?? []), ...(tuitionFees ?? [])].sort( (a, b) => a.type - b.type || (a.name ?? '').localeCompare(b.name ?? '') ); const setAllFees = (updater) => { const next = typeof updater === 'function' ? updater(allFees) : updater; setRegistrationFees(next.filter((f) => f.type === 0)); setTuitionFees(next.filter((f) => f.type === 1)); }; const allDiscounts = [ ...(registrationDiscounts ?? []), ...(tuitionDiscounts ?? []), ].sort( (a, b) => a.type - b.type || (a.name ?? '').localeCompare(b.name ?? '') ); const setAllDiscounts = (updater) => { const next = typeof updater === 'function' ? updater(allDiscounts) : updater; setRegistrationDiscounts(next.filter((d) => d.type === 0)); setTuitionDiscounts(next.filter((d) => d.type === 1)); }; const allPaymentPlans = [ ...(registrationPaymentPlans ?? []), ...(tuitionPaymentPlans ?? []), ]; const allPaymentModes = [ ...(registrationPaymentModes ?? []), ...(tuitionPaymentModes ?? []), ]; return (
{/* Tableau unique des frais */} { const setter = feeData.type === 0 ? setRegistrationFees : setTuitionFees; return handleCreate(BE_SCHOOL_FEES_URL, feeData, setter); }} handleEdit={(id, data) => { const fee = allFees.find((f) => f.id === id); const feeType = data.type ?? fee?.type; const setter = feeType === 0 ? setRegistrationFees : setTuitionFees; return handleEdit(BE_SCHOOL_FEES_URL, id, data, setter); }} handleDelete={(id) => { const fee = allFees.find((f) => f.id === id); const setter = fee?.type === 0 ? setRegistrationFees : setTuitionFees; return handleDelete(BE_SCHOOL_FEES_URL, id, setter); }} /> {/* Tableau unique des réductions */} { const setter = data.type === 0 ? setRegistrationDiscounts : setTuitionDiscounts; return handleCreate(BE_SCHOOL_DISCOUNTS_URL, data, setter); }} handleEdit={(id, data) => { const discount = allDiscounts.find((d) => d.id === id); const discountType = data.type ?? discount?.type; const setter = discountType === 0 ? setRegistrationDiscounts : setTuitionDiscounts; return handleEdit(BE_SCHOOL_DISCOUNTS_URL, id, data, setter); }} handleDelete={(id) => { const discount = allDiscounts.find((d) => d.id === id); const setter = discount?.type === 0 ? setRegistrationDiscounts : setTuitionDiscounts; return handleDelete(BE_SCHOOL_DISCOUNTS_URL, id, setter); }} onDiscountDelete={(id) => { // Retire la réduction des frais concernés setAllFees((prevFees) => prevFees.map((fee) => ({ ...fee, discounts: fee.discounts.filter((dId) => dId !== id), })) ); }} /> {/* Plans et modes de paiement communs */}
{ const setter = data.type === 0 ? setRegistrationPaymentPlans : setTuitionPaymentPlans; return handleCreate(BE_SCHOOL_PAYMENT_PLANS_URL, data, setter); }} handleDelete={(id) => { const plan = allPaymentPlans.find((p) => p.id === id); const setter = plan?.type === 0 ? setRegistrationPaymentPlans : setTuitionPaymentPlans; return handleDelete(BE_SCHOOL_PAYMENT_PLANS_URL, id, setter); }} />
{ const setter = data.type === 0 ? setRegistrationPaymentModes : setTuitionPaymentModes; return handleCreate(BE_SCHOOL_PAYMENT_MODES_URL, data, setter); }} handleDelete={(id) => { const mode = allPaymentModes.find((m) => m.id === id); const setter = mode?.type === 0 ? setRegistrationPaymentModes : setTuitionPaymentModes; return handleDelete(BE_SCHOOL_PAYMENT_MODES_URL, id, setter); }} />
); }; export default FeesManagement;