diff --git a/src/main/java/fr/titionfire/ffsaf/domain/service/AffiliationService.java b/src/main/java/fr/titionfire/ffsaf/domain/service/AffiliationService.java index 87b3e69..137b125 100644 --- a/src/main/java/fr/titionfire/ffsaf/domain/service/AffiliationService.java +++ b/src/main/java/fr/titionfire/ffsaf/domain/service/AffiliationService.java @@ -392,8 +392,27 @@ public class AffiliationService { return Panache.withTransaction(() -> repository.deleteById(id)); } - public Uni deleteReqAffiliation(long id) { - return Panache.withTransaction(() -> repositoryRequest.deleteById(id)) + public Uni deleteReqAffiliation(long id, String reason) { + return repositoryRequest.findById(id) + .call(aff -> reactiveMailer.send( + Mail.withText(aff.getM1_email(), + "FFSAF - Votre demande d'affiliation a été rejetée.", + String.format( + """ + Bonjour, + + Votre demande d'affiliation pour le club %s a été rejetée pour la/les raison(s) suivante(s): + %s + + Si vous rencontrez un problème ou si vous avez des questions, n'hésitez pas à nous contacter à l'adresse contact@ffsaf.fr. + + Cordialement, + L'équipe de la FFSAF + """, aff.getName(), reason) + ).setFrom("FFSAF ").setReplyTo("contact@ffsaf.fr") + .addTo(aff.getM2_email(), aff.getM3_email()) + )) + .chain(aff -> Panache.withTransaction(() -> repositoryRequest.delete(aff))) .call(__ -> Utils.deleteMedia(id, media, "aff_request/logo")) .call(__ -> Utils.deleteMedia(id, media, "aff_request/status")); } diff --git a/src/main/java/fr/titionfire/ffsaf/rest/AffiliationRequestEndpoints.java b/src/main/java/fr/titionfire/ffsaf/rest/AffiliationRequestEndpoints.java index 4529c37..fcb2d6b 100644 --- a/src/main/java/fr/titionfire/ffsaf/rest/AffiliationRequestEndpoints.java +++ b/src/main/java/fr/titionfire/ffsaf/rest/AffiliationRequestEndpoints.java @@ -102,12 +102,12 @@ public class AffiliationRequestEndpoints { @APIResponse(responseCode = "404", description = "Demande d'affiliation non trouvée") }) public Uni getDelAffRequest( - @Parameter(description = "L'identifiant de la demande d'affiliation") @PathParam("id") long id) { + @Parameter(description = "L'identifiant de la demande d'affiliation") @PathParam("id") long id, @QueryParam("reason") String reason) { return service.getRequest(id).invoke(Unchecked.consumer(o -> { if (o.getClub() == null && !securityCtx.roleHas("federation_admin")) throw new DForbiddenException(); })).invoke(o -> checkPerm.accept(o.getClub())) - .chain(o -> service.deleteReqAffiliation(id)); + .chain(o -> service.deleteReqAffiliation(id, reason)); } @PUT diff --git a/src/main/webapp/src/pages/admin/affiliation/AffiliationReqPage.jsx b/src/main/webapp/src/pages/admin/affiliation/AffiliationReqPage.jsx index c245db8..80424b4 100644 --- a/src/main/webapp/src/pages/admin/affiliation/AffiliationReqPage.jsx +++ b/src/main/webapp/src/pages/admin/affiliation/AffiliationReqPage.jsx @@ -38,9 +38,9 @@ export function AffiliationReqPage() { function Content({data, refresh}) { const navigate = useNavigate(); - const handleRm = (e) => { + const handleRm = (reason) => { toast.promise( - apiAxios.delete(`/affiliation/request/${data.id}`), + apiAxios.delete(`/affiliation/request/${data.id}?reason=${encodeURIComponent(reason)}`), { pending: "Suppression de la demande d'affiliation en cours", success: "Demande d'affiliation supprimée avec succès 🎉", @@ -219,8 +219,8 @@ function Content({data, refresh}) { - + @@ -228,6 +228,34 @@ function Content({data, refresh}) { } +function ConfirmReasonDialog({onConfirm, id = "confirm-delete"}) { + const [reason, setReason] = useState("") + return +} + function MemberPart({index, member}) { const [mode, setMode] = useState(member.licence >= 0 ? 0 : 2) const [current, setCurrent] = useState(-1) @@ -394,4 +422,4 @@ function MemberSimilar({member, current, setCurrent, mode, index, setEmail}) { })} -} \ No newline at end of file +}