feat(membre): add certificat make date
This commit is contained in:
parent
f637300e87
commit
8623275854
@ -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);
|
||||
|
||||
@ -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}) {
|
||||
<span className="input-group-text" id="basic-addon2">{saison + 1}</span>
|
||||
</div>
|
||||
|
||||
<span>Médecin figurant sur le certificat médical</span>
|
||||
<TextField name="certificate" text="Nom" value={certificate}
|
||||
onChange={handleCertificateChange} required={false}/>
|
||||
<span>Certificat médical</span>
|
||||
<div className="input-group mb-3 ">
|
||||
<span className="input-group-text" id="basic-addon2">Fait par</span>
|
||||
<input type="text" className="form-control" placeholder="Fait par" name="certificateBy"
|
||||
aria-label="Fait par" aria-describedby="basic-addon2" value={certificateBy} onChange={handleCertificateByChange}/>
|
||||
<span className="input-group-text" id="basic-addon2">, le</span>
|
||||
<input type="date" className="form-control" placeholder="jj/mm/aaaa" name="certificateDate"
|
||||
aria-describedby="basic-addon2" value={certificateDate} onChange={handleCertificateDateChange}/>
|
||||
</div>
|
||||
<RadioGroupeOnOff name="validate" text="Validation de la licence" value={validate}
|
||||
onChange={handleValidateChange}/>
|
||||
</div>
|
||||
|
||||
@ -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"></button>
|
||||
</div>
|
||||
<div className="modal-body">
|
||||
<span>Médecin figurant sur le certificat médical</span>
|
||||
<TextField name="certificate" text="Nom" value={certificate}
|
||||
onChange={handleCertificateChange} required={false} disabled={!currentSaison || licence.validate}/>
|
||||
<span>Certificat médical</span>
|
||||
<div className="input-group mb-3 ">
|
||||
<span className="input-group-text" id="basic-addon2">Fait par</span>
|
||||
<input type="text" className="form-control" placeholder="Fait par" name="certificateBy"
|
||||
aria-label="Fait par" aria-describedby="basic-addon2" value={certificateBy} onChange={handleCertificateByChange}/>
|
||||
<span className="input-group-text" id="basic-addon2">, le</span>
|
||||
<input type="date" className="form-control" placeholder="jj/mm/aaaa" name="certificateDate"
|
||||
aria-describedby="basic-addon2" value={certificateDate} onChange={handleCertificateDateChange}/>
|
||||
</div>
|
||||
|
||||
<div className="input-group mb-3 justify-content-md-center">
|
||||
<div>Validation de la licence: <ColoredText boolean={licence.validate}/></div>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user