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-Bay45BGf.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`
| Datum | Typ | Příchod | Pauza | Odchod | Hodiny | Projekty | Poznámka | |
|---|---|---|---|---|---|---|---|---|
| Odpracováno: | ${Q(s.minutes)} h | |||||||
Za vybrané období nejsou žádné záznamy.
':"",g=t.selected_user_name?`
EVIDENCE DOCHÁZKYBOHA Automation s.r.o.
${a.month_name}
${n}
Vygenerováno: ${new Date().toLocaleString("cs-CZ")}
|
| ${s} ${d} |