@accounter/client
Version:
Accounter client application
1 lines • 16.2 kB
JavaScript
import{s as e}from"./dist-C51EwTaa.js";import{i as t,o as n}from"./utils-DdVdMk8X.js";import{A as r,Bi as i,Hi as a,Ii as o,Li as s,Lo as c,Ri as l,Ui as u,Vi as d,Wi as f,r as p,zi as m}from"./error-handling-Dpfd9svJ.js";import{n as h}from"./routes-DUvpW9-n.js";import{ft as g}from"./select-CrsvQyhZ.js";import{t as _}from"./funnel-BFbxpUGW.js";import{t as v}from"./button-Dzp2INW0.js";import{K as y,Kt as b,Lt as x,U as S,V as C,W as w,wt as T}from"./table--bF0wbxq.js";import{t as E}from"./MultiSelect-HTEIN3wg.js";import{Ft as D,P as O,Qt as k,Zt as A,cn as j,nt as M,q as N}from"./index-CL8-JoMZ.js";import{t as P}from"./use-url-query-BCNbSvLg.js";import{t as F}from"./page-layout-DoLDsSrs.js";var I=e(n(),1),L=e(T(),1),R=t();function z(){let e=new Date;return{fromDate:x(e,`yyyy-MM-dd`),toDate:x(b(e),`yyyy-MM-dd`)}}function B({filter:e,setFilter:t,closeModal:n}){let{control:i,handleSubmit:a,setValue:o}=S({defaultValues:{...e}}),[s,l]=(0,I.useState)([]),{userContext:u}=(0,I.useContext)(y),[{data:d,fetching:f,error:m},h]=c({query:r,variables:{employerId:u?.context.adminBusinessId??``},pause:!0});(0,I.useEffect)(()=>{h()},[u?.context.adminBusinessId,h]),(0,I.useEffect)(()=>{m&&p.error(`Error`,{description:`Oh no!, we have an error fetching employees! 🤥`})},[m]);let g=e=>{e.employeeIDs?.length===0&&delete e.employeeIDs,t(e),n()};function _(){t({...z()}),n()}(0,I.useEffect)(()=>{d?.employeesByEmployerId.length&&l(d.employeesByEmployerId.filter(e=>!e.name.toLocaleLowerCase().includes(`batched`)).map(e=>({value:e.id,label:e.name})).sort((e,t)=>e.label>t.label?1:-1))},[d,l]);function v([e,t]){t&&o(`toDate`,x(new Date(t.getFullYear(),t.getMonth()+1,0),`yyyy-MM-dd`)),e&&o(`fromDate`,x(new Date(e.getFullYear(),e.getMonth(),1),`yyyy-MM-dd`))}let b=z();return(0,R.jsxs)(R.Fragment,{children:[f?(0,R.jsx)(`div`,{children:`Loading...`}):(0,R.jsx)(`div`,{}),(0,R.jsxs)(`form`,{onSubmit:a(g),children:[(0,R.jsx)(D,{type:`range`,numberOfColumns:2,defaultValue:[new Date(e?.fromDate??b.fromDate),new Date(e?.toDate??b.toDate)],defaultDate:new Date(e?.fromDate??b.fromDate),onChange:v,popoverProps:{withinPortal:!0}}),(0,R.jsx)(C,{name:`employeeIDs`,control:i,defaultValue:e.employeeIDs,render:({field:e,fieldState:t})=>(0,R.jsx)(E,{...e,data:s,value:e.value??[],disabled:f,label:`Employees`,placeholder:`Scroll to see all options`,maxDropdownHeight:160,searchable:!0,error:t.error?.message})}),(0,R.jsxs)(`div`,{className:`flex justify-center mt-5 gap-3`,children:[(0,R.jsx)(`button`,{type:`submit`,disabled:f,className:`text-white bg-indigo-500 border-0 py-2 px-8 focus:outline-hidden hover:bg-indigo-600 rounded-sm text-lg`,children:`Filter`}),(0,R.jsx)(`button`,{type:`button`,className:`text-white bg-orange-500 border-0 py-2 px-8 focus:outline-hidden hover:bg-orange-600 rounded-sm text-lg`,onClick:_,children:`Clear`}),(0,R.jsx)(`button`,{type:`button`,className:`text-white bg-rose-500 border-0 py-2 px-8 focus:outline-hidden hover:bg-rose-600 rounded-sm text-lg`,onClick:n,children:`Cancel`})]})]})]})}function V({filter:e,setFilter:t}){let[n,r]=(0,I.useState)(!1),{get:i,set:a}=P();return(0,I.useEffect)(()=>{let t=h(e);t!==i(`salariesFilters`)&&a(`salariesFilters`,t)},[e,i,a]),(0,R.jsxs)(`div`,{className:`flex flex-row gap-5 items-center`,children:[(0,R.jsx)(O,{opened:n,onClose:()=>r(!1),content:(0,R.jsx)(B,{filter:e,setFilter:(0,I.useCallback)(n=>{(0,L.default)(n,e)||t(n)},[e,t]),closeModal:()=>r(!1)}),modalSize:`xl`}),(0,R.jsx)(v,{variant:`outline`,size:`icon`,className:`size-7.5`,onClick:()=>r(!0),children:(0,R.jsx)(_,{className:`size-5`})})]})}var H=({month:e,setInsertSalaryRecord:t})=>(0,R.jsx)(`tr`,{tabIndex:0,className:`h-16 rounded-sm`,children:(0,R.jsx)(`td`,{colSpan:100,children:(0,R.jsxs)(`div`,{className:`flex justify-between pl-5`,children:[(0,R.jsx)(`p`,{className:`text-lg font-bold text-gray-800`,children:x(new Date(e),`MMMM yyyy`)}),(0,R.jsx)(`div`,{className:`flex items-center`,children:(0,R.jsx)(`div`,{className:`flex flex-col`,children:(0,R.jsx)(A,{onClick:t})})})]})})}),U=({data:e})=>{let{employee:t,month:n}=w(s,e),r=x(new Date(n),`MMMM yyyy`);return(0,R.jsx)(`td`,{className:``,children:(0,R.jsx)(`div`,{className:`flex items-center pl-5`,children:(0,R.jsxs)(`div`,{className:`flex flex-col`,children:[(0,R.jsx)(`p`,{className:`text-base font-bold text-gray-800`,children:t?.name}),(0,R.jsx)(`p`,{className:`text-base font-medium text-gray-800`,children:r})]})})})},W=({data:e})=>{let{pensionEmployeeAmount:t,pensionEmployeePercentage:n,pensionEmployerAmount:r,pensionEmployerPercentage:i,compensationsAmount:a,compensationsPercentage:o,pensionFund:s,trainingFund:c,trainingFundEmployeeAmount:l,trainingFundEmployeePercentage:u,trainingFundEmployerAmount:d,trainingFundEmployerPercentage:f}=w(m,e);return(0,R.jsx)(`td`,{className:`pl-5`,children:(0,R.jsx)(`div`,{className:`flex items-center`,children:(0,R.jsxs)(`div`,{className:`flex flex-col`,children:[(0,R.jsx)(`p`,{className:`text-md font-bold text-gray-800`,children:`Pension Fund`}),(0,R.jsx)(`p`,{className:`text-md font-medium text-gray-800`,children:s?.name}),!!t?.raw&&(0,R.jsxs)(`div`,{className:`flex justify-between`,children:[(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:`Employee Part:`}),(0,R.jsxs)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:[t?.formatted,n&&` (${n}%)`]})]}),!!r?.raw&&(0,R.jsxs)(`div`,{className:`flex justify-between`,children:[(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:`Employer Part:`}),(0,R.jsxs)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:[r?.formatted,i&&` (${i}%)`]})]}),!!a?.raw&&(0,R.jsxs)(`div`,{className:`flex justify-between`,children:[(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:`Compensations Amount:`}),(0,R.jsxs)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:[a?.formatted,o&&` (${o}%)`]})]}),(0,R.jsx)(`p`,{className:`text-md font-bold text-gray-800 mt-2`,children:`Training Fund`}),(0,R.jsx)(`p`,{className:`text-md font-medium text-gray-800`,children:c?.name}),!!l?.raw&&(0,R.jsxs)(`div`,{className:`flex justify-between`,children:[(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:`Employee Part:`}),(0,R.jsxs)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:[l?.formatted,u&&` (${u}%)`]})]}),!!d?.raw&&(0,R.jsxs)(`div`,{className:`flex justify-between`,children:[(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:`Employer Part:`}),(0,R.jsxs)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:[d?.formatted,f&&` (${f}%)`]})]})]})})})},G=({data:e})=>{let{healthInsuranceAmount:t,socialSecurityEmployeeAmount:n,socialSecurityEmployerAmount:r,incomeTaxAmount:a,notionalExpense:o}=w(i,e);return(0,R.jsx)(`td`,{className:`pl-5`,children:(0,R.jsx)(`div`,{className:`flex items-center pl-5`,children:(0,R.jsxs)(`div`,{className:`flex flex-col`,children:[(!!n||!!r)&&(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`p`,{className:`text-md font-bold text-gray-800`,children:`Social Security`}),(0,R.jsxs)(`div`,{className:`flex justify-between`,children:[(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:`Employee Part:`}),(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:n?.formatted})]}),(0,R.jsx)(`p`,{className:`text-md font-bold text-gray-800 mt-2`,children:`Pension Fund`}),(0,R.jsxs)(`div`,{className:`flex justify-between`,children:[(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:`Employer Part:`}),(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:r?.formatted})]})]}),!!t?.raw&&(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`p`,{className:`text-md font-bold text-gray-800 mt-2`,children:`Health Insurance`}),(0,R.jsxs)(`div`,{className:`flex justify-between`,children:[(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:`Amount:`}),(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:t?.formatted})]})]}),(!!a?.raw||!!o?.raw)&&(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`p`,{className:`text-md font-bold text-gray-800 mt-2`,children:`Taxes`}),(0,R.jsxs)(`div`,{className:`flex justify-between`,children:[(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:`Income Tax:`}),(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:a?.formatted})]}),(0,R.jsxs)(`div`,{className:`flex justify-between`,children:[(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:`Notional Expense:`}),(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:o?.formatted})]})]})]})})})},K=({data:e})=>{let{baseAmount:t,directAmount:n,globalAdditionalHoursAmount:r,bonus:i,gift:a,recovery:o,vacationTakeout:s}=w(d,e);return(0,R.jsx)(`td`,{className:`pl-24`,children:(0,R.jsx)(`div`,{className:`flex items-center`,children:(0,R.jsxs)(`div`,{className:`flex flex-col`,children:[(0,R.jsxs)(`div`,{className:`flex justify-between`,children:[(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:`Base Amount:`}),(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:t?.formatted})]}),(0,R.jsxs)(`div`,{className:`flex justify-between mb-2`,children:[(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:`Global Extra Hours:`}),(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:r?.formatted})]}),!!i?.raw&&(0,R.jsxs)(`div`,{className:`flex justify-between`,children:[(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:`Bonus:`}),(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:i?.formatted})]}),!!a?.raw&&(0,R.jsxs)(`div`,{className:`flex justify-between`,children:[(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:`Gift:`}),(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:a?.formatted})]}),!!o?.raw&&(0,R.jsxs)(`div`,{className:`flex justify-between`,children:[(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:`Recovery:`}),(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:o?.formatted})]}),!!s?.raw&&(0,R.jsxs)(`div`,{className:`flex justify-between`,children:[(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:`Vacation Takeout:`}),(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:s?.formatted})]}),(0,R.jsxs)(`div`,{className:`flex justify-between mt-2`,children:[(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:`Direct Amount:`}),(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:n?.formatted})]})]})})})},q=({data:e})=>{let{vacationDays:t,workDays:n,sicknessDays:r}=w(a,e),{added:i,taken:o,balance:s}=t??{},{balance:c}=r??{};return(0,R.jsx)(`td`,{className:`pl-5`,children:(0,R.jsx)(`div`,{className:`flex items-center`,children:(0,R.jsxs)(`div`,{className:`flex flex-col`,children:[!!n&&(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`p`,{className:`text-md leading-none text-gray-800`,children:`Work Days:`}),(0,R.jsx)(`div`,{className:`flex justify-between`,children:(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:n})})]}),(!!i||!!o||!!s)&&(0,R.jsxs)(`div`,{className:`flex flex-col`,children:[(0,R.jsx)(`p`,{className:`text-md leading-none text-gray-800 mt-2`,children:`Vacation Days:`}),!!i&&(0,R.jsxs)(`div`,{className:`flex justify-between`,children:[(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:`Added:`}),(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:i})]}),!!o&&(0,R.jsxs)(`div`,{className:`flex justify-between`,children:[(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:`Taken:`}),(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:o})]}),!!s&&(0,R.jsxs)(`div`,{className:`flex justify-between`,children:[(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:`Balance:`}),(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:s})]})]}),!!c&&(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`p`,{className:`text-md leading-none text-gray-800 mt-2`,children:`Sickness Days:`}),(0,R.jsx)(`div`,{className:`flex justify-between`,children:(0,R.jsx)(`p`,{className:`text-sm leading-none text-gray-600 ml-2`,children:c})})]})]})})})},J=({setEditSalaryRecord:e,data:t})=>{let n=w(l,t);return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsxs)(`tr`,{tabIndex:0,className:`h-16 border border-gray-100 hover:bg-gray-100 rounded-sm`,children:[(0,R.jsx)(U,{data:n}),(0,R.jsx)(K,{data:n}),(0,R.jsx)(W,{data:n}),(0,R.jsx)(G,{data:n}),(0,R.jsx)(q,{data:n}),(0,R.jsx)(`td`,{className:`pl-2`,children:(0,R.jsx)(`div`,{className:`flex items-center`,children:(0,R.jsx)(`div`,{className:`flex flex-col`,children:(0,R.jsx)(k,{onClick:e})})})})]}),(0,R.jsx)(`tr`,{className:`h-3`})]})},Y=({setEditSalaryRecord:e,setInsertSalaryRecord:t,data:n})=>{let r=n?.map(e=>w(o,e))??[];return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`tr`,{className:`h-3`}),(0,R.jsx)(H,{month:r[0].month,setInsertSalaryRecord:t}),(0,R.jsx)(`tr`,{className:`h-3`}),r.map(t=>(0,R.jsx)(J,{data:t,setEditSalaryRecord:()=>e(t.employee?.id)},`${t.month} ${t.employee?.id}`))]})},X=({setEditSalaryRecord:e,setInsertSalaryRecord:t,data:n})=>{let r=(0,I.useMemo)(()=>{let e=n?.map(e=>w(u,e))??[],t=new Map;return e.map(e=>{let{month:n}=e,r=t.get(n)??[];t.set(n,[...r,e])}),t},[n]);return(0,R.jsx)(`div`,{className:`sm:px-6 w-full`,children:(0,R.jsxs)(`div`,{className:`bg-white py-4 md:py-7 px-4 md:px-8 xl:px-10`,children:[(0,R.jsxs)(`div`,{className:`sm:flex items-center justify-between`,children:[(0,R.jsxs)(`div`,{className:`flex items-center`,children:[(0,R.jsx)(`div`,{className:`rounded-full focus:outline-hidden focus:ring-2 focus:bg-indigo-50 focus:ring-indigo-800`,children:(0,R.jsx)(`div`,{className:`py-2 px-8 bg-indigo-100 text-indigo-700 rounded-full`,children:(0,R.jsx)(`p`,{children:`All`})})}),(0,R.jsx)(`div`,{className:`rounded-full focus:outline-hidden focus:ring-2 focus:bg-indigo-50 focus:ring-indigo-800 ml-4 sm:ml-8`,children:(0,R.jsx)(`div`,{className:`py-2 px-8 text-gray-600 hover:text-indigo-700 hover:bg-indigo-100 rounded-full `,children:(0,R.jsx)(`p`,{children:`Done`})})}),(0,R.jsx)(`div`,{className:`rounded-full focus:outline-hidden focus:ring-2 focus:bg-indigo-50 focus:ring-indigo-800 ml-4 sm:ml-8`,children:(0,R.jsx)(`div`,{className:`py-2 px-8 text-gray-600 hover:text-indigo-700 hover:bg-indigo-100 rounded-full `,children:(0,R.jsx)(`p`,{children:`Pending`})})})]}),(0,R.jsx)(`button`,{className:`focus:ring-2 focus:ring-offset-2 focus:ring-indigo-600 mt-4 sm:mt-0 inline-flex items-start justify-start px-6 py-3 bg-indigo-700 hover:bg-indigo-600 focus:outline-hidden rounded-sm`,children:(0,R.jsx)(`p`,{className:`text-sm font-medium leading-none text-white`,children:`Add Task`})})]}),(0,R.jsx)(`div`,{className:`mt-7 overflow-x-auto`,children:(0,R.jsx)(`table`,{className:`w-full whitespace-nowrap`,children:(0,R.jsx)(`tbody`,{children:Array.from(r).map(([n,r])=>(0,R.jsx)(Y,{data:r,setEditSalaryRecord:t=>e(t?{month:n,employeeId:t}:void 0),setInsertSalaryRecord:()=>t({month:n})},n))})})})]})})},Z=()=>{let{setFiltersContext:e}=(0,I.useContext)(j),[t,n]=(0,I.useState)(void 0),[r,i]=(0,I.useState)(void 0),{get:a}=P(),[o,s]=(0,I.useState)(a(`salariesFilters`)?JSON.parse(decodeURIComponent(a(`salariesFilters`))):{...z()}),[{data:l,fetching:u}]=c({query:f,variables:{...o}});return(0,I.useEffect)(()=>{e((0,R.jsxs)(`div`,{className:`flex flex-row gap-x-5`,children:[(0,R.jsx)(V,{filter:o,setFilter:s}),(0,R.jsx)(A,{variant:`default`,onClick:()=>i({})})]}))},[l,u,o,e,s]),(0,R.jsxs)(F,{title:`Salaries`,description:`View and manage salaries of employees.`,children:[u?(0,R.jsx)(g,{className:`h-10 w-10 animate-spin mr-2 self-center`}):(0,R.jsx)(X,{setEditSalaryRecord:n,setInsertSalaryRecord:i,data:l?.salaryRecordsByDates}),(0,R.jsx)(M,{recordVariables:t,onDone:()=>n(void 0)}),r&&(0,R.jsx)(N,{insertSalaryRecordParams:r,setInsertSalaryRecord:i})]})};export{Z as Salaries};