@accounter/client
Version:
Accounter client application
1 lines • 12.5 kB
JavaScript
import{s as e}from"./dist-ypP48_Ax.js";import{i as t,o as n}from"./utils-CbS-oR5I.js";import{Qt as r,cn as i,r as a,ts as o,un as s,x as c}from"./error-handling-Bgq5bXpB.js";import{i as l,n as u}from"./routes-Cawu7UJi.js";import{Jt as d,Kt as f,X as p,Y as m,en as h,ht as g,it as _,n as v,nr as y,p as b,vt as x,xt as S}from"./common-DXImSOXZ.js";import{o as C,s as w}from"./select-CGkwaf8-.js";import{t as T}from"./funnel-BrJTCiKR.js";import{t as E}from"./button-DUNsVBiu.js";import{$c as D,Fl as O,Gc as k,Hc as A,Kc as j,Ml as M,Nl as N,Ul as P,Vc as F,Wc as I,Xc as L,jl as R,qc as z}from"./table-BMPR7vqs.js";import{t as B}from"./sub-DqkZLaZp.js";import{t as V}from"./MultiSelect-BBcjKzWr.js";import{t as H}from"./use-url-query-Bb8ddrDs.js";var U=e(R(),1),W=e(n(),1),G=()=>{let[{data:e,fetching:t,error:n},r]=o({query:c});n&&(console.error(`Error fetching business trips: ${n}`),a.error(`Error`,{description:`Unable to fetch business trips`}));let i=(0,W.useMemo)(()=>[...e?.allBusinessTrips??[]].sort((e,t)=>e.name>t.name?1:-1),[e]);return{fetching:t,refresh:()=>r(),businessTrips:i,selectableBusinessTrips:(0,W.useMemo)(()=>i.map(e=>({value:e.id,label:e.name})),[i])}},K=t(),q=[{value:i.AbsAmount,label:`Abs Amount`},{value:i.Amount,label:`Amount`},{value:i.Date,label:`Date`}],J=[{label:`All`,value:r.All},{label:`Income`,value:r.Income},{label:`Expense`,value:r.Expense}],Y=[{label:`Bank Deposit`,value:s.BankDeposit},{label:`Business Trip`,value:s.BusinessTrip},{label:`Common`,value:s.Common},{label:`Conversion`,value:s.Conversion},{label:`Credit Card Bank`,value:s.CreditcardBank},{label:`Dividend`,value:s.Dividend},{label:`Financial`,value:s.Financial},{label:`Foreign Securities`,value:s.ForeignSecurities},{label:`Internal Transfer`,value:s.Internal},{label:`Monthly VAT`,value:s.Vat},{label:`Salary`,value:s.Payroll}];function X({filter:e,setFilter:t,closeModal:n,withDefaultDateRange:a=!0}){let{userContext:o}=(0,W.useContext)(D),s=L({defaultValues:{byOwners:o?.context.adminBusinessId?[o.context.adminBusinessId]:void 0,sortBy:{field:i.Date,asc:!1},...a?{toAnyDate:P(new Date,`yyyy-MM-dd`),fromAnyDate:P(B(new Date,{years:1}),`yyyy-MM-dd`)}:{},...e}}),{control:c,handleSubmit:l,watch:u}=s,[h,v]=(0,W.useState)(e.sortBy?.asc??!1),[b,T]=(0,W.useState)(!!e.sortBy?.field),{selectableFinancialEntities:E,fetching:R}=g(),{selectableTags:H,fetching:U}=S(),{selectableBusinessTrips:X,fetching:Z}=G(),$=u(`sortBy.field`);(0,W.useEffect)(()=>{$&&!b?T(!0):!$&&b&&T(!1)},[$,b]);let ee=e=>{h!=null&&e.sortBy?.field&&(e.sortBy.asc=h),t(e),n()};function te(){t({}),v(!1),n()}return(0,K.jsxs)(K.Fragment,{children:[R?(0,K.jsx)(`div`,{children:`Loading...`}):(0,K.jsx)(`div`,{}),(0,K.jsx)(F,{...s,children:(0,K.jsxs)(`form`,{onSubmit:l(ee),children:[(0,K.jsxs)(f,{cols:2,children:[(0,K.jsx)(I,{name:`byOwners`,control:c,defaultValue:e.byOwners,render:({field:e})=>(0,K.jsxs)(k,{className:`h-min`,children:[(0,K.jsx)(j,{children:`Owners`}),(0,K.jsx)(A,{children:(0,K.jsx)(V,{...e,data:E,value:e.value??[],disabled:R,placeholder:`Scroll to see all options`,maxDropdownHeight:160,searchable:!0,withinPortal:!0})}),(0,K.jsx)(z,{})]})}),(0,K.jsx)(I,{name:`byBusinesses`,control:c,defaultValue:e.byBusinesses,render:({field:e})=>(0,K.jsxs)(k,{className:`h-min`,children:[(0,K.jsx)(j,{children:`Financial Entities`}),(0,K.jsx)(A,{children:(0,K.jsx)(V,{...e,data:E,value:e.value??[],disabled:R,placeholder:`Scroll to see all options`,maxDropdownHeight:160,searchable:!0,withinPortal:!0})}),(0,K.jsx)(z,{})]})}),(0,K.jsx)(I,{name:`byTags`,control:c,defaultValue:e.byTags,render:({field:e})=>(0,K.jsxs)(k,{className:`h-min`,children:[(0,K.jsx)(j,{children:`Tags`}),(0,K.jsx)(A,{children:(0,K.jsx)(V,{...e,data:H,itemComponent:p,value:e.value??[],disabled:U,placeholder:`Scroll to see all options`,maxDropdownHeight:160,searchable:!0,withinPortal:!0,filter:(e,t,n)=>n.label?.toLowerCase().includes(e.toLowerCase().trim())||n.description?.toLowerCase().includes(e.toLowerCase().trim())})}),(0,K.jsx)(z,{})]})}),(0,K.jsx)(I,{name:`fromAnyDate`,control:c,defaultValue:e.fromAnyDate,rules:{pattern:{value:y,message:`Date must be in format yyyy-mm-dd`}},render:({field:e,fieldState:t})=>(0,K.jsxs)(k,{className:`h-min`,children:[(0,K.jsx)(j,{htmlFor:`from-any-date`,children:`From Date`}),(0,K.jsx)(A,{children:(0,K.jsx)(_,{id:`from-any-date`,value:e.value??void 0,onChange:t=>{t!==e.value&&e.onChange(t)},"aria-invalid":!!t.error})}),(0,K.jsx)(z,{})]})}),(0,K.jsx)(I,{name:`toAnyDate`,control:c,defaultValue:e.toAnyDate,rules:{pattern:{value:y,message:`Date must be in format yyyy-mm-dd`}},render:({field:e,fieldState:t})=>(0,K.jsxs)(k,{className:`h-min`,children:[(0,K.jsx)(j,{htmlFor:`to-any-date`,children:`To Date`}),(0,K.jsx)(A,{children:(0,K.jsx)(_,{id:`to-any-date`,value:e.value??void 0,onChange:t=>{t!==e.value&&e.onChange(t)},"aria-invalid":!!t.error})}),(0,K.jsx)(z,{})]})}),(0,K.jsx)(I,{name:`chargesType`,control:c,defaultValue:e.chargesType,render:({field:e})=>(0,K.jsxs)(k,{className:`h-min`,children:[(0,K.jsx)(j,{children:`Income / Expense`}),(0,K.jsx)(A,{children:(0,K.jsx)(d,{...e,data:J,value:e.value??r.All,disabled:R,placeholder:`Filter income/expense`,maxDropdownHeight:160,withinPortal:!0})}),(0,K.jsx)(z,{})]})}),(0,K.jsx)(I,{name:`byChargeTypes`,control:c,defaultValue:e.byChargeTypes,render:({field:e})=>(0,K.jsxs)(k,{className:`h-min`,children:[(0,K.jsx)(j,{children:`Charge Type`}),(0,K.jsx)(A,{children:(0,K.jsx)(V,{...e,data:Y,value:e.value??[],placeholder:`All charge types`,maxDropdownHeight:160,searchable:!0,withinPortal:!0})}),(0,K.jsx)(z,{})]})}),(0,K.jsx)(I,{name:`byBusinessTrips`,control:c,defaultValue:e.byBusinessTrips,render:({field:e})=>(0,K.jsxs)(k,{className:`h-min`,children:[(0,K.jsx)(j,{children:`Business Trips`}),(0,K.jsx)(A,{children:(0,K.jsx)(V,{...e,data:X,value:e.value??[],disabled:Z,placeholder:`Scroll to see all options`,maxDropdownHeight:160,searchable:!0,withinPortal:!0})}),(0,K.jsx)(z,{})]})}),(0,K.jsx)(I,{name:`sortBy.field`,control:c,defaultValue:e.sortBy?.field??i.Date,render:({field:t})=>(0,K.jsxs)(k,{className:`h-min`,children:[(0,K.jsx)(j,{children:`Field to sort by`}),(0,K.jsx)(A,{children:(0,K.jsx)(d,{...t,data:q,placeholder:`Scroll to see all options`,maxDropdownHeight:160,searchable:!0,rightSectionProps:{style:{width:`5rem`}},withinPortal:!0,rightSection:(0,K.jsxs)(`div`,{className:`flex flex-row items-center gap-1`,children:[(0,K.jsx)(x,{defaultChecked:e.sortBy?.asc??!1,checked:h??!1,disabled:!b,onCheckedChange:v}),(0,K.jsx)(`span`,{className:`text-xs`,children:h?`ASC`:`DESC`})]})})}),(0,K.jsx)(z,{})]})}),(0,K.jsx)(I,{name:`accountantStatus`,control:c,defaultValue:e.accountantStatus,render:({field:e})=>(0,K.jsxs)(k,{className:`h-min`,children:[(0,K.jsx)(j,{children:`Accountant Status`}),(0,K.jsx)(A,{children:(0,K.jsx)(V,{...e,value:e.value??[],itemComponent:Q,data:Object.values(m),disabled:R,placeholder:`All`,maxDropdownHeight:160,withinPortal:!0})}),(0,K.jsx)(z,{})]})}),(0,K.jsx)(I,{name:`freeText`,control:c,rules:{minLength:{value:2,message:`Must be at least 2 characters`}},render:({field:e})=>(0,K.jsxs)(k,{className:`h-min`,children:[(0,K.jsx)(j,{children:`Free Text`}),(0,K.jsx)(A,{children:(0,K.jsx)(w,{...e,value:e.value??``})}),(0,K.jsx)(z,{})]})}),(0,K.jsxs)(`div`,{className:`flex flex-col gap-2 mt-4 rounded-lg border p-3 shadow-sm space-y-2`,children:[(0,K.jsx)(C,{children:`Missing Information:`}),(0,K.jsx)(I,{control:s.control,name:`withoutInvoice`,render:({field:t})=>(0,K.jsxs)(k,{className:`flex flex-row items-center justify-between`,children:[(0,K.jsx)(`div`,{className:`space-y-0.5`,children:(0,K.jsx)(j,{children:`Without Invoice`})}),(0,K.jsx)(A,{children:(0,K.jsx)(x,{defaultChecked:e.withoutInvoice??!1,onCheckedChange:t.onChange})})]})}),(0,K.jsx)(I,{control:s.control,name:`withoutReceipt`,render:({field:t})=>(0,K.jsxs)(k,{className:`flex flex-row items-center justify-between`,children:[(0,K.jsx)(`div`,{className:`space-y-0.5`,children:(0,K.jsx)(j,{children:`Without Receipts`})}),(0,K.jsx)(A,{children:(0,K.jsx)(x,{defaultChecked:e.withoutReceipt??!1,onCheckedChange:t.onChange})})]})}),(0,K.jsx)(I,{control:s.control,name:`withoutDocuments`,render:({field:t})=>(0,K.jsxs)(k,{className:`flex flex-row items-center justify-between`,children:[(0,K.jsx)(`div`,{className:`space-y-0.5`,children:(0,K.jsx)(j,{children:`Without Documents`})}),(0,K.jsx)(A,{children:(0,K.jsx)(x,{defaultChecked:e.withoutDocuments??!1,onCheckedChange:t.onChange})})]})}),(0,K.jsx)(I,{control:s.control,name:`withOpenDocuments`,render:({field:t})=>(0,K.jsxs)(k,{className:`flex flex-row items-center justify-between`,children:[(0,K.jsx)(`div`,{className:`space-y-0.5`,children:(0,K.jsx)(j,{children:`With Open Documents`})}),(0,K.jsx)(A,{children:(0,K.jsxs)(M,{children:[(0,K.jsx)(O,{children:(0,K.jsx)(x,{defaultChecked:e.withOpenDocuments??!1,onCheckedChange:t.onChange})}),(0,K.jsx)(N,{children:(0,K.jsx)(`p`,{children:`Show only charges with documents that are currently open`})})]})})]})}),(0,K.jsx)(I,{control:s.control,name:`withoutTransactions`,render:({field:t})=>(0,K.jsxs)(k,{className:`flex flex-row items-center justify-between`,children:[(0,K.jsx)(`div`,{className:`space-y-0.5`,children:(0,K.jsx)(j,{children:`Without Transactions`})}),(0,K.jsx)(A,{children:(0,K.jsx)(x,{defaultChecked:e.withoutTransactions??!1,onCheckedChange:t.onChange})})]})}),(0,K.jsx)(I,{control:s.control,name:`withMissingCounterparty`,render:({field:t})=>(0,K.jsxs)(k,{className:`flex flex-row items-center justify-between`,children:[(0,K.jsx)(`div`,{className:`space-y-0.5`,children:(0,K.jsx)(j,{children:`Missing Counterparty`})}),(0,K.jsx)(A,{children:(0,K.jsxs)(M,{children:[(0,K.jsx)(O,{children:(0,K.jsx)(x,{defaultChecked:e.withMissingCounterparty??!1,onCheckedChange:t.onChange})}),(0,K.jsx)(N,{children:(0,K.jsx)(`p`,{children:`Show charges with a transaction missing a business, or a document missing a creditor / debtor`})})]})})]})}),(0,K.jsx)(I,{control:s.control,name:`unbalanced`,render:({field:t})=>(0,K.jsxs)(k,{className:`flex flex-row items-center justify-between`,children:[(0,K.jsx)(`div`,{className:`space-y-0.5`,children:(0,K.jsx)(j,{children:`Unbalanced businesses`})}),(0,K.jsx)(A,{children:(0,K.jsx)(x,{defaultChecked:e.unbalanced??!1,onCheckedChange:t.onChange})})]})}),(0,K.jsx)(I,{control:s.control,name:`withoutLedger`,render:({field:t})=>(0,K.jsxs)(k,{className:`flex flex-row items-center justify-between`,children:[(0,K.jsx)(`div`,{className:`space-y-0.5`,children:(0,K.jsx)(j,{children:`Without ledger`})}),(0,K.jsx)(A,{children:(0,K.jsx)(x,{defaultChecked:e.withoutLedger??!1,onCheckedChange:t.onChange})})]})})]})]}),(0,K.jsxs)(`div`,{className:`flex justify-center mt-5 gap-3`,children:[(0,K.jsx)(`button`,{type:`submit`,disabled:R||U,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,K.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:te,children:`Clear`}),(0,K.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 Z({filter:e={},setFilter:t,activePage:n,setPage:r,totalPages:i=1,initiallyOpened:a=!1,withDefaultDateRange:o=!0}){let[s,c]=(0,W.useState)(a),[d,f]=(0,W.useState)(!l(e)),{get:p,set:m}=H();(0,W.useEffect)(()=>{let e=n>0?n.toFixed(0):null;e!==p(`page`)&&m(`page`,e)},[n,p,m]),(0,W.useEffect)(()=>{let t=u(e);t!==p(`chargesFilters`)&&(m(`chargesFilters`,t),m(`page`),r(0))},[e,p,m,r]);let g=(0,W.useCallback)(n=>{(0,U.default)(n,e)||(t(n),f(!l(n)))},[e,t]);return(0,K.jsxs)(`div`,{className:`flex flex-row gap-5 items-center`,children:[(0,K.jsx)(b,{opened:s,onClose:()=>c(!1),content:(0,K.jsx)(X,{filter:e,setFilter:g,closeModal:()=>c(!1),withDefaultDateRange:o}),modalSize:`xl`}),i>1&&(0,K.jsx)(v,{className:`flex-fit w-fit mx-0`,currentPageIndex:n,onChange:r,totalPages:i}),(0,K.jsx)(h,{inline:!0,size:16,disabled:!d,children:(0,K.jsx)(E,{variant:`outline`,size:`icon`,className:`size-7.5`,onClick:()=>c(!0),children:(0,K.jsx)(T,{className:`size-5`})})})]})}var Q=(0,W.forwardRef)(({bgColor:e,label:t,color:n,icon:r,...i},a)=>(0,K.jsxs)(E,{ref:a,...i,variant:`ghost`,size:`sm`,className:`h-7 p-0 ${e}`,title:t,children:[(0,K.jsx)(r,{className:`h-3.5 w-3.5 ${n}`}),t]}));Q.displayName=`AccountantStatusMultiSelectItem`;export{J as n,Z as t};