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.io.*;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
|
import java.text.ParseException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@ -438,11 +439,27 @@ public class MembreService {
|
|||||||
photoCell.setBorder(PdfPCell.NO_BORDER);
|
photoCell.setBorder(PdfPCell.NO_BORDER);
|
||||||
memberTable.addCell(photoCell);
|
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
|
// Adding member details
|
||||||
memberTable.addCell(new Phrase("NOM : " + m.getLname().toUpperCase(), bodyFont));
|
memberTable.addCell(new Phrase("NOM : " + m.getLname().toUpperCase(), bodyFont));
|
||||||
memberTable.addCell(new Phrase("Prénom : " + m.getFname(), bodyFont));
|
memberTable.addCell(new Phrase("Prénom : " + m.getFname(), bodyFont));
|
||||||
memberTable.addCell(new Phrase("Licence n° : " + m.getLicence(), 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
|
memberTable.addCell(new Phrase("")); // Empty cell for spacing
|
||||||
|
|
||||||
document.add(memberTable);
|
document.add(memberTable);
|
||||||
|
|||||||
@ -4,9 +4,7 @@ import {useEffect, useReducer, useState} from "react";
|
|||||||
import {FontAwesomeIcon} from "@fortawesome/react-fontawesome";
|
import {FontAwesomeIcon} from "@fortawesome/react-fontawesome";
|
||||||
import {faPen} from "@fortawesome/free-solid-svg-icons";
|
import {faPen} from "@fortawesome/free-solid-svg-icons";
|
||||||
import {AxiosError} from "../../../components/AxiosError.jsx";
|
import {AxiosError} from "../../../components/AxiosError.jsx";
|
||||||
import {CheckField, TextField} from "../../../components/MemberCustomFiels.jsx";
|
|
||||||
import {apiAxios, errFormater, getSaison} from "../../../utils/Tools.js";
|
import {apiAxios, errFormater, getSaison} from "../../../utils/Tools.js";
|
||||||
import {Input} from "../../../components/Input.jsx";
|
|
||||||
import {toast} from "react-toastify";
|
import {toast} from "react-toastify";
|
||||||
|
|
||||||
function licenceReducer(licences, action) {
|
function licenceReducer(licences, action) {
|
||||||
@ -93,6 +91,7 @@ function sendLicence(event, dispatch) {
|
|||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
|
||||||
const formData = new FormData(event.target);
|
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)
|
formData.set('licence', event.target.licence?.value?.length > 0 ? event.target.licence?.value : null)
|
||||||
|
|
||||||
toast.promise(
|
toast.promise(
|
||||||
@ -132,14 +131,18 @@ function removeLicence(id, dispatch) {
|
|||||||
|
|
||||||
function ModalContent({licence, dispatch}) {
|
function ModalContent({licence, dispatch}) {
|
||||||
const [saison, setSaison] = useState(0)
|
const [saison, setSaison] = useState(0)
|
||||||
const [certificate, setCertificate] = useState("")
|
const [certificateBy, setCertificateBy] = useState("")
|
||||||
|
const [certificateDate, setCertificateDate] = useState("")
|
||||||
const [validate, setValidate] = useState(false)
|
const [validate, setValidate] = useState(false)
|
||||||
const [isNew, setNew] = useState(true)
|
const [isNew, setNew] = useState(true)
|
||||||
const setSeason = (event) => {
|
const setSeason = (event) => {
|
||||||
setSaison(Number(event.target.value))
|
setSaison(Number(event.target.value))
|
||||||
}
|
}
|
||||||
const handleCertificateChange = (event) => {
|
const handleCertificateByChange = (event) => {
|
||||||
setCertificate(event.target.value);
|
setCertificateBy(event.target.value.replaceAll('¤', ''));
|
||||||
|
}
|
||||||
|
const handleCertificateDateChange = (event) => {
|
||||||
|
setCertificateDate(event.target.value.replaceAll('¤', ''));
|
||||||
}
|
}
|
||||||
const handleValidateChange = (event) => {
|
const handleValidateChange = (event) => {
|
||||||
setValidate(event.target.value === 'true');
|
setValidate(event.target.value === 'true');
|
||||||
@ -149,12 +152,14 @@ function ModalContent({licence, dispatch}) {
|
|||||||
if (licence.id !== -1) {
|
if (licence.id !== -1) {
|
||||||
setNew(false)
|
setNew(false)
|
||||||
setSaison(licence.saison)
|
setSaison(licence.saison)
|
||||||
setCertificate(licence.certificate)
|
setCertificateBy(licence.certificate.split('¤')[0])
|
||||||
|
setCertificateDate(licence.certificate.split('¤')[1])
|
||||||
setValidate(licence.validate)
|
setValidate(licence.validate)
|
||||||
} else {
|
} else {
|
||||||
setNew(true)
|
setNew(true)
|
||||||
setSaison(getSaison())
|
setSaison(getSaison())
|
||||||
setCertificate("")
|
setCertificateBy("")
|
||||||
|
setCertificateDate("")
|
||||||
setValidate(false)
|
setValidate(false)
|
||||||
}
|
}
|
||||||
}, [licence]);
|
}, [licence]);
|
||||||
@ -178,9 +183,15 @@ function ModalContent({licence, dispatch}) {
|
|||||||
<span className="input-group-text" id="basic-addon2">{saison + 1}</span>
|
<span className="input-group-text" id="basic-addon2">{saison + 1}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span>Médecin figurant sur le certificat médical</span>
|
<span>Certificat médical</span>
|
||||||
<TextField name="certificate" text="Nom" value={certificate}
|
<div className="input-group mb-3 ">
|
||||||
onChange={handleCertificateChange} required={false}/>
|
<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}
|
<RadioGroupeOnOff name="validate" text="Validation de la licence" value={validate}
|
||||||
onChange={handleValidateChange}/>
|
onChange={handleValidateChange}/>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -7,7 +7,6 @@ import {AxiosError} from "../../../components/AxiosError.jsx";
|
|||||||
import {apiAxios, errFormater, getSaison} from "../../../utils/Tools.js";
|
import {apiAxios, errFormater, getSaison} from "../../../utils/Tools.js";
|
||||||
import {toast} from "react-toastify";
|
import {toast} from "react-toastify";
|
||||||
import {ColoredText} from "../../../components/ColoredCircle.jsx";
|
import {ColoredText} from "../../../components/ColoredCircle.jsx";
|
||||||
import {TextField} from "../../../components/MemberCustomFiels.jsx";
|
|
||||||
|
|
||||||
function licenceReducer(licences, action) {
|
function licenceReducer(licences, action) {
|
||||||
switch (action.type) {
|
switch (action.type) {
|
||||||
@ -91,6 +90,8 @@ function sendLicence(event, dispatch) {
|
|||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
|
||||||
const formData = new FormData(event.target);
|
const formData = new FormData(event.target);
|
||||||
|
formData.set('certificate', `${event.target.certificateBy?.value}¤${event.target.certificateDate?.value}`)
|
||||||
|
|
||||||
toast.promise(
|
toast.promise(
|
||||||
apiAxios.post(`/licence/club/${formData.get('membre')}`, formData),
|
apiAxios.post(`/licence/club/${formData.get('membre')}`, formData),
|
||||||
{
|
{
|
||||||
@ -127,20 +128,31 @@ function removeLicence(id, dispatch) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function ModalContent({licence, dispatch}) {
|
function ModalContent({licence, dispatch}) {
|
||||||
const [certificate, setCertificate] = useState("")
|
const [certificateBy, setCertificateBy] = useState("")
|
||||||
|
const [certificateDate, setCertificateDate] = useState("")
|
||||||
const [isNew, setNew] = useState(true)
|
const [isNew, setNew] = useState(true)
|
||||||
|
|
||||||
const handleCertificateChange = (event) => {
|
const handleCertificateByChange = (event) => {
|
||||||
setCertificate(event.target.value);
|
setCertificateBy(event.target.value.replaceAll('¤', ''));
|
||||||
|
}
|
||||||
|
const handleCertificateDateChange = (event) => {
|
||||||
|
setCertificateDate(event.target.value.replaceAll('¤', ''));
|
||||||
}
|
}
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (licence.id !== -1) {
|
if (licence.id !== -1) {
|
||||||
setNew(false)
|
setNew(false)
|
||||||
setCertificate(licence.certificate)
|
if (licence.certificate === null){
|
||||||
|
setCertificateBy("")
|
||||||
|
setCertificateDate("")
|
||||||
|
}else {
|
||||||
|
setCertificateBy(licence.certificate.split('¤')[0])
|
||||||
|
setCertificateDate(licence.certificate.split('¤')[1])
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
setNew(true)
|
setNew(true)
|
||||||
setCertificate("")
|
setCertificateBy("")
|
||||||
|
setCertificateDate("")
|
||||||
}
|
}
|
||||||
}, [licence]);
|
}, [licence]);
|
||||||
|
|
||||||
@ -157,9 +169,15 @@ function ModalContent({licence, dispatch}) {
|
|||||||
aria-label="Close"></button>
|
aria-label="Close"></button>
|
||||||
</div>
|
</div>
|
||||||
<div className="modal-body">
|
<div className="modal-body">
|
||||||
<span>Médecin figurant sur le certificat médical</span>
|
<span>Certificat médical</span>
|
||||||
<TextField name="certificate" text="Nom" value={certificate}
|
<div className="input-group mb-3 ">
|
||||||
onChange={handleCertificateChange} required={false} disabled={!currentSaison || licence.validate}/>
|
<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 className="input-group mb-3 justify-content-md-center">
|
||||||
<div>Validation de la licence: <ColoredText boolean={licence.validate}/></div>
|
<div>Validation de la licence: <ColoredText boolean={licence.validate}/></div>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user