import{j as e,A as pe,m as T}from"./vendor-animation-0s3FMHwK.js";import{b as Z,A as j,c as L,a as we,u as Se,F as ce,C as Ce}from"./index-CNxd7jIT.js";import{F as ze}from"./Forbidden-D25jV3Oq.js";import{b as le,j as ue,k as xe,c as $e,g as be,d as ve,e as me,a as Q,f as oe,l as J,m as q,h as Me,i as G}from"./attendanceHelpers-D6sLEw0q.js";import{L as Pe,r as v}from"./vendor-react-BVs3cwbi.js";import{a9 as Te}from"./vendor-utils-Dyr8OjFr.js";function Be({show:a,onClose:s,form:d,setForm:n,users:r,onSubmit:m,submitting:l,toggleUser:h,toggleAllUsers:_}){return Z(a),e.jsx(pe,{children:a&&e.jsxs(T.div,{className:"admin-modal-overlay",initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:.2},children:[e.jsx("div",{className:"admin-modal-backdrop",onClick:()=>!l&&s()}),e.jsxs(T.div,{className:"admin-modal admin-modal-lg",initial:{opacity:0,scale:.95,y:20},animate:{opacity:1,scale:1,y:0},exit:{opacity:0,scale:.95,y:20},transition:{duration:.2},children:[e.jsxs("div",{className:"admin-modal-header",children:[e.jsx("h2",{className:"admin-modal-title",children:"Vyplnit docházku za měsíc"}),e.jsx("p",{style:{color:"var(--text-secondary)",marginTop:"0.25rem",fontSize:"0.875rem"},children:"Vytvoří záznamy pro všechny pracovní dny. Svátky se automaticky označí. Existující záznamy se přeskočí."})]}),e.jsx("div",{className:"admin-modal-body",children:e.jsxs("div",{className:"admin-form",children:[e.jsxs("div",{className:"admin-form-group",children:[e.jsx("label",{className:"admin-form-label",children:"Měsíc"}),e.jsx(j,{mode:"month",value:d.month,onChange:p=>n({...d,month:p})})]}),e.jsxs("div",{className:"admin-form-group",children:[e.jsxs("label",{className:"admin-form-label",children:["Zaměstnanci",e.jsx("button",{type:"button",onClick:_,style:{marginLeft:"0.75rem",background:"none",border:"none",color:"var(--accent-color)",cursor:"pointer",fontSize:"0.8125rem",fontWeight:500,padding:0},children:d.user_ids.length===r.length?"Odznačit vše":"Vybrat vše"})]}),e.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"0.375rem",maxHeight:"200px",overflowY:"auto",padding:"0.75rem",background:"var(--bg-tertiary)",borderRadius:"var(--border-radius-sm)",border:"1px solid var(--border-color)"},children:r.map(p=>e.jsxs("label",{className:"admin-form-checkbox",children:[e.jsx("input",{type:"checkbox",checked:d.user_ids.includes(String(p.id)),onChange:()=>h(p.id)}),e.jsx("span",{children:p.name})]},p.id))}),e.jsxs("small",{className:"admin-form-hint",children:["Vybráno: ",d.user_ids.length," z ",r.length]})]}),e.jsxs("div",{className:"admin-form-row",children:[e.jsxs("div",{className:"admin-form-group",children:[e.jsx("label",{className:"admin-form-label",children:"Příchod"}),e.jsx(j,{mode:"time",value:d.arrival_time,onChange:p=>n({...d,arrival_time:p})})]}),e.jsxs("div",{className:"admin-form-group",children:[e.jsx("label",{className:"admin-form-label",children:"Odchod"}),e.jsx(j,{mode:"time",value:d.departure_time,onChange:p=>n({...d,departure_time:p})})]})]}),e.jsxs("div",{className:"admin-form-row",children:[e.jsxs("div",{className:"admin-form-group",children:[e.jsx("label",{className:"admin-form-label",children:"Začátek pauzy"}),e.jsx(j,{mode:"time",value:d.break_start_time,onChange:p=>n({...d,break_start_time:p})})]}),e.jsxs("div",{className:"admin-form-group",children:[e.jsx("label",{className:"admin-form-label",children:"Konec pauzy"}),e.jsx(j,{mode:"time",value:d.break_end_time,onChange:p=>n({...d,break_end_time:p})})]})]})]})}),e.jsxs("div",{className:"admin-modal-footer",children:[e.jsx("button",{type:"button",onClick:s,className:"admin-btn admin-btn-secondary",disabled:l,children:"Zrušit"}),e.jsx("button",{type:"button",onClick:m,className:"admin-btn admin-btn-primary",disabled:l||d.user_ids.length===0,children:l?"Vytvářím záznamy...":"Vyplnit měsíc"})]})]})]})})}let Fe=0;function Le({form:a,projectLogs:s}){const d=ue(a),n=xe(s),r=d-n;if(!s.some(h=>h.project_id)||d<=0)return null;const l=r===0;return e.jsxs("div",{style:{padding:"0.5rem 0.75rem",marginBottom:"0.5rem",borderRadius:"6px",fontSize:"0.8rem",background:l?"var(--success-bg, rgba(34,197,94,0.1))":"var(--danger-bg, rgba(239,68,68,0.1))",color:l?"var(--success-color, #16a34a)":"var(--danger-color, #dc2626)",border:`1px solid ${l?"var(--success-border, rgba(34,197,94,0.3))":"var(--danger-border, rgba(239,68,68,0.3))"}`},children:["Odpracováno: ",Math.floor(d/60),"h ",d%60,"m | Přiřazeno: ",Math.floor(n/60),"h ",n%60,"m | Zbývá: ",Math.floor(Math.abs(r)/60),"h ",Math.abs(r)%60,"m ",r<0?"(překročeno)":""]})}function Oe({log:a,index:s,projectList:d,onUpdate:n,onRemove:r}){return e.jsxs("div",{className:"flex-row gap-2 mb-2",children:[e.jsxs("select",{value:a.project_id,onChange:m=>n(s,"project_id",m.target.value),className:"admin-form-select",style:{flex:3,marginBottom:0},children:[e.jsx("option",{value:"",children:"— Projekt —"}),d.map(m=>e.jsxs("option",{value:m.id,children:[m.project_number," – ",m.name]},m.id))]}),e.jsx("input",{type:"number",min:"0",max:"24",value:a.hours,onChange:m=>n(s,"hours",m.target.value),className:"admin-form-input",style:{width:"60px",marginBottom:0,textAlign:"center"},placeholder:"h"}),e.jsx("span",{style:{fontSize:"0.85rem",color:"var(--text-secondary)"},children:"h"}),e.jsx("input",{type:"number",min:"0",max:"59",value:a.minutes,onChange:m=>n(s,"minutes",m.target.value),className:"admin-form-input",style:{width:"60px",marginBottom:0,textAlign:"center"},placeholder:"m"}),e.jsx("span",{style:{fontSize:"0.85rem",color:"var(--text-secondary)"},children:"m"}),e.jsx("button",{type:"button",onClick:()=>r(s),className:"admin-btn admin-btn-secondary admin-btn-sm",style:{padding:"0.375rem",flexShrink:0},title:"Odebrat",children:e.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:e.jsx("path",{d:"M18 6L6 18M6 6l12 12"})})})]})}function he({mode:a,show:s,onClose:d,onSubmit:n,form:r,setForm:m,projectLogs:l,setProjectLogs:h,projectList:_,users:p,onShiftDateChange:w,editingRecord:S}){Z(s);const y=a==="create",k=r.leave_type==="work",x=(i,f)=>{m({...r,[i]:f})},E=(i,f,M)=>{const z=[...l];z[i]={...z[i],[f]:M},h(z)},B=i=>{h(l.filter((f,M)=>M!==i))},C=()=>{h([...l,{_key:`log-${++Fe}`,project_id:"",hours:"",minutes:""}])};return e.jsx(pe,{children:s&&e.jsxs(T.div,{className:"admin-modal-overlay",initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:.2},children:[e.jsx("div",{className:"admin-modal-backdrop",onClick:d}),e.jsxs(T.div,{className:"admin-modal admin-modal-lg",initial:{opacity:0,scale:.95,y:20},animate:{opacity:1,scale:1,y:0},exit:{opacity:0,scale:.95,y:20},transition:{duration:.2},children:[e.jsxs("div",{className:"admin-modal-header",children:[e.jsx("h2",{className:"admin-modal-title",children:y?"Přidat záznam docházky":"Upravit docházku"}),!y&&S&&e.jsxs("p",{style:{color:"var(--text-secondary)",marginTop:"0.25rem"},children:[S.user_name," — ",le(S.shift_date)]})]}),e.jsx("div",{className:"admin-modal-body",children:e.jsxs("div",{className:"admin-form",children:[y?e.jsxs("div",{className:"admin-form-row",children:[e.jsxs("div",{className:"admin-form-group",children:[e.jsx("label",{className:"admin-form-label required",children:"Zaměstnanec"}),e.jsxs("select",{value:r.user_id,onChange:i=>x("user_id",i.target.value),className:"admin-form-select",children:[e.jsx("option",{value:"",children:"Vyberte zaměstnance"}),p.map(i=>e.jsx("option",{value:i.id,children:i.name},i.id))]})]}),e.jsxs("div",{className:"admin-form-group",children:[e.jsx("label",{className:"admin-form-label required",children:"Datum směny"}),e.jsx(j,{mode:"date",value:r.shift_date,onChange:i=>w(i)})]})]}):e.jsxs("div",{className:"admin-form-group",children:[e.jsx("label",{className:"admin-form-label",children:"Datum směny"}),e.jsx(j,{mode:"date",value:r.shift_date,onChange:i=>x("shift_date",i)})]}),e.jsxs("div",{className:"admin-form-group",children:[e.jsx("label",{className:"admin-form-label",children:"Typ záznamu"}),e.jsxs("select",{value:r.leave_type,onChange:i=>x("leave_type",i.target.value),className:"admin-form-select",children:[e.jsx("option",{value:"work",children:"Práce"}),e.jsx("option",{value:"vacation",children:"Dovolená"}),e.jsx("option",{value:"sick",children:"Nemoc"}),e.jsx("option",{value:"holiday",children:"Svátek"}),e.jsx("option",{value:"unpaid",children:"Neplacené volno"})]})]}),!k&&e.jsxs("div",{className:"admin-form-group",children:[e.jsx("label",{className:"admin-form-label",children:"Počet hodin"}),e.jsx("input",{type:"number",inputMode:"decimal",value:r.leave_hours,onChange:i=>x("leave_hours",parseFloat(i.target.value)),min:"0.5",max:"24",step:"0.5",className:"admin-form-input"}),y&&e.jsx("small",{className:"admin-form-hint",children:"8 hodin = celý den"})]}),k&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"admin-form-row",children:[e.jsxs("div",{className:"admin-form-group",children:[e.jsx("label",{className:"admin-form-label",children:"Příchod - datum"}),e.jsx(j,{mode:"date",value:r.arrival_date,onChange:i=>x("arrival_date",i)})]}),e.jsxs("div",{className:"admin-form-group",children:[e.jsx("label",{className:"admin-form-label",children:"Příchod - čas"}),e.jsx(j,{mode:"time",value:r.arrival_time,onChange:i=>x("arrival_time",i)})]})]}),e.jsxs("div",{className:"admin-form-row",children:[e.jsxs("div",{className:"admin-form-group",children:[e.jsx("label",{className:"admin-form-label",children:"Začátek pauzy - datum"}),e.jsx(j,{mode:"date",value:r.break_start_date,onChange:i=>x("break_start_date",i)})]}),e.jsxs("div",{className:"admin-form-group",children:[e.jsx("label",{className:"admin-form-label",children:"Začátek pauzy - čas"}),e.jsx(j,{mode:"time",value:r.break_start_time,onChange:i=>x("break_start_time",i)})]})]}),e.jsxs("div",{className:"admin-form-row",children:[e.jsxs("div",{className:"admin-form-group",children:[e.jsx("label",{className:"admin-form-label",children:"Konec pauzy - datum"}),e.jsx(j,{mode:"date",value:r.break_end_date,onChange:i=>x("break_end_date",i)})]}),e.jsxs("div",{className:"admin-form-group",children:[e.jsx("label",{className:"admin-form-label",children:"Konec pauzy - čas"}),e.jsx(j,{mode:"time",value:r.break_end_time,onChange:i=>x("break_end_time",i)})]})]}),e.jsxs("div",{className:"admin-form-row",children:[e.jsxs("div",{className:"admin-form-group",children:[e.jsx("label",{className:"admin-form-label",children:"Odchod - datum"}),e.jsx(j,{mode:"date",value:r.departure_date,onChange:i=>x("departure_date",i)})]}),e.jsxs("div",{className:"admin-form-group",children:[e.jsx("label",{className:"admin-form-label",children:"Odchod - čas"}),e.jsx(j,{mode:"time",value:r.departure_time,onChange:i=>x("departure_time",i)})]})]})]}),k&&_.length>0&&e.jsxs("div",{className:"admin-form-group",children:[e.jsx("label",{className:"admin-form-label",children:"Projekty"}),e.jsx(Le,{form:r,projectLogs:l}),l.map((i,f)=>e.jsx(Oe,{log:i,index:f,projectList:_,onUpdate:E,onRemove:B},i._key||f)),e.jsx("button",{type:"button",onClick:C,className:"admin-btn admin-btn-secondary admin-btn-sm",children:"+ Přidat projekt"})]}),e.jsxs("div",{className:"admin-form-group",children:[e.jsx("label",{className:"admin-form-label",children:"Poznámka"}),e.jsx("textarea",{value:r.notes,onChange:i=>x("notes",i.target.value),className:"admin-form-textarea",rows:3})]})]})}),e.jsxs("div",{className:"admin-modal-footer",children:[e.jsx("button",{type:"button",onClick:d,className:"admin-btn admin-btn-secondary",children:"Zrušit"}),e.jsx("button",{type:"button",onClick:n,className:"admin-btn admin-btn-primary",children:"Uložit"})]})]})]})})}function Ee(a){return a.break_start&&a.break_end?`${oe(a.break_start)} - ${oe(a.break_end)}`:a.break_start?`${oe(a.break_start)} - ?`:"—"}function Ae(a){return a.project_logs&&a.project_logs.length>0?e.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"0.125rem"},children:a.project_logs.map((s,d)=>{let n,r,m=!1;if(s.hours!==null&&s.hours!==void 0)n=parseInt(s.hours)||0,r=parseInt(s.minutes)||0;else{m=!s.ended_at;const l=s.ended_at?new Date(s.ended_at):new Date,h=Math.floor((l-new Date(s.started_at))/6e4);n=Math.floor(h/60),r=h%60}return e.jsxs("span",{className:"admin-badge",style:{fontSize:"0.7rem",display:"inline-block",background:m?"var(--accent-light)":void 0},children:[s.project_name||`#${s.project_id}`," (",n,":",String(r).padStart(2,"0"),"h",m?" ▸":"",")"]},s.id||d)})}):a.project_name?e.jsx("span",{className:"admin-badge admin-badge-wrap",style:{fontSize:"0.75rem"},children:a.project_name}):"—"}function We({records:a,onEdit:s,onDelete:d}){return a.length===0?e.jsx("div",{className:"admin-empty-state",children:e.jsx("p",{children:"Za tento měsíc nejsou žádné záznamy."})}):e.jsx("div",{className:"admin-table-responsive",children:e.jsxs("table",{className:"admin-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Datum"}),e.jsx("th",{children:"Zaměstnanec"}),e.jsx("th",{children:"Typ"}),e.jsx("th",{children:"Příchod"}),e.jsx("th",{children:"Pauza"}),e.jsx("th",{children:"Odchod"}),e.jsx("th",{children:"Hodiny"}),e.jsx("th",{children:"Projekt"}),e.jsx("th",{children:"GPS"}),e.jsx("th",{children:"Poznámka"}),e.jsx("th",{children:"Akce"})]})}),e.jsx("tbody",{children:a.map(n=>{const r=n.leave_type||"work",m=r!=="work",l=m?(n.leave_hours||8)*60:$e(n),h=n.arrival_lat&&n.arrival_lng||n.departure_lat&&n.departure_lng;return e.jsxs("tr",{children:[e.jsx("td",{className:"admin-mono",children:le(n.shift_date)}),e.jsx("td",{children:n.user_name}),e.jsx("td",{children:e.jsx("span",{className:`attendance-leave-badge ${ve(r)}`,children:be(r)})}),e.jsx("td",{className:"admin-mono",children:m?"—":me(n.arrival_time)}),e.jsx("td",{className:"admin-mono",children:m?"—":Ee(n)}),e.jsx("td",{className:"admin-mono",children:m?"—":me(n.departure_time)}),e.jsx("td",{className:"admin-mono",children:l>0?`${Q(l)} h`:"—"}),e.jsx("td",{children:Ae(n)}),e.jsx("td",{children:h?e.jsx(Pe,{to:`/attendance/location/${n.id}`,className:"attendance-gps-link",title:"Zobrazit polohu","aria-label":"Zobrazit polohu",children:"📍"}):"—"}),e.jsx("td",{style:{maxWidth:"100px",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:n.notes||"",children:n.notes||""}),e.jsx("td",{children:e.jsxs("div",{className:"admin-table-actions",children:[e.jsx("button",{onClick:()=>s(n),className:"admin-btn-icon",title:"Upravit","aria-label":"Upravit",children:e.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("path",{d:"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"}),e.jsx("path",{d:"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"})]})}),e.jsx("button",{onClick:()=>d(n),className:"admin-btn-icon danger",title:"Smazat","aria-label":"Smazat",children:e.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("polyline",{points:"3 6 5 6 21 6"}),e.jsx("path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"})]})})]})})]},n.id)})})]})})}const O="/api/admin";function Ze(a){return a.overtime>0?`+${a.overtime}h přesčas`:a.missing>0?`−${a.missing}h`:'splněno'}function Re(a){return a.project_logs&&a.project_logs.length>0?a.project_logs.map(s=>{let d,n;if(s.hours!==null&&s.hours!==void 0)d=parseInt(s.hours)||0,n=parseInt(s.minutes)||0;else if(s.started_at&&s.ended_at){const r=Math.max(0,Math.floor((new Date(s.ended_at)-new Date(s.started_at))/6e4));d=Math.floor(r/60),n=r%60}else d=0,n=0;return`
${s.project_name||`#${s.project_id}`} (${d}:${String(n).padStart(2,"0")}h)
`}).join(""):a.project_name||"—"}function Ue(a,s,d){const n=d.leave_balances[a]?Ve(a,s,d):"",r=s.records.map(l=>{const h=l.leave_type||"work",_=h!=="work",p=Me(l),w=Math.floor(p/60),S=p%60,y=_||!l.break_start||!l.break_end?"—":`${G(l.break_start,l.shift_date)} - ${G(l.break_end,l.shift_date)}`;return` ${le(l.shift_date)} ${be(h)} ${_?"—":G(l.arrival_time,l.shift_date)} ${y} ${_?"—":G(l.departure_time,l.shift_date)} ${p>0?`${w}:${String(S).padStart(2,"0")}`:"—"} ${Re(l)} ${l.notes||""} `}).join(""),m=s.fund!==null?` Fond měsíce: ${s.covered}h / ${s.fund}h ${Ze(s)} `:"";return`

${s.name}

Odpracováno: ${Q(s.minutes)} h
${n} ${r} ${m}
Datum Typ Příchod Pauza Odchod Hodiny Projekty Poznámka
Odpracováno: ${Q(s.minutes)} h
`}function Ve(a,s,d){const n=d.leave_balances[a];let r=`Dovolená ${d.year}: Zbývá ${n.vacation_remaining.toFixed(1)}h z ${n.vacation_total}h`;return s.vacation_hours>0&&(r+=` | Tento měsíc: ${s.vacation_hours}h`),s.sick_hours>0&&(r+=` | Nemoc: ${s.sick_hours}h`),s.holiday_hours>0&&(r+=` | Svátek: ${s.holiday_hours}h`),s.overtime>0&&(r+=` | Přesčas: +${s.overtime}h`),`
${r}
`}function He({alert:a}){const[s,d]=v.useState(!0),[n,r]=v.useState(()=>{const t=new Date;return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}`}),[m,l]=v.useState(""),[h,_]=v.useState({records:[],users:[],user_totals:{},leave_balances:{}}),[p,w]=v.useState(!1),[S,y]=v.useState(!1),[k,x]=v.useState({month:"",user_ids:[],arrival_time:"08:00",departure_time:"16:30",break_start_time:"12:00",break_end_time:"12:30"}),[E,B]=v.useState(!1),C=new Date().toISOString().split("T")[0],[i,f]=v.useState({user_id:"",shift_date:C,leave_type:"work",leave_hours:8,arrival_date:C,arrival_time:"",break_start_date:C,break_start_time:"",break_end_date:C,break_end_time:"",departure_date:C,departure_time:"",notes:""}),[M,z]=v.useState(!1),[R,X]=v.useState(null),[F,A]=v.useState({shift_date:"",leave_type:"work",leave_hours:8,arrival_date:"",arrival_time:"",break_start_date:"",break_start_time:"",break_end_date:"",break_end_time:"",departure_date:"",departure_time:"",notes:""}),[W,U]=v.useState({show:!1,record:null}),[D,ee]=v.useState([]),[V,H]=v.useState([]),[I,K]=v.useState([]),ae=v.useRef(null);v.useEffect(()=>{(async()=>{try{const o=await(await L(`${O}/attendance.php?action=projects`)).json();o.success&&ee(o.data.projects||[])}catch{}})()},[]);const P=v.useCallback(async(t=!0)=>{t&&d(!0);try{let c=`${O}/attendance.php?action=admin&month=${n}`;m&&(c+=`&user_id=${m}`);const o=await L(c);if(o.status===401)return;const g=await o.json();g.success&&_(g.data)}catch{a.error("Nepodařilo se načíst data")}finally{t&&d(!1)}},[n,m,a]);v.useEffect(()=>{P()},[P]);const te=()=>{const t=new Date().toISOString().split("T")[0];f({user_id:"",shift_date:t,leave_type:"work",leave_hours:8,arrival_date:t,arrival_time:"",break_start_date:t,break_start_time:"",break_end_date:t,break_end_time:"",departure_date:t,departure_time:"",notes:"",project_id:""}),H([]),B(!0)},se=t=>{f({...i,shift_date:t,arrival_date:t,break_start_date:t,break_end_date:t,departure_date:t})},ne=async()=>{if(!i.user_id||!i.shift_date){a.error("Vyplňte zaměstnance a datum směny");return}const t=V.filter(c=>c.project_id);if(!(t.length>0&&i.leave_type==="work"&&!Y(t,i)))try{const c={...i};t.length>0&&i.leave_type==="work"&&(c.project_logs=t);const g=await(await L(`${O}/attendance.php?action=create`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)})).json();g.success?(B(!1),await P(!1),await new Promise($=>setTimeout($,300)),a.success(g.message)):a.error(g.error)}catch{a.error("Chyba připojení")}},Y=(t,c)=>{const o=ue(c),g=xe(t);if(o>0&&g!==o){const $=Math.floor(o/60),N=o%60,re=Math.floor(g/60),de=g%60;return a.error(`Součet hodin projektů (${re}h ${de}m) neodpovídá odpracovanému času (${$}h ${N}m)`),!1}return!0},ie=()=>{x({month:n,user_ids:h.users.map(t=>String(t.id)),arrival_time:"08:00",departure_time:"16:30",break_start_time:"12:00",break_end_time:"12:30"}),w(!0)},b=t=>{const c=String(t);x(o=>({...o,user_ids:o.user_ids.includes(c)?o.user_ids.filter(g=>g!==c):[...o.user_ids,c]}))},u=()=>{const t=h.users.map(c=>String(c.id));x(c=>({...c,user_ids:c.user_ids.length===t.length?[]:t}))},ge=async()=>{if(!k.month){a.error("Vyberte měsíc");return}if(k.user_ids.length===0){a.error("Vyberte alespoň jednoho zaměstnance");return}y(!0);try{const c=await(await L(`${O}/attendance.php?action=bulk_attendance`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(k)})).json();c.success?(w(!1),await P(!1),await new Promise(o=>setTimeout(o,300)),a.success(c.message)):a.error(c.error)}catch{a.error("Chyba připojení")}finally{y(!1)}},je=t=>{X(t),A({shift_date:t.shift_date,leave_type:t.leave_type||"work",leave_hours:t.leave_hours||8,arrival_date:q(t.arrival_time)||t.shift_date,arrival_time:J(t.arrival_time),break_start_date:q(t.break_start)||t.shift_date,break_start_time:J(t.break_start),break_end_date:q(t.break_end)||t.shift_date,break_end_time:J(t.break_end),departure_date:q(t.departure_time)||t.shift_date,departure_time:J(t.departure_time),notes:t.notes||"",project_id:t.project_id||""});const c=(t.project_logs||[]).map(o=>{if(o.hours!==null&&o.hours!==void 0)return{project_id:String(o.project_id),hours:String(o.hours),minutes:String(o.minutes||0)};if(o.started_at&&o.ended_at){const g=Math.max(0,Math.floor((new Date(o.ended_at)-new Date(o.started_at))/6e4));return{project_id:String(o.project_id),hours:String(Math.floor(g/60)),minutes:String(g%60)}}return{project_id:String(o.project_id),hours:"",minutes:""}});K(c),z(!0)},fe=async()=>{const c=(F.leave_type||"work")==="work"?I.filter(o=>o.project_id):[];if(!(c.length>0&&!Y(c,F)))try{const o={...F};o.project_logs=c;const $=await(await L(`${O}/attendance.php?id=${R.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)})).json();$.success?(z(!1),await P(!1),await new Promise(N=>setTimeout(N,300)),a.success($.message)):a.error($.error)}catch{a.error("Chyba připojení")}},_e=async()=>{if(W.record)try{const c=await(await L(`${O}/attendance.php?id=${W.record.id}`,{method:"DELETE",credentials:"include"})).json();c.success?(U({show:!1,record:null}),await P(!1),a.success(c.message)):a.error(c.error)}catch{a.error("Chyba připojení")}},ye=async()=>{try{let t=`${O}/attendance.php?action=print&month=${n}`;m&&(t+=`&user_id=${m}`);const c=await L(t);if(c.status===401)return;const o=await c.json();o.success&&ke(o.data)}catch{a.error("Nepodařilo se připravit tisk")}},ke=t=>{const c=Object.entries(t.user_totals).map(([re,de])=>Ue(re,de,t)).join(""),o=Object.keys(t.user_totals).length===0?'

Za vybrané období nejsou žádné záznamy.

':"",g=t.selected_user_name?`
Zaměstnanec: ${t.selected_user_name}
`:"",$=Ie(t,c,o,g),N=window.open("","_blank");N&&(N.document.open(),N.document.write(Te.sanitize($,{WHOLE_DOCUMENT:!0})),N.document.close(),N.onload=()=>N.print())},Ne=Object.keys(h.user_totals).length>0;return{loading:s,month:n,setMonth:r,filterUserId:m,setFilterUserId:l,data:h,hasData:Ne,showBulkModal:p,setShowBulkModal:w,bulkSubmitting:S,bulkForm:k,setBulkForm:x,showCreateModal:E,setShowCreateModal:B,createForm:i,setCreateForm:f,showEditModal:M,setShowEditModal:z,editingRecord:R,editForm:F,setEditForm:A,deleteConfirm:W,setDeleteConfirm:U,projectList:D,createProjectLogs:V,setCreateProjectLogs:H,editProjectLogs:I,setEditProjectLogs:K,printRef:ae,openCreateModal:te,handleCreateShiftDateChange:se,handleCreateSubmit:ne,openBulkModal:ie,toggleBulkUser:b,toggleAllBulkUsers:u,handleBulkSubmit:ge,openEditModal:je,handleEditSubmit:fe,handleDelete:_e,handlePrint:ye}}function Ie(a,s,d,n){return` Docházka - ${a.month_name} `}function Ke(a){return a.overtime>0?"linear-gradient(135deg, var(--warning), #d97706)":a.covered>=a.fund?"linear-gradient(135deg, var(--success), #059669)":"var(--gradient)"}function De(){const a=we(),{hasPermission:s}=Se(),{loading:d,month:n,setMonth:r,filterUserId:m,setFilterUserId:l,data:h,hasData:_,showBulkModal:p,setShowBulkModal:w,bulkSubmitting:S,bulkForm:y,setBulkForm:k,showCreateModal:x,setShowCreateModal:E,createForm:B,setCreateForm:C,showEditModal:i,setShowEditModal:f,editingRecord:M,editForm:z,setEditForm:R,deleteConfirm:X,setDeleteConfirm:F,projectList:A,createProjectLogs:W,setCreateProjectLogs:U,editProjectLogs:D,setEditProjectLogs:ee,openCreateModal:V,handleCreateShiftDateChange:H,handleCreateSubmit:I,openBulkModal:K,toggleBulkUser:ae,toggleAllBulkUsers:P,handleBulkSubmit:te,openEditModal:se,handleEditSubmit:ne,handleDelete:Y,handlePrint:ie}=He({alert:a});return Z(p),Z(i),Z(x),s("attendance.admin")?d?e.jsxs("div",{className:"admin-skeleton",style:{padding:0,gap:"1.5rem"},children:[e.jsxs("div",{className:"admin-skeleton-row",style:{justifyContent:"space-between"},children:[e.jsx("div",{children:e.jsx("div",{className:"admin-skeleton-line h-8",style:{width:"200px",marginBottom:"0.5rem"}})}),e.jsxs("div",{className:"admin-skeleton-row",style:{gap:"0.5rem"},children:[e.jsx("div",{className:"admin-skeleton-line h-10",style:{width:"120px",borderRadius:"8px"}}),e.jsx("div",{className:"admin-skeleton-line h-10",style:{width:"120px",borderRadius:"8px"}}),e.jsx("div",{className:"admin-skeleton-line h-10",style:{width:"140px",borderRadius:"8px"}})]})]}),e.jsx("div",{className:"admin-card",children:e.jsx("div",{className:"admin-skeleton",style:{gap:"0.75rem",padding:"1rem"},children:e.jsxs("div",{className:"admin-skeleton-row",children:[e.jsx("div",{className:"admin-skeleton-line h-10",style:{flex:1,borderRadius:"8px"}}),e.jsx("div",{className:"admin-skeleton-line h-10",style:{flex:1,borderRadius:"8px"}})]})})}),e.jsx("div",{className:"admin-grid admin-grid-3",children:[0,1,2].map(b=>e.jsx("div",{className:"admin-card",children:e.jsx("div",{className:"admin-card-body",children:e.jsxs("div",{className:"admin-skeleton",style:{gap:"0.75rem"},children:[e.jsx("div",{className:"admin-skeleton-line w-1/2"}),e.jsx("div",{className:"admin-skeleton-line h-8",style:{width:"80px"}}),e.jsx("div",{className:"admin-skeleton-line w-1/3",style:{height:"10px"}}),e.jsx("div",{className:"admin-skeleton-line w-full",style:{height:"4px"}})]})})},b))}),e.jsx("div",{className:"admin-card",children:e.jsx("div",{className:"admin-skeleton",style:{gap:"1.25rem"},children:[0,1,2,3,4].map(b=>e.jsxs("div",{className:"admin-skeleton-row",children:[e.jsx("div",{className:"admin-skeleton-line w-1/4"}),e.jsx("div",{className:"admin-skeleton-line w-1/3"}),e.jsx("div",{className:"admin-skeleton-line w-1/4"})]},b))})})]}):e.jsxs("div",{children:[e.jsxs(T.div,{className:"admin-page-header",initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.4},children:[e.jsx("div",{children:e.jsx("h1",{className:"admin-page-title",children:"Správa docházky"})}),e.jsxs("div",{className:"admin-page-actions",children:[_&&e.jsx(e.Fragment,{children:e.jsxs("button",{onClick:ie,className:"admin-btn admin-btn-secondary",title:"Tisk docházky",children:[e.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",style:{marginRight:"0.5rem"},children:[e.jsx("polyline",{points:"6 9 6 2 18 2 18 9"}),e.jsx("path",{d:"M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"}),e.jsx("rect",{x:"6",y:"14",width:"12",height:"8"})]}),"Tisk"]})}),e.jsx("button",{onClick:K,className:"admin-btn admin-btn-secondary",children:"Vyplnit měsíc"}),e.jsxs("button",{onClick:V,className:"admin-btn admin-btn-primary",children:[e.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),e.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]}),"Přidat záznam"]})]})]}),e.jsx(T.div,{className:"admin-card mb-6",initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.4,delay:.1},children:e.jsx("div",{className:"admin-card-body",children:e.jsxs("div",{className:"admin-form-row",children:[e.jsx(ce,{label:"Měsíc",children:e.jsx(j,{mode:"month",value:n,onChange:b=>r(b)})}),e.jsx(ce,{label:"Zaměstnanec",children:e.jsxs("select",{value:m,onChange:b=>l(b.target.value),className:"admin-form-select",children:[e.jsx("option",{value:"",children:"Všichni"}),h.users.map(b=>e.jsx("option",{value:b.id,children:b.name},b.id))]})})]})})}),Object.keys(h.user_totals).length>0&&e.jsx(T.div,{className:"admin-grid admin-grid-3 mb-6",initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.4,delay:.15},children:Object.entries(h.user_totals).map(([b,u])=>e.jsx("div",{className:"admin-card",children:e.jsxs("div",{className:"admin-card-body",children:[e.jsxs("div",{className:"flex-row gap-2 mb-2",children:[e.jsx("span",{style:{fontWeight:600},children:u.name}),e.jsx("span",{className:`attendance-working-badge ${u.working?"working":"finished"}`,children:u.working?"✓":"✗"})]}),e.jsx("div",{className:"admin-stat-value",children:Q(u.minutes)}),e.jsx("div",{className:"admin-stat-label",children:"odpracováno"}),e.jsxs("div",{style:{marginTop:"0.5rem",display:"flex",flexWrap:"wrap",gap:"0.25rem"},children:[u.vacation_hours>0&&e.jsxs("span",{className:"attendance-leave-badge badge-vacation",children:["Dov: ",u.vacation_hours,"h"]}),u.sick_hours>0&&e.jsxs("span",{className:"attendance-leave-badge badge-sick",children:["Nem: ",u.sick_hours,"h"]}),u.holiday_hours>0&&e.jsxs("span",{className:"attendance-leave-badge badge-holiday",children:["Sv: ",u.holiday_hours,"h"]}),u.unpaid_hours>0&&e.jsxs("span",{className:"attendance-leave-badge badge-unpaid",children:["Nep: ",u.unpaid_hours,"h"]})]}),u.fund!==null&&e.jsxs("div",{className:"mt-2",children:[e.jsxs("div",{className:"text-secondary",style:{display:"flex",justifyContent:"space-between",alignItems:"center",fontSize:"0.8rem"},children:[e.jsxs("span",{children:["Fond: ",u.worked_hours,"h / ",u.fund,"h"]}),u.overtime>0&&e.jsxs("span",{className:"text-warning fw-600",children:["+",u.overtime,"h"]}),u.overtime<=0&&u.missing>0&&e.jsxs("span",{className:"text-danger fw-600",children:["-",u.missing,"h"]})]}),e.jsx("div",{style:{marginTop:"0.375rem",height:"4px",background:"var(--bg-tertiary)",borderRadius:"2px",overflow:"hidden"},children:e.jsx("div",{style:{height:"100%",width:`${Math.min(100,u.covered/u.fund*100)}%`,background:Ke(u),borderRadius:"2px",transition:"width 0.3s ease"}})})]}),h.leave_balances[b]&&e.jsxs("div",{className:"text-secondary",style:{marginTop:"0.5rem",fontSize:"0.8rem"},children:["Zbývá dovolené: ",h.leave_balances[b].vacation_remaining.toFixed(1),"h / ",h.leave_balances[b].vacation_total,"h"]})]})},b))}),e.jsx(T.div,{className:"admin-card",initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.4,delay:.2},children:e.jsx("div",{className:"admin-card-body",children:e.jsx(We,{records:h.records,onEdit:se,onDelete:b=>F({show:!0,record:b})})})}),e.jsx(Be,{show:p,onClose:()=>w(!1),form:y,setForm:k,users:h.users,onSubmit:te,submitting:S,toggleUser:ae,toggleAllUsers:P}),e.jsx(he,{mode:"create",show:x,onClose:()=>E(!1),onSubmit:I,form:B,setForm:C,projectLogs:W,setProjectLogs:U,projectList:A,users:h.users,onShiftDateChange:H}),e.jsx(he,{mode:"edit",show:i&&!!M,onClose:()=>f(!1),onSubmit:ne,form:z,setForm:R,projectLogs:D,setProjectLogs:ee,projectList:A,editingRecord:M}),e.jsx(Ce,{isOpen:X.show,onClose:()=>F({show:!1,record:null}),onConfirm:Y,title:"Smazat záznam",message:"Opravdu chcete smazat tento záznam docházky?",confirmText:"Smazat",confirmVariant:"danger"})]}):e.jsx(ze,{})}export{De as default};