UNPKG

@accounter/client

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