Files
app/dist/assets/LeaveApproval-UIYMMi6c.js
Simon 308941449e fix: tabulka roli a bank. uctu - admin-table-wrapper -> admin-table-responsive
- Settings.jsx: pridany admin-card-body + admin-table-responsive
- CompanySettings.jsx: admin-table-wrapper -> admin-table-responsive
- zadny admin-table-wrapper v JSX nezbyva

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 11:29:10 +01:00

2 lines
10 KiB
JavaScript

import{j as e,m as o,A as q}from"./vendor-animation-0s3FMHwK.js";import{r as t}from"./vendor-react-BVs3cwbi.js";import{u as W,a as B,b as V,c as m,d as w,C as I,F as J}from"./index-CnEy_BDh.js";import{b as r,e as z}from"./attendanceHelpers-D6sLEw0q.js";import{F as K}from"./Forbidden-D25jV3Oq.js";import"./vendor-utils-Dyr8OjFr.js";const p="/api/admin",g={vacation:"Dovolená",sick:"Nemoc",unpaid:"Neplacené volno"},A={vacation:"badge-vacation",sick:"badge-sick",unpaid:"badge-unpaid"},U={pending:"Čeká na schválení",approved:"Schváleno",rejected:"Zamítnuto",cancelled:"Zrušeno"},G={pending:"badge-pending",approved:"badge-approved",rejected:"badge-rejected",cancelled:"badge-cancelled"};function ae(){const{hasPermission:T}=W(),n=B(),[D,_]=t.useState(!0),[l,k]=t.useState("pending"),[S,R]=t.useState([]),[c,Z]=t.useState(0),[h,b]=t.useState([]),[d,N]=t.useState({open:!1,request:null}),[i,u]=t.useState({open:!1,request:null}),[x,j]=t.useState(""),[v,y]=t.useState(!1);V(i.open);const f=t.useCallback(async()=>{try{const s=await m(`${p}/leave-requests.php?action=pending`);if(s.status===401)return;const a=await s.json();a.success&&(R(a.data.requests),Z(a.data.count))}catch{n.error("Nepodařilo se načíst žádosti")}},[n]),C=t.useCallback(async()=>{try{const s=await m(`${p}/leave-requests.php?action=all&status=approved`);if(s.status===401)return;const a=await s.json(),$=await m(`${p}/leave-requests.php?action=all&status=rejected`);if($.status===401)return;const P=await $.json(),M=[...a.success?a.data:[],...P.success?P.data:[]].sort((O,E)=>new Date(E.reviewed_at)-new Date(O.reviewed_at));b(M)}catch{n.error("Nepodařilo se načíst vyřízené žádosti")}},[n]);if(t.useEffect(()=>{(async()=>{_(!0),await f(),_(!1)})()},[f]),t.useEffect(()=>{l==="processed"&&h.length===0&&C()},[l,h.length,C]),!T("attendance.approve"))return e.jsx(K,{});const F=async()=>{y(!0);try{const s=await m(`${p}/leave-requests.php?action=approve`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({request_id:d.request.id})});if(s.status===401)return;const a=await s.json();a.success?(N({open:!1,request:null}),await f(),b([]),n.success(a.message)):n.error(a.error)}catch{n.error("Chyba připojení")}finally{y(!1)}},L=async()=>{if(!x.trim()){n.error("Důvod zamítnutí je povinný");return}y(!0);try{const s=await m(`${p}/leave-requests.php?action=reject`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({request_id:i.request.id,note:x})});if(s.status===401)return;const a=await s.json();a.success?(u({open:!1,request:null}),j(""),await f(),b([]),n.success(a.message)):n.error(a.error)}catch{n.error("Chyba připojení")}finally{y(!1)}};return D?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.jsx("div",{className:"admin-card",children:e.jsx("div",{className:"admin-skeleton",style:{gap:"1.25rem"},children:[0,1,2,3,4].map(s=>e.jsxs("div",{className:"admin-skeleton-row",children:[e.jsx("div",{className:"admin-skeleton-line circle"}),e.jsxs("div",{className:"flex-1",children:[e.jsx("div",{className:"admin-skeleton-line w-1/3 mb-2"}),e.jsx("div",{className:"admin-skeleton-line w-1/4",style:{height:"10px"}})]}),e.jsx("div",{className:"admin-skeleton-line w-1/4"})]},s))})})]}):e.jsxs("div",{children:[e.jsx(o.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:"Schvalování nepřítomnosti"}),e.jsx("p",{className:"admin-page-subtitle",children:c>0?`${c} ${w(c,"žádost čeká","žádosti čekají","žádostí čeká")} na schválení`:"Žádné čekající žádosti"})]})}),e.jsx(o.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.4,delay:.1},children:e.jsxs("div",{className:"offers-tabs mb-6",children:[e.jsxs("button",{className:`offers-tab ${l==="pending"?"active":""}`,onClick:()=>k("pending"),children:["Ke schválení",c>0&&e.jsx("span",{className:"admin-badge badge-pending",style:{marginLeft:"0.5rem",fontSize:"0.7rem",padding:"0.15rem 0.5rem"},children:c})]}),e.jsx("button",{className:`offers-tab ${l==="processed"?"active":""}`,onClick:()=>k("processed"),children:"Vyřízené"})]})}),l==="pending"&&e.jsx(o.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.4,delay:.15},children:S.length===0?e.jsx("div",{className:"admin-card",children:e.jsx("div",{className:"admin-card-body",children:e.jsxs("div",{className:"admin-empty-state",children:[e.jsxs("svg",{width:"48",height:"48",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",className:"text-muted mb-4",children:[e.jsx("path",{d:"M22 11.08V12a10 10 0 1 1-5.93-9.14"}),e.jsx("polyline",{points:"22 4 12 14.01 9 11.01"})]}),e.jsx("p",{children:"Žádné čekající žádosti"})]})})}):e.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"1rem"},children:S.map(s=>e.jsx("div",{className:"admin-card",children:e.jsx("div",{className:"admin-card-body",style:{padding:"1.25rem"},children:e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",flexWrap:"wrap",gap:"1rem"},children:[e.jsxs("div",{className:"flex-1",children:[e.jsxs("div",{className:"flex-row-gap mb-2",children:[e.jsx("strong",{style:{fontSize:"1rem"},children:s.employee_name}),e.jsx("span",{className:`attendance-leave-badge ${A[s.leave_type]||""}`,children:g[s.leave_type]||s.leave_type})]}),e.jsxs("div",{className:"text-secondary",style:{display:"flex",gap:"1.5rem",flexWrap:"wrap",fontSize:"0.875rem"},children:[e.jsxs("span",{children:[e.jsx("strong",{children:r(s.date_from)})," — ",e.jsx("strong",{children:r(s.date_to)})]}),e.jsxs("span",{children:[s.total_days," ",w(s.total_days,"den","dny","dnů")," (",s.total_hours,"h)"]}),e.jsxs("span",{className:"text-muted",children:["Podáno: ",z(s.created_at)]})]}),s.notes&&e.jsx("div",{className:"text-secondary",style:{marginTop:"0.5rem",fontSize:"0.875rem",fontStyle:"italic"},children:s.notes})]}),e.jsxs("div",{style:{display:"flex",gap:"0.5rem",flexShrink:0},children:[e.jsx("button",{onClick:()=>N({open:!0,request:s}),className:"admin-btn admin-btn-sm",style:{background:"var(--success-light)",color:"var(--success)",border:"none"},children:"Schválit"}),e.jsx("button",{onClick:()=>u({open:!0,request:s}),className:"admin-btn admin-btn-sm",style:{background:"var(--danger-light)",color:"var(--danger)",border:"none"},children:"Zamítnout"})]})]})})},s.id))})}),l==="processed"&&e.jsx(o.div,{className:"admin-card",initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.4,delay:.15},children:e.jsx("div",{className:"admin-card-body",children:h.length===0?e.jsx("div",{className:"admin-empty-state",children:e.jsx("p",{children:"Zatím žádné vyřízené žádosti"})}):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:"Zaměstnanec"}),e.jsx("th",{children:"Typ"}),e.jsx("th",{children:"Od"}),e.jsx("th",{children:"Do"}),e.jsx("th",{children:"Dny"}),e.jsx("th",{children:"Stav"}),e.jsx("th",{children:"Schválil"}),e.jsx("th",{children:"Poznámka"}),e.jsx("th",{children:"Vyřízeno"})]})}),e.jsx("tbody",{children:h.map(s=>e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("strong",{children:s.employee_name})}),e.jsx("td",{children:e.jsx("span",{className:`attendance-leave-badge ${A[s.leave_type]||""}`,children:g[s.leave_type]||s.leave_type})}),e.jsx("td",{className:"admin-mono",children:r(s.date_from)}),e.jsx("td",{className:"admin-mono",children:r(s.date_to)}),e.jsx("td",{className:"admin-mono",children:s.total_days}),e.jsx("td",{children:e.jsx("span",{className:`admin-badge ${G[s.status]||""}`,children:U[s.status]||s.status})}),e.jsx("td",{children:s.reviewer_name||"—"}),e.jsx("td",{style:{maxWidth:"200px"},children:s.reviewer_note?e.jsx("span",{title:s.reviewer_note,children:s.reviewer_note.length>40?`${s.reviewer_note.substring(0,40)}...`:s.reviewer_note}):"—"}),e.jsx("td",{className:"admin-mono",style:{whiteSpace:"nowrap"},children:z(s.reviewed_at)})]},s.id))})]})})})}),e.jsx(I,{isOpen:d.open,onClose:()=>N({open:!1,request:null}),onConfirm:F,title:"Schválit žádost",message:d.request?`Schválit ${d.request.total_days} ${w(d.request.total_days,"den","dny","dnů")} ${g[d.request.leave_type]?.toLowerCase()||""} pro ${d.request.employee_name}?`:"",confirmText:"Schválit",type:"info",loading:v}),e.jsx(q,{children:i.open&&e.jsxs(o.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:()=>{u({open:!1,request:null}),j("")}}),e.jsxs(o.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:"Zamítnout žádost"})}),e.jsxs("div",{className:"admin-modal-body",children:[i.request&&e.jsxs("p",{className:"text-secondary mb-4",children:[i.request.employee_name," — ",g[i.request.leave_type],","," ",r(i.request.date_from)," — ",r(i.request.date_to)," (",i.request.total_days," dnů)"]}),e.jsx(J,{label:"Důvod zamítnutí",required:!0,children:e.jsx("textarea",{value:x,onChange:s=>j(s.target.value),placeholder:"Uveďte důvod zamítnutí...",className:"admin-form-textarea",rows:3,autoFocus:!0})})]}),e.jsxs("div",{className:"admin-modal-footer",children:[e.jsx("button",{type:"button",onClick:()=>{u({open:!1,request:null}),j("")},className:"admin-btn admin-btn-secondary",disabled:v,children:"Zrušit"}),e.jsx("button",{type:"button",onClick:L,disabled:v||!x.trim(),className:"admin-btn admin-btn-primary",children:v?"Zpracování...":"Zamítnout"})]})]})]})})]})}export{ae as default};