fix: Unicité des fees + utilisation de l'establishmentID [#44]

This commit is contained in:
N3WT DE COMPET
2025-05-01 14:46:17 +02:00
parent 24069b894e
commit d37e6c384d
5 changed files with 25 additions and 15 deletions

View File

@ -90,7 +90,7 @@ class PaymentModeType(models.IntegerChoices):
CASH = 4, 'Espèce' CASH = 4, 'Espèce'
class Discount(models.Model): class Discount(models.Model):
name = models.CharField(max_length=255, unique=True) name = models.CharField(max_length=255, null=True, blank=True)
amount = models.DecimalField(max_digits=10, decimal_places=2, default=0) amount = models.DecimalField(max_digits=10, decimal_places=2, default=0)
description = models.TextField(blank=True) description = models.TextField(blank=True)
discount_type = models.IntegerField(choices=DiscountType.choices, default=DiscountType.CURRENCY) discount_type = models.IntegerField(choices=DiscountType.choices, default=DiscountType.CURRENCY)
@ -102,7 +102,7 @@ class Discount(models.Model):
return self.name return self.name
class Fee(models.Model): class Fee(models.Model):
name = models.CharField(max_length=255, unique=True) name = models.CharField(max_length=255, null=True, blank=True)
base_amount = models.DecimalField(max_digits=10, decimal_places=2, default=0) base_amount = models.DecimalField(max_digits=10, decimal_places=2, default=0)
description = models.TextField(blank=True) description = models.TextField(blank=True)
is_active = models.BooleanField(default=True) is_active = models.BooleanField(default=True)

View File

@ -9,10 +9,10 @@ import MultiSelect from '@/components/MultiSelect';
import LevelLabel from '@/components/CustomLabels/LevelLabel'; import LevelLabel from '@/components/CustomLabels/LevelLabel';
import { DndProvider, useDrop } from 'react-dnd'; import { DndProvider, useDrop } from 'react-dnd';
import { HTML5Backend } from 'react-dnd-html5-backend'; import { HTML5Backend } from 'react-dnd-html5-backend';
import { ESTABLISHMENT_ID } from '@/utils/Url';
import logger from '@/utils/logger'; import logger from '@/utils/logger';
import ClasseDetails from '@/components/ClasseDetails'; import ClasseDetails from '@/components/ClasseDetails';
import SectionHeader from '@/components/SectionHeader'; import SectionHeader from '@/components/SectionHeader';
import { useEstablishment } from '@/context/EstablishmentContext';
const ItemTypes = { const ItemTypes = {
TEACHER: 'teacher', TEACHER: 'teacher',
@ -28,6 +28,8 @@ const TeachersDropZone = ({
classe.teachers_details || [] classe.teachers_details || []
); );
const { selectedEstablishmentId } = useEstablishment();
useEffect(() => {}, [teachers]); useEffect(() => {}, [teachers]);
useEffect(() => { useEffect(() => {
@ -194,7 +196,7 @@ const ClassesSection = ({
number_of_students: '', number_of_students: '',
school_year: '', school_year: '',
teachers: [], teachers: [],
establishment: ESTABLISHMENT_ID, establishment: selectedEstablishmentId,
}); });
setFormData({ setFormData({
atmosphere_name: '', atmosphere_name: '',
@ -203,7 +205,7 @@ const ClassesSection = ({
number_of_students: '', number_of_students: '',
school_year: '', school_year: '',
teachers: [], teachers: [],
establishment: ESTABLISHMENT_ID, establishment: selectedEstablishmentId,
}); });
}; };

View File

@ -5,8 +5,8 @@ import Popup from '@/components/Popup';
import CheckBox from '@/components/CheckBox'; import CheckBox from '@/components/CheckBox';
import InputText from '@/components/InputText'; import InputText from '@/components/InputText';
import logger from '@/utils/logger'; import logger from '@/utils/logger';
import { ESTABLISHMENT_ID } from '@/utils/Url';
import SectionHeader from '@/components/SectionHeader'; import SectionHeader from '@/components/SectionHeader';
import { useEstablishment } from '@/context/EstablishmentContext';
const DiscountsSection = ({ const DiscountsSection = ({
discounts, discounts,
@ -29,6 +29,8 @@ const DiscountsSection = ({
const [removePopupMessage, setRemovePopupMessage] = useState(''); const [removePopupMessage, setRemovePopupMessage] = useState('');
const [removePopupOnConfirm, setRemovePopupOnConfirm] = useState(() => {}); const [removePopupOnConfirm, setRemovePopupOnConfirm] = useState(() => {});
const { selectedEstablishmentId } = useEstablishment();
const handleAddDiscount = () => { const handleAddDiscount = () => {
setNewDiscount({ setNewDiscount({
id: Date.now(), id: Date.now(),
@ -37,7 +39,7 @@ const DiscountsSection = ({
description: '', description: '',
discount_type: 0, discount_type: 0,
type: type, type: type,
establishment: ESTABLISHMENT_ID, establishment: selectedEstablishmentId,
}); });
}; };
@ -55,7 +57,11 @@ const DiscountsSection = ({
const handleSaveNewDiscount = () => { const handleSaveNewDiscount = () => {
if (newDiscount.name && newDiscount.amount) { if (newDiscount.name && newDiscount.amount) {
handleCreate(newDiscount) const discountData = {
...newDiscount,
establishment: selectedEstablishmentId,
};
handleCreate(discountData)
.then((createdDiscount) => { .then((createdDiscount) => {
setDiscounts([createdDiscount, ...discounts]); setDiscounts([createdDiscount, ...discounts]);
setNewDiscount(null); setNewDiscount(null);

View File

@ -6,8 +6,7 @@ import CheckBox from '@/components/CheckBox';
import InputText from '@/components/InputText'; import InputText from '@/components/InputText';
import logger from '@/utils/logger'; import logger from '@/utils/logger';
import SectionHeader from '@/components/SectionHeader'; import SectionHeader from '@/components/SectionHeader';
import { useEstablishment } from '@/context/EstablishmentContext';
import { ESTABLISHMENT_ID } from '@/utils/Url';
const FeesSection = ({ const FeesSection = ({
fees, fees,
@ -33,6 +32,7 @@ const FeesSection = ({
const labelTypeFrais = const labelTypeFrais =
type === 0 ? "Frais d'inscription" : 'Frais de scolarité'; type === 0 ? "Frais d'inscription" : 'Frais de scolarité';
const { selectedEstablishmentId } = useEstablishment();
// Récupération des messages d'erreur // Récupération des messages d'erreur
const getError = (field) => { const getError = (field) => {
return localErrors?.[field]?.[0]; return localErrors?.[field]?.[0];
@ -48,7 +48,7 @@ const FeesSection = ({
validity_end_date: '', validity_end_date: '',
discounts: [], discounts: [],
type: type, type: type,
establishment: ESTABLISHMENT_ID, establishment: selectedEstablishmentId,
}); });
}; };
@ -64,7 +64,12 @@ const FeesSection = ({
const handleSaveNewFee = () => { const handleSaveNewFee = () => {
if (newFee.name && newFee.base_amount) { if (newFee.name && newFee.base_amount) {
handleCreate(newFee) const feeData = {
...newFee,
establishment: selectedEstablishmentId,
};
handleCreate(feeData)
.then((createdFee) => { .then((createdFee) => {
setFees([createdFee, ...fees]); setFees([createdFee, ...fees]);
setNewFee(null); setNewFee(null);

View File

@ -49,9 +49,6 @@ export const BE_SCHOOL_ESTABLISHMENT_URL = `${BASE_URL}/Establishment/establishm
export const BE_PLANNING_PLANNINGS_URL = `${BASE_URL}/Planning/plannings`; export const BE_PLANNING_PLANNINGS_URL = `${BASE_URL}/Planning/plannings`;
export const BE_PLANNING_EVENTS_URL = `${BASE_URL}/Planning/events`; export const BE_PLANNING_EVENTS_URL = `${BASE_URL}/Planning/events`;
// FIXME : En attendant la gestion des sessions
export const ESTABLISHMENT_ID = 1;
// GESTION MESSAGERIE // GESTION MESSAGERIE
export const BE_GESTIONMESSAGERIE_MESSAGES_URL = `${BASE_URL}/GestionMessagerie/messages`; export const BE_GESTIONMESSAGERIE_MESSAGES_URL = `${BASE_URL}/GestionMessagerie/messages`;
export const BE_GESTIONMESSAGERIE_MESSAGERIE_URL = `${BASE_URL}/GestionMessagerie/messagerie`; export const BE_GESTIONMESSAGERIE_MESSAGERIE_URL = `${BASE_URL}/GestionMessagerie/messagerie`;