PageSourceSearch

https://glcacademy.fr/assets/ResultatsQuestionnaire-67CAty1x.js

js glcacademy.fr collected 2026-10-08 05:52:15 UTC 7,426 bytes, 2 lines download raw bytes

1import{j as e,y as G,u as H,r as o,P as J,B as L,S as W,K as Z,M as ee,N as se,O as T,C as f,e as _,b as B,c as F,q as A,s as h,h as te}from"./index-DuNqvBbR.js";import{A as ae}from"./AppLayout-CznbCnew.js";import{A as ie}from"./arrow-left-C_z6SgX_.js";import{D as ne}from"./download-CVwgu4ep.js";import{R as re,B as oe,C as le,X as ce,Y as de,T as me,a as pe}from"./BarChart-A5jUJnrJ.js";import"./AppSidebar-CHRnQteG.js";import"./skeleton-DIkGymNE.js";import"./collapsible-CnfUx8rI.js";import"./calendar-check-BQ5uL-Es.js";import"./target-8Cihj_F2.js";import"./book-open-BULitv2_.js";import"./lock-BTmQBVMX.js";import"./monitor-D_-ZkWde.js";import"./search-CYNmd2Km.js";import"./tag-CUQeD3im.js";import"./history-D8deafKD.js";import"./briefcase-afYgDgOP.js";const xe=()=>{const{id:u}=G(),k=H(),[M,C]=o.useState(!0),[I,V]=o.useState(""),[w,O]=o.useState([]),[v,U]=o.useState([]),[R,z]=o.useState([]),[E,K]=o.useState([]),[N,P]=o.useState({}),[j,Q]=o.useState("all");o.useEffect(()=>{(async()=>{if(!u)return;C(!0);const[{data:l},{data:r},{data:m}]=await Promise.all([h.from("questionnaires").select("titre").eq("id",u).maybeSingle(),h.from("questions").select("id, ordre, texte_question, type_reponse, options_reponse(id, texte_option, ordre)").eq("questionnaire_id",u).order("ordre",{ascending:!0}),h.from("envois_questionnaires").select("id, statut, date_envoi, session_formation_id, stagiaire_id").eq("questionnaire_id",u)]);V((l==null?void 0:l.titre)??""),O((r??[]).map(t=>({id:t.id,ordre:t.ordre,texte_question:t.texte_question,type_reponse:t.type_reponse,options:(t.options_reponse??[]).sort((c,x)=>c.ordre-x.ordre)})));const a=m??[];U(a);const n=a.map(t=>t.id);if(n.length>0){const{data:t}=await h.from("reponses").select("id, envoi_id, question_id, valeur_texte, option_id, valeur_echelle").in("envoi_id",n);z(t??[])}const i=[...new Set(a.map(t=>t.session_formation_id).filter(Boolean))];if(i.length>0){const{data:t}=await h.from("pla_session_formation").select("id, title").in("id",i);K(t??[])}const p=[...new Set(a.map(t=>t.stagiaire_id))];if(p.length>0){const{data:t}=await h.from("crm_contact_personne").select("id, nom_contact, prenom_contact").in("id",p),c={};(t??[]).forEach(x=>{c[x.id]=`${x.prenom_contact??""} ${x.nom_contact??""}`.trim()}),P(c)}C(!1)})()},[u]);const d=o.useMemo(()=>j==="all"?v:v.filter(s=>s.session_formation_id===j),[v,j]),q=o.useMemo(()=>new Set(d.map(s=>s.id)),[d]),g=o.useMemo(()=>R.filter(s=>q.has(s.envoi_id)),[R,q]),S=d.filter(s=>s.statut==="complete").length,$=d.length>0?Math.round(S/d.length*100):0,y=g.map(s=>s.valeur_echelle).filter(s=>typeof s=="number"),X=y.length>0?(y.reduce((s,l)=>s+l,0)/y.length).toFixed(2):"N/D",Y=()=>{const s=["Stagiaire","Session","Statut","Date envoi","Question","Réponse"],l=i=>{var p;return((p=E.find(t=>t.id===i))==null?void 0:p.title)??""},r=[s.join(";")];d.forEach(i=>{const p=g.filter(t=>t.envoi_id===i.id);if(p.length===0){r.push([N[i.stagiaire_id]??i.stagiaire_id,l(i.session_formation_id),i.statut,new Date(i.date_envoi).toLocaleDateString("fr-FR"),"",""].join(";"));return}p.forEach(t=>{var D;const c=w.find(b=>b.id===t.question_id),x=t.valeur_texte??(t.option_id?((D=c==null?void 0:c.options.find(b=>b.id===t.option_id))==null?void 0:D.texte_option)??"":t.valeur_echelle!==null?String(t.valeur_echelle):"");r.push([N[i.stagiaire_id]??i.stagiaire_id,l(i.session_formation_id),i.statut,new Date(i.date_envoi).toLocaleDateString("fr-FR"),((c==null?void 0:c.texte_question)??"").replace(/;/g,","),String(x).replace(/;/g,",").replace(/\r?\n/g," ")].join(";"))})});const m=new Blob(["\uFEFF"+r.join(`
2`)],{type:"text/csv;charset=utf-8;"}),a=URL.createObjectURL(m),n=document.createElement("a");n.href=a,n.download=`resultats-questionnaire-${u}.csv`,n.click(),URL.revokeObjectURL(a),te.success("Export CSV généré")};return M?e.jsx("div",{className:"flex justify-center py-16",children:e.jsx(J,{className:"h-6 w-6 animate-spin text-primary"})}):e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(L,{variant:"ghost",size:"icon",onClick:()=>k("/admin/questionnaires"),children:e.jsx(ie,{className:"h-4 w-4"})}),e.jsxs("div",{children:[e.jsxs("h1",{className:"text-2xl font-bold",children:["Résultats — ",I]}),e.jsxs("p",{className:"text-sm text-muted-foreground",children:[d.length," envoi",d.length>
21?"s":""," · ",S," complété",S>1?"s":""]})]})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs(W,{value:j,onValueChange:Q,children:[e.jsx(Z,{className:"w-[260px]",children:e.jsx(ee,{placeholder:"Toutes les sessions"})}),e.jsxs(se,{children:[e.jsx(T,{value:"all",children:"Toutes les sessions"}),E.map(s=>e.jsx(T,{value:s.id,children:s.title},s.id))]})]}),e.jsxs(L,{variant:"outline",onClick:Y,children:[e.jsx(ne,{className:"h-4 w-4 mr-1.5"}),"Export CSV"]})]})]}),e.jsxs("div",{className:"grid gap-4 sm:grid-cols-3",children:[e.jsx(f,{children:e.jsxs(_,{className:"pt-5",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Taux de complétion"}),e.jsxs("p",{className:"text-3xl font-bold text-primary",children:[$,"%"]})]})}),e.jsx(f,{children:e.jsxs(_,{className:"pt-5",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Moyenne des échelles (1-5)"}),e.jsx("p",{className:"text-3xl font-bold text-primary",children:X})]})}),e.jsx(f,{children:e.jsxs(_,{className:"pt-5",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Réponses enregistrées"}),e.jsx("p",{className:"text-3xl font-bold text-primary",children:g.length})]})})]}),w.map((s,l)=>{const r=g.filter(a=>a.question_id===s.id);if(s.type_reponse==="texte_libre")return e.jsxs(f,{children:[e.jsx(B,{children:e.jsxs(F,{className:"text-base",children:[l+1,". ",s.texte_question,e.jsx(A,{variant:"secondary",className:"ml-2",children:"Texte libre"})]})}),e.jsx(_,{className:"space-y-2",children:r.length===0?e.jsx("p",{className:"text-sm text-muted-foreground",children:"Aucune réponse"}):r.map(a=>{const n=d.find(i=>i.id===a.envoi_id);return e.jsxs("div",{className:"rounded-md border border-border bg-muted/30 p-3",children:[e.jsx("p",{className:"text-xs text-muted-foreground mb-1",children:n?N[n.stagiaire_id]??"Stagiaire":"Stagiaire"}),e.jsx("p",{className:"text-sm whitespace-pre-wrap",children:a.valeur_texte})]},a.id)})})]},s.id);let m=[];return s.type_reponse==="echelle_1_5"?m=[1,2,3,4,5].map(a=>({name:String(a),valeur:r.filter(n=>n.valeur_echelle===a).length})):s.type_reponse==="oui_non"?m=["Oui","Non"].map(a=>({name:a,valeur:r.filter(n=>n.valeur_texte===a).length})):m=s.options.map(a=>({name:a.texte_option,valeur:r.filter(n=>n.option_id===a.id).length})),e.jsxs(f,{children:[e.jsx(B,{children:e.jsxs(F,{className:"text-base",children:[l+1,". ",s.texte_question,e.jsxs(A,{variant:"secondary",className:"ml-2",children:[r.length," réponse",r.length>1?"s":""]})]})}),e.jsx(_,{className:"h-64",children:e.jsx(re,{width:"100%",height:"100%",children:e.jsxs(oe,{data:m,children:[e.jsx(le,{strokeDasharray:"3 3",className:"stroke-border"}),e.jsx(ce,{dataKey:"name",fontSize:12}),e.jsx(de,{allowDecimals:!1,fontSize:12}),e.jsx(me,{}),e.jsx(pe,{dataKey:"valeur",fill:"hsl(var(--primary))",radius:[4,4,0,0]})]})})})]},s.id)})]})},Le=()=>e.jsx(ae,{title:"Résultats des questionnaires",children:e.jsx(xe,{})});export{Le as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.