feat: affiliation request
This commit is contained in:
parent
d03ec054d2
commit
dae32e3607
@ -287,4 +287,8 @@ public class AffiliationService {
|
|||||||
public Uni<?> deleteAffiliation(long id) {
|
public Uni<?> deleteAffiliation(long id) {
|
||||||
return Panache.withTransaction(() -> repository.deleteById(id));
|
return Panache.withTransaction(() -> repository.deleteById(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Uni<?> deleteReqAffiliation(long id) {
|
||||||
|
return Panache.withTransaction(() -> repositoryRequest.deleteById(id));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -52,6 +52,14 @@ public class AffiliationEndpoints {
|
|||||||
return service.getRequest(id);
|
return service.getRequest(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DELETE
|
||||||
|
@Path("/request/{id}")
|
||||||
|
@RolesAllowed({"federation_admin"})
|
||||||
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
|
public Uni<?> getDelAffRequest(@PathParam("id") long id) {
|
||||||
|
return service.deleteReqAffiliation(id);
|
||||||
|
}
|
||||||
|
|
||||||
@PUT
|
@PUT
|
||||||
@Path("/request/save")
|
@Path("/request/save")
|
||||||
@RolesAllowed({"federation_admin"})
|
@RolesAllowed({"federation_admin"})
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import {RoleList, TextField} from "../../../components/MemberCustomFiels.jsx";
|
|||||||
import {useEffect, useRef, useState} from "react";
|
import {useEffect, useRef, useState} from "react";
|
||||||
import {FontAwesomeIcon} from "@fortawesome/react-fontawesome";
|
import {FontAwesomeIcon} from "@fortawesome/react-fontawesome";
|
||||||
import {faFilePdf} from "@fortawesome/free-solid-svg-icons";
|
import {faFilePdf} from "@fortawesome/free-solid-svg-icons";
|
||||||
|
import {ConfirmDialog} from "../../../components/ConfirmDialog.jsx";
|
||||||
|
|
||||||
const vite_url = import.meta.env.VITE_URL;
|
const vite_url = import.meta.env.VITE_URL;
|
||||||
|
|
||||||
@ -16,7 +17,7 @@ export function AffiliationReqPage() {
|
|||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
|
|
||||||
const setLoading = useLoadingSwitcher()
|
const setLoading = useLoadingSwitcher()
|
||||||
const {data, error} = useFetch(`/affiliation/request/${id}`, setLoading, 1)
|
const {data, refresh, error} = useFetch(`/affiliation/request/${id}`, setLoading, 1)
|
||||||
|
|
||||||
return <>
|
return <>
|
||||||
<h2>Demande d'affiliation</h2>
|
<h2>Demande d'affiliation</h2>
|
||||||
@ -26,7 +27,7 @@ export function AffiliationReqPage() {
|
|||||||
<div>
|
<div>
|
||||||
{data
|
{data
|
||||||
? <div className="">
|
? <div className="">
|
||||||
<Content data={data}/>
|
<Content data={data} refresh={refresh}/>
|
||||||
</div>
|
</div>
|
||||||
: error && <AxiosError error={error}/>
|
: error && <AxiosError error={error}/>
|
||||||
}
|
}
|
||||||
@ -34,14 +35,30 @@ export function AffiliationReqPage() {
|
|||||||
</>
|
</>
|
||||||
}
|
}
|
||||||
|
|
||||||
function Content({data}) {
|
function Content({data, refresh}) {
|
||||||
|
const navigate = useNavigate();
|
||||||
|
|
||||||
|
const handleRm = (e) => {
|
||||||
|
toast.promise(
|
||||||
|
apiAxios.delete(`/affiliation/request/${data.id}`),
|
||||||
|
{
|
||||||
|
pending: "Suppression de la demande d'affiliation en cours",
|
||||||
|
success: "Demande d'affiliation supprimée avec succès 🎉",
|
||||||
|
error: "Échec de la suppression de la demande d'affiliation 😕"
|
||||||
|
}
|
||||||
|
).then(_ => {
|
||||||
|
navigate("/admin/affiliation")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
const handleSubmit = (event) => {
|
const handleSubmit = (event) => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
|
||||||
|
if (event.nativeEvent.submitter.value === "rm") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
|
|
||||||
console.log();
|
|
||||||
|
|
||||||
let err = 0;
|
let err = 0;
|
||||||
|
|
||||||
formData.append('id', data.id);
|
formData.append('id', data.id);
|
||||||
@ -53,7 +70,7 @@ function Content({data}) {
|
|||||||
if (event.target.logo.files[0])
|
if (event.target.logo.files[0])
|
||||||
formData.append('logo', event.target.logo.files[0]);
|
formData.append('logo', event.target.logo.files[0]);
|
||||||
if (event.target.status.files[0])
|
if (event.target.status.files[0])
|
||||||
formData.append('status', event.target.status.files[0]);
|
formData.append('status', event.target.status.files[0]);
|
||||||
|
|
||||||
for (let i = 0; i < 3; i++) {
|
for (let i = 0; i < 3; i++) {
|
||||||
const mode = event.target['mode' + i].value;
|
const mode = event.target['mode' + i].value;
|
||||||
@ -113,7 +130,9 @@ function Content({data}) {
|
|||||||
success: "Demande d'affiliation enregistrée avec succès 🎉",
|
success: "Demande d'affiliation enregistrée avec succès 🎉",
|
||||||
error: "Échec de l'enregistrement de la demande d'affiliation 😕"
|
error: "Échec de l'enregistrement de la demande d'affiliation 😕"
|
||||||
}
|
}
|
||||||
)
|
).then(_ => {
|
||||||
|
refresh(`/affiliation/request/${data.id}`)
|
||||||
|
})
|
||||||
} else if (event.nativeEvent.submitter.value === "accept") {
|
} else if (event.nativeEvent.submitter.value === "accept") {
|
||||||
toast.promise(
|
toast.promise(
|
||||||
apiAxios.put(`/affiliation/request/apply`, formData),
|
apiAxios.put(`/affiliation/request/apply`, formData),
|
||||||
@ -122,7 +141,9 @@ function Content({data}) {
|
|||||||
success: "Affiliation acceptée avec succès 🎉",
|
success: "Affiliation acceptée avec succès 🎉",
|
||||||
error: "Échec de l'acceptation de l'affiliation 😕"
|
error: "Échec de l'acceptation de l'affiliation 😕"
|
||||||
}
|
}
|
||||||
)
|
).then(_ => {
|
||||||
|
navigate("/admin/affiliation")
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -182,8 +203,11 @@ function Content({data}) {
|
|||||||
</div>
|
</div>
|
||||||
<div className="row mb-3">
|
<div className="row mb-3">
|
||||||
<div className="d-grid gap-2 d-md-flex justify-content-md-end">
|
<div className="d-grid gap-2 d-md-flex justify-content-md-end">
|
||||||
<button type="submit" name="subbt" value="save" className="btn btn-primary">Enregistrer</button>
|
<button type="submit" value="accept" className="btn btn-success">Accepter</button>
|
||||||
<button type="submit" name="subbt" value="accept" className="btn btn-success">Accepter</button>
|
<button type="submit" value="save" className="btn btn-primary">Enregistrer</button>
|
||||||
|
<button className="btn btn-danger" value="rm" data-bs-toggle="modal" data-bs-target="#confirm-delete">Refuser</button>
|
||||||
|
<ConfirmDialog title="Refuser la demande" message="Êtes-vous sûr de vouloir refuser cette demande ?"
|
||||||
|
onConfirm={handleRm}/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user