PageSourceSearch

https://azsdb-999d6.web.app/assets/HRPage-Bl39_ZFY.js

js azsdb-999d6.web.app collected 2026-10-03 13:19:29 UTC 42,559 bytes, 12 lines download raw bytes

1import{g as bt,c8 as We,c9 as Ge,ca as Gt,r as c,b0 as Vt,j as e,X as mt,cb as qt,q as Ae,o as De,as as ue,c as ae,d as I,k as ft,$ as Jt,a0 as Fe,e as Ce,G as pt,l as ne,C as xt,f as yt,a6 as se,a7 as wt,u as Xt,a as Ve,cc as Yt,H as Qt,M as ea,bw as ta,T as aa,ai as na,cd as sa,au as qe,aj as Je,ak as Xe,al as Ye,am as Qe,at as ra,b as la,av as ia}from"./index-BHv06BA_.js";import{e as oa}from"./ai-DoY81GZ5.js";import{L as ca}from"./logoBase64-CYxZo0P2.js";import{C as et}from"./ConfirmDialog-UjPK-uir.js";import{C as jt}from"./camera-DBCGGrMn.js";import{D as Me}from"./download-BX3vsm7T.js";import"./useDraggable-Ch4Nivlf.js";/**
2 * @license lucide-react v0.323.0 - ISC
3 *
4 * This source code is licensed under the ISC license.
5 * See the LICENSE file in the root directory of this source tree.
6 */const da=bt("Clock3",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16.5 12",key:"1aq6pp"}]]);/**
7 * @license lucide-react v0.323.0 - ISC
8 *
9 * This source code is licensed under the ISC license.
10 * See the LICENSE file in the root directory of this source tree.
11 */const tt=bt("FileCheck2",[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v4",key:"1pf5j1"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"m3 15 2 2 4-4",key:"1lhrkk"}]]);function ua(a,n,i){const s=[];
11s.push([]),s.push(["Name Vorname","",n,i]),s.push([`Konto / KST
12(bitte leer lassen)`,"Datum","Betrag in CHF","Leistungsempfänger / Anlass / Teilnehmer"]);for(const x of a)s.push(["",x.datum,x.betrag,x.anlass]);const h=a.reduce((x,m)=>x+(Number(m.betrag)||0),0);return s.push(["Total","",h]),s.push([]),s.push(["Datum: _________________________________________"]),s.push(["","","","   Unterschrift: _________________________"]),s}const de=595.28,q=841.89,M=50,ha=20,at=Gt(.7,.7,.7),Be=[{x:M,label:"Datum"},{x:M+75,label:"Betrag CHF"},{x:M+160,label:"Anlass"}],nt=de-M;function ga(a){const n=a.split(",")[1]||a,i=atob(n);return Uint8Array.from(i,s=>s.charCodeAt(0))}function st(a,n,i,s){const h=n-ha;i.forEach((m,N)=>{a.drawText(m,{x:Be[N].x+4,y:h+6,size:9,font:s})}),a.drawLine({start:{x:M,y:h},end:{x:nt,y:h},thickness:.75,color:at});const x=[M,...Be.slice(1).map(m=>m.x),nt];for(const m of x)a.drawLine({start:{x:m,y:n},end:{x:m,y:h},thickness:.75,color:at});return h}async function ba(a,n,i){const s=await We.create(),h=await s.embedFont(Ge.Helvetica),x=await s.embedFont(Ge.HelveticaBold),m=await s.embedPng(ga(ca)),N=90,f=m.height/m.width*N;function u(){const d=s.addPage([de,q]);d.drawImage(m,{x:M,y:q-M-f,width:N,height:f}),d.drawText("Spesenabrechnung",{x:M+N+20,y:q-M-16,size:16,font:x}),d.drawText(`${n}  —  ${i}`,{x:M+N+20,y:q-M-34,size:11,font:h});let b=q-M-f-20;return b=st(d,b,Be.map(j=>j.label),x),{page:d,y:b}}let{page:p,y:v}=u(),w=0;for(const d of a){v<90&&({page:p,y:v}=u()),w+=d.betrag;const b=(d.anlass?`${d.anlass} - ${n}`:n).slice(0,65);v=st(p,v,[d.datum,d.betrag.toFixed(2),b],h)}v-=20,p.drawText(`Total: CHF ${w.toFixed(2)}`,{x:M,y:v,size:11,font:x});for(const d of a){if(!d.belegBytes)continue;const b=d.belegBytes instanceof Uint8Array?d.belegBytes:new Uint8Array(d.belegBytes);if(d.belegMimeType==="application/pdf"){const j=await We.load(b);(await s.copyPages(j,j.getPageIndices())).forEach(F=>s.addPage(F))}else{const j=d.belegMimeType==="image/png"?await s.embedPng(b):await s.embedJpg(b),_=s.addPage([de,q]),F=de-2*M,J=q-2*M,X=Math.min(F/j.width,J/j.height,1),P=j.width*X,$=j.height*X;_.drawImage(j,{x:(de-P)/2,y:(q-$)/2,width:P,height:$})}}return s.save()}function ma({onCapture:a,onCancel:n}){const i=c.useRef(null),s=c.useRef(null),[h,x]=c.useState(null),[m,N]=c.useState(null),[f,u]=c.useState(null);Vt(n,!0),c.useEffect(()=>{var b,j;let d=!1;return(j=(b=navigator.mediaDevices)==null?void 0:b.getUserMedia)==null||j.call(b,{video:{facingMode:"environment",width:{ideal:3840},height:{ideal:2160}}}).then(_=>{if(d){_.getTracks().forEach(F=>F.stop());return}s.current=_,i.current&&(i.current.srcObject=_)}).catch(()=>x("Kamera konnte nicht gestartet werden — keine Berechtigung oder kein Gerät gefunden.")),()=>{var _;d=!0,(_=s.current)==null||_.getTracks().forEach(F=>F.stop())}},[]);function p(){const d=i.current;if(!d||!d.videoWidth)return;const b=document.createElement("canvas");b.width=d.videoWidth,b.height=d.videoHeight;const j=b.getContext("2d");j&&(j.drawImage(d,0,0),b.toBlob(_=>{_&&(u(_),N(b.toDataURL("image/jpeg",.92)))},"image/jpeg",.92))}function v(){N(null),u(null)}function w(){f&&a(f)}return e.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/80 p-4",children:e.jsxs("div",{className:"bg-white rounded-2xl shadow-2xl w-full max-w-md overflow-hidden",children:[e.jsxs("div",{className:"flex items-center justify-between px-4 py-3 border-b border-gray-100",children:[e.jsx("h2",{className:"text-sm font-semibold text-gray-800",children:"Beleg fotografieren"}),e.jsx("button",{onClick:n,className:"p-1 text-gray-400 hover:text-gray-600",children:e.jsx(mt,{className:"w-5 h-5"})})]}),e.jsx("div",{className:"bg-black aspect-[3/4] flex items-center justify-center",children:h?e.jsx("p",{className:"text-sm text-white text-center px-6",children:h}):m?e.jsx("img",{src:m,alt:"Aufnahme",className:"w-full h-full object-contain"}):e.jsx("video",{ref:i,autoPlay:!0,playsInline:!0,muted:!0,className:"w-full h-full object-contain"})}),e.jsx("div",{className:"flex gap-2 p-4",children:h?e.jsx("button",{onClick:n,className:"btn btn-secondary text-sm flex-1",children:"Schliessen"}):m?e.jsxs(e.Fragment,{children:[e.jsxs("button",{onClick:v,className:"btn btn-secondary text-sm flex-1",children:[e.jsx(qt,{className:"w-4 h-4"})," Erneut aufnehmen"]}),e.jsx("button",{onClick:w,className:"btn btn-primary text-sm flex-1",children:"Verwenden"})]}):e.jsxs("button",{onClick:p,className:"btn btn-primary text-sm flex-1",children:[e.jsx(jt,{className:"w-4 h-4"})," Foto aufnehmen"]})})]})})}async function fa(a,n,i){const s=Ae(ae(I,"zeiterfassung_eintraege"),ue("userId","==",a),ue("datum",">=",n),ue("datum","<=",i),De("datum"));return(await ft(s)).docs.map(x=>x.data())}function pa(a){const n={};for(const i of a){const s=i.datum.slice(0,7);(n[s]||(n[s]=[])).push(i)}return n}async function xa(a,n,i,s){const h=`${a}_${n}`;await Jt(Ce(I,"zeiterfassung_eintraege",h),{userId:a,datum:n,bloecke:i,code:s,aktualisiertAm:Fe()},{merge:!0})}const rt=[{code:"Fei",label:"Feiertag"},{code:"Fei 1/2",label:"Feiertag 1/2 Tag"},{code:"Ferien",label:"Ferien"},{code:"Fe 1/2",label:"Ferien 1/2 Tag"},{code:"BF",label:"Bezahlter Freitag"},{code:"BF 1/2",label:"Bezahlter 1/2 Freitag"},{code:"Krank",label:"Krank 1 Tag"},{code:"Kr 1/2",label:"Krank 1/2 Tag"},{code:"Militär",label:"Militär/Zivilschutz 1 Tag"},{code:"Mi 1/2",label:"Militär/Zivilschutz 1/2 Tag"},{code:"AW",label:"Aus- und Weiterbildung"},{code:"AW 1/2",label:"Aus- und Weiterbildung 1/2 Tag"},{code:"U",label:"Berufsunfall"},{code:"U 1/2",label:"Berufsunfall 1/2 Tag"},{code:"NBU",label:"Nichtberufsunfall"},{code:"NBU 1/2",label:"Nichtberufsunfall 1/2 Tag"},{code:"Su",label:"Schwangerschaftsurlaub"},{code:"Su 1/2",label:"Schwangerschaftsurlaub 1/2 Tag"},{code:"Uur",label:"Unbezahlter Urlaub"},{code:"Uur 1/2",label:"Unbezahlter Urlaub 1/2 Tag"},{code:"GA",label:"Geschäftliche Abwesenheit"},{code:"GA 1/2",label:"Geschäftliche Abw. 1/2 Tag"}],ye=["feiertage","ferien","bezahlterFreitag","krankheit","militaer","ausUndWeiterbildung","berufsunfall","nichtberufsunfall","schwangerschaftsurlaub","unbezahlterUrlaub","geschaeftlicheAbwesenheit"],lt=[{key:"feiertage",label:"Fei"},{key:"ferien",label:"Ferien"},{key:"krankheit",label:"Krank"},{key:"militaer",label:"Militär"},{key:"ausUndWeiterbildung",label:"AW"},{key:"berufsunfall",label:"U"},{key:"schwangerschaftsurlaub",label:"Su"},{key:"bezahlterFreitag",label:"BF"},{key:"nichtberufsunfall",label:"NBU"},{key:"geschaeftlicheAbwesenheit",label:"GA"},{key:"unbezahlterUrlaub",label:"Uur"}],ya=[{key:"feiertage",label:"Feiertage"},{key:"ferien",label:"Ferien"},{key:"bezahlterFreitag",label:"Bezahlter Freitag"},{key:"krankheit",label:"Krankheit"},{key:"militaer",label:"Militär/Zivilschutz"},{key:"ausUndWeiterbildung",label:"Aus- und Weiterbildung"},{key:"berufsunfall",label:"Berufsunfall"},{key:"nichtberufsunfall",label:"Nichtberufsunfall"},{key:"schwangerschaftsurlaub",label:"Schwangerschaftsurlaub"},{key:"unbezahlterUrlaub",label:"Unbezahlter Urlaub"},{key:"geschaeftlicheAbwesenheit",label:"Geschäftliche Abwesenheit"}],wa={Fei:{kategorie:"feiertage",halbtag:!1},"Fei 1/2":{kategorie:"feiertage",halbtag:!0},Ferien:{kategorie:"ferien",halbtag:!1},"Fe 1/2":{kategorie:"ferien",halbtag:!0},BF:{kategorie:"bezahlterFreitag",halbtag:!1},"BF 1/2":{kategorie:"bezahlterFreitag",halbtag:!0},Krank:{kategorie:"krankheit",halbtag:!1},"Kr 1/2":{kategorie:"krankheit",halbtag:!0},Militär:{kategorie:"militaer",halbtag:!1},"Mi 1/2":{kategorie:"militaer",halbtag:!0},AW:{kategorie:"ausUndWeiterbildung",halbtag:!1}
12,"AW 1/2":{kategorie:"ausUndWeiterbildung",halbtag:!0},U:{kategorie:"berufsunfall",halbtag:!1},"U 1/2":{kategorie:"berufsunfall",halbtag:!0},NBU:{kategorie:"nichtberufsunfall",halbtag:!1},"NBU 1/2":{kategorie:"nichtberufsunfall",halbtag:!0},Su:{kategorie:"schwangerschaftsurlaub",halbtag:!1},"Su 1/2":{kategorie:"schwangerschaftsurlaub",halbtag:!0},Uur:{kategorie:"unbezahlterUrlaub",halbtag:!1},"Uur 1/2":{kategorie:"unbezahlterUrlaub",halbtag:!0},GA:{kategorie:"geschaeftlicheAbwesenheit",halbtag:!1},"GA 1/2":{kategorie:"geschaeftlicheAbwesenheit",halbtag:!0}},ja=42.5;function Nt(a){return ja*a/100}function it(a){const n=/^(\d{1,2}):(\d{2})$/.exec(a);return n?Number(n[1])+Number(n[2])/60:null}function Na(a){const n=it(a.von),i=it(a.bis);return n==null||i==null||i<=n?0:i-n}function ka(a){const i=new Date(a+"T00:00:00").getDay();return i>=1&&i<=5}function kt(){return Object.fromEntries(ye.map(a=>[a,0]))}function Te(a,n,i){const s=((a==null?void 0:a.bloecke)||[]).reduce((u,p)=>u+Na(p),0),h=ka(n)?Nt(i)/5:0,x=kt(),m=a!=null&&a.code?wa[a.code]:void 0;m&&(x[m.kategorie]=m.halbtag?h/2:h);const N=ye.reduce((u,p)=>u+x[p],0),f=s+N-h;return{datum:n,total:s,soll:h,kategorien:x,abweichung:f}}function Sa(a,n){return new Date(a,n,0).getDate()}function va(a,n,i){return`${a}-${String(n).padStart(2,"0")}-${String(i).padStart(2,"0")}`}function _a(a,n,i,s){const h=new Map(a.map(w=>[w.datum,w])),x=Sa(n,i);let m=0,N=0;const f=kt();for(let w=1;w<=x;w++){const d=va(n,i,w),b=Te(h.get(d),d,s);m+=b.soll,N+=b.total;for(const j of ye)f[j]+=b.kategorien[j]}const u=ye.reduce((w,d)=>w+f[d],0),p=m-u,v=N-p;return{jahr:n,monat:i,sollstundenBrutto:m,kategorien:f,sollstundenNetto:p,praesenzzeit:N,saldoMonat:v}}function St(a){const[n,i]=a.split("-").map(Number);return{jahr:n,monat:i}}function Ea(a){const{jahr:n,monat:i}=St(a);return i===12?`${n+1}-01`:`${n}-${String(i+1).padStart(2,"0")}`}function Aa(a,n,i,s,h,x){const m=[];let N=h,f=x;const u=Nt(s);let p=n;for(;p<=i;){const{jahr:v,monat:w}=St(p),d=_a(a[p]||[],v,w,s),b=d.saldoMonat,j=N+b,_=u<=0?0:d.kategorien.ferien/u*-5,F=f+_;m.push({...d,gleitzeitEndeVormonat:N,gleitzeitLaufenderMonat:b,gleitzeitNeuerSaldo:j,ferienEndeVormonat:f,ferienLaufenderMonat:_,ferienNeuerSaldo:F}),N=j,f=F,p=Ea(p)}return m}const ot={feiertage:"Feiertage",ferien:"Ferien",bezahlterFreitag:"Bezahlter Freitag",krankheit:"Krankheit",militaer:"Militär/Zivilschutz",ausUndWeiterbildung:"Aus- und Weiterbildung",berufsunfall:"Berufsunfall",nichtberufsunfall:"Nichtberufsunfall",schwangerschaftsurlaub:"Schwangerschaftsurlaub",unbezahlterUrlaub:"Unbezahlter Urlaub",geschaeftlicheAbwesenheit:"Geschäftliche Abwesenheit"};function L(a){return Math.round(a*100)/100}function Da(a){var i,s;const n=[];for(let h=0;h<4;h++)n.push(((i=a[h])==null?void 0:i.von)||"",((s=a[h])==null?void 0:s.bis)||"");return n}function Fa(a,n,i,s,h,x,m){const N=new Map(a.map(p=>[p.datum,p])),f=new Date(h,x,0).getDate(),u=[];u.push([]),u.push(["Name Vorname","",i,s]),u.push([]),u.push(["Tag","von","bis","von","bis","von","bis","von","bis","Total","Soll","Code","Abw."]);for(let p=1;p<=f;p++){const v=`${h}-${String(x).padStart(2,"0")}-${String(p).padStart(2,"0")}`,w=N.get(v),d=Te(w,v,m);u.push([p,...Da((w==null?void 0:w.bloecke)||[]),L(d.total),L(d.soll),(w==null?void 0:w.code)||"",L(d.abweichung)])}u.push([]),u.push(["Totalisierung:"]),u.push(["","Sollstunden brutto:",L(n.sollstundenBrutto)]);for(const p of Object.keys(ot))u.push(["",ot[p]+":",L(n.kategorien[p])]);return u.push(["","Sollstunden netto:",L(n.sollstundenNetto)]),u.push(["","Präsenzzeit:",L(n.praesenzzeit)]),u.push(["","Saldo Monat:",L(n.saldoMonat)]),u.push([]),u.push(["Gleitzeitrechnung:"]),u.push(["","Ende Vormonat:",L(n.gleitzeitEndeVormonat)]),u.push(["","laufender Monat:",L(n.gleitzeitLaufenderMonat)]),u.push(["","neuer Saldo:",L(n.gleitzeitNeuerSaldo)]),u.push([]),u.push(["Ferienrechnung:"]),u.push(["","Ende Vormonat (Tage):",L(n.ferienEndeVormonat)]),u.push(["","laufender Monat (Tage):",L(n.ferienLaufenderMonat)]),u.push(["","neuer Saldo (Tage):",L(n.ferienNeuerSaldo)]),u}const ct=4;function Ca(){return new Date().toISOString().slice(0,7)}function Ma(a){return new Date(a+"T00:00:00").toLocaleDateString("de-CH",{weekday:"short",day:"2-digit",month:"2-digit"})}function we(a){return Math.round(a*100)/100}function dt(a){return a===0?"":String(we(a))}function ut({userId:a,anzeigeName:n,arbeitspensum:i,gleitzeitStartsaldo:s,ferienStartsaldo:h,startMonat:x,readOnly:m}){const N=pt(),[f,u]=c.useState(Ca()),[p,v]=c.useState(!0),[w,d]=c.useState({}),[b,j]=c.useState({}),[_,F]=c.useState(new Set),[J,X]=c.useState(!1),P=x&&x<=f?x:f;c.useEffect(()=>{let o=!1;return v(!0),fa(a,`${P}-01`,`${f}-31`).then(g=>{if(o)return;d(pa(g));const k=g.filter(y=>y.datum.slice(0,7)===f);j(Object.fromEntries(k.map(y=>[y.datum,{bloecke:y.bloecke,code:y.code}])))}).catch(g=>N.error("Zeiterfassung konnte nicht geladen werden: "+((g==null?void 0:g.message)||g))).finally(()=>{o||v(!1)}),()=>{o=!0}},[a,f,P]);const[$,re]=f.split("-").map(Number),ee=new Date($,re,0).getDate(),O=c.useMemo(()=>Array.from({length:ee},(o,g)=>`${f}-${String(g+1).padStart(2,"0")}`),[f,ee]),le=c.useMemo(()=>{const o=O.filter(k=>b[k]).map(k=>({userId:a,datum:k,bloecke:b[k].bloecke,code:b[k].code})),g={...w,[f]:o};return Aa(g,P,f,i,s,h)},[w,b,O,f,P,a,i,s,h]),A=le[le.length-1];function ie(o){return b[o]||{bloecke:[],code:null}}function Y(o,g,k,y){j(S=>{var T,H;
12const C=[...((T=S[o])==null?void 0:T.bloecke)||[]];for(;C.length<=g;)C.push({von:"",bis:""});return C[g]={...C[g],[k]:y},{...S,[o]:{bloecke:C,code:((H=S[o])==null?void 0:H.code)??null}}})}function je(o,g){j(k=>{var y;return{...k,[o]:{bloecke:((y=k[o])==null?void 0:y.bloecke)||[],code:g||null}}})}async function Q(o){const g=ie(o),k=g.bloecke.filter(y=>y.von||y.bis);F(y=>new Set(y).add(o));try{await xa(a,o,k,g.code)}catch(y){N.error("Speichern fehlgeschlagen: "+((y==null?void 0:y.message)||y))}finally{F(y=>{const S=new Set(y);return S.delete(o),S})}}function G(){if(!A)return;const o=O.filter(C=>b[C]).map(C=>({userId:a,datum:C,bloecke:b[C].bloecke,code:b[C].code})),g=new Date(`${f}-01T00:00:00`).toLocaleDateString("de-CH",{month:"long",year:"numeric"}),k=Fa(o,A,n,g,$,re,i),y=se.aoa_to_sheet(k),S=se.book_new();se.book_append_sheet(S,y,"Zeiterfassung");const U=n.replace(/[^\w\-]+/g,"_");wt(S,`Zeiterfassung-${U}-${f}.xlsx`)}return e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center gap-3 flex-wrap",children:[e.jsx("input",{type:"month",value:f,onChange:o=>u(o.target.value),className:"input text-sm"}),e.jsxs("button",{type:"button",onClick:G,disabled:p,className:"btn btn-secondary text-sm ml-auto disabled:opacity-40",children:[e.jsx(Me,{className:"w-4 h-4"})," Excel-Export"]})]}),p?e.jsx("p",{className:"text-xs text-gray-400",children:"Lädt…"}):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"overflow-x-auto rounded-xl border border-gray-200 bg-white",children:e.jsxs("table",{className:"text-[11px] border-collapse",children:[e.jsx("thead",{className:"text-gray-500 uppercase tracking-wide bg-gray-50",children:e.jsxs("tr",{children:[e.jsx("th",{className:"text-left px-2 py-1.5 border-b border-gray-200",children:"Tag"}),Array.from({length:ct},(o,g)=>e.jsxs(c.Fragment,{children:[e.jsx("th",{className:"text-center px-1 py-1.5 border-b border-l border-gray-200 font-normal",children:"von"}),e.jsx("th",{className:"text-center px-1 py-1.5 border-b border-gray-200 font-normal",children:"bis"})]},g)),e.jsx("th",{className:"text-right px-2 py-1.5 border-b border-l border-gray-200",children:"Total"}),e.jsx("th",{className:"text-right px-2 py-1.5 border-b border-gray-200",children:"Soll"}),e.jsx("th",{className:"text-left px-2 py-1.5 border-b border-gray-200",children:"Code *)"}),e.jsx("th",{className:"text-right px-2 py-1.5 border-b border-gray-200",children:"Abw."}),lt.map(o=>e.jsx("th",{className:"text-right px-1.5 py-1.5 border-b border-l border-gray-200",title:o.label,children:o.label},o.key))]})}),e.jsxs("tbody",{children:[O.map(o=>{const g=ie(o),k=new Date(o+"T00:00:00").getDay()%6===0,y=Te({bloecke:g.bloecke,code:g.code},o,i);return e.jsxs("tr",{className:`border-t border-gray-100 ${k?"bg-gray-50/60":""}`,children:[e.jsx("td",{className:"px-2 py-1 whitespace-nowrap font-medium text-gray-700",children:Ma(o)}),Array.from({length:ct},(S,U)=>{var C,T;return e.jsxs(c.Fragment,{children:[e.jsx("td",{className:"px-0.5 py-0.5 border-l border-gray-100",children:e.jsx("input",{type:"time",disabled:m,value:((C=g.bloecke[U])==null?void 0:C.von)||"",onChange:H=>Y(o,U,"von",H.target.value),onBlur:()=>Q(o),className:"border border-gray-200 rounded px-1 py-0.5 text-[11px] w-[4.8rem] disabled:bg-gray-50"})}),e.jsx("td",{className:"px-0.5 py-0.5",children:e.jsx("input",{type:"time",disabled:m,value:((T=g.bloecke[U])==null?void 0:T.bis)||"",onChange:H=>Y(o,U,"bis",H.target.value),onBlur:()=>Q(o),className:"border border-gray-200 rounded px-1 py-0.5 text-[11px] w-[4.8rem] disabled:bg-gray-50"})})]},U)}),e.jsx("td",{className:"px-2 py-1 text-right tabular-nums border-l border-gray-100",children:we(y.total)||""}),e.jsx("td",{className:"px-2 py-1 text-right tabular-nums text-gray-400",children:we(y.soll)||""}),e.jsx("td",{className:"px-1 py-0.5",children:e.jsxs("select",{disabled:m,value:g.code||"",onChange:S=>{je(o,S.target.value)},onBlur:()=>Q(o),className:"border border-gray-200 rounded px-1 py-0.5 text-[11px] disabled:bg-gray-50 max-w-[7rem]",children:[e.jsx("option",{value:"",children:"—"}),rt.map(S=>e.jsx("option",{value:S.code,children:S.code},S.code))]})}),e.jsx("td",{className:`px-2 py-1 text-right tabular-nums ${y.abweichung<0?"text-red-500":y.abweichung>0?"text-green-600":"text-gray-400"}`,children:dt(y.abweichung)}),lt.map(S=>e.jsx("td",{className:"px-1.5 py-1 text-right tabular-nums text-gray-500 border-l border-gray-100",children:dt(y.kategorien[S.key])},S.key))]},o)}),_.size>0&&e.jsx("tr",{children:e.jsxs("td",{colSpan:24,className:"px-2 py-1 text-gray-400",children:[e.jsx(ne,{className:"w-3 h-3 animate-spin inline"})," speichert…"]})})]})]})}),e.jsxs("div",{className:"rounded-xl border border-gray-200 bg-white p-4",children:[e.jsxs("button",{type:"button",onClick:()=>X(o=>!o),className:"flex items-center gap-1.5 text-xs font-semibold text-gray-700 w-full text-left",children:[J?e.jsx(xt,{className:"w-3.5 h-3.5"}):e.jsx(yt,{className:"w-3.5 h-3.5"}),"*) zulässige Codes"]}),J&&e.jsx("div",{className:"mt-2 grid grid-cols-2 sm:grid-cols-3 gap-x-4 gap-y-1 text-[11px] text-gray-600",children:rt.map(o=>e.jsxs("div",{className:"flex gap-1.5",children:[e.jsx("span",{className:"font-semibold text-gray-800 shrink-0",children:o.code}),e.jsx("span",{children:o.label})]},o.code))})]}),A&&e.jsxs("div",{className:"rounded-xl border border-gray-200 bg-white p-4 grid sm:grid-cols-3 gap-4 text-xs",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"font-semibold text-gray-700 uppercase tracking-wide mb-1.5",children:"Totalisierung"}),e.jsx(z,{label:"Sollstunden brutto",wert:A.sollstundenBrutto}),ya.map(o=>e.jsx(z,{label:o.label,wert:A.kategorien[o.key]},o.key)),e.jsx(z,{label:"Sollstunden netto",wert:A.sollstundenNetto}),e.jsx(z,{label:"Präsenzzeit",wert:A.praesenzzeit}),e.jsx(z,{label:"Saldo Monat",wert:A.saldoMonat,hervorgehoben:!0})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"font-semibold text-gray-700 uppercase tracking-wide mb-1.5",children:"Gleitzeitrechnung"}),e.jsx(z,{label:"Ende Vormonat",wert:A.gleitzeitEndeVormonat}),e.jsx(z,{label:"laufender Monat",wert:A.gleitzeitLaufenderMonat}),e.jsx(z,{label:"neuer Saldo",wert:A.gleitzeitNeuerSaldo,hervorgehoben:!0})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"font-semibold text-gray-700 uppercase tracking-wide mb-1.5",children:"Ferienrechnung"}),e.jsx(z,{label:"Ende Vormonat (Tage)",wert:A.ferienEndeVormonat}),e.jsx(z,{label:"laufender Monat (Tage)",wert:A.ferienLaufenderMonat}),e.jsx(z,{label:"neuer Saldo (Tage)",wert:A.ferienNeuerSaldo,hervorgehoben:!0})]})]})]})]})}function z({label:a,wert:n,hervorgehoben:i}){return e.jsxs("div",{className:"flex justify-between gap-2",children:[e.jsx("span",{className:"text-gray-500",children:a}),e.jsx("span",{className:`tabular-nums shrink-0 ${i?"font-semibold text-gray-900":"text-gray-700"}`,children:we(n)})]})}function ht(){const a=new Date;return String(a.getDate()).padStart(2,"0")+"."+String(a.getMonth()+1).padStart(2,"0")+"."+a.getFullYear()}
12function te(a){return"CHF "+a.toLocaleString("de-CH",{minimumFractionDigits:2,maximumFractionDigits:2})}function gt(){return window.electronApp}function Ra(){var Ke;const{user:a,profile:n,isAdmin:i}=Xt(),s=pt(),[h,x]=c.useState("spesen"),m=!!((Ke=gt())!=null&&Ke.openMailWithAttachments),[N,f]=c.useState([]),[u,p]=c.useState([]),[v,w]=c.useState(!0),[d,b]=c.useState("idle"),[j,_]=c.useState(!1),[F,J]=c.useState(!1),[X,P]=c.useState(null),[$,re]=c.useState(null),[ee,O]=c.useState(""),[le,A]=c.useState(""),[ie,Y]=c.useState(""),[je,Q]=c.useState(!1),[G,o]=c.useState(null),[g,k]=c.useState(null),[y,S]=c.useState(!1),[U,C]=c.useState(!1),[T,H]=c.useState(""),[oe,vt]=c.useState(()=>new Date().toISOString().slice(0,7)),[Ne,he]=c.useState(!1),[ce,Le]=c.useState(new Set),[_t,Ue]=c.useState(!1),[R,ke]=c.useState(null),[ge,ze]=c.useState(null),[Se,Et]=c.useState(""),[be,me]=c.useState(null),[Z,fe]=c.useState(null),[At,Pe]=c.useState(!1),$e=c.useRef(null);c.useEffect(()=>{H((n==null?void 0:n.displayName)||(n==null?void 0:n.username)||"")},[n]),c.useEffect(()=>{if(!(a!=null&&a.uid))return;const t=Ae(ae(I,"spesen_positionen"),ue("userId","==",a.uid),De("erstelltAm","desc"));return Ve(t,l=>{f(l.docs.map(D=>({id:D.id,...D.data()}))),w(!1)},l=>{console.error("[HRPage] spesen_positionen onSnapshot fehlgeschlagen:",l),s.error("Spesen konnten nicht geladen werden: "+((l==null?void 0:l.message)||(l==null?void 0:l.code)||"unbekannt")),w(!1)})},[a==null?void 0:a.uid]),c.useEffect(()=>{if(!(a!=null&&a.uid))return;const t=Ae(ae(I,"spesen_einreichungen"),ue("userId","==",a.uid),De("erstelltAm","desc"));return Ve(t,r=>p(r.docs.map(l=>({id:l.id,...l.data()}))),r=>{console.error("[HRPage] spesen_einreichungen onSnapshot fehlgeschlagen:",r),s.error("Eingereichte Spesen konnten nicht geladen werden: "+((r==null?void 0:r.message)||(r==null?void 0:r.code)||"unbekannt"))})},[a==null?void 0:a.uid]);const K=N.filter(t=>t.status!=="eingereicht"),Dt=K.reduce((t,r)=>t+(Number(r.betrag)||0),0);function ve(){b("idle"),P(null),re(null),O(""),A(""),Y("")}function pe(t,r){P(t),re(r),O(ht()),A(""),Y(""),b("confirm")}function Re(t,r){_(!0),oa(t,r).then(l=>{l.datum&&O(l.datum),l.betrag!=null&&A(String(l.betrag)),l.anlass&&Y(l.anlass),!l.datum&&l.betrag==null&&!l.anlass&&s.info("Beleg konnte nicht eindeutig gelesen werden — bitte Felder manuell prüfen.")}).catch(()=>{s.error("Beleg konnte nicht ausgelesen werden — bitte Felder manuell eintragen.")}).finally(()=>_(!1))}function Ie(t){const r=new FileReader;r.onload=l=>{var B;const D=(B=l.target)==null?void 0:B.result;pe(D,t);const E=D.split(",")[1]||"";Re(E,t.type||"image/jpeg")},r.onerror=()=>s.error("Bild konnte nicht gelesen werden."),r.readAsDataURL(t)}function Ft(t){Q(!1),Ie(new File([t],`beleg-${Date.now()}.jpg`,{type:"image/jpeg"}))}function Ct(t){t.type==="application/pdf"?Mt(t):Ie(t)}async function Mt(t){try{const r=await sa(()=>import("./pdf-BnPRJEQ6.js"),[],import.meta.url);r.GlobalWorkerOptions.workerSrc||(r.GlobalWorkerOptions.workerSrc=new URL(""+new URL("pdf.worker.min-yatZIOMy.mjs",import.meta.url).href,import.meta.url).href);const l=await t.arrayBuffer(),E=await(await r.getDocument({data:l}).promise).getPage(1),B=E.getViewport({scale:2}),W=document.createElement("canvas");W.width=B.width,W.height=B.height;const Ee=W.getContext("2d");await E.render({canvasContext:Ee,viewport:B}).promise;const xe=W.toDataURL("image/jpeg",.85);pe(xe,t),Re(xe.split(",")[1]||"","image/jpeg")}catch{s.error("PDF konnte nicht gelesen werden — bitte Werte manuell eintragen."),pe(null,t)}}function Bt(){pe(null,null)}async function Tt(){if(!(a!=null&&a.uid)){s.error("Nicht eingeloggt.");return}if(!ee.trim()){s.error("Bitte ein Datum angeben.");return}const t=parseFloat(le.replace(",","."));if(isNaN(t)||t<=0){s.error("Bitte einen gültigen Betrag angeben.");return}J(!0);try{const r=await qe(ae(I,"spesen_positionen"),{userId:a.uid,datum:ee.trim(),betrag:t,anlass:ie.trim(),status:"haengig",erstelltAm:Fe()});if($)try{const l=$.type==="application/pdf"?"pdf":"jpg",D=`spesen-belege/${a.uid}/${r.id}.${l}`,E=Je(Xe,D);await Ye(E,$);const B=await Qe(E);await ra(r,{belegStoragePath:D,belegDownloadUrl:B,belegMimeType:$.type||"image/jpeg"})}catch(l){console.error("[HRPage] Beleg-Upload fehlgeschlagen:",l),s.error("Position gespeichert, aber Beleg konnte nicht hochgeladen werden: "+((l==null?void 0:l.message)||(l==null?void 0:l.code)||"unbekannt")),ve();return}s.success("Position gespeichert."),ve()}catch(r){console.error("[HRPage] Speichern fehlgeschlagen:",r),s.error("Speichern fehlgeschlagen: "+((r==null?void 0:r.message)||(r==null?void 0:r.code)||r))}finally{J(!1)}}async function Lt(){if(G){S(!0);try{await la(Ce(I,"spesen_positionen",G.id)),o(null)}catch(t){s.error("Löschen fehlgeschlagen: "+((t==null?void 0:t.message)||t))}finally{S(!1)}}}function Ut(){if(!K.length){s.error("Noch keine Positionen erfasst.");return}const t=K.slice().sort((W,Ee)=>{const xe=W.datum.split(".").reverse().join(""),Wt=Ee.datum.split(".").reverse().join("");return xe.localeCompare(Wt)}),r=oe?new Date(oe+"-01T00:00:00").toLocaleDateString("de-CH",{month:"long",year:"numeric"}):"",l=ua(t,T.trim()||"Ohne Namen",r),D=se.aoa_to_sheet(l);D["!cols"]=[{wch:22},{wch:12},{wch:14},{wch:40}];const E=se.book_new();se.book_append_sheet(E,D,"Tabelle1");const B=(T.trim()||"Spesen").replace(/[^\w\-]+/g,"_");wt(E,`Spesenabrechnung-${B}${oe?"-"+oe:""}.xlsx`)}
12async function zt(t){if(!t.length)return null;const r=await Promise.all(t.map(async E=>{let B;if(E.belegDownloadUrl)try{const W=await fetch(E.belegDownloadUrl);W.ok&&(B=await W.arrayBuffer())}catch{}return{datum:E.datum,betrag:E.betrag,anlass:E.anlass,belegBytes:B,belegMimeType:E.belegMimeType}})),l=new Date().toLocaleDateString("de-CH",{month:"long",year:"numeric"});return{bytes:await ba(r,T.trim()||"Ohne Namen",l),monatLabel:l}}function Pt(){Le(new Set(K.map(t=>t.id))),he(!0)}function $t(t){Le(r=>{const l=new Set(r);return l.has(t)?l.delete(t):l.add(t),l})}const _e=K.filter(t=>ce.has(t.id)),Oe=_e.reduce((t,r)=>t+(Number(r.betrag)||0),0);c.useEffect(()=>{if(!Ne)return;if(!_e.length){ke(null);return}let t=!1;return Ue(!0),zt(_e).then(r=>{t||!r||(ke(r.bytes),Et(r.monatLabel))}).catch(r=>s.error("PDF-Vorschau fehlgeschlagen: "+((r==null?void 0:r.message)||r))).finally(()=>{t||Ue(!1)}),()=>{t=!0}},[Ne,ce,T]),c.useEffect(()=>{if(!R){ze(null);return}const t=URL.createObjectURL(new Blob([R],{type:"application/pdf"}));return ze(t),()=>URL.revokeObjectURL(t)},[R]);function Rt(){he(!1),ke(null)}async function It(){if(R){me("mail");try{const t=gt();if(!(t!=null&&t.openMailWithAttachments)||!(t!=null&&t.writePdfTmp)){s.error("Nur in der Desktop-App verfügbar.");return}const r=`Spesenabrechnung-${(T.trim()||"Spesen").replace(/[^\w\-]+/g,"_")}.pdf`,l=await t.writePdfTmp(R.buffer,r);if(!l.ok||!l.path){s.error("Anhang konnte nicht vorbereitet werden: "+(l.error||"unbekannt"));return}const D=await t.openMailWithAttachments([l.path],`Spesenabrechnung ${T.trim()} ${Se}`,void 0,"Siehe Anhang.");if(!D.ok)throw new Error(D.error||"unbekannt");fe({bytes:R,positionenIds:Array.from(ce),gesamtbetrag:Oe,monatLabel:Se}),he(!1)}catch(t){s.error("Einreichen fehlgeschlagen: "+((t==null?void 0:t.message)||t))}finally{me(null)}}}function Ot(){if(!(!R||!ge)){me("download");try{const t=document.createElement("a");t.href=ge,t.download=`Spesenabrechnung-${(T.trim()||"Spesen").replace(/[^\w\-]+/g,"_")}.pdf`,t.click(),fe({bytes:R,positionenIds:Array.from(ce),gesamtbetrag:Oe,monatLabel:Se}),he(!1)}catch(t){s.error("Einreichen fehlgeschlagen: "+((t==null?void 0:t.message)||t))}finally{me(null)}}}async function Ht(){if(!(!Z||!(a!=null&&a.uid))){Pe(!0);try{const t=`spesen-einreichungen/${a.uid}/${Date.now()}.pdf`,r=Je(Xe,t);await Ye(r,Z.bytes,{contentType:"application/pdf"});const l=await Qe(r),D=await qe(ae(I,"spesen_einreichungen"),{userId:a.uid,erstelltAm:Fe(),erstelltAmLabel:ht(),monatLabel:Z.monatLabel,positionenIds:Z.positionenIds,gesamtbetrag:Z.gesamtbetrag,pdfStoragePath:t,pdfDownloadUrl:l}),E=ia(I);for(const B of Z.positionenIds)E.update(Ce(I,"spesen_positionen",B),{status:"eingereicht",einreichungId:D.id});await E.commit(),s.success("Spesen als eingereicht markiert."),fe(null)}catch(t){s.error("Markieren fehlgeschlagen: "+((t==null?void 0:t.message)||t))}finally{Pe(!1)}}}const[He,Zt]=c.useState([]),[Ze,Kt]=c.useState("");c.useEffect(()=>{i&&ft(ae(I,"users")).then(t=>{Zt(t.docs.map(r=>r.data()).sort((r,l)=>(r.displayName||"").localeCompare(l.displayName||"")))})},[i]);const V=He.find(t=>t.uid===Ze);return e.jsxs("div",{className:"max-w-2xl mx-auto px-4 py-6 space-y-5",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-lg font-bold text-gray-900",children:"HR"}),e.jsx("span",{className:"text-[10px] font-bold px-2 py-0.5 rounded-full bg-amber-100 text-amber-700 border border-amber-300",children:"vorläufig nur Admin — noch in Testphase"})]}),e.jsxs("div",{className:"flex gap-1 border-b border-gray-200",children:[e.jsxs("button",{type:"button",onClick:()=>x("spesen"),className:`flex items-center gap-1.5 px-3 py-2 text-sm font-semibold border-b-2 -mb-px transition-colors ${h==="spesen"?"border-primary-600 text-primary-700":"border-transparent text-gray-500 hover:text-gray-700"}`,children:[e.jsx(Yt,{className:"w-4 h-4"})," Spesen"]}),e.jsxs("button",{type:"button",onClick:()=>x("zeiterfassung"),className:`flex items-center gap-1.5 px-3 py-2 text-sm font-semibold border-b-2 -mb-px transition-colors ${h==="zeiterfassung"?"border-primary-600 text-primary-700":"border-transparent text-gray-500 hover:text-gray-700"}`,children:[e.jsx(da,{className:"w-4 h-4"})," Zeiterfassung"]})]}),h==="spesen"&&e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"text-sm text-gray-600",children:"Beleg fotografieren oder hochladen — Datum, Betrag und Anlass werden automatisch ausgelesen. Nur du siehst deine eigenen Spesen."}),d==="idle"&&e.jsxs("div",{className:"rounded-xl border border-gray-200 bg-white p-4 space-y-3",children:[e.jsx("h2",{className:"text-sm font-semibold text-gray-800",children:"Beleg erfassen"}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs("button",{type:"button",onClick:()=>Q(!0),className:"btn btn-primary text-sm",children:[e.jsx(jt,{className:"w-4 h-4"})," Foto aufnehmen"]}),e.jsxs("button",{type:"button",onClick:()=>{var t;return(t=$e.current)==null?void 0:t.click()},className:"btn btn-secondary text-sm",children:[e.jsx(Qt,{className:"w-4 h-4"})," Datei hochladen"]}),e.jsxs("button",{type:"button",onClick:Bt,className:"btn btn-secondary text-sm",children:[e.jsx(ea,{className:"w-4 h-4"})," Manuell erfassen"]}
12)]}),e.jsx("input",{ref:$e,type:"file",accept:"image/*,application/pdf",hidden:!0,onChange:t=>{var l;const r=(l=t.target.files)==null?void 0:l[0];r&&Ct(r),t.target.value=""}})]}),je&&e.jsx(ma,{onCapture:Ft,onCancel:()=>Q(!1)}),d==="confirm"&&e.jsxs("div",{className:"rounded-xl border border-gray-200 bg-white p-4 space-y-3",children:[e.jsx("h2",{className:"text-sm font-semibold text-gray-800",children:"Beleg prüfen"}),e.jsxs("div",{className:"flex gap-3",children:[X&&e.jsx("img",{src:X,alt:"Beleg-Vorschau",className:"w-20 h-20 object-cover rounded-lg border border-gray-200 shrink-0"}),j&&e.jsxs("span",{className:"text-xs text-gray-500 flex items-center gap-1.5 self-center",children:[e.jsx(ne,{className:"w-3.5 h-3.5 animate-spin"})," Lese Beleg…"]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-xs font-semibold text-gray-500 uppercase tracking-wide",children:"Datum"}),e.jsx("input",{type:"text",value:ee,onChange:t=>O(t.target.value),placeholder:"TT.MM.JJJJ",className:"input text-sm w-full mt-1"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-xs font-semibold text-gray-500 uppercase tracking-wide",children:"Betrag in CHF"}),e.jsx("input",{type:"number",step:"0.05",min:"0",value:le,onChange:t=>A(t.target.value),className:"input text-sm w-full mt-1"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-xs font-semibold text-gray-500 uppercase tracking-wide",children:"Leistungsempfänger / Anlass"}),e.jsx("input",{type:"text",value:ie,onChange:t=>Y(t.target.value),className:"input text-sm w-full mt-1"})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs("button",{type:"button",onClick:Tt,disabled:F,className:"btn btn-primary text-sm disabled:opacity-40",children:[F?e.jsx(ne,{className:"w-4 h-4 animate-spin"}):null," Position hinzufügen"]}),e.jsx("button",{type:"button",onClick:ve,className:"btn btn-secondary text-sm",children:"Verwerfen"})]})]}),e.jsxs("div",{className:"rounded-xl border border-gray-200 bg-white p-4",children:[e.jsx("h2",{className:"text-sm font-semibold text-gray-800 mb-3",children:"Hängige Positionen"}),v?e.jsx("p",{className:"text-xs text-gray-400",children:"Lädt…"}):K.length?e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full text-xs",children:[e.jsx("thead",{className:"text-gray-500 uppercase tracking-wide",children:e.jsxs("tr",{children:[e.jsx("th",{className:"text-left pb-2",children:"Datum"}),e.jsx("th",{className:"text-left pb-2",children:"Anlass"}),e.jsx("th",{className:"text-right pb-2",children:"Betrag"}),e.jsx("th",{className:"text-center pb-2",children:"Beleg"}),e.jsx("th",{})]})}),e.jsx("tbody",{children:K.map(t=>e.jsxs("tr",{className:"border-t border-gray-100",children:[e.jsx("td",{className:"py-1.5",children:t.datum}),e.jsx("td",{className:"py-1.5",children:t.anlass||"—"}),e.jsx("td",{className:"py-1.5 text-right tabular-nums",children:te(t.betrag)}),e.jsx("td",{className:"py-1.5 text-center",children:t.belegDownloadUrl?e.jsx("button",{type:"button",onClick:()=>k(t),className:"text-primary-600 hover:text-primary-800","aria-label":"Beleg ansehen",title:"Beleg ansehen",children:e.jsx(ta,{className:"w-3.5 h-3.5 inline"})}):e.jsx("span",{className:"text-gray-300",title:"Kein Beleg (manuell erfasst)",children:"—"})}),e.jsx("td",{className:"py-1.5 text-right",children:e.jsx("button",{type:"button",onClick:()=>o(t),className:"text-red-500 hover:text-red-700","aria-label":"Löschen",children:e.jsx(aa,{className:"w-3.5 h-3.5"})})})]},t.id))}),e.jsx("tfoot",{children:e.jsxs("tr",{className:"border-t-2 border-gray-800 font-semibold",children:[e.jsx("td",{colSpan:2,className:"pt-2",children:"Total"}),e.jsx("td",{className:"pt-2 text-right tabular-nums",children:te(Dt)}),e.jsx("td",{colSpan:2})]})})]})}):e.jsx("p",{className:"text-xs text-gray-400 italic",children:"Keine hängigen Positionen."})]}),K.length>0&&e.jsxs("div",{className:"rounded-xl border border-gray-200 bg-white p-4 space-y-3",children:[e.jsx("h2",{className:"text-sm font-semibold text-gray-800",children:"Spesen einreichen"}),Ne?e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"text-xs text-gray-500",children:"Positionen für diese Einreichung auswählen:"}),e.jsx("div",{className:"space-y-1 max-h-40 overflow-y-auto",children:K.map(t=>e.jsxs("label",{className:"flex items-center gap-2 text-xs cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:ce.has(t.id),onChange:()=>$t(t.id),className:"accent-primary-600"}),e.jsxs("span",{children:[t.datum," — ",t.anlass||"—"," — ",te(t.betrag)]})]},t.id))}),e.jsx("div",{className:"rounded-lg border border-gray-200 overflow-hidden bg-gray-50",children:_t?e.jsxs("div",{className:"p-8 text-center text-xs text-gray-400 flex items-center justify-center gap-1.5",children:[e.jsx(ne,{className:"w-4 h-4 animate-spin"})," PDF-Vorschau wird erstellt…"]}):ge?e.jsx("iframe",{src:ge,title:"PDF-Vorschau der Einreichung",className:"w-full h-[500px] border-0"}):e.jsx("p",{className:"p-4 text-xs text-gray-400 italic",children:"Keine Position ausgewählt."})}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs("button",{type:"button",onClick:It,disabled:be!==null||!R||!m,title:m?void 0:"Nur in der Desktop-App verfügbar",className:"btn btn-secondary text-sm disabled:opacity-40",children:[be==="mail"?e.jsx(ne,{className:"w-4 h-4 animate-spin"}):e.jsx(na,{className:"w-4 h-4"}),"Per E-Mail senden"]}),e.jsxs("button",{type:"button",onClick:Ot,disabled:be!==null||!R,className:"btn btn-secondary text-sm disabled:opacity-40",children:[be==="download"?e.jsx(ne,{className:"w-4 h-4 animate-spin"}):e.jsx(Me,{className:"w-4 h-4"}),"Als PDF herunterladen"]}),e.jsx("button",{type:"button",onClick:Rt,className:"btn btn-secondary text-sm text-red-600",children:"Abbrechen"})]})]}):e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"text-xs text-gray-500",children:"Erstellt eine PDF-Zusammenfassung der ausgewählten Positionen inkl. Original-Belegen. Die PDF bleibt danach dauerhaft unter „Bereits eingereicht“ abrufbar."}),e.jsxs("button",{type:"button",onClick:Pt,className:"btn btn-primary text-sm",children:[e.jsx(tt,{className:"w-4 h-4"})," Einreichung vorbereiten"]})]})]}),u.length>0&&e.jsxs("div",{className:"rounded-xl border border-gray-200 bg-white p-4",children:[e.jsxs("button",{type:"button",onClick:()=>C(t=>
12!t),className:"flex items-center gap-1.5 text-sm font-semibold text-gray-800 w-full text-left",children:[U?e.jsx(xt,{className:"w-3.5 h-3.5"}):e.jsx(yt,{className:"w-3.5 h-3.5"}),"Bereits eingereicht (",u.length,")"]}),U&&e.jsx("ul",{className:"mt-3 space-y-2 text-xs",children:u.map(t=>e.jsxs("li",{className:"flex items-center justify-between border-t border-gray-100 pt-2",children:[e.jsxs("span",{children:[t.erstelltAmLabel," — ",t.monatLabel," — ",te(t.gesamtbetrag)]}),e.jsxs("a",{href:t.pdfDownloadUrl,target:"_blank",rel:"noreferrer",className:"text-primary-600 hover:underline flex items-center gap-1",children:[e.jsx(tt,{className:"w-3.5 h-3.5"})," PDF öffnen"]})]},t.id))})]}),e.jsxs("div",{className:"rounded-xl border border-gray-200 bg-white p-4 space-y-3",children:[e.jsx("h2",{className:"text-sm font-semibold text-gray-800",children:"Excel-Export"}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"text-xs font-semibold text-gray-500 uppercase tracking-wide",children:"Name Vorname"}),e.jsx("input",{type:"text",value:T,onChange:t=>H(t.target.value),className:"input text-sm w-full mt-1"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-xs font-semibold text-gray-500 uppercase tracking-wide",children:"Monat"}),e.jsx("input",{type:"month",value:oe,onChange:t=>vt(t.target.value),className:"input text-sm w-full mt-1"})]})]}),e.jsxs("button",{type:"button",onClick:Ut,className:"btn btn-primary text-sm",children:[e.jsx(Me,{className:"w-4 h-4"})," Als Excel herunterladen"]})]})]}),h==="zeiterfassung"&&e.jsxs(e.Fragment,{children:[(a==null?void 0:a.uid)&&e.jsx(ut,{userId:a.uid,anzeigeName:(n==null?void 0:n.displayName)||(n==null?void 0:n.username)||"",arbeitspensum:(n==null?void 0:n.arbeitspensum)??100,gleitzeitStartsaldo:(n==null?void 0:n.gleitzeitStartsaldo)??0,ferienStartsaldo:(n==null?void 0:n.ferienStartsaldo)??0,startMonat:(n==null?void 0:n.zeiterfassungStartMonat)||new Date().toISOString().slice(0,7)}),i&&e.jsxs("div",{className:"rounded-xl border border-gray-200 bg-white p-4 space-y-3",children:[e.jsx("h2",{className:"text-sm font-semibold text-gray-800",children:"Übersicht aller Mitarbeitenden (Admin)"}),e.jsxs("select",{value:Ze,onChange:t=>Kt(t.target.value),className:"input text-sm w-full",children:[e.jsx("option",{value:"",children:"— Mitarbeiter/in auswählen —"}),He.map(t=>e.jsx("option",{value:t.uid,children:t.displayName||t.username},t.uid))]}),V&&e.jsx(ut,{userId:V.uid,anzeigeName:V.displayName||V.username||"",arbeitspensum:V.arbeitspensum??100,gleitzeitStartsaldo:V.gleitzeitStartsaldo??0,ferienStartsaldo:V.ferienStartsaldo??0,startMonat:V.zeiterfassungStartMonat||new Date().toISOString().slice(0,7),readOnly:!0})]})]}),(g==null?void 0:g.belegDownloadUrl)&&e.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/70 p-4",onClick:()=>k(null),children:e.jsxs("div",{className:"bg-white rounded-2xl shadow-2xl w-full max-w-2xl max-h-[85vh] flex flex-col overflow-hidden",onClick:t=>t.stopPropagation(),children:[e.jsxs("div",{className:"flex items-center justify-between px-4 py-3 border-b border-gray-100 shrink-0",children:[e.jsxs("h2",{className:"text-sm font-semibold text-gray-800",children:["Beleg — ",g.datum," ",g.anlass?`(${g.anlass})`:""]}),e.jsx("button",{onClick:()=>k(null),className:"p-1 text-gray-400 hover:text-gray-600",children:e.jsx(mt,{className:"w-5 h-5"})})]}),e.jsx("div",{className:"flex-1 overflow-auto bg-gray-50",children:g.belegMimeType==="application/pdf"?e.jsx("iframe",{src:g.belegDownloadUrl,title:"Beleg-PDF",className:"w-full h-[75vh]"}):e.jsx("img",{src:g.belegDownloadUrl,alt:"Beleg",className:"w-full h-auto"})})]})}),G&&e.jsx(et,{title:"Position löschen?",message:`"${G.anlass||G.datum}" (${te(G.betrag)}) wird endgültig entfernt.`,isLoading:y,onConfirm:Lt,onCancel:()=>o(null)}),Z&&e.jsx(et,{title:"Als eingereicht markieren?",message:`${Z.positionenIds.length} Position(en), Total ${te(Z.gesamtbetrag)}. Die PDF-Zusammenfassung bleibt danach unter „Bereits eingereicht" abrufbar.`,confirmLabel:"Als eingereicht markieren",danger:!1,isLoading:At,onConfirm:Ht,onCancel:()=>fe(null)})]})}export{Ra 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.