@accounter/client
Version:
Accounter client application
2 lines • 12 kB
JavaScript
import{s as e}from"./dist-C51EwTaa.js";import{i as t,o as n}from"./utils-DdVdMk8X.js";import{Da as r,Lo as i,Oa as a,Rn as o}from"./error-handling-Dpfd9svJ.js";import{i as s,n as c}from"./routes-DUvpW9-n.js";import{ft as l,ht as u,pt as d}from"./select-CrsvQyhZ.js";import{t as f}from"./funnel-BFbxpUGW.js";import{t as p}from"./button-Dzp2INW0.js";import{B as m,F as h,K as g,L as _,P as v,R as y,U as b,W as x,X as S,wt as C,z as w}from"./table--bF0wbxq.js";import{t as T}from"./MultiSelect-HTEIN3wg.js";import{$t as E,Dt as D,Er as O,It as k,P as A,Tt as j,cn as M,hr as N,ln as P,ni as F,ri as I,vn as L,xr as R,yt as z}from"./index-CL8-JoMZ.js";import{t as B}from"./use-url-query-BCNbSvLg.js";import{t as V}from"./business-extended-info-BGuAmkTk.js";import{t as H}from"./page-layout-DoLDsSrs.js";var U=e(n(),1),W=e(C(),1),G=t();function K({filter:e,setFilter:t,closeModal:n}){let r=b({defaultValues:{...e}}),{control:i,handleSubmit:a}=r,{selectableBusinesses:o,fetching:s}=D(),{userContext:c}=(0,U.useContext)(g),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)(v,{...r,children:(0,G.jsxs)(`form`,{onSubmit:a(l),className:`space-y-2`,children:[(0,G.jsx)(_,{name:`ownerIds`,control:i,defaultValue:void 0,render:({field:e,fieldState:t})=>(0,G.jsxs)(y,{children:[(0,G.jsx)(w,{children:`Owners`}),(0,G.jsx)(h,{children:(0,G.jsx)(T,{...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)(m,{})]})}),(0,G.jsx)(_,{name:`businessIDs`,control:i,defaultValue:void 0,render:({field:e,fieldState:t})=>(0,G.jsxs)(y,{children:[(0,G.jsx)(w,{children:`Businesses`}),(0,G.jsx)(h,{children:(0,G.jsx)(T,{...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)(m,{})]})}),(0,G.jsx)(_,{name:`fromDate`,control:i,defaultValue:e.fromDate,rules:{required:`Required`,pattern:{value:O,message:`Date must be in format yyyy-mm-dd`}},render:({field:e,fieldState:t})=>(0,G.jsxs)(y,{children:[(0,G.jsx)(w,{htmlFor:`trial-balance-from-date`,children:`From Date`}),(0,G.jsx)(h,{children:(0,G.jsx)(z,{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)(m,{})]})}),(0,G.jsx)(_,{name:`toDate`,control:i,defaultValue:e.toDate,rules:{pattern:{value:O,message:`Date must be in format yyyy-mm-dd`}},render:({field:e,fieldState:t})=>(0,G.jsxs)(y,{children:[(0,G.jsx)(w,{htmlFor:`trial-balance-to-date`,children:`To Date`}),(0,G.jsx)(h,{children:(0,G.jsx)(z,{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)(m,{})]})}),(0,G.jsx)(_,{name:`isShowZeroedAccounts`,control:i,render:({field:t})=>(0,G.jsxs)(y,{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)(w,{children:`Show zeroed accounts`})}),(0,G.jsxs)(`div`,{className:`flex flex-row items-center gap-1`,children:[(0,G.jsx)(h,{children:(0,G.jsx)(k,{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,r]=(0,U.useState)(!1),[i,a]=(0,U.useState)(!s(e)),{get:o,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),a(u(n)))}return(0,U.useEffect)(()=>{let t=c(e);t!==o(`trialBalanceReportFilters`)&&l(`trialBalanceReportFilters`,t)},[e,o,l]),(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(A,{opened:n,onClose:()=>r(!1),content:(0,G.jsx)(K,{filter:e,setFilter:d,closeModal:()=>r(!1)})}),(0,G.jsx)(L,{inline:!0,size:16,disabled:!i,children:(0,G.jsx)(p,{variant:`outline`,onClick:()=>r(!0),className:`p-2`,children:(0,G.jsx)(f,{size:20})})})]})}var J=({data:e,fromDate:t,toDate:n})=>(0,G.jsx)(E,{createFileVariables:(0,U.useCallback)(async()=>({fileContent:Y(e),fileName:`trial_balance_report${t?`_${t}`:``}${n?`_${n}`:``}`}),[e,t,n])}),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)(S,{color:o>0?`green`:`red`,children:e?.total?.formatted})}),(0,G.jsx)(`td`,{children:(0,G.jsx)(j,{content:`Detailed records`,children:(0,G.jsx)(p,{variant:`outline`,size:`icon`,className:`size-7.5`,onClick:()=>a(e=>!e),children:i||r?(0,G.jsx)(I,{className:`size-5`}):(0,G.jsx)(F,{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&&R(e.totalDebit,o.Ils)}),(0,G.jsx)(`td`,{colSpan:1,children:!!e.totalCredit&&R(e.totalCredit,o.Ils)}),(0,G.jsxs)(`td`,{colSpan:1,children:[(0,G.jsx)(S,{c:e.sum>0?`green`:e.sum<0?`red`:void 0,children:R(e.sum,o.Ils)}),!!e.debit&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`br`,{}),`Total Debit Balances: `,R(e.debit,o.Ils)]}),!!e.credit&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`br`,{}),`Total Credit Balances: `,R(e.credit,o.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&&R(t.totalDebit,o.Ils)}),(0,G.jsx)(`td`,{colSpan:1,children:!!t.totalCredit&&R(t.totalCredit,o.Ils)}),(0,G.jsx)(`td`,{colSpan:1,children:(0,G.jsx)(S,{fw:700,c:t.sum>0?`green`:t.sum<0?`red`:void 0,children:R(t.sum,o.Ils)})})]},`group`+e)]});function ne(e){return Math.floor(e/100)*100}var re=({data:e,filter:t,isAllOpened:n})=>{let{businessTransactionsSum:r}=x(a,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)(P,{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:[`(`,N(Object.values(i).reduce((e,t)=>e+t.totalDebit,0)),`)`]}),(0,G.jsxs)(`td`,{children:[`(`,N(Object.values(i).reduce((e,t)=>e+t.totalCredit,0)),`)`]}),(0,G.jsx)(`td`,{colSpan:1,children:N(Object.values(i).reduce((e,t)=>e+t.sum,0))})]})]})]})},ie=()=>{let[e,t]=(0,U.useState)(!1),{get:n}=B(),{setFiltersContext:a}=(0,U.useContext)(M),[o,s]=(0,U.useState)(n(`trialBalanceReportFilters`)?JSON.parse(decodeURIComponent(n(`trialBalanceReportFilters`))):{}),[{data:c,fetching:f}]=i({query:r,variables:{filters:{fromDate:o?.fromDate,toDate:o?.toDate,ownerIds:o?.ownerIds,businessIDs:o?.businessIDs}}});(0,U.useEffect)(()=>{a((0,G.jsxs)(`div`,{className:`flex flex-row gap-2`,children:[(0,G.jsx)(j,{content:`Expand all accounts`,children:(0,G.jsx)(p,{variant:`outline`,size:`icon`,className:`size-7.5`,onClick:()=>t(e=>!e),children:e?(0,G.jsx)(d,{className:`size-5`}):(0,G.jsx)(u,{className:`size-5`})})}),(0,G.jsx)(q,{filter:o,setFilter:s})]}))},[o,e,a]);let m=(0,U.useMemo)(()=>c?.businessTransactionsSumFromLedgerRecords.__typename===`CommonError`?void 0:c?.businessTransactionsSumFromLedgerRecords,[c?.businessTransactionsSumFromLedgerRecords]);return(0,G.jsx)(H,{title:`Trial Balance Report`,description:`Trial balance report for all businesses`,children:f||!m?(0,G.jsx)(l,{className:`h-10 w-10 animate-spin mr-2 self-center`}):(0,G.jsx)(re,{data:m,filter:o,isAllOpened:e})})};export{ie as TrialBalanceReport};