@accounter/client
Version:
Accounter client application
2 lines • 11.7 kB
JavaScript
import{t as e}from"./funnel-DYKZrHgK.js";import{t}from"./MultiSelect-BBe3Pu3_.js";import{$c as n,$i as r,$u as i,Au as a,Br as o,Ji as s,Jt as c,Kl as l,Ml as u,Mu as d,N as f,Nd as p,Rd as m,Tu as h,Un as g,Vi as _,Xn as v,Xu as y,Yu as b,_n as x,dn as S,el as C,en as w,er as T,fn as E,fr as ee,fs as D,gd as O,gi as k,gn as A,hn as j,md as M,nn as N,pn as P,rr as F,tr as I,vn as L,wn as R}from"./index-BdWApCqi.js";import{t as z}from"./use-url-query-8I97z9a3.js";import{t as B}from"./business-extended-info-DmsDeYCa.js";import{t as V}from"./page-layout-9Fp4HhGU.js";var H=m(p(),1),U=m(k(),1),W=h();function G({filter:e,setFilter:n,closeModal:i}){let a=R({defaultValues:{...e}}),{control:o,handleSubmit:s}=a,{selectableBusinesses:l,fetching:u}=N(),{userContext:d}=(0,H.useContext)(I),f=e=>{e.fromDate?.trim()===``&&(e.fromDate=void 0),e.toDate?.trim()===``&&(e.toDate=void 0),n(e),i()};function p(){n({}),i()}return(0,W.jsxs)(W.Fragment,{children:[u?(0,W.jsx)(`div`,{children:`Loading...`}):(0,W.jsx)(`div`,{}),(0,W.jsx)(E,{...a,children:(0,W.jsxs)(`form`,{onSubmit:s(f),className:`space-y-2`,children:[(0,W.jsx)(j,{name:`ownerIds`,control:o,defaultValue:void 0,render:({field:e,fieldState:n})=>(0,W.jsxs)(A,{children:[(0,W.jsx)(x,{children:`Owners`}),(0,W.jsx)(P,{children:(0,W.jsx)(t,{...e,data:l,value:e.value??(d?.context.adminBusinessId?[d?.context.adminBusinessId]:void 0),disabled:u,placeholder:`Scroll to see all options`,maxDropdownHeight:160,searchable:!0,error:n.error?.message})}),(0,W.jsx)(L,{})]})}),(0,W.jsx)(j,{name:`businessIDs`,control:o,defaultValue:void 0,render:({field:e,fieldState:n})=>(0,W.jsxs)(A,{children:[(0,W.jsx)(x,{children:`Businesses`}),(0,W.jsx)(P,{children:(0,W.jsx)(t,{...e,data:l,value:e.value??void 0,disabled:u,placeholder:`Scroll to see all options`,maxDropdownHeight:160,searchable:!0,error:n.error?.message})}),(0,W.jsx)(L,{})]})}),(0,W.jsx)(j,{name:`fromDate`,control:o,defaultValue:e.fromDate,rules:{required:`Required`,pattern:{value:r,message:`Date must be in format yyyy-mm-dd`}},render:({field:e,fieldState:t})=>(0,W.jsxs)(A,{children:[(0,W.jsx)(x,{htmlFor:`trial-balance-from-date`,children:`From Date`}),(0,W.jsx)(P,{children:(0,W.jsx)(c,{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,W.jsx)(L,{})]})}),(0,W.jsx)(j,{name:`toDate`,control:o,defaultValue:e.toDate,rules:{pattern:{value:r,message:`Date must be in format yyyy-mm-dd`}},render:({field:e,fieldState:t})=>(0,W.jsxs)(A,{children:[(0,W.jsx)(x,{htmlFor:`trial-balance-to-date`,children:`To Date`}),(0,W.jsx)(P,{children:(0,W.jsx)(c,{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,W.jsx)(L,{})]})}),(0,W.jsx)(j,{name:`isShowZeroedAccounts`,control:o,render:({field:t})=>(0,W.jsxs)(A,{className:`flex flex-row items-center justify-between rounded-lg border p-3 shadow-sm`,children:[(0,W.jsx)(`div`,{className:`space-y-0.5`,children:(0,W.jsx)(x,{children:`Show zeroed accounts`})}),(0,W.jsxs)(`div`,{className:`flex flex-row items-center gap-1`,children:[(0,W.jsx)(P,{children:(0,W.jsx)(S,{defaultChecked:e.isShowZeroedAccounts??!1,onCheckedChange:t.onChange,checked:t.value===!0})}),(0,W.jsx)(`span`,{children:t.value?`show`:`remove`})]})]})}),(0,W.jsxs)(`div`,{className:`flex justify-center mt-5 gap-3`,children:[(0,W.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,W.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:p,children:`Clear`}),(0,W.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:i,children:`Cancel`})]})]})})]})}function K({filter:t,setFilter:n}){let[r,i]=(0,H.useState)(!1),[o,s]=(0,H.useState)(!d(t)),{get:c,set:u}=z();function p(e){return Object.entries(e??{}).filter(([e,t])=>t!==void 0&&Array.isArray(t)&&t.length>0).length>0}function m(e){(0,U.default)(e,t)||(n(e),s(p(e)))}return(0,H.useEffect)(()=>{let e=a(t);e!==c(`trialBalanceReportFilters`)&&u(`trialBalanceReportFilters`,e)},[t,c,u]),(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(f,{opened:r,onClose:()=>i(!1),content:(0,W.jsx)(G,{filter:t,setFilter:m,closeModal:()=>i(!1)})}),(0,W.jsx)(ee,{inline:!0,size:16,disabled:!o,children:(0,W.jsx)(l,{variant:`outline`,onClick:()=>i(!0),className:`p-2`,children:(0,W.jsx)(e,{size:20})})})]})}var q=({data:e,fromDate:t,toDate:n})=>(0,W.jsx)(g,{createFileVariables:(0,H.useCallback)(async()=>({fileContent:J(e),fileName:`trial_balance_report${t?`_${t}`:``}${n?`_${n}`:``}`}),[e,t,n])}),J=e=>{let t=``;t+=`Sort Code,Account Name,Debit,Credit,Balance\r
`;for(let[n,r]of Object.entries(e)){let e=Y(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 Y(e,t){let n=``;return Object.values(t.sortCodes).sort((e,t)=>e.key-t.key).map(e=>{let t=X(e);n+=t}),n+=`${e.replaceAll(`0`,`*`)},Group Total:,${t.totalDebit??``},${t.totalCredit??``},${t.sum}\r\n`,n}function X(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?`"${Z(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 Z(e){return e.replace(/"/g,`""`)}var Q=({record:e,sortCodeKey:t,filter:n,isAllOpened:r})=>{let[i,a]=(0,H.useState)(r),s=e?.total?.raw??0,c=e?.debit?.raw??0,u=e?.credit?.raw??0;return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)(`tr`,{children:[(0,W.jsx)(`td`,{children:t}),(0,W.jsx)(`td`,{children:e.business.id}),(0,W.jsx)(`td`,{children:e.business.name??void 0}),(0,W.jsx)(`td`,{children:c?e?.debit?.formatted:void 0}),(0,W.jsx)(`td`,{children:u?e?.credit?.formatted:void 0}),(0,W.jsx)(`td`,{children:(s>.001||s<-.001)&&(0,W.jsx)(o,{color:s>0?`green`:`red`,children:e?.total?.formatted})}),(0,W.jsx)(`td`,{children:(0,W.jsx)(w,{content:`Detailed records`,children:(0,W.jsx)(l,{variant:`outline`,size:`icon`,className:`size-7.5`,onClick:()=>a(e=>!e),children:i||r?(0,W.jsx)(y,{className:`size-5`}):(0,W.jsx)(b,{className:`size-5`})})})})]},e.business.id),(i||r)&&(0,W.jsx)(`tr`,{children:(0,W.jsx)(`td`,{colSpan:7,children:(0,W.jsx)(B,{businessID:e.business?.id,filter:n})})})]})},$=({sortCode:e,filter:t,isAllOpened:n})=>e.records.length>0?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`tr`,{children:(0,W.jsx)(`td`,{colSpan:7,children:(0,W.jsx)(`span`,{className:`font-bold`,children:e.name})})}),e.records.sort((e,t)=>e.business.name.localeCompare(t.business.name)).map(r=>(0,W.jsx)(Q,{record:r,sortCodeKey:e.key,filter:t,isAllOpened:n},r.business.id)),(0,W.jsx)(`tr`,{className:`bg-gray-100`,children:e.records.length>1?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`td`,{colSpan:2,children:`Group total:`}),(0,W.jsx)(`td`,{colSpan:1,children:e.key}),(0,W.jsx)(`td`,{colSpan:1,children:!!e.totalDebit&&s(e.totalDebit,D.Ils)}),(0,W.jsx)(`td`,{colSpan:1,children:!!e.totalCredit&&s(e.totalCredit,D.Ils)}),(0,W.jsxs)(`td`,{colSpan:1,children:[(0,W.jsx)(o,{c:e.sum>0?`green`:e.sum<0?`red`:void 0,children:s(e.sum,D.Ils)}),!!e.debit&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`br`,{}),`Total Debit Balances: `,s(e.debit,D.Ils)]}),!!e.credit&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`br`,{}),`Total Credit Balances: `,s(e.credit,D.Ils)]})]})]}):void 0})]}):null,te=({group:e,data:t,filter:n,isAllOpened:r})=>(0,W.jsxs)(W.Fragment,{children:[Object.values(t.sortCodes).sort((e,t)=>e.key-t.key).map((e,t)=>(0,W.jsx)($,{sortCode:e,filter:n,isAllOpened:r},`${e.key} ${t}`)),(0,W.jsxs)(`tr`,{className:`bg-gray-100`,children:[(0,W.jsx)(`td`,{colSpan:2,children:`Group total:`}),(0,W.jsx)(`td`,{colSpan:1,children:e.replaceAll(`0`,`*`)}),(0,W.jsx)(`td`,{colSpan:1,children:!!t.totalDebit&&s(t.totalDebit,D.Ils)}),(0,W.jsx)(`td`,{colSpan:1,children:!!t.totalCredit&&s(t.totalCredit,D.Ils)}),(0,W.jsx)(`td`,{colSpan:1,children:(0,W.jsx)(o,{fw:700,c:t.sum>0?`green`:t.sum<0?`red`:void 0,children:s(t.sum,D.Ils)})})]},`group`+e)]});function ne(e){return Math.floor(e/100)*100}var re=({data:e,filter:t,isAllOpened:n})=>{let{businessTransactionsSum:r}=v(C,e),i=(0,H.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,W.jsxs)(F,{highlightOnHover:!0,children:[(0,W.jsx)(`thead`,{style:{position:`sticky`,top:0,zIndex:20},children:(0,W.jsxs)(`tr`,{className:`bg-gray-300`,children:[(0,W.jsx)(`th`,{children:`Sort Code`}),(0,W.jsx)(`th`,{children:`Account`}),(0,W.jsx)(`th`,{children:`Account Name`}),(0,W.jsx)(`th`,{children:`Total Debit`}),(0,W.jsx)(`th`,{children:`Total Credit`}),(0,W.jsx)(`th`,{children:`Balance`}),(0,W.jsx)(`th`,{children:(0,W.jsx)(q,{data:i,fromDate:t.fromDate??void 0,toDate:t.toDate??void 0})})]})}),(0,W.jsxs)(`tbody`,{children:[Object.entries(i).map(([e,r])=>(0,W.jsx)(te,{data:r,group:e,filter:t,isAllOpened:n},e)),(0,W.jsxs)(`tr`,{className:`bg-gray-100`,children:[(0,W.jsx)(`td`,{colSpan:2,children:`Report total:`}),(0,W.jsx)(`td`,{}),(0,W.jsxs)(`td`,{children:[`(`,_(Object.values(i).reduce((e,t)=>e+t.totalDebit,0)),`)`]}),(0,W.jsxs)(`td`,{children:[`(`,_(Object.values(i).reduce((e,t)=>e+t.totalCredit,0)),`)`]}),(0,W.jsx)(`td`,{colSpan:1,children:_(Object.values(i).reduce((e,t)=>e+t.sum,0))})]})]})]})},ie=()=>{let[e,t]=(0,H.useState)(!1),{get:r}=z(),{setFiltersContext:a}=(0,H.useContext)(T),[o,s]=(0,H.useState)(r(`trialBalanceReportFilters`)?JSON.parse(decodeURIComponent(r(`trialBalanceReportFilters`))):{}),[{data:c,fetching:d}]=u({query:n,variables:{filters:{fromDate:o?.fromDate,toDate:o?.toDate,ownerIds:o?.ownerIds,businessIDs:o?.businessIDs}}});(0,H.useEffect)(()=>{a((0,W.jsxs)(`div`,{className:`flex flex-row gap-2`,children:[(0,W.jsx)(w,{content:`Expand all accounts`,children:(0,W.jsx)(l,{variant:`outline`,size:`icon`,className:`size-7.5`,onClick:()=>t(e=>!e),children:e?(0,W.jsx)(M,{className:`size-5`}):(0,W.jsx)(O,{className:`size-5`})})}),(0,W.jsx)(K,{filter:o,setFilter:s})]}))},[o,e,a]);let f=(0,H.useMemo)(()=>c?.businessTransactionsSumFromLedgerRecords.__typename===`CommonError`?void 0:c?.businessTransactionsSumFromLedgerRecords,[c?.businessTransactionsSumFromLedgerRecords]);return(0,W.jsx)(V,{title:`Trial Balance Report`,description:`Trial balance report for all businesses`,children:d||!f?(0,W.jsx)(i,{className:`h-10 w-10 animate-spin mr-2 self-center`}):(0,W.jsx)(re,{data:f,filter:o,isAllOpened:e})})};export{ie as TrialBalanceReport};