From 587173c79fa2e49dc0ee593b24a7f6b4172d0523 Mon Sep 17 00:00:00 2001 From: Thibaut Valentin Date: Thu, 21 Aug 2025 11:37:03 +0200 Subject: [PATCH] feat: exel export register data --- .../ffsaf/rest/data/SimpleRegisterComb.java | 4 +- src/main/webapp/src/pages/MemberList.jsx | 1 - .../competition/CompetitionRegisterAdmin.jsx | 41 ++++++++++++++++++- 3 files changed, 42 insertions(+), 4 deletions(-) diff --git a/src/main/java/fr/titionfire/ffsaf/rest/data/SimpleRegisterComb.java b/src/main/java/fr/titionfire/ffsaf/rest/data/SimpleRegisterComb.java index 2075f68..1125357 100644 --- a/src/main/java/fr/titionfire/ffsaf/rest/data/SimpleRegisterComb.java +++ b/src/main/java/fr/titionfire/ffsaf/rest/data/SimpleRegisterComb.java @@ -2,8 +2,8 @@ package fr.titionfire.ffsaf.rest.data; import fr.titionfire.ffsaf.data.model.LicenceModel; import fr.titionfire.ffsaf.data.model.MembreModel; -import fr.titionfire.ffsaf.net2.data.SimpleClubModel; import fr.titionfire.ffsaf.data.model.RegisterModel; +import fr.titionfire.ffsaf.net2.data.SimpleClubModel; import fr.titionfire.ffsaf.utils.Utils; import io.quarkus.runtime.annotations.RegisterForReflection; import lombok.AllArgsConstructor; @@ -18,6 +18,7 @@ public class SimpleRegisterComb { private long id; private String fname; private String lname; + private String genre; private String categorie; private SimpleClubModel club; private Integer licence; @@ -29,6 +30,7 @@ public class SimpleRegisterComb { public static SimpleRegisterComb fromModel(RegisterModel register, List licences) { MembreModel membreModel = register.getMembre(); return new SimpleRegisterComb(membreModel.getId(), membreModel.getFname(), membreModel.getLname(), + membreModel.getGenre().name(), (register.getCategorie() == null) ? "Catégorie inconnue" : register.getCategorie().getName(), SimpleClubModel.fromModel(register.getClub()), membreModel.getLicence(), register.getWeight(), register.getOverCategory(), diff --git a/src/main/webapp/src/pages/MemberList.jsx b/src/main/webapp/src/pages/MemberList.jsx index ccc6202..a2d3fc7 100644 --- a/src/main/webapp/src/pages/MemberList.jsx +++ b/src/main/webapp/src/pages/MemberList.jsx @@ -200,7 +200,6 @@ function FileOutput() { À utiliser comme template pour mettre à jour les informations ); - } diff --git a/src/main/webapp/src/pages/competition/CompetitionRegisterAdmin.jsx b/src/main/webapp/src/pages/competition/CompetitionRegisterAdmin.jsx index c514db1..ff92de2 100644 --- a/src/main/webapp/src/pages/competition/CompetitionRegisterAdmin.jsx +++ b/src/main/webapp/src/pages/competition/CompetitionRegisterAdmin.jsx @@ -4,12 +4,14 @@ import {useFetch} from "../../hooks/useFetch.js"; import {AxiosError} from "../../components/AxiosError.jsx"; import {ThreeDots} from "react-loader-spinner"; import {useEffect, useReducer, useRef, useState} from "react"; -import {apiAxios} from "../../utils/Tools.js"; +import {apiAxios, errFormater} from "../../utils/Tools.js"; import {toast} from "react-toastify"; import {SimpleReducer} from "../../utils/SimpleReducer.jsx"; import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; import {faAdd, faGavel, faTrashCan} from "@fortawesome/free-solid-svg-icons"; import "./CompetitionRegisterAdmin.css" +import * as XLSX from "xlsx-js-style"; +import * as Tools from "../../utils/Tools.js"; export function CompetitionRegisterAdmin({source}) { const {id} = useParams() @@ -81,6 +83,7 @@ export function CompetitionRegisterAdmin({source}) { setCatFilter={setCatFilter} source={source}/> + {source === "admin" && } @@ -427,7 +430,7 @@ function MakeCentralPanel({data, dispatch, id, setModalState, source}) {
{req.data.licence ? String(req.data.licence).padStart(5, '0') : "-------"}
-
{req.data.fname} {req.data.lname}
+
{req.data.fname} {req.data.lname} {req.data.genre}
{req.data.club?.name || "Sans club"}
@@ -495,6 +498,40 @@ function MakeCentralPanel({data, dispatch, id, setModalState, source}) { } +function FileOutput({data}) { + const handleFileDownload = () => { + const dataOut = [] + for (const e of data) { + const tmp = { + licence: e.licence, + nom: e.lname, + prenom: e.fname, + genre: e.genre, + weight: e.weight, + categorie: e.categorie, + overCategory: e.overCategory, + club: e.club ? e.club.name : '', + } + dataOut.push(tmp) + } + + const wb = XLSX.utils.book_new(); + const ws = XLSX.utils.json_to_sheet(dataOut); + XLSX.utils.sheet_add_aoa(ws, [["Licence", "Nom", "Prénom", "Genre", "Poids", "Catégorie normalizer", "Surclassement", "Club"]], {origin: 'A1'}); + + ws["!cols"] = [{wch: 7}, {wch: 16}, {wch: 16}, {wch: 6}, {wch: 6}, {wch: 10}, {wch: 10}, {wch: 60}] + + XLSX.utils.book_append_sheet(wb, ws, "Feuille 1"); + XLSX.writeFile(wb, "output.xlsx"); + }; + + return ( +
+ +
+ ); +} + function Def() { return