feat(membre): add certificat make date

This commit is contained in:
2025-01-17 10:56:46 +01:00
parent f637300e87
commit 8623275854
3 changed files with 66 additions and 20 deletions

View File

@@ -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>

View File

@@ -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>