Pridano pole responsible_user_id do tabulky projects s FK na users. Select zodpovedne osoby v ProjectDetail, ProjectCreate a sloupec v seznamu projektu. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 lines
21 KiB
JavaScript
2 lines
21 KiB
JavaScript
import{j as e,m as w,A as ne}from"./vendor-animation-0s3FMHwK.js";import{r as l,L as C}from"./vendor-react-BVs3cwbi.js";import{a as ie,u as de,c as p,b as le,F as P,A as Z,C as re}from"./index-CNxd7jIT.js";import{f as h,a as ce,c as oe}from"./attendanceHelpers-D6sLEw0q.js";import{F as me}from"./Forbidden-D25jV3Oq.js";import"./vendor-utils-Dyr8OjFr.js";const x="/api/admin";function he(n){return n===1?"den":n>=2&&n<=4?"dny":"dnů"}function ue(n){return n.overtime>0?"linear-gradient(135deg, var(--warning), #d97706)":n.covered>=n.fund?"linear-gradient(135deg, var(--success), #059669)":"var(--gradient)"}function ge(){const n=ie(),{hasPermission:D}=de(),[J,G]=l.useState(!0),[N,v]=l.useState(!1),[i,V]=l.useState({ongoing_shift:null,today_shifts:[],date:"",leave_balance:{vacation_total:160,vacation_used:0,vacation_remaining:160,sick_used:0},monthly_fund:null}),[z,b]=l.useState(!1),[d,_]=l.useState({leave_type:"vacation",date_from:new Date().toISOString().split("T")[0],date_to:new Date().toISOString().split("T")[0],notes:""}),[M,$]=l.useState(!1),[B,L]=l.useState(""),[j,U]=l.useState([]),[Y,A]=l.useState(!1),[F,K]=l.useState([]),[f,Q]=l.useState(null),[I,O]=l.useState({show:!1,action:null}),k=l.useRef(null);l.useEffect(()=>()=>{k.current&&k.current.abort()},[]);const g=l.useCallback(async()=>{try{const a=await p(`${x}/attendance.php`);if(a.status===401)return;const t=await a.json();t.success&&(V(t.data),L(t.data.ongoing_shift?.notes||""),K(t.data.project_logs||[]),Q(t.data.active_project_id||null))}catch{n.error("Nepodařilo se načíst data")}finally{G(!1)}},[n]);if(l.useEffect(()=>{g()},[g]),l.useEffect(()=>{(async()=>{try{const s=await(await p(`${x}/attendance.php?action=projects`)).json();s.success&&U(s.data.projects||[])}catch{}})()},[]),le(z),!D("attendance.record"))return e.jsx(me,{});const R=a=>{if(v(!0),!navigator.geolocation){n.warning("GPS není dostupná"),T(a,{});return}navigator.geolocation.getCurrentPosition(t=>{const{latitude:s,longitude:r,accuracy:m}=t.coords;T(a,{latitude:s,longitude:r,accuracy:m,address:""}),k.current&&k.current.abort();const c=new AbortController;k.current=c,fetch(`https://nominatim.openstreetmap.org/reverse?format=json&lat=${s}&lon=${r}&zoom=18&addressdetails=1`,{headers:{"Accept-Language":"cs"},signal:c.signal}).then(o=>o.json()).then(o=>{o.display_name&&p(`${x}/attendance.php?action=update_address`,{method:"POST",body:JSON.stringify({latitude:s,longitude:r,address:o.display_name,punch_action:a})}).catch(()=>{})}).catch(()=>{})},t=>{let s="Nepodařilo se získat polohu";t.code===t.PERMISSION_DENIED?s="Přístup k poloze byl zamítnut":t.code===t.TIMEOUT&&(s="Vypršel časový limit"),n.error(s),O({show:!0,action:a})},{enableHighAccuracy:!0,timeout:1e4,maximumAge:6e4})},T=async(a,t={})=>{try{const s=await p(`${x}/attendance.php`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({punch_action:a,...t})});if(s.status===401)return;const r=await s.json();v(!1),r.success?(await g(),setTimeout(()=>{n.success(r.message)},300)):n.error(r.error)}catch{v(!1),n.error("Chyba připojení")}},X=async()=>{v(!0);try{const a=await p(`${x}/attendance.php`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({punch_action:"break_start"})});if(a.status===401)return;const t=await a.json();t.success?(await g(),n.success(t.message)):n.error(t.error)}catch{n.error("Chyba připojení")}finally{v(!1)}},ee=async()=>{try{const a=await p(`${x}/attendance.php?action=notes`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({notes:B})});if(a.status===401)return;const t=await a.json();t.success?n.success("Poznámka byla uložena"):n.error(t.error)}catch{n.error("Chyba připojení")}},ae=async a=>{A(!0);try{const t=await p(`${x}/attendance.php?action=switch_project`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({project_id:a||null})});if(t.status===401)return;const s=await t.json();s.success?(await g(),n.success(s.message)):n.error(s.error)}catch{n.error("Chyba připojení")}finally{A(!1)}},S=(a,t)=>{if(!a||!t)return 0;const s=new Date(a),r=new Date(t);if(r<s)return 0;let m=0;const c=new Date(s);for(;c<=r;){const o=c.getDay();o!==0&&o!==6&&m++,c.setDate(c.getDate()+1)}return m},te=async()=>{$(!0);try{const a=await p(`${x}/leave-requests.php`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d)});if(a.status===401)return;const t=await a.json();t.success?(b(!1),await g(),await new Promise(s=>setTimeout(s,300)),n.success(t.message),_({leave_type:"vacation",date_from:new Date().toISOString().split("T")[0],date_to:new Date().toISOString().split("T")[0],notes:""})):n.error(t.error)}catch{n.error("Chyba připojení")}finally{$(!1)}};if(J)return e.jsxs("div",{className:"admin-skeleton",style:{padding:0,gap:"1.5rem"},children:[e.jsx("div",{className:"admin-skeleton-row",style:{justifyContent:"space-between"},children:e.jsxs("div",{children:[e.jsx("div",{className:"admin-skeleton-line h-8",style:{width:"200px",marginBottom:"0.5rem"}}),e.jsx("div",{className:"admin-skeleton-line",style:{width:"140px"}})]})}),e.jsxs("div",{style:{display:"flex",gap:"1.5rem"},children:[e.jsx("div",{className:"admin-card",style:{flex:2},children:e.jsxs("div",{className:"admin-skeleton",style:{gap:"1.25rem"},children:[e.jsx("div",{className:"admin-skeleton-line h-8",style:{width:"120px",marginBottom:"0.5rem"}}),e.jsx("div",{className:"admin-skeleton-line h-10",style:{width:"180px"}}),e.jsxs("div",{className:"admin-skeleton-row",children:[e.jsxs("div",{style:{flex:1},children:[e.jsx("div",{className:"admin-skeleton-line w-1/3",style:{marginBottom:"0.5rem"}}),e.jsx("div",{className:"admin-skeleton-line w-1/4",style:{height:"10px"}})]}),e.jsxs("div",{style:{flex:1},children:[e.jsx("div",{className:"admin-skeleton-line w-1/3",style:{marginBottom:"0.5rem"}}),e.jsx("div",{className:"admin-skeleton-line w-1/4",style:{height:"10px"}})]})]}),e.jsx("div",{className:"admin-skeleton-line h-10",style:{width:"100%",borderRadius:"8px"}})]})}),e.jsxs("div",{style:{flex:1,display:"flex",flexDirection:"column",gap:"1rem"},children:[e.jsx("div",{className:"admin-card",children:e.jsxs("div",{className:"admin-skeleton",style:{gap:"1rem"},children:[e.jsx("div",{className:"admin-skeleton-line w-1/3",style:{marginBottom:"0.25rem"}}),e.jsx("div",{className:"admin-skeleton-line h-8",style:{width:"80px"}}),e.jsx("div",{className:"admin-skeleton-line",style:{width:"100%",height:"6px",borderRadius:"3px"}})]})}),e.jsx("div",{className:"admin-card",children:e.jsxs("div",{className:"admin-skeleton",style:{gap:"1rem"},children:[e.jsx("div",{className:"admin-skeleton-line w-1/3",style:{marginBottom:"0.25rem"}}),e.jsx("div",{className:"admin-skeleton-line h-8",style:{width:"80px"}}),e.jsx("div",{className:"admin-skeleton-line",style:{width:"100%",height:"6px",borderRadius:"3px"}})]})})]})]})]});const{ongoing_shift:u,today_shifts:se,leave_balance:y}=i,q=u&&!u.departure_time,W=se.filter(a=>a.departure_time),E=Math.floor(y.vacation_remaining/8),H=y.vacation_remaining%8;return e.jsxs("div",{children:[e.jsx(w.div,{className:"admin-page-header",initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.4},children:e.jsxs("div",{children:[e.jsx("h1",{className:"admin-page-title",children:"Docházka"}),e.jsx("p",{className:"admin-page-subtitle",children:new Date().toLocaleDateString("cs-CZ",{weekday:"long",day:"numeric",month:"long",year:"numeric"})})]})}),e.jsxs("div",{className:"attendance-layout",children:[e.jsxs(w.div,{className:"attendance-main",initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.4,delay:.1},children:[e.jsxs("div",{className:"attendance-clock-card",children:[e.jsxs("div",{className:"attendance-clock-header",children:[e.jsx("div",{className:"attendance-clock-status",children:q?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"attendance-status-dot active"}),e.jsx("span",{children:"Pracuji"})]}):e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"attendance-status-dot"}),e.jsx("span",{children:"Nepracuji"})]})}),e.jsx("div",{className:"attendance-clock-time",children:new Date().toLocaleTimeString("cs-CZ",{hour:"2-digit",minute:"2-digit"})})]}),q?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"attendance-shift-info",children:e.jsxs("div",{className:"attendance-shift-row",children:[e.jsxs("div",{className:"attendance-shift-item",children:[e.jsx("span",{className:"attendance-shift-label",children:"Příchod"}),e.jsx("span",{className:"attendance-shift-value success",children:h(u.arrival_time)})]}),e.jsxs("div",{className:"attendance-shift-item",children:[e.jsx("span",{className:"attendance-shift-label",children:"Pauza"}),e.jsx("span",{className:`attendance-shift-value ${u.break_start?"success":""}`,children:u.break_start?`${h(u.break_start)} - ${h(u.break_end)}`:"—"})]}),e.jsxs("div",{className:"attendance-shift-item",children:[e.jsx("span",{className:"attendance-shift-label",children:"Odchod"}),e.jsx("span",{className:"attendance-shift-value",children:"—"})]})]})}),j.length>0&&e.jsxs("div",{className:"attendance-project-section",children:[e.jsxs("div",{className:"attendance-project-header",children:[e.jsx("span",{className:"attendance-shift-label",children:"Projekt"}),f?e.jsx("span",{className:"admin-badge admin-badge-wrap",style:{fontSize:"0.8125rem"},children:j.find(a=>String(a.id)===String(f))?`${j.find(a=>String(a.id)===String(f)).project_number} – ${j.find(a=>String(a.id)===String(f)).name}`:`Projekt #${f}`}):e.jsx("span",{className:"text-muted",style:{fontSize:"0.8125rem"},children:"Žádný"})]}),e.jsxs("select",{value:f||"",onChange:a=>ae(a.target.value||null),disabled:Y,className:"admin-form-select",style:{fontSize:"0.875rem"},children:[e.jsx("option",{value:"",children:"— Bez projektu —"}),j.map(a=>e.jsxs("option",{value:a.id,children:[a.project_number," – ",a.name]},a.id))]}),F.length>0&&e.jsx("div",{className:"attendance-project-logs",children:F.map((a,t)=>{const s=new Date(a.started_at),r=a.ended_at?new Date(a.ended_at):new Date,m=Math.floor((r-s)/6e4),c=Math.floor(m/60),o=m%60;return e.jsxs("div",{className:"attendance-project-log-item",children:[e.jsx("span",{className:"attendance-project-log-name",children:a.project_name||`Projekt #${a.project_id}`}),e.jsxs("span",{className:"attendance-project-log-time",children:[h(a.started_at)," – ",a.ended_at?h(a.ended_at):"nyní"]}),e.jsxs("span",{className:"attendance-project-log-duration",children:[c,":",String(o).padStart(2,"0")," h"]})]},a.id||t)})})]}),e.jsxs("div",{className:"attendance-clock-actions",children:[!u.break_start&&e.jsx("button",{onClick:X,disabled:N,className:"admin-btn admin-btn-secondary",style:{width:"100%"},children:"Pauza (30 min)"}),e.jsx("button",{onClick:()=>R("departure"),disabled:N,className:"admin-btn admin-btn-primary",style:{width:"100%"},children:N?"Zpracovávám...":"Odchod"}),e.jsx("button",{onClick:()=>b(!0),className:"admin-btn admin-btn-secondary",style:{width:"100%"},children:"Žádost o nepřítomnost"})]}),e.jsxs("div",{className:"attendance-notes",children:[e.jsx("label",{className:"attendance-notes-label",children:"Poznámka ke směně"}),e.jsx("textarea",{value:B,onChange:a=>L(a.target.value),placeholder:"Co jste dělali během směny...",className:"admin-form-textarea",rows:3}),e.jsx("div",{className:"mt-2",children:e.jsx("button",{onClick:ee,className:"admin-btn admin-btn-secondary admin-btn-sm",children:"Uložit poznámku"})})]})]}):e.jsxs("div",{className:"attendance-clock-actions",children:[e.jsx("button",{onClick:()=>R("arrival"),disabled:N,className:"admin-btn admin-btn-primary",style:{width:"100%"},children:N?"Zpracovávám...":"Příchod"}),e.jsx("button",{onClick:()=>b(!0),className:"admin-btn admin-btn-secondary",style:{width:"100%"},children:"Žádost o nepřítomnost"})]})]}),W.length>0&&e.jsxs("div",{className:"admin-card mt-6",children:[e.jsx("div",{className:"admin-card-header",children:e.jsx("h2",{className:"admin-card-title",children:"Dnešní dokončené směny"})}),e.jsx("div",{className:"admin-card-body",children: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:"Příchod"}),e.jsx("th",{children:"Pauza"}),e.jsx("th",{children:"Odchod"}),e.jsx("th",{children:"Odpracováno"}),j.length>0&&e.jsx("th",{children:"Projekty"})]})}),e.jsx("tbody",{children:W.map(a=>{const t=a.project_logs||[];return e.jsxs("tr",{children:[e.jsx("td",{className:"admin-mono",children:h(a.arrival_time)}),e.jsx("td",{className:"admin-mono",children:a.break_start&&a.break_end?`${h(a.break_start)} - ${h(a.break_end)}`:"—"}),e.jsx("td",{className:"admin-mono",children:h(a.departure_time)}),e.jsx("td",{className:"admin-mono",children:ce(oe(a),!0)}),j.length>0&&e.jsx("td",{children:t.length>0?e.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"0.25rem"},children:t.map((s,r)=>{const m=s.ended_at?Math.floor((new Date(s.ended_at)-new Date(s.started_at))/6e4):0,c=Math.floor(m/60),o=m%60;return e.jsxs("span",{style:{fontSize:"12px"},children:[s.project_name||`#${s.project_id}`," (",c,":",String(o).padStart(2,"0"),"h)"]},s.id||r)})}):"—"})]},a.id)})})]})})})]})]}),e.jsxs(w.div,{className:"attendance-sidebar",initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.4,delay:.1},children:[e.jsxs("div",{className:"attendance-balance-card",children:[e.jsxs("h3",{className:"attendance-balance-title",children:["Dovolená ",new Date().getFullYear()]}),e.jsxs("div",{className:"attendance-balance-value",children:[e.jsx("span",{className:"attendance-balance-number",children:E}),e.jsxs("span",{className:"attendance-balance-unit",children:[he(E),H>0&&` ${H}h`]})]}),e.jsxs("div",{className:"attendance-balance-detail",children:[e.jsxs("span",{children:["Celkem: ",y.vacation_total,"h"]}),e.jsxs("span",{children:["Čerpáno: ",y.vacation_used,"h"]})]}),e.jsx("div",{className:"attendance-balance-bar",children:e.jsx("div",{className:"attendance-balance-progress",style:{width:`${y.vacation_remaining/y.vacation_total*100}%`}})})]}),i.monthly_fund&&e.jsxs("div",{className:"admin-stat-card",style:{flexDirection:"column",alignItems:"stretch"},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"1rem"},children:[e.jsx("div",{className:"admin-stat-icon info",children:e.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("rect",{x:"3",y:"4",width:"18",height:"18",rx:"2",ry:"2"}),e.jsx("line",{x1:"16",y1:"2",x2:"16",y2:"6"}),e.jsx("line",{x1:"8",y1:"2",x2:"8",y2:"6"}),e.jsx("line",{x1:"3",y1:"10",x2:"21",y2:"10"})]})}),e.jsxs("div",{className:"admin-stat-content",children:[e.jsx("span",{className:"admin-stat-label",children:i.monthly_fund.month_name}),e.jsxs("span",{className:"admin-stat-value",children:[i.monthly_fund.worked,"h / ",i.monthly_fund.fund,"h"]})]})]}),e.jsxs("div",{style:{marginTop:"0.75rem"},children:[e.jsxs("div",{className:"text-secondary",style:{display:"flex",justifyContent:"space-between",fontSize:"0.8125rem",marginBottom:"0.5rem"},children:[e.jsxs("span",{children:["Odpracováno: ",i.monthly_fund.worked,"h"]}),i.monthly_fund.overtime>0?e.jsxs("span",{className:"text-warning fw-600",children:["Přesčas: +",i.monthly_fund.overtime,"h"]}):e.jsxs("span",{children:["Zbývá: ",i.monthly_fund.remaining,"h"]})]}),e.jsx("div",{className:"attendance-balance-bar",children:e.jsx("div",{className:"attendance-balance-progress",style:{width:`${Math.min(100,i.monthly_fund.covered/i.monthly_fund.fund*100)}%`,background:ue(i.monthly_fund)}})}),i.monthly_fund.leave_hours>0&&e.jsxs("div",{className:"text-muted",style:{fontSize:"0.75rem",marginTop:"0.375rem"},children:["Pokryto: ",i.monthly_fund.covered,"h (práce ",i.monthly_fund.worked,"h",i.monthly_fund.vacation_hours>0&&` + dovolená ${i.monthly_fund.vacation_hours}h`,i.monthly_fund.sick_hours>0&&` + nemoc ${i.monthly_fund.sick_hours}h`,i.monthly_fund.holiday_hours>0&&` + svátek ${i.monthly_fund.holiday_hours}h`,i.monthly_fund.unpaid_hours>0&&` + neplacené ${i.monthly_fund.unpaid_hours}h`,")"]})]})]}),e.jsxs("div",{className:"admin-stat-card",children:[e.jsx("div",{className:"admin-stat-icon danger",children:e.jsx("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:e.jsx("path",{d:"M22 12h-4l-3 9L9 3l-3 9H2"})})}),e.jsxs("div",{className:"admin-stat-content",children:[e.jsxs("span",{className:"admin-stat-label",children:["Nemoc ",new Date().getFullYear()]}),e.jsxs("span",{className:"admin-stat-value",children:[y.sick_used,"h čerpáno"]})]})]}),e.jsxs("div",{className:"attendance-quick-links",children:[e.jsx("h4",{className:"attendance-quick-title",children:"Rychlé odkazy"}),e.jsxs(C,{to:"/attendance/requests",className:"attendance-quick-link",children:[e.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("path",{d:"M9 11l3 3L22 4"}),e.jsx("path",{d:"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"})]}),e.jsx("span",{children:"Moje žádosti"}),e.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:e.jsx("path",{d:"M9 18l6-6-6-6"})})]}),e.jsxs(C,{to:"/attendance/history",className:"attendance-quick-link",children:[e.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("path",{d:"M3 3v18h18"}),e.jsx("path",{d:"M18.7 8l-5.1 5.2-2.8-2.7L7 14.3"})]}),e.jsx("span",{children:"Historie docházky"}),e.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:e.jsx("path",{d:"M9 18l6-6-6-6"})})]}),D("attendance.admin")&&e.jsxs(C,{to:"/attendance/admin",className:"attendance-quick-link",children:[e.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("path",{d:"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"}),e.jsx("circle",{cx:"9",cy:"7",r:"4"}),e.jsx("path",{d:"M23 21v-2a4 4 0 0 0-3-3.87"}),e.jsx("path",{d:"M16 3.13a4 4 0 0 1 0 7.75"})]}),e.jsx("span",{children:"Správa docházky"}),e.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:e.jsx("path",{d:"M9 18l6-6-6-6"})})]}),D("attendance.balances")&&e.jsxs(C,{to:"/attendance/balances",className:"attendance-quick-link",children:[e.jsx("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:e.jsx("path",{d:"M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"})}),e.jsx("span",{children:"Správa bilancí"}),e.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:e.jsx("path",{d:"M9 18l6-6-6-6"})})]})]})]})]}),e.jsx(ne,{children:z&&e.jsxs(w.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:()=>b(!1)}),e.jsxs(w.div,{className:"admin-modal",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.jsx("div",{className:"admin-modal-header",children:e.jsx("h2",{className:"admin-modal-title",children:"Žádost o nepřítomnost"})}),e.jsx("div",{className:"admin-modal-body",children:e.jsxs("div",{className:"admin-form",children:[e.jsx(P,{label:"Typ nepřítomnosti",children:e.jsxs("select",{value:d.leave_type,onChange:a=>_({...d,leave_type:a.target.value}),className:"admin-form-select",children:[e.jsx("option",{value:"vacation",children:"Dovolená"}),e.jsx("option",{value:"sick",children:"Nemoc"}),e.jsx("option",{value:"unpaid",children:"Neplacené volno"})]})}),e.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1rem"},children:[e.jsx(P,{label:"Od",children:e.jsx(Z,{mode:"date",value:d.date_from,onChange:a=>{_(t=>({...t,date_from:a,date_to:t.date_to<a?a:t.date_to}))}})}),e.jsx(P,{label:"Do",children:e.jsx(Z,{mode:"date",value:d.date_to,minDate:d.date_from,onChange:a=>_({...d,date_to:a})})})]}),d.date_from&&d.date_to&&e.jsx("div",{className:"admin-form-group",children:e.jsxs("div",{style:{display:"flex",gap:"1.5rem",padding:"0.75rem 1rem",background:"var(--bg-tertiary)",borderRadius:"var(--border-radius)",fontSize:"0.875rem"},children:[e.jsxs("span",{children:[e.jsx("strong",{children:S(d.date_from,d.date_to)})," ",(()=>{const a=S(d.date_from,d.date_to);return a===1?"pracovní den":a>=2&&a<=4?"pracovní dny":"pracovních dnů"})()]}),e.jsxs("span",{className:"text-muted",children:[S(d.date_from,d.date_to)*8," hodin"]})]})}),e.jsx(P,{label:"Poznámka",children:e.jsx("textarea",{value:d.notes,onChange:a=>_({...d,notes:a.target.value}),placeholder:"Volitelná poznámka...",className:"admin-form-textarea",rows:2})})]})}),e.jsxs("div",{className:"admin-modal-footer",children:[e.jsx("button",{type:"button",onClick:()=>b(!1),className:"admin-btn admin-btn-secondary",disabled:M,children:"Zrušit"}),e.jsx("button",{type:"button",onClick:te,disabled:M||S(d.date_from,d.date_to)===0,className:"admin-btn admin-btn-primary",children:M?"Odesílám...":"Odeslat žádost"})]})]})]})}),e.jsx(re,{isOpen:I.show,onClose:()=>{O({show:!1,action:null}),v(!1)},onConfirm:()=>{O({show:!1,action:null}),T(I.action,{})},title:"GPS nedostupná",message:"Nepodařilo se získat polohu. Chcete pokračovat bez GPS?",confirmText:"Pokračovat",cancelText:"Zrušit",type:"warning"})]})}export{ge as default};
|