1import{bJ as e,bY as a,J as s,b7 as t,bg as i,ct as n,K as r,F as d,ap as o,fR as l,W as c,ar as p,ay as m,aI as u,fS as _,eN as g,fT as h,fU as y}from"./B7N87Dgv.js";import{u as v}from"./DTd5uDE1.js";import{ah as x,o as f,ae as j,P as b,f as N,L as I,h as S,i as M,j as w,k as L,l as R,B as C,bB as k,aL as D,aM as E,aN as T,n as B,cY as G,a2 as P}from"./C8tXTfP_.js";import{M as U}from"./CjuqYGWw.js";import{S as $}from"./DtPNdsPF.js";import{S as z}from"./BfbWc3wk.js";import"./wXrpDM_j.js";import"./CtSuM2XX.js";import"./Dk-uwAQg.js";import"./21rcAoiV.js";import"./-MOR4b6l.js";import"./Cs5O5OmG.js";import"./3JwE23mA.js";const F=async({tenant_id:e,company_id:a,start_date:s,end_date:t})=>(await x.post("/v1/billing/reports/driving-hours/recalc",{start_date:s,end_date:t},{headers:{tenant_id:e,company_id:a}})).data,A=async({tenant_id:e,company_group_id:a,company_id:s,driver_ids:t,date:i})=>{const n=e||sessionStorage.getItem("tenantId")||"";return await x.get("/v1/billing/reports/system/driving-hours/export",{params:{company_group_id:a||void 0,driver_ids:(null==t?void 0:t.length)?t.join(","):void 0,date:i},headers:{tenant_id:n,company_id:s},responseType:"blob"})},K=e=>{const a=e.getFullYear(),s=e.getMonth();return Array.from({length:s+1}).map((e,s)=>{const t=new Date(a,s,1);return{value:r(t,"yyyy-MM"),label:r(t,"MMMM, yyyy")}})};function O(){const B=i(),G=n({from:"/_protected/system/reports/driver-logs"}),{companyId:P,clear:O}=v(),Y=G.company_id||P,q=b(),H=[...K(q)].reverse(),V=r(q,"yyyy-MM"),J=sessionStorage.getItem("tenantId")??void 0,Q=f.getState().hasPermission,W=Q("BILLING_EXPORT_SYSTEM_DRIVING_HOURS"),X=Q("BILLING_RECALC_DRIVING_HOURS"),Z=Boolean(G.company_group_id||Y||G.driver_ids.length>0||G.date!==V),{mutate:ee,isPending:ae}=a({mutationFn:A,onError:e=>{s.error(j(e,"Failed to export driven hours."))}}),{mutateAsync:se,isPending:te}=(()=>{const e=t();return a({mutationFn:F,onSuccess:()=>
1{s.success("Driven hours recalculated successfully!"),e.invalidateQueries({queryKey:["recalc-status"]})},onError:e=>{s.error(j(e,"Failed to recalculate driven hours."))}})})(),ie=J||"",{data:ne}=((a,s)=>{const t=f(e=>e.hasPermission);return e({queryKey:["recalc-status",a,s],queryFn:()=>(async(e,a)=>(await x.get("/v1/billing/reports/driving-hours/recalc/status",{headers:{tenant_id:e,company_id:a}})).data)(a,s),enabled:Boolean(a&&s)&&t("BILLING_RECALC_DRIVING_HOURS_STATUS"),refetchInterval:e=>{var a;return"pending"===(null==(a=e.state.data)?void 0:a.data.state)&&5e3}})})(ie,Y),[re,de]=d.useState(b());d.useEffect(()=>{const e=setInterval(()=>{de(b())},3e4);return()=>clearInterval(e)},[]);const oe=d.useMemo(()=>(null==ne?void 0:ne.data.finished_at)?N(ne.data.finished_at):null,[null==ne?void 0:ne.data.finished_at]),le=d.useMemo(()=>oe?o(oe,1):null,[oe]),ce=d.useMemo(()=>("completed"===(null==ne?void 0:ne.data.state)&&le&&l(re,le))??!1,[null==ne?void 0:ne.data.state,le,re]),pe=d.useMemo(()=>{if("pending"===(null==ne?void 0:ne.data.state))return"Recalculation in progress...";if(ce&&le){const e=le.getTime()-re.getTime(),a=Math.ceil(e/6e4);return a>=60?"Regenerate available after 1 hour":`Regenerate available after ${a} minute${1!==a?"s":""}`}return"completed"===(null==ne?void 0:ne.data.state)?ne.data.finished_at:null},[null==ne?void 0:ne.data.state,null==ne?void 0:ne.data.finished_at,ce,le,re]);return c.jsx("div",{className:"w-table space-y-4",children:c.jsxs("div",{className:"flex flex-wrap items-end gap-2",children:[c.jsx("div",{className:"grid flex-1 shrink-0 basis-45 gap-2 sm:flex-0 sm:basis-64",children:c.jsx(z,{label:"Company group",value:G.company_group_id,onChange:e=>B({to:".",search:a=>({...a,company_group_id:e.value,company_id:"",driver_ids:[],applied_at:0})}),className:"w-full",withAsterisk:!1,tenant_id:J})}),c.jsx("div",{className:"grid flex-1 shrink-0 basis-45 gap-2 sm:flex-0 sm:basis-64",children:c.jsx($,{label:"Company",value:Y,onChange:e=>{e.value||O(),B({to:".",search:a=>({...a,company_id:e.value,driver_ids:[],applied_at:0})})},className:"w-full",withAsterisk:!1,tenant_id:J,company_group_id:G.company_group_id})}),c.jsx("div",{className:"grid flex-1 shrink-0 basis-45 gap-2 sm:flex-0 sm:basis-64",children:c.jsx(U,{label:"Driver",value:G.driver_ids,onChange:e=>B({to:".",search:a=>({...a,driver_ids:e,applied_at:0})}),className:"w-full",tenant_id:J,company_id:Y,disabled:!Y,status:"all"})}),c.jsxs("div",{className:"grid flex-1 shrink-0 basis-45 gap-2 sm:flex-0 sm:basis-64",children:[c.jsx(I,{children:"Period"}),c.jsxs(S,{value:G.date,onValueChange:e=>B({to:".",search:a=>({...a,date:e,applied_at:0})}),children:[c.jsx(M,{className:"w-full",children:c.jsx(w,{placeholder:"Month, Year"})}),c.jsx(L,{children:H.map(e=>c.jsx(R,{value:e.value,children:e.label},e.value))})]})]}),Z&&c.jsxs(C,{variant:"ghost",className:"px-2 lg:px-3",onClick:()=>{O(),B({to:".",search:e=>({...e,tenant_id:"",company_group_id:"",company_id:"",driver_ids:[],date:V,page:1,applied_at:0})})},children:["Reset",c.jsx(p,{icon:m})]}),Y&&c.jsx(C,{onClick:()=>{B({to:".",search:e=>({...e,page:1,applied_at:(e.applied_at||0)+1})})},disabled:te,children:"Generate"}),Y&&X&&c.jsx(k,{children:c.jsxs(D,{children:[c.jsx(E,{asChild:!0,children:c.jsx("div",{className:"inline-block",children:c.jsxs(C,{onClick:async()=>{const[e,a]=G.date.split("-").map(Number),s=new Date(e,a-1,1);await se({tenant_id:J||"",company_id:Y,start_date:r(y(s),"yyyy-MM-dd"),end_date:r(h(s),"yyyy-MM-dd")}),B({to:".",search:e=>({...e,page:1,applied_at:(e.applied_at||0)+1})})},disabled:te||"pending"===(null==ne?void 0:ne.data.state)||ce,variant:"outline",children:[te?c.jsx(p,{icon:u,className:"animate-spin"}):c.jsx(p,{icon:_}),"Regenerate"]})})}),pe&&c.jsx(T,{children:pe})]})}),W&&c.jsx("div",{className:"ml-auto",children:c.jsxs(C,{onClick:()=>{ee({tenant_id:J,company_group_id:G.company_group_id,company_id:Y,driver_ids:G.driver_ids,date:G.date},{onSuccess:e=>{const a=e.data,s=e.headers["content-disposition"];let t=`driving-hours-${G.date}.xlsx`;if(s){const e=s.match(/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/i);(null==e?void 0:e[1])&&(t=e[1].replace(/['"]/g,""))}const i=URL.createObjectURL(a),n=document.createElement("a");n.href=i,n.download=t,n.click(),URL.revokeObjectURL(i)}})},disabled:ae||!G.tenant_id&&!J,children:[ae?c.jsx(p,{icon:u,className:"animate-spin"}):c.jsx(p,{icon:g}),ae?"Exporting...":"Export"]})})]})})}const Y=e=>{if("string"==typeof e){if(e.includes(":"))return e;e=Number(e)}if("number"!=typeof e||!Number.isFinite(e)||e<=0)return"00:00";const a=Math.floor(e/6e4),s=Math.floor(a/60),t=a%60;return`${String(s).padStart(2,"0")}
1:${String(t).padStart(2,"0")}`};function q(){const a=G.useSearch(),{companyId:s}=v(),t=a.company_id||s,{data:i,isLoading:n}=(a=>{const s=f(e=>e.hasPermission),{page:t,limit:i,tenant_id:n,company_id:r,driver_ids:d,date:o,applied_at:l}=a;return e({queryKey:["driven-hours",t,i,n,r,d,o,l],queryFn:()=>(async({page:e,limit:a,driver_ids:s,date:t,tenant_id:i,company_id:n})=>{const r=i||sessionStorage.getItem("tenantId")||"",d=n||sessionStorage.getItem("companyId")||"";return(await x.post("/v1/billing/reports/system/driving-hours",{date:t??"",driver_ids:s??[],limit:a??20,page:e??1},{headers:{tenant_id:r,company_id:d}})).data})({page:t,limit:i,tenant_id:n,company_id:r,driver_ids:d,date:o}),enabled:Boolean(o&&l&&l>0&&s("BILLING_SYSTEM_DRIVING_HOURS"))})})({page:a.page,limit:a.limit,tenant_id:a.tenant_id,company_group_id:a.company_group_id,company_id:t,driver_ids:a.driver_ids,date:a.date,applied_at:a.applied_at}),d=(e=>{const a=(e=>{const[a,s]=e.split("-").map(Number);return a&&s?new Date(a,s,0).getDate():31})(e),s=(e=>{const[a,s]=e.split("-").map(Number);return a&&s?r(new Date(a,s-1,1),"LLL"):""})(e),t=[{header:"No",size:50,cell:({row:e,table:a})=>{const s=a.getState().pagination.pageSize;return a.getState().pagination.pageIndex*s+e.index+1}},{header:"Company Group",cell:({row:e})=>{var a,s;return c.jsx("div",{className:"flex flex-wrap gap-1",children:null==(s=null==(a=e.original)?void 0:a.company_group_names)?void 0:s.map((e,a)=>c.jsx(B,{variant:"outline",children:e},a))})},size:200},{header:"Company",accessorKey:"company_name",size:180},{header:"Driver",accessorKey:"driver_name",size:180},{header:"Total Days",size:120,cell:({row:e})=>`${e.original.total_days??0} days`},{header:"Total Hours",size:120,cell:({row:e})=>Y(e.original.total_hours)}];for(let i=1;i<=a;i++){const a=`${e}-${String(i).padStart(2,"0")}`;t.push({header:`${i} ${s}`,size:80,cell:({row:e})=>{const s=e.original.driving_hours.find(e=>(e.date||"").slice(0,10)===a);return Y(null==s?void 0:s.hour)}})}return t})(a.date);return c.jsxs("div",{className:"space-y-4",children:[c.jsx(O,{}),c.jsx(P,{page:a.page,limit:a.limit,columns:d,data:(null==i?void 0:i.data.system_driving_hours)??[],isLoading:n,totalPages:(null==i?void 0:i.data.paging.totalPages)??1})]})}export{q as component};
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.