diff --git a/src/main/java/fr/titionfire/ffsaf/domain/service/MembreService.java b/src/main/java/fr/titionfire/ffsaf/domain/service/MembreService.java index 672f059..02b5ae9 100644 --- a/src/main/java/fr/titionfire/ffsaf/domain/service/MembreService.java +++ b/src/main/java/fr/titionfire/ffsaf/domain/service/MembreService.java @@ -41,6 +41,7 @@ import org.hibernate.reactive.mutiny.Mutiny; import java.io.*; import java.nio.file.Files; +import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.List; import java.util.Objects; @@ -438,11 +439,27 @@ public class MembreService { photoCell.setBorder(PdfPCell.NO_BORDER); memberTable.addCell(photoCell); + String[] cert; + if (licence.getCertificate() != null && !licence.getCertificate().isBlank()) { + cert = licence.getCertificate().split("¤"); + if (cert.length <= 1){ + cert = new String[]{licence.getCertificate(), "--"}; + }else{ + try { + cert[1] = sdf.format(new SimpleDateFormat("yyyy-MM-dd").parse(cert[1])); + } catch (ParseException e) { + cert[1] = "--"; + } + } + } else { + cert = new String[]{"--", "--"}; + } + // Adding member details memberTable.addCell(new Phrase("NOM : " + m.getLname().toUpperCase(), bodyFont)); memberTable.addCell(new Phrase("Prénom : " + m.getFname(), bodyFont)); memberTable.addCell(new Phrase("Licence n° : " + m.getLicence(), bodyFont)); - memberTable.addCell(new Phrase("Certificat médical par Dr " + licence.getCertificate(), bodyFont)); + memberTable.addCell(new Phrase("Certificat médical par " + cert[0] + ", le " + cert[1], bodyFont)); memberTable.addCell(new Phrase("")); // Empty cell for spacing document.add(memberTable); diff --git a/src/main/webapp/src/pages/admin/member/LicenceCard.jsx b/src/main/webapp/src/pages/admin/member/LicenceCard.jsx index b662be5..fd3f20d 100644 --- a/src/main/webapp/src/pages/admin/member/LicenceCard.jsx +++ b/src/main/webapp/src/pages/admin/member/LicenceCard.jsx @@ -4,9 +4,7 @@ import {useEffect, useReducer, useState} from "react"; import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; import {faPen} from "@fortawesome/free-solid-svg-icons"; import {AxiosError} from "../../../components/AxiosError.jsx"; -import {CheckField, TextField} from "../../../components/MemberCustomFiels.jsx"; import {apiAxios, errFormater, getSaison} from "../../../utils/Tools.js"; -import {Input} from "../../../components/Input.jsx"; import {toast} from "react-toastify"; function licenceReducer(licences, action) { @@ -93,6 +91,7 @@ function sendLicence(event, dispatch) { event.preventDefault(); const formData = new FormData(event.target); + formData.set('certificate', `${event.target.certificateBy?.value}¤${event.target.certificateDate?.value}`) formData.set('licence', event.target.licence?.value?.length > 0 ? event.target.licence?.value : null) toast.promise( @@ -132,14 +131,18 @@ function removeLicence(id, dispatch) { function ModalContent({licence, dispatch}) { const [saison, setSaison] = useState(0) - const [certificate, setCertificate] = useState("") + const [certificateBy, setCertificateBy] = useState("") + const [certificateDate, setCertificateDate] = useState("") const [validate, setValidate] = useState(false) const [isNew, setNew] = useState(true) const setSeason = (event) => { setSaison(Number(event.target.value)) } - const handleCertificateChange = (event) => { - setCertificate(event.target.value); + const handleCertificateByChange = (event) => { + setCertificateBy(event.target.value.replaceAll('¤', '')); + } + const handleCertificateDateChange = (event) => { + setCertificateDate(event.target.value.replaceAll('¤', '')); } const handleValidateChange = (event) => { setValidate(event.target.value === 'true'); @@ -149,12 +152,14 @@ function ModalContent({licence, dispatch}) { if (licence.id !== -1) { setNew(false) setSaison(licence.saison) - setCertificate(licence.certificate) + setCertificateBy(licence.certificate.split('¤')[0]) + setCertificateDate(licence.certificate.split('¤')[1]) setValidate(licence.validate) } else { setNew(true) setSaison(getSaison()) - setCertificate("") + setCertificateBy("") + setCertificateDate("") setValidate(false) } }, [licence]); @@ -178,9 +183,15 @@ function ModalContent({licence, dispatch}) { {saison + 1} - Médecin figurant sur le certificat médical - + Certificat médical + + Fait par + + , le + + diff --git a/src/main/webapp/src/pages/club/member/LicenceCard.jsx b/src/main/webapp/src/pages/club/member/LicenceCard.jsx index ec3c913..b3e6b03 100644 --- a/src/main/webapp/src/pages/club/member/LicenceCard.jsx +++ b/src/main/webapp/src/pages/club/member/LicenceCard.jsx @@ -7,7 +7,6 @@ import {AxiosError} from "../../../components/AxiosError.jsx"; import {apiAxios, errFormater, getSaison} from "../../../utils/Tools.js"; import {toast} from "react-toastify"; import {ColoredText} from "../../../components/ColoredCircle.jsx"; -import {TextField} from "../../../components/MemberCustomFiels.jsx"; function licenceReducer(licences, action) { switch (action.type) { @@ -91,6 +90,8 @@ function sendLicence(event, dispatch) { event.preventDefault(); const formData = new FormData(event.target); + formData.set('certificate', `${event.target.certificateBy?.value}¤${event.target.certificateDate?.value}`) + toast.promise( apiAxios.post(`/licence/club/${formData.get('membre')}`, formData), { @@ -127,20 +128,31 @@ function removeLicence(id, dispatch) { } function ModalContent({licence, dispatch}) { - const [certificate, setCertificate] = useState("") + const [certificateBy, setCertificateBy] = useState("") + const [certificateDate, setCertificateDate] = useState("") const [isNew, setNew] = useState(true) - const handleCertificateChange = (event) => { - setCertificate(event.target.value); + const handleCertificateByChange = (event) => { + setCertificateBy(event.target.value.replaceAll('¤', '')); + } + const handleCertificateDateChange = (event) => { + setCertificateDate(event.target.value.replaceAll('¤', '')); } useEffect(() => { if (licence.id !== -1) { setNew(false) - setCertificate(licence.certificate) + if (licence.certificate === null){ + setCertificateBy("") + setCertificateDate("") + }else { + setCertificateBy(licence.certificate.split('¤')[0]) + setCertificateDate(licence.certificate.split('¤')[1]) + } } else { setNew(true) - setCertificate("") + setCertificateBy("") + setCertificateDate("") } }, [licence]); @@ -157,9 +169,15 @@ function ModalContent({licence, dispatch}) { aria-label="Close"> - Médecin figurant sur le certificat médical - + Certificat médical + + Fait par + + , le + + Validation de la licence: