@accounter/client
Version:
Accounter client application
2 lines • 12.2 kB
JavaScript
import{s as e}from"./dist-ypP48_Ax.js";import{i as t,o as n}from"./utils-CbS-oR5I.js";import{$n as r,Cr as i,Ct as a,Jt as o,Rt as s,dt as c,f as l,or as u,ot as d,p as f,rn as p,rr as m,wr as h,yt as g}from"./common-CXB0UgWw.js";import{dt as _,ft as v}from"./select-DrAHsHyM.js";import{c as y}from"./separator-CQBUMn7G.js";import{t as b}from"./funnel-CtGZVesZ.js";import{t as x}from"./loader-circle-CZACSY-b.js";import{i as S,n as C}from"./routes-4W-duEv9.js";import{t as w}from"./button-DUNsVBiu.js";import{Gc as T,Hc as E,Kc as D,Pl as O,Vc as k,Wc as A,Zc as j,el as M,nl as N,ol as P,qc as F}from"./table-Dje35oxp.js";import{In as I,Xa as L,Za as R,us as z}from"./graphql-BIob9ctl.js";import{t as B}from"./MultiSelect-Dob1iGPK.js";import{t as V}from"./use-url-query-C3m3Z87n.js";import{t as H}from"./business-extended-info-B_hJ4-O-.js";import{t as U}from"./page-layout-YKSXEkhJ.js";var W=e(n(),1),G=e(O(),1),K=t();function q({filter:e,setFilter:t,closeModal:n}){let r=j({defaultValues:{...e}}),{control:i,handleSubmit:a}=r,{selectableBusinesses:o,fetching:s}=c(),{selectableAdminBusinesses:f,fetching:p,soleAdminBusinessId:m}=l(),{userContext:h}=(0,W.useContext)(N);(0,W.useEffect)(()=>{m&&r.setValue(`ownerIds`,[m])},[m,r]);let _=e=>{e.fromDate?.trim()===``&&(e.fromDate=void 0),e.toDate?.trim()===``&&(e.toDate=void 0),t(e),n()};function v(){t({}),n()}return(0,K.jsxs)(K.Fragment,{children:[s?(0,K.jsx)(`div`,{children:`Loading...`}):(0,K.jsx)(`div`,{}),(0,K.jsx)(k,{...r,children:(0,K.jsxs)(`form`,{onSubmit:a(_),className:`space-y-2`,children:[(0,K.jsx)(A,{name:`ownerIds`,control:i,defaultValue:void 0,render:({field:e,fieldState:t})=>(0,K.jsxs)(T,{children:[(0,K.jsx)(D,{children:`Owners`}),(0,K.jsx)(E,{children:(0,K.jsx)(B,{...e,data:f,value:m?[m]:e.value??(h?.context.adminBusinessId?[h?.context.adminBusinessId]:void 0),disabled:p||!!m,placeholder:`Scroll to see all options`,maxDropdownHeight:160,searchable:!0,error:t.error?.message})}),(0,K.jsx)(F,{})]})}),(0,K.jsx)(A,{name:`businessIDs`,control:i,defaultValue:void 0,render:({field:e,fieldState:t})=>(0,K.jsxs)(T,{children:[(0,K.jsx)(D,{children:`Businesses`}),(0,K.jsx)(E,{children:(0,K.jsx)(B,{...e,data:o,value:e.value??void 0,disabled:s,placeholder:`Scroll to see all options`,maxDropdownHeight:160,searchable:!0,error:t.error?.message})}),(0,K.jsx)(F,{})]})}),(0,K.jsx)(A,{name:`fromDate`,control:i,defaultValue:e.fromDate,rules:{required:`Required`,pattern:{value:u,message:`Date must be in format yyyy-mm-dd`}},render:({field:e,fieldState:t})=>(0,K.jsxs)(T,{children:[(0,K.jsx)(D,{htmlFor:`trial-balance-from-date`,children:`From Date`}),(0,K.jsx)(E,{children:(0,K.jsx)(d,{id:`trial-balance-from-date`,onChange:t=>{t!==e.value&&e.onChange(t)},value:e.value??void 0,required:!0,"aria-invalid":!!t.error})}),(0,K.jsx)(F,{})]})}),(0,K.jsx)(A,{name:`toDate`,control:i,defaultValue:e.toDate,rules:{pattern:{value:u,message:`Date must be in format yyyy-mm-dd`}},render:({field:e,fieldState:t})=>(0,K.jsxs)(T,{children:[(0,K.jsx)(D,{htmlFor:`trial-balance-to-date`,children:`To Date`}),(0,K.jsx)(E,{children:(0,K.jsx)(d,{id:`trial-balance-to-date`,onChange:t=>{t!==e.value&&e.onChange(t)},value:e.value??void 0,required:!0,"aria-invalid":!!t.error})}),(0,K.jsx)(F,{})]})}),(0,K.jsx)(A,{name:`isShowZeroedAccounts`,control:i,render:({field:t})=>(0,K.jsxs)(T,{className:`flex flex-row items-center justify-between rounded-lg border p-3 shadow-sm`,children:[(0,K.jsx)(`div`,{className:`space-y-0.5`,children:(0,K.jsx)(D,{children:`Show zeroed accounts`})}),(0,K.jsxs)(`div`,{className:`flex flex-row items-center gap-1`,children:[(0,K.jsx)(E,{children:(0,K.jsx)(g,{defaultChecked:e.isShowZeroedAccounts??!1,onCheckedChange:t.onChange,checked:t.value===!0})}),(0,K.jsx)(`span`,{children:t.value?`show`:`remove`})]})]})}),(0,K.jsxs)(`div`,{className:`flex justify-center mt-5 gap-3`,children:[(0,K.jsx)(`button`,{type:`submit`,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:v,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 J({filter:e,setFilter:t}){let[n,r]=(0,W.useState)(!1),[i,a]=(0,W.useState)(!S(e)),{get:o,set:s}=V();function c(e){return Object.entries(e??{}).filter(([e,t])=>t!==void 0&&Array.isArray(t)&&t.length>0).length>0}function l(n){(0,G.default)(n,e)||(t(n),a(c(n)))}return(0,W.useEffect)(()=>{let t=C(e);t!==o(`trialBalanceReportFilters`)&&s(`trialBalanceReportFilters`,t)},[e,o,s]),(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(f,{opened:n,onClose:()=>r(!1),content:(0,K.jsx)(q,{filter:e,setFilter:l,closeModal:()=>r(!1)})}),(0,K.jsx)(p,{inline:!0,size:16,disabled:!i,children:(0,K.jsx)(w,{variant:`outline`,onClick:()=>r(!0),className:`p-2`,children:(0,K.jsx)(b,{size:20})})})]})}var Y=({data:e,fromDate:t,toDate:n})=>{let r=(0,W.useCallback)(async()=>({fileContent:X(e),fileName:`trial_balance_report${t?`_${t}`:``}${n?`_${n}`:``}`}),[e,t,n]);return(0,K.jsx)(s,{createFileVariables:r})},X=e=>{let t=``;t+=`Sort Code,Account Name,Debit,Credit,Balance\r
`;for(let[n,r]of Object.entries(e)){let e=Z(n,r);t+=e}return t+=`Report total:,,${Object.values(e).reduce((e,t)=>e+t.totalDebit,0)},${Object.values(e).reduce((e,t)=>e+t.totalCredit,0)},${Object.values(e).reduce((e,t)=>e+t.sum,0)}\r\n`,t};function Z(e,t){let n=``;return Object.values(t.sortCodes).sort((e,t)=>e.key-t.key).map(e=>{let t=Q(e);n+=t}),n+=`${e.replaceAll(`0`,`*`)},Group Total:,${t.totalDebit??``},${t.totalCredit??``},${t.sum}\r\n`,n}function Q(e){let t=``;t+=`${e.name}\r\n`,e.records.sort((e,t)=>e.business.name.localeCompare(t.business.name)).map(n=>{let r=n?.total?.raw??0,i=n?.debit?.raw??0,a=n?.credit?.raw??0,o=`${e.key},${n.business.name?`"${$(n.business.name)}"`:``},${i?n?.debit?.raw:void 0},${a?n?.credit?.raw:void 0},${r>.001||r<-.001?n?.total?.raw??``:``}\r\n`;t+=o});let n=`${e.key},Group total:,${e.totalDebit??``},${e.totalCredit??``},${e.sum}\r\n`;t+=n;let r=e.debit?`,,,Total Debit Balances:,${e.debit}\r\n`:``;t+=r;let i=e.credit?`,,,Total Credit Balances:,${e.credit}\r\n`:``;return t+=i,t}function $(e){return e.replace(/"/g,`""`)}var ee=({record:e,sortCodeKey:t,filter:n,isAllOpened:r})=>{let[o,s]=(0,W.useState)(r),c=e?.total?.raw??0,l=e?.debit?.raw??0,u=e?.credit?.raw??0;return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(`tr`,{children:[(0,K.jsx)(`td`,{children:t}),(0,K.jsx)(`td`,{children:e.business.id}),(0,K.jsx)(`td`,{children:e.business.name??void 0}),(0,K.jsx)(`td`,{children:l?e?.debit?.formatted:void 0}),(0,K.jsx)(`td`,{children:u?e?.credit?.formatted:void 0}),(0,K.jsx)(`td`,{children:(c>.001||c<-.001)&&(0,K.jsx)(P,{color:c>0?`green`:`red`,children:e?.total?.formatted})}),(0,K.jsx)(`td`,{children:(0,K.jsx)(a,{content:`Detailed records`,children:(0,K.jsx)(w,{variant:`outline`,size:`icon`,className:`size-7.5`,onClick:()=>s(e=>!e),children:o||r?(0,K.jsx)(h,{className:`size-5`}):(0,K.jsx)(i,{className:`size-5`})})})})]},e.business.id),(o||r)&&(0,K.jsx)(`tr`,{children:(0,K.jsx)(`td`,{colSpan:7,children:(0,K.jsx)(H,{businessID:e.business?.id,filter:n})})})]})},te=({sortCode:e,filter:t,isAllOpened:n})=>e.records.length>0?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`tr`,{children:(0,K.jsx)(`td`,{colSpan:7,children:(0,K.jsx)(`span`,{className:`font-bold`,children:e.name})})}),e.records.sort((e,t)=>e.business.name.localeCompare(t.business.name)).map(r=>(0,K.jsx)(ee,{record:r,sortCodeKey:e.key,filter:t,isAllOpened:n},r.business.id)),(0,K.jsx)(`tr`,{className:`bg-gray-100`,children:e.records.length>1?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`td`,{colSpan:2,children:`Group total:`}),(0,K.jsx)(`td`,{colSpan:1,children:e.key}),(0,K.jsx)(`td`,{colSpan:1,children:!!e.totalDebit&&m(e.totalDebit,I.Ils)}),(0,K.jsx)(`td`,{colSpan:1,children:!!e.totalCredit&&m(e.totalCredit,I.Ils)}),(0,K.jsxs)(`td`,{colSpan:1,children:[(0,K.jsx)(P,{c:e.sum>0?`green`:e.sum<0?`red`:void 0,children:m(e.sum,I.Ils)}),!!e.debit&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`br`,{}),`Total Debit Balances: `,m(e.debit,I.Ils)]}),!!e.credit&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`br`,{}),`Total Credit Balances: `,m(e.credit,I.Ils)]})]})]}):void 0})]}):null,ne=({group:e,data:t,filter:n,isAllOpened:r})=>(0,K.jsxs)(K.Fragment,{children:[Object.values(t.sortCodes).sort((e,t)=>e.key-t.key).map((e,t)=>(0,K.jsx)(te,{sortCode:e,filter:n,isAllOpened:r},`${e.key} ${t}`)),(0,K.jsxs)(`tr`,{className:`bg-gray-100`,children:[(0,K.jsx)(`td`,{colSpan:2,children:`Group total:`}),(0,K.jsx)(`td`,{colSpan:1,children:e.replaceAll(`0`,`*`)}),(0,K.jsx)(`td`,{colSpan:1,children:!!t.totalDebit&&m(t.totalDebit,I.Ils)}),(0,K.jsx)(`td`,{colSpan:1,children:!!t.totalCredit&&m(t.totalCredit,I.Ils)}),(0,K.jsx)(`td`,{colSpan:1,children:(0,K.jsx)(P,{fw:700,c:t.sum>0?`green`:t.sum<0?`red`:void 0,children:m(t.sum,I.Ils)})})]},`group`+e)]});function re(e){return Math.floor(e/100)*100}var ie=({data:e,filter:t,isAllOpened:n})=>{let{businessTransactionsSum:i}=M(R,e),a=(0,W.useMemo)(()=>{let e={};for(let n of i){n.business.sortCode??={id:`-999`,key:-999,name:`Misc`};let r=!n.total.raw||n.total.raw<.001&&n.total.raw>-.001;if(!t.isShowZeroedAccounts&&r)continue;let i=re(n.business.sortCode.key);e[i]??={sortCodes:{},totalCredit:0,totalDebit:0,credit:0,debit:0,sum:0};let a=e[i];a.sortCodes[n.business.sortCode.key]??={...n.business.sortCode,totalCredit:0,totalDebit:0,records:[],credit:0,debit:0,sum:0};let o=a.sortCodes[n.business.sortCode.key];o.totalCredit+=n.credit.raw,o.totalDebit+=n.debit.raw,o.sum+=n.total.raw,a.totalCredit+=n.credit.raw,a.totalDebit+=n.debit.raw,a.sum+=n.total.raw,n.total.raw>0?(o.credit+=n.total.raw,a.credit+=n.total.raw):(o.debit+=n.total.raw,a.debit+=n.total.raw),o.records.push(n)}return e},[i,t.isShowZeroedAccounts]);return(0,K.jsxs)(o,{highlightOnHover:!0,children:[(0,K.jsx)(`thead`,{style:{position:`sticky`,top:0,zIndex:20},children:(0,K.jsxs)(`tr`,{className:`bg-gray-300`,children:[(0,K.jsx)(`th`,{children:`Sort Code`}),(0,K.jsx)(`th`,{children:`Account`}),(0,K.jsx)(`th`,{children:`Account Name`}),(0,K.jsx)(`th`,{children:`Total Debit`}),(0,K.jsx)(`th`,{children:`Total Credit`}),(0,K.jsx)(`th`,{children:`Balance`}),(0,K.jsx)(`th`,{children:(0,K.jsx)(Y,{data:a,fromDate:t.fromDate??void 0,toDate:t.toDate??void 0})})]})}),(0,K.jsxs)(`tbody`,{children:[Object.entries(a).map(([e,r])=>(0,K.jsx)(ne,{data:r,group:e,filter:t,isAllOpened:n},e)),(0,K.jsxs)(`tr`,{className:`bg-gray-100`,children:[(0,K.jsx)(`td`,{colSpan:2,children:`Report total:`}),(0,K.jsx)(`td`,{}),(0,K.jsxs)(`td`,{children:[`(`,r(Object.values(a).reduce((e,t)=>e+t.totalDebit,0)),`)`]}),(0,K.jsxs)(`td`,{children:[`(`,r(Object.values(a).reduce((e,t)=>e+t.totalCredit,0)),`)`]}),(0,K.jsx)(`td`,{colSpan:1,children:r(Object.values(a).reduce((e,t)=>e+t.sum,0))})]})]})]})},ae=()=>{let[e,t]=(0,W.useState)(!1),{get:n}=V(),{setFiltersContext:r}=(0,W.useContext)(y),[i,o]=(0,W.useState)(n(`trialBalanceReportFilters`)?JSON.parse(decodeURIComponent(n(`trialBalanceReportFilters`))):{}),[{data:s,fetching:c}]=z({query:L,variables:{filters:{fromDate:i?.fromDate,toDate:i?.toDate,ownerIds:i?.ownerIds,businessIDs:i?.businessIDs}}});(0,W.useEffect)(()=>{r((0,K.jsxs)(`div`,{className:`flex flex-row gap-2`,children:[(0,K.jsx)(a,{content:`Expand all accounts`,children:(0,K.jsx)(w,{variant:`outline`,size:`icon`,className:`size-7.5`,onClick:()=>t(e=>!e),children:e?(0,K.jsx)(_,{className:`size-5`}):(0,K.jsx)(v,{className:`size-5`})})}),(0,K.jsx)(J,{filter:i,setFilter:o})]}))},[i,e,r]);let l=(0,W.useMemo)(()=>s?.businessTransactionsSumFromLedgerRecords.__typename===`CommonError`?void 0:s?.businessTransactionsSumFromLedgerRecords,[s?.businessTransactionsSumFromLedgerRecords]);return(0,K.jsx)(U,{title:`Trial Balance Report`,description:`Trial balance report for all businesses`,children:c||!l?(0,K.jsx)(x,{className:`h-10 w-10 animate-spin mr-2 self-center`}):(0,K.jsx)(ie,{data:l,filter:i,isAllOpened:e})})};export{ae as TrialBalanceReport};