@accounter/client
Version:
Accounter client application
1 lines • 11.8 kB
JavaScript
import{s as e}from"./dist-C51EwTaa.js";import{i as t,o as n,t as r}from"./utils-DdVdMk8X.js";import{Lo as i,Rn as a,ft as o}from"./error-handling-Dpfd9svJ.js";import{s,t as c}from"./routes-DUvpW9-n.js";import{a as l,ht as u,i as d,n as f,r as ee,s as p,t as m}from"./select-CrsvQyhZ.js";import{t as h}from"./button-Dzp2INW0.js";import{Lt as g,a as _,c as v,f as y,i as b,m as te,n as x,o as S,p as C,r as w,s as T,t as E,u as D}from"./table--bF0wbxq.js";import{$r as O,$t as k,Nr as A,Vt as j,br as M,cr as N,dr as ne,or as re,sr as ie,w as ae,xr as P,yr as F}from"./index-CL8-JoMZ.js";var I=e(n(),1),L=t(),R=({amount:e})=>!e||e.raw===0?(0,L.jsx)(`span`,{className:`text-sm text-gray-400`,children:`—`}):(0,L.jsx)(`span`,{className:r(`text-sm font-medium whitespace-nowrap`,e.raw>0?`text-green-700`:`text-red-600`),children:e.formatted}),z=({balance:e,currency:t})=>{if(e===0)return(0,L.jsx)(`span`,{className:`text-sm text-gray-400`,children:`—`});let n=P(e,t);return(0,L.jsx)(`span`,{className:r(`text-sm font-medium whitespace-nowrap`,e>0?`text-green-700`:`text-red-600`),children:n})},B=({business:e})=>(0,L.jsx)(s,{to:c.BUSINESSES.DETAIL(e.id),target:`_blank`,rel:`noopener noreferrer`,onClick:e=>e.stopPropagation(),className:`inline-flex items-center font-semibold whitespace-nowrap`,children:e.name}),V=({counterAccount:e})=>e?(0,L.jsx)(s,{to:c.BUSINESSES.DETAIL(e.id),target:`_blank`,rel:`noopener noreferrer`,onClick:e=>e.stopPropagation(),className:`inline-flex items-center font-semibold whitespace-nowrap text-sm`,children:e.name}):(0,L.jsx)(`span`,{className:`text-sm text-gray-400`,children:`—`}),H=({row:e,currency:t})=>{let n=e.foreignAmount&&e.foreignAmount.currency===t?e.foreignAmount:null;return!n||n.raw===0?(0,L.jsx)(`span`,{className:`text-sm text-gray-400`,children:`—`}):(0,L.jsx)(`span`,{className:r(`text-sm font-medium whitespace-nowrap`,n.raw>0?`text-green-700`:`text-red-600`),children:n.formatted})},U=({row:e,currency:t})=>{let n=e[`${t.toLowerCase()}Balance`]??0;if(n===0)return(0,L.jsx)(`span`,{className:`text-sm text-gray-400`,children:`—`});let i=P(n,t);return(0,L.jsx)(`span`,{className:r(`text-sm font-medium whitespace-nowrap`,n>0?`text-green-700`:`text-red-600`),children:i})},W=({date:e})=>e?(0,L.jsx)(`span`,{className:`text-sm font-medium whitespace-nowrap`,children:g(new Date(e),`dd/MM/yy`)}):(0,L.jsx)(`span`,{className:`text-sm text-gray-400`,children:`—`}),G=()=>[{accessorKey:`business.name`,id:`businessName`,header:`Business Name`,cell:({row:e})=>(0,L.jsx)(B,{business:e.original.business}),enableSorting:!1,enableHiding:!1},{accessorKey:`invoiceDate`,id:`date`,header:({column:e})=>(0,L.jsx)(j,{column:e,title:`Date`}),cell:({row:e})=>(0,L.jsx)(W,{date:e.original.invoiceDate}),sortingFn:`datetime`},{accessorKey:`amount.raw`,id:`amount`,header:({column:e})=>(0,L.jsx)(j,{column:e,title:`Amount`}),cell:({row:e})=>(0,L.jsx)(R,{amount:e.original.amount}),sortingFn:`basic`},{accessorKey:`ilsBalance`,id:`ilsBalance`,header:({column:e})=>(0,L.jsx)(j,{column:e,title:`Amount Balance`}),cell:({row:e})=>(0,L.jsx)(z,{balance:e.original.ilsBalance,currency:a.Ils}),sortingFn:`basic`}],K=()=>Object.values(a).filter(e=>e!==a.Ils).sort((e,t)=>{let n=F.includes(e),r=F.includes(t);return n&&!r?-1:!n&&r?1:e.localeCompare(t)}).flatMap(e=>[{id:`${e.toLowerCase()}Amount`,accessorFn:t=>t.foreignAmount?.currency===e?t.foreignAmount.raw:null,header:({column:t})=>(0,L.jsx)(j,{column:t,title:`${e} Amount`}),cell:({row:t})=>(0,L.jsx)(H,{row:t.original,currency:e}),sortingFn:`basic`,enableHiding:!0},{id:`${e.toLowerCase()}Balance`,accessorFn:t=>t[`${e.toLowerCase()}Balance`]??null,header:({column:t})=>(0,L.jsx)(j,{column:t,title:`${e} Balance`}),cell:({row:t})=>(0,L.jsx)(U,{row:t.original,currency:e}),sortingFn:`basic`,enableHiding:!0}]),q=()=>[{accessorKey:`reference`,id:`reference`,header:`Reference`,cell:({row:e})=>(0,L.jsx)(`p`,{className:`text-sm whitespace-nowrap`,children:e.original.reference??``}),enableSorting:!1},{accessorKey:`details`,id:`details`,header:`Details`,cell:({row:e})=>(0,L.jsx)(`p`,{className:`text-sm whitespace-nowrap`,children:e.original.details??``}),enableSorting:!1},{accessorKey:`counterAccount.name`,id:`counterAccount`,header:`Counter Account`,cell:({row:e})=>(0,L.jsx)(V,{counterAccount:e.original.counterAccount}),enableSorting:!1}],oe=()=>[...G(),...K(),...q()],se=e=>{let t={};for(let n of Object.values(a).filter(e=>e!==a.Ils)){let r=e.has(n),i=`${n.toLowerCase()}Amount`,a=`${n.toLowerCase()}Balance`;r||(t[i]=!1,t[a]=!1)}return t},ce=({row:e})=>(0,L.jsx)(S,{onClick:t=>{t.stopPropagation(),window.open(c.CHARGES.DETAIL(e.original.chargeId),`_blank`,`noopener noreferrer`)},className:`cursor-pointer hover:bg-gray-50 transition-colors`,children:e.getVisibleCells().map(e=>(0,L.jsx)(w,{children:T(e.column.columnDef.cell,e.getContext())},e.id))}),le=({ledgerRecords:e,businessName:t,fromDate:n,toDate:r})=>(0,L.jsx)(k,{createFileVariables:(0,I.useCallback)(async()=>{let i=J(e);return{fileName:`business_${t}_ledger_records${n?`_${n}`:``}${r?`_${r}`:``}`,fileContent:i}},[e,t,n,r])}),J=e=>{let t=``,n=Array.from(new Set(e.filter(e=>e.foreignAmount?.currency).map(e=>e.foreignAmount.currency)));t+=`Sorting Date,Date,Amount,Amount Balance,${Y(n)}Reference,Details,Counter Account\r\n`;for(let r of e){let e=ue(r,n);t+=e}return t};function Y(e){let t=``;return e.map(e=>{let n=M(e);t+=`${e}(${n}) Amount,${e}(${n}) Balance,`}),t}function X(e,t){let n=``;return t.map(t=>{e.foreignAmount&&e.foreignAmount.currency===t?n+=`${e.foreignAmount.raw},${e[`${t.toLowerCase()}Balance`]??0},`:n+=`,,`}),n}function ue(e,t){let n=``,r=e.invoiceDate?g(new Date(e.invoiceDate),`yyy-MM-dd`):null,i=e.invoiceDate?g(new Date(e.invoiceDate),`dd/MM/yy`):null,a=e.amount.raw,{ilsBalance:o,reference:s,details:c}=e,l=e.counterAccount?.name??``;return n+=`${r},${i},${a},${o},${X(e,t)}${Z(s??``)},${Z(c??``)},${Z(l)},\r\n`,n}function Z(e){return e===``?``:Number.isNaN(Number(e))?String(e).replace(/"/g,`""`).replace(/,/g,`.`):Number(e).toFixed(2).toString()}var Q=`businessLedger`,$={SORTING:`${Q}_sorting`,COLUMN_VISIBILITY:`${Q}_columnVisibility`};function de({businessID:e,filter:t}){let[n,r]=(0,I.useState)(()=>{try{let e=localStorage.getItem($.SORTING);return e?JSON.parse(e):[]}catch{return[]}}),[s,c]=(0,I.useState)([]),[g,k]=(0,I.useState)(``),[j,M]=(0,I.useState)({pageIndex:0,pageSize:50});(0,I.useEffect)(()=>{try{localStorage.setItem($.SORTING,JSON.stringify(n))}catch(e){console.warn(`Failed to save sorting to localStorage:`,e)}},[n]);let{fromDate:P,ownerIds:F,toDate:R}=t??{},[{data:z,fetching:B}]=i({query:o,variables:{filters:{fromDate:P,ownerIds:F,toDate:R,businessIDs:[e]}}}),V=(0,I.useMemo)(()=>z?.businessTransactionsFromLedgerRecords.__typename===`CommonError`?[]:z?.businessTransactionsFromLedgerRecords.businessTransactions.sort((e,t)=>e.invoiceDate>t.invoiceDate?1:-1)??[],[z]),H=(0,I.useMemo)(()=>{let e=[];for(let t=0;t<V.length;t++){let n=V[t],r=t===0?n.amount.raw:(e[t-1].ilsBalance??0)+n.amount.raw,i={};Object.values(a).map(r=>{if(r!==a.Ils){let a=`${r.toLowerCase()}Balance`;i[a]=t===0?(n.foreignAmount?.currency===r?n.foreignAmount?.raw:0)??0:(e[t-1]?.[a]??0)+(n.foreignAmount?.currency===r?n.foreignAmount?.raw:0)}}),e.push({...n,ilsBalance:r,...i})}return e},[V]),U=(0,I.useMemo)(()=>new Set(V.filter(e=>e.foreignAmount?.currency).map(e=>e.foreignAmount.currency)),[V]),W=oe(),G=(0,I.useMemo)(()=>se(U),[U]),[K,q]=(0,I.useState)(()=>{try{let e=localStorage.getItem($.COLUMN_VISIBILITY);if(e){let t=JSON.parse(e);return{...G,...t}}}catch{}return G});(0,I.useEffect)(()=>{try{localStorage.setItem($.COLUMN_VISIBILITY,JSON.stringify(K))}catch(e){console.warn(`Failed to save column visibility to localStorage:`,e)}},[K]),(0,I.useEffect)(()=>{q(e=>({...G,...e}))},[G]);let J=v({data:H,columns:W,getCoreRowModel:D(),getSortedRowModel:te(),getFilteredRowModel:y(),getPaginationRowModel:C(),onSortingChange:r,onColumnFiltersChange:c,onColumnVisibilityChange:q,onGlobalFilterChange:k,onPaginationChange:M,globalFilterFn:`includesString`,state:{sorting:n,columnFilters:s,columnVisibility:K,globalFilter:g,pagination:j}}),Y=V[0]?.business.name??`unknown`;return B?(0,L.jsxs)(`div`,{className:`flex flex-col gap-4 max-w-[90vw] m-2`,children:[(0,L.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,L.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,L.jsx)(A,{className:`h-10 w-64`}),(0,L.jsx)(A,{className:`h-10 w-32`})]}),(0,L.jsx)(A,{className:`size-10`})]}),(0,L.jsx)(`div`,{className:`rounded-md border overflow-x-auto`,children:(0,L.jsxs)(E,{children:[(0,L.jsx)(_,{children:(0,L.jsx)(S,{children:Array.from({length:8}).map((e,t)=>(0,L.jsx)(b,{children:(0,L.jsx)(A,{className:`h-4 w-24`})},t))})}),(0,L.jsx)(x,{children:Array.from({length:5}).map((e,t)=>(0,L.jsx)(S,{children:Array.from({length:8}).map((e,t)=>(0,L.jsx)(w,{children:(0,L.jsx)(A,{className:`h-4 w-full`})},t))},t))})]})})]}):(0,L.jsxs)(`div`,{className:`flex flex-col gap-4 max-w-[90vw] m-2`,children:[(0,L.jsxs)(`div`,{className:`flex items-center justify-between gap-4 flex-wrap`,children:[(0,L.jsxs)(`div`,{className:`flex items-center gap-4 flex-wrap`,children:[(0,L.jsxs)(`div`,{className:`relative flex-1 min-w-[200px] max-w-sm`,children:[(0,L.jsx)(O,{className:`absolute left-2.5 top-2.5 h-4 w-4 text-gray-500`}),(0,L.jsx)(p,{placeholder:`Search reference, details, business...`,value:g??``,onChange:e=>k(e.target.value),className:`pl-8`})]}),(0,L.jsxs)(re,{children:[(0,L.jsx)(ne,{asChild:!0,children:(0,L.jsxs)(h,{variant:`outline`,size:`sm`,children:[(0,L.jsx)(u,{className:`mr-2 h-4 w-4`}),`Columns`]})}),(0,L.jsx)(N,{align:`end`,className:`max-h-96 overflow-y-auto`,children:J.getAllColumns().filter(e=>e.getCanHide()).map(e=>(0,L.jsx)(ie,{className:`capitalize`,checked:e.getIsVisible(),onCheckedChange:t=>e.toggleVisibility(!!t),children:e.id},e.id))})]})]}),(0,L.jsx)(le,{ledgerRecords:H,businessName:Y,fromDate:t?.fromDate??void 0,toDate:t?.toDate??void 0})]}),(0,L.jsx)(`div`,{className:`rounded-md border overflow-x-auto`,children:(0,L.jsxs)(E,{children:[(0,L.jsx)(_,{className:`sticky top-0 z-20 bg-white border-b`,children:J.getHeaderGroups().map(e=>(0,L.jsx)(S,{children:e.headers.map(e=>(0,L.jsx)(b,{colSpan:e.colSpan,children:e.isPlaceholder?null:T(e.column.columnDef.header,e.getContext())},e.id))},e.id))}),(0,L.jsx)(x,{children:J.getRowModel().rows?.length?J.getRowModel().rows.map(e=>(0,L.jsx)(ce,{row:e},e.id)):(0,L.jsx)(S,{children:(0,L.jsx)(w,{colSpan:W.length,className:`h-24 text-center`,children:`No transactions found.`})})})]})}),(0,L.jsxs)(`div`,{className:`flex items-center justify-between gap-4 flex-wrap`,children:[(0,L.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,L.jsxs)(`p`,{className:`text-sm text-gray-700`,children:[`Showing`,` `,J.getState().pagination.pageIndex*J.getState().pagination.pageSize+1,` to`,` `,Math.min((J.getState().pagination.pageIndex+1)*J.getState().pagination.pageSize,J.getFilteredRowModel().rows.length),` `,`of `,J.getFilteredRowModel().rows.length,` transactions`]})}),(0,L.jsxs)(`div`,{className:`flex items-center gap-6`,children:[(0,L.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,L.jsx)(`p`,{className:`text-sm font-medium`,children:`Rows per page:`}),(0,L.jsxs)(m,{value:String(J.getState().pagination.pageSize),onValueChange:e=>{J.setPageSize(Number(e))},children:[(0,L.jsx)(d,{className:`h-8 w-[70px]`,children:(0,L.jsx)(l,{placeholder:J.getState().pagination.pageSize})}),(0,L.jsx)(f,{side:`top`,children:[25,50,100,200,500].map(e=>(0,L.jsx)(ee,{value:String(e),children:e},e))})]})]}),(0,L.jsx)(ae,{className:`w-fit mx-0`,currentPageIndex:J.getState().pagination.pageIndex,totalPages:J.getPageCount(),onChange:e=>J.setPageIndex(e)})]})]})]})}export{de as t};