2 lines
16 KiB
JavaScript
2 lines
16 KiB
JavaScript
import{b as L,c as A,d as H,e as z,f as j,g as G,h as U,i as q,k as $,l as J,n as K,o as Q,t as X}from"./chunk-UDFQV3WY.js";import{a as y}from"./chunk-MBEC6LK4.js";import{$b as _,Eb as o,Fa as a,Fb as m,Gb as T,Hb as S,Hc as W,Jb as f,Kb as b,Lb as C,M as I,R as x,S as v,T as N,Ta as V,Tb as w,U as D,Vb as M,Ya as h,ca as c,jb as p,kb as e,lb as t,mb as k,pc as R,qb as E,qc as O,rb as g,rc as F,sb as u,vc as B,xc as P}from"./chunk-TVKQFRWX.js";import"./chunk-DAQOROHW.js";function ee(s,i){if(s&1&&(e(0,"div",39),o(1),t()),s&2){let n=u();a(),m(n.message())}}function te(s,i){if(s&1&&(e(0,"div",40),o(1),t()),s&2){let n=u();a(),m(n.error())}}function ne(s,i){s&1&&(e(0,"div",41),o(1,"Chargement des communes\u2026"),t())}function ie(s,i){if(s&1){let n=E();e(0,"tr",50)(1,"td",51),o(2),t(),e(3,"td",52)(4,"span",53),o(5),t(),e(6,"span",54),o(7),t()(),e(8,"td",52)(9,"span",55),o(10),t()(),e(11,"td",56),o(12),t(),e(13,"td",57)(14,"span",58),o(15),w(16,"date"),t(),e(17,"span",59),o(18),t()(),e(19,"td",60)(20,"button",61),g("click",function(){let l=x(n).$implicit,d=u(2);return v(d.edit(l))}),o(21,"Modifier"),t()()()}if(s&2){let n=i.$implicit,r=u(2);a(2),m(n.name),a(3),m(n.province),a(2),m(n.region),a(2),p("ngClass",r.statusClass(n.status)),a(),m(r.statusLabel(n.status)),a(2),m(r.formatNumber(n.households)),a(3),m(n.updatedAt?M(16,8,n.updatedAt,"dd/MM/yyyy HH:mm"):"\u2014"),a(3),m(n.updatedBy||"")}}function re(s,i){s&1&&(e(0,"p",62),o(1,"Aucune commune ne correspond \xE0 la recherche."),t())}function oe(s,i){if(s&1&&(e(0,"div",42)(1,"table",43)(2,"thead",44)(3,"tr")(4,"th",45),o(5,"Commune"),t(),e(6,"th",45),o(7,"Province / R\xE9gion"),t(),e(8,"th",45),o(9,"Couverture"),t(),e(10,"th",45),o(11,"M\xE9nages"),t(),e(12,"th",45),o(13,"Derni\xE8re modification"),t(),e(14,"th",46),o(15,"Action"),t()()(),e(16,"tbody",47),h(17,ie,22,11,"tr",48),t()(),h(18,re,2,0,"p",49),t()),s&2){let n=u();a(17),p("ngForOf",n.filteredCommunes()),a(),p("ngIf",n.filteredCommunes().length===0)}}function ae(s,i){if(s&1&&(e(0,"span"),o(1),t()),s&2){let n=u().$implicit,r=u(3);a(),T(" \xB7 ",r.formatNumber(n.households)," m\xE9nages")}}function le(s,i){if(s&1&&(e(0,"div",80)(1,"strong",81),o(2),t(),h(3,ae,2,1,"span",82),e(4,"span",83),o(5),w(6,"date"),t()()),s&2){let n=i.$implicit,r=u(3);a(2),m(r.statusLabel(n.status)),a(),p("ngIf",n.status!=="NOT_COVERED"&&n.households!=null),a(2),S("",M(6,4,n.changedAt,"dd/MM/yyyy HH:mm")," par ",n.changedBy)}}function se(s,i){if(s&1&&(e(0,"div",76)(1,"h3",77),o(2,"Historique r\xE9cent"),t(),e(3,"div",78),h(4,le,7,7,"div",79),t()()),s&2){let n=u(2);a(4),p("ngForOf",n.history())}}function de(s,i){if(s&1){let n=E();e(0,"div",63),g("click",function(){x(n);let l=u();return v(l.closeEditor())}),e(1,"section",64),g("click",function(l){return x(n),v(l.stopPropagation())}),e(2,"header",65)(3,"p",10),o(4,"Modifier la commune"),t(),e(5,"h2",66),o(6),t(),e(7,"p",17),o(8),t()(),e(9,"div",67)(10,"label",58)(11,"span",68),o(12,"\xC9tat de la couverture"),t(),e(13,"select",69),C("ngModelChange",function(l){x(n);let d=u();return b(d.form.status,l)||(d.form.status=l),v(l)}),e(14,"option",30),o(15,"Non couverte"),t(),e(16,"option",29),o(17,"En cours de couverture"),t(),e(18,"option",28),o(19,"Couverte"),t()()(),e(20,"label",58)(21,"span",68),o(22,"Nombre de m\xE9nages"),t(),e(23,"input",70),C("ngModelChange",function(l){x(n);let d=u();return b(d.form.households,l)||(d.form.households=l),v(l)}),t()(),e(24,"label",58)(25,"span",68),o(26,"Date de couverture ou de mise \xE0 jour"),t(),e(27,"input",71),C("ngModelChange",function(l){x(n);let d=u();return b(d.form.coverageDate,l)||(d.form.coverageDate=l),v(l)}),t()(),h(28,se,5,1,"div",72),t(),e(29,"footer",73)(30,"button",74),g("click",function(){x(n);let l=u();return v(l.closeEditor())}),o(31,"Annuler"),t(),e(32,"button",75),g("click",function(){x(n);let l=u();return v(l.save())}),o(33),t()()()()}if(s&2){let n=i.ngIf,r=u();a(6),m(n.name),a(2),S("",n.province," \xB7 ",n.region),a(5),f("ngModel",r.form.status),a(10),f("ngModel",r.form.households),p("disabled",r.form.status==="NOT_COVERED"),a(4),f("ngModel",r.form.coverageDate),p("disabled",r.form.status==="NOT_COVERED"),a(),p("ngIf",r.history().length),a(4),p("disabled",r.saving()),a(),m(r.saving()?"Enregistrement\u2026":"Enregistrer")}}var Y=class s{http=I(W);communes=c([]);loading=c(!0);saving=c(!1);importing=c(!1);editing=c(null);history=c([]);message=c("");error=c("");searchInput="";filterInput="all";activeSearch=c("");activeFilter=c("all");importFile=null;resetMissing=!1;form={status:"NOT_COVERED",households:null,coverageDate:""};filteredCommunes=_(()=>{let i=this.normalize(this.activeSearch()),n=this.activeFilter();return this.communes().filter(r=>{let l=n==="all"||r.status===n,d=!i||[r.name,r.province,r.region].some(Z=>this.normalize(Z).includes(i));return l&&d})});coveredCount=_(()=>this.communes().filter(i=>i.covered).length);inProgressCount=_(()=>this.communes().filter(i=>i.status==="IN_PROGRESS").length);householdCount=_(()=>this.communes().filter(i=>i.covered).reduce((i,n)=>i+(n.households??0),0));constructor(){this.load()}load(){this.loading.set(!0),this.http.get(`${y.apiUrl}/coverage/admin`).subscribe({next:i=>{this.communes.set(i),this.loading.set(!1)},error:i=>{this.error.set(this.errorMessage(i,"Impossible de charger les communes.")),this.loading.set(!1)}})}edit(i){this.error.set(""),this.editing.set(i),this.history.set([]),this.form={status:i.status,households:i.households,coverageDate:i.coverageDate??""},this.http.get(`${y.apiUrl}/coverage/admin/${i.id}/history`).subscribe({next:n=>this.history.set(n)})}closeEditor(){this.editing.set(null)}applyFilters(){this.activeSearch.set(this.searchInput.trim()),this.activeFilter.set(this.filterInput)}clearFilters(){this.searchInput="",this.filterInput="all",this.applyFilters()}save(){let i=this.editing();if(i){if(this.form.status==="COVERED"&&(this.form.households==null||this.form.households<0)){this.error.set("Veuillez renseigner un nombre de m\xE9nages valide.");return}this.saving.set(!0),this.error.set(""),this.http.put(`${y.apiUrl}/coverage/admin/${i.id}`,{status:this.form.status,households:this.form.status!=="NOT_COVERED"?this.form.households:null,coverageDate:this.form.status!=="NOT_COVERED"&&this.form.coverageDate?this.form.coverageDate:null}).subscribe({next:n=>{this.communes.update(r=>r.map(l=>l.id===n.id?n:l)),this.message.set(`La couverture de ${n.name} a \xE9t\xE9 mise \xE0 jour.`),this.saving.set(!1),this.closeEditor()},error:n=>{this.error.set(this.errorMessage(n,"La sauvegarde a \xE9chou\xE9.")),this.saving.set(!1)}})}}chooseImport(i){this.importFile=i.target.files?.[0]??null}importExcel(){if(!this.importFile){this.error.set("Veuillez s\xE9lectionner un fichier Excel.");return}if(this.resetMissing&&!confirm("Les communes absentes du fichier seront marqu\xE9es non couvertes. Continuer ?"))return;let i=new FormData;i.append("file",this.importFile),this.importing.set(!0),this.error.set(""),this.http.post(`${y.apiUrl}/coverage/admin/import`,i,{params:{resetMissing:this.resetMissing}}).subscribe({next:n=>{this.message.set(`${n.importedRows} communes import\xE9es. Couverture actuelle : ${n.coveredCommunes} communes et ${this.formatNumber(n.coveredHouseholds)} m\xE9nages.`),this.importing.set(!1),this.importFile=null,this.load()},error:n=>{this.error.set(this.errorMessage(n,"L\u2019import Excel a \xE9chou\xE9.")),this.importing.set(!1)}})}formatNumber(i){return i==null?"\u2014":new Intl.NumberFormat("fr-FR").format(i)}statusLabel(i){return i==="COVERED"?"Couverte":i==="IN_PROGRESS"?"En cours de couverture":"Non couverte"}statusClass(i){return i==="COVERED"?"bg-emerald-100 text-emerald-800":i==="IN_PROGRESS"?"bg-amber-100 text-amber-800":"bg-slate-100 text-slate-600"}normalize(i){return i.normalize("NFD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^a-z0-9]/g,"")}errorMessage(i,n){return i.error?.message||i.error?.error||n}static \u0275fac=function(n){return new(n||s)};static \u0275cmp=V({type:s,selectors:[["app-coverage"]],decls:70,vars:14,consts:[[1,"mx-auto","max-w-7xl","space-y-6"],[1,"flex","flex-col","gap-4","lg:flex-row","lg:items-end","lg:justify-between"],[1,"text-sm","font-bold","uppercase","tracking-[.18em]","text-primary-700"],[1,"mt-2","text-3xl","font-bold","text-slate-950"],[1,"mt-2","text-slate-600"],["href","/","target","_blank",1,"inline-flex","w-fit","rounded-xl","border","border-primary-200","bg-white","px-4","py-2.5","text-sm","font-semibold","text-primary-800","hover:bg-primary-50"],["class","rounded-xl border border-emerald-200 bg-emerald-50 px-4 py-3 text-sm text-emerald-800",4,"ngIf"],["class","rounded-xl border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-800",4,"ngIf"],[1,"grid","gap-4","sm:grid-cols-2","xl:grid-cols-4"],[1,"rounded-2xl","border","border-slate-200","bg-white","p-5","shadow-sm"],[1,"text-sm","text-slate-500"],[1,"mt-2","block","text-3xl","text-primary-900"],[1,"rounded-2xl","border","border-amber-200","bg-amber-50","p-5","shadow-sm"],[1,"text-sm","text-amber-700"],[1,"mt-2","block","text-3xl","text-amber-800"],[1,"flex","flex-col","gap-4","xl:flex-row","xl:items-end","xl:justify-between"],[1,"text-lg","font-bold","text-slate-900"],[1,"mt-1","text-sm","text-slate-500"],[1,"flex","flex-col","gap-3","md:flex-row","md:items-center"],["type","file","accept",".xlsx,.xls",1,"block","max-w-full","rounded-lg","border","border-slate-300","p-2","text-sm",3,"change"],[1,"flex","items-center","gap-2","text-sm","text-slate-700"],["type","checkbox",1,"rounded","border-slate-300",3,"ngModelChange","ngModel"],["type","button",1,"rounded-xl","bg-primary-700","px-5","py-2.5","text-sm","font-bold","text-white","hover:bg-primary-800","disabled:opacity-50",3,"click","disabled"],[1,"overflow-hidden","rounded-2xl","border","border-slate-200","bg-white","shadow-sm"],[1,"flex","flex-col","gap-3","border-b","border-slate-200","p-5","lg:flex-row",3,"ngSubmit"],["name","search","type","search","placeholder","Rechercher une commune, une province ou une r\xE9gion\u2026",1,"min-w-0","flex-1","rounded-xl","border","border-slate-300","px-4","py-2.5","text-sm","focus:border-primary-500","focus:ring-primary-500",3,"ngModelChange","ngModel"],["name","filter",1,"rounded-xl","border","border-slate-300","px-4","py-2.5","text-sm",3,"ngModelChange","ngModel"],["value","all"],["value","COVERED"],["value","IN_PROGRESS"],["value","NOT_COVERED"],["type","submit",1,"inline-flex","items-center","justify-center","gap-2","rounded-xl","bg-primary-700","px-5","py-2.5","text-sm","font-bold","text-white","hover:bg-primary-800"],["fill","none","stroke","currentColor","viewBox","0 0 24 24",1,"h-4","w-4"],["cx","11","cy","11","r","7","stroke-width","2"],["d","m20 20-4-4","stroke-width","2","stroke-linecap","round"],["type","button",1,"rounded-xl","border","border-slate-300","px-4","py-2.5","text-sm","font-semibold","text-slate-600","hover:bg-slate-50",3,"click"],["class","p-12 text-center text-slate-500",4,"ngIf"],["class","overflow-x-auto",4,"ngIf"],["class","fixed inset-0 z-[70] flex items-center justify-center bg-slate-950/50 p-4",3,"click",4,"ngIf"],[1,"rounded-xl","border","border-emerald-200","bg-emerald-50","px-4","py-3","text-sm","text-emerald-800"],[1,"rounded-xl","border","border-red-200","bg-red-50","px-4","py-3","text-sm","text-red-800"],[1,"p-12","text-center","text-slate-500"],[1,"overflow-x-auto"],[1,"w-full","min-w-[850px]","text-left","text-sm"],[1,"bg-slate-50","text-xs","uppercase","tracking-wide","text-slate-500"],[1,"px-5","py-3"],[1,"px-5","py-3","text-right"],[1,"divide-y","divide-slate-100"],["class","hover:bg-slate-50",4,"ngFor","ngForOf"],["class","p-10 text-center text-slate-500",4,"ngIf"],[1,"hover:bg-slate-50"],[1,"px-5","py-4","font-semibold","text-slate-900"],[1,"px-5","py-4"],[1,"block","text-slate-800"],[1,"text-xs","text-slate-500"],[1,"rounded-full","px-2.5","py-1","text-xs","font-bold",3,"ngClass"],[1,"px-5","py-4","font-semibold"],[1,"px-5","py-4","text-slate-600"],[1,"block"],[1,"text-xs","text-slate-400"],[1,"px-5","py-4","text-right"],["type","button",1,"rounded-lg","border","border-primary-200","px-3","py-2","font-semibold","text-primary-700","hover:bg-primary-50",3,"click"],[1,"p-10","text-center","text-slate-500"],[1,"fixed","inset-0","z-[70]","flex","items-center","justify-center","bg-slate-950/50","p-4",3,"click"],[1,"w-full","max-w-lg","rounded-2xl","bg-white","shadow-2xl",3,"click"],[1,"border-b","border-slate-200","p-6"],[1,"mt-1","text-2xl","font-bold","text-slate-950"],[1,"space-y-5","p-6"],[1,"mb-2","block","text-sm","font-semibold","text-slate-700"],[1,"w-full","rounded-xl","border","border-slate-300","px-4","py-3",3,"ngModelChange","ngModel"],["type","number","min","0",1,"w-full","rounded-xl","border","border-slate-300","px-4","py-3","disabled:bg-slate-100",3,"ngModelChange","ngModel","disabled"],["type","date",1,"w-full","rounded-xl","border","border-slate-300","px-4","py-3","disabled:bg-slate-100",3,"ngModelChange","ngModel","disabled"],["class","border-t border-slate-200 pt-5",4,"ngIf"],[1,"flex","justify-end","gap-3","border-t","border-slate-200","p-5"],["type","button",1,"rounded-xl","border","border-slate-300","px-5","py-2.5","font-semibold","text-slate-700",3,"click"],["type","button",1,"rounded-xl","bg-primary-700","px-5","py-2.5","font-bold","text-white","disabled:opacity-50",3,"click","disabled"],[1,"border-t","border-slate-200","pt-5"],[1,"text-sm","font-bold","text-slate-800"],[1,"mt-3","max-h-40","space-y-2","overflow-y-auto"],["class","rounded-lg bg-slate-50 p-3 text-xs text-slate-600",4,"ngFor","ngForOf"],[1,"rounded-lg","bg-slate-50","p-3","text-xs","text-slate-600"],[1,"text-slate-800"],[4,"ngIf"],[1,"block","mt-1"]],template:function(n,r){n&1&&(e(0,"div",0)(1,"header",1)(2,"div")(3,"p",2),o(4,"Carte du RSU"),t(),e(5,"h1",3),o(6,"Couverture territoriale"),t(),e(7,"p",4),o(8,"Activez les communes couvertes, mettez \xE0 jour les m\xE9nages ou importez un fichier Excel."),t()(),e(9,"a",5),o(10,"Voir la carte publique \u2197"),t()(),h(11,ee,2,1,"div",6)(12,te,2,1,"div",7),e(13,"section",8)(14,"div",9)(15,"span",10),o(16,"Toutes les communes"),t(),e(17,"strong",11),o(18),t()(),e(19,"div",9)(20,"span",10),o(21,"Communes couvertes"),t(),e(22,"strong",11),o(23),t()(),e(24,"div",12)(25,"span",13),o(26,"En cours de couverture"),t(),e(27,"strong",14),o(28),t()(),e(29,"div",9)(30,"span",10),o(31,"M\xE9nages enregistr\xE9s"),t(),e(32,"strong",11),o(33),t()()(),e(34,"section",9)(35,"div",15)(36,"div")(37,"h2",16),o(38,"Importer une mise \xE0 jour Excel"),t(),e(39,"p",17),o(40,"Colonnes requises : \xAB Commune \xBB et \xAB Nombre de m\xE9nage \xBB."),t()(),e(41,"div",18)(42,"input",19),g("change",function(d){return r.chooseImport(d)}),t(),e(43,"label",20)(44,"input",21),C("ngModelChange",function(d){return b(r.resetMissing,d)||(r.resetMissing=d),d}),t(),o(45," Remplacer toute la couverture actuelle"),t(),e(46,"button",22),g("click",function(){return r.importExcel()}),o(47),t()()()(),e(48,"section",23)(49,"form",24),g("ngSubmit",function(){return r.applyFilters()}),e(50,"input",25),C("ngModelChange",function(d){return b(r.searchInput,d)||(r.searchInput=d),d}),t(),e(51,"select",26),C("ngModelChange",function(d){return b(r.filterInput,d)||(r.filterInput=d),d}),e(52,"option",27),o(53,"Toutes les communes"),t(),e(54,"option",28),o(55,"Communes couvertes"),t(),e(56,"option",29),o(57,"En cours de couverture"),t(),e(58,"option",30),o(59,"Communes non couvertes"),t()(),e(60,"button",31),N(),e(61,"svg",32),k(62,"circle",33)(63,"path",34),t(),o(64," Rechercher "),t(),D(),e(65,"button",35),g("click",function(){return r.clearFilters()}),o(66,"R\xE9initialiser"),t()(),h(67,ne,2,0,"div",36)(68,oe,19,2,"div",37),t()(),h(69,de,34,11,"div",38)),n&2&&(a(11),p("ngIf",r.message()),a(),p("ngIf",r.error()),a(6),m(r.communes().length),a(5),m(r.coveredCount()),a(5),m(r.inProgressCount()),a(5),m(r.formatNumber(r.householdCount())),a(11),f("ngModel",r.resetMissing),a(2),p("disabled",r.importing()),a(),m(r.importing()?"Importation\u2026":"Importer"),a(3),f("ngModel",r.searchInput),a(),f("ngModel",r.filterInput),a(16),p("ngIf",r.loading()),a(),p("ngIf",!r.loading()),a(),p("ngIf",r.editing()))},dependencies:[P,R,O,F,X,U,J,K,A,q,L,$,H,z,Q,G,j,B],encapsulation:2})};export{Y as CoverageComponent};
|