UNPKG

@accounter/client

Version:
1 lines 11.8 kB
import{s as e}from"./dist-BmACi7k_.js";import{i as t,o as n,t as r}from"./utils-BxkqV8PM.js";import{In as i,pt as a,zo as o}from"./error-handling-sQ-z99nE.js";import{s,t as c}from"./routes-C4NpBRv7.js";import{a as l,i as u,mt as d,n as f,r as ee,s as p,t as m}from"./select-KYQbDWZT.js";import{$n as h,Ct as g,Ft as _,Qn as v,dr as y,er as b,n as x}from"./common-DtK-TFhT.js";import{b as S,d as C,h as w,l as T,u as te}from"./separator-CNv9f_S5.js";import{t as ne}from"./button-BZ6z_NAl.js";import{Kl as E,a as D,c as O,f as re,i as k,m as A,n as j,o as M,p as N,r as P,s as F,t as I,u as ie}from"./table-D4eAFW7G.js";var L=e(n(),1),R=t(),z=({amount:e})=>!e||e.raw===0?(0,R.jsx)(`span`,{className:`text-sm text-gray-400`,children:`—`}):(0,R.jsx)(`span`,{className:r(`text-sm font-medium whitespace-nowrap`,e.raw>0?`text-green-700`:`text-red-600`),children:e.formatted}),B=({balance:e,currency:t})=>{if(e===0)return(0,R.jsx)(`span`,{className:`text-sm text-gray-400`,children:`—`});let n=b(e,t);return(0,R.jsx)(`span`,{className:r(`text-sm font-medium whitespace-nowrap`,e>0?`text-green-700`:`text-red-600`),children:n})},V=({business:e})=>(0,R.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}),H=({counterAccount:e})=>e?(0,R.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,R.jsx)(`span`,{className:`text-sm text-gray-400`,children:`—`}),U=({row:e,currency:t})=>{let n=e.foreignAmount&&e.foreignAmount.currency===t?e.foreignAmount:null;return!n||n.raw===0?(0,R.jsx)(`span`,{className:`text-sm text-gray-400`,children:`—`}):(0,R.jsx)(`span`,{className:r(`text-sm font-medium whitespace-nowrap`,n.raw>0?`text-green-700`:`text-red-600`),children:n.formatted})},W=({row:e,currency:t})=>{let n=e[`${t.toLowerCase()}Balance`]??0;if(n===0)return(0,R.jsx)(`span`,{className:`text-sm text-gray-400`,children:`—`});let i=b(n,t);return(0,R.jsx)(`span`,{className:r(`text-sm font-medium whitespace-nowrap`,n>0?`text-green-700`:`text-red-600`),children:i})},G=({date:e})=>e?(0,R.jsx)(`span`,{className:`text-sm font-medium whitespace-nowrap`,children:E(new Date(e),`dd/MM/yy`)}):(0,R.jsx)(`span`,{className:`text-sm text-gray-400`,children:`—`}),K=()=>[{accessorKey:`business.name`,id:`businessName`,header:`Business Name`,cell:({row:e})=>(0,R.jsx)(V,{business:e.original.business}),enableSorting:!1,enableHiding:!1},{accessorKey:`invoiceDate`,id:`date`,header:({column:e})=>(0,R.jsx)(g,{column:e,title:`Date`}),cell:({row:e})=>(0,R.jsx)(G,{date:e.original.invoiceDate}),sortingFn:`datetime`},{accessorKey:`amount.raw`,id:`amount`,header:({column:e})=>(0,R.jsx)(g,{column:e,title:`Amount`}),cell:({row:e})=>(0,R.jsx)(z,{amount:e.original.amount}),sortingFn:`basic`},{accessorKey:`ilsBalance`,id:`ilsBalance`,header:({column:e})=>(0,R.jsx)(g,{column:e,title:`Amount Balance`}),cell:({row:e})=>(0,R.jsx)(B,{balance:e.original.ilsBalance,currency:i.Ils}),sortingFn:`basic`}],q=()=>Object.values(i).filter(e=>e!==i.Ils).sort((e,t)=>{let n=v.includes(e),r=v.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,R.jsx)(g,{column:t,title:`${e} Amount`}),cell:({row:t})=>(0,R.jsx)(U,{row:t.original,currency:e}),sortingFn:`basic`,enableHiding:!0},{id:`${e.toLowerCase()}Balance`,accessorFn:t=>t[`${e.toLowerCase()}Balance`]??null,header:({column:t})=>(0,R.jsx)(g,{column:t,title:`${e} Balance`}),cell:({row:t})=>(0,R.jsx)(W,{row:t.original,currency:e}),sortingFn:`basic`,enableHiding:!0}]),J=()=>[{accessorKey:`reference`,id:`reference`,header:`Reference`,cell:({row:e})=>(0,R.jsx)(`p`,{className:`text-sm whitespace-nowrap`,children:e.original.reference??``}),enableSorting:!1},{accessorKey:`details`,id:`details`,header:`Details`,cell:({row:e})=>(0,R.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,R.jsx)(H,{counterAccount:e.original.counterAccount}),enableSorting:!1}],ae=()=>[...K(),...q(),...J()],oe=e=>{let t={};for(let n of Object.values(i).filter(e=>e!==i.Ils)){let r=e.has(n),i=`${n.toLowerCase()}Amount`,a=`${n.toLowerCase()}Balance`;r||(t[i]=!1,t[a]=!1)}return t},se=({row:e})=>(0,R.jsx)(M,{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,R.jsx)(P,{children:F(e.column.columnDef.cell,e.getContext())},e.id))}),ce=({ledgerRecords:e,businessName:t,fromDate:n,toDate:r})=>(0,R.jsx)(_,{createFileVariables:(0,L.useCallback)(async()=>{let i=Y(e);return{fileName:`business_${t}_ledger_records${n?`_${n}`:``}${r?`_${r}`:``}`,fileContent:i}},[e,t,n,r])}),Y=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,${X(n)}Reference,Details,Counter Account\r\n`;for(let r of e){let e=ue(r,n);t+=e}return t};function X(e){let t=``;return e.map(e=>{let n=h(e);t+=`${e}(${n}) Amount,${e}(${n}) Balance,`}),t}function le(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?E(new Date(e.invoiceDate),`yyy-MM-dd`):null,i=e.invoiceDate?E(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},${le(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,L.useState)(()=>{try{let e=localStorage.getItem($.SORTING);return e?JSON.parse(e):[]}catch{return[]}}),[s,c]=(0,L.useState)([]),[h,g]=(0,L.useState)(``),[_,v]=(0,L.useState)({pageIndex:0,pageSize:50});(0,L.useEffect)(()=>{try{localStorage.setItem($.SORTING,JSON.stringify(n))}catch(e){console.warn(`Failed to save sorting to localStorage:`,e)}},[n]);let{fromDate:b,ownerIds:E,toDate:z}=t??{},[{data:B,fetching:V}]=o({query:a,variables:{filters:{fromDate:b,ownerIds:E,toDate:z,businessIDs:[e]}}}),H=(0,L.useMemo)(()=>B?.businessTransactionsFromLedgerRecords.__typename===`CommonError`?[]:B?.businessTransactionsFromLedgerRecords.businessTransactions.sort((e,t)=>e.invoiceDate>t.invoiceDate?1:-1)??[],[B]),U=(0,L.useMemo)(()=>{let e=[];for(let t=0;t<H.length;t++){let n=H[t],r=t===0?n.amount.raw:(e[t-1].ilsBalance??0)+n.amount.raw,a={};Object.values(i).map(r=>{if(r!==i.Ils){let i=`${r.toLowerCase()}Balance`;a[i]=t===0?(n.foreignAmount?.currency===r?n.foreignAmount?.raw:0)??0:(e[t-1]?.[i]??0)+(n.foreignAmount?.currency===r?n.foreignAmount?.raw:0)}}),e.push({...n,ilsBalance:r,...a})}return e},[H]),W=(0,L.useMemo)(()=>new Set(H.filter(e=>e.foreignAmount?.currency).map(e=>e.foreignAmount.currency)),[H]),G=ae(),K=(0,L.useMemo)(()=>oe(W),[W]),[q,J]=(0,L.useState)(()=>{try{let e=localStorage.getItem($.COLUMN_VISIBILITY);if(e){let t=JSON.parse(e);return{...K,...t}}}catch{}return K});(0,L.useEffect)(()=>{try{localStorage.setItem($.COLUMN_VISIBILITY,JSON.stringify(q))}catch(e){console.warn(`Failed to save column visibility to localStorage:`,e)}},[q]),(0,L.useEffect)(()=>{J(e=>({...K,...e}))},[K]);let Y=O({data:U,columns:G,getCoreRowModel:ie(),getSortedRowModel:A(),getFilteredRowModel:re(),getPaginationRowModel:N(),onSortingChange:r,onColumnFiltersChange:c,onColumnVisibilityChange:J,onGlobalFilterChange:g,onPaginationChange:v,globalFilterFn:`includesString`,state:{sorting:n,columnFilters:s,columnVisibility:q,globalFilter:h,pagination:_}}),X=H[0]?.business.name??`unknown`;return V?(0,R.jsxs)(`div`,{className:`flex flex-col gap-4 max-w-[90vw] m-2`,children:[(0,R.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,R.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,R.jsx)(y,{className:`h-10 w-64`}),(0,R.jsx)(y,{className:`h-10 w-32`})]}),(0,R.jsx)(y,{className:`size-10`})]}),(0,R.jsx)(`div`,{className:`rounded-md border overflow-x-auto`,children:(0,R.jsxs)(I,{children:[(0,R.jsx)(D,{children:(0,R.jsx)(M,{children:Array.from({length:8}).map((e,t)=>(0,R.jsx)(k,{children:(0,R.jsx)(y,{className:`h-4 w-24`})},t))})}),(0,R.jsx)(j,{children:Array.from({length:5}).map((e,t)=>(0,R.jsx)(M,{children:Array.from({length:8}).map((e,t)=>(0,R.jsx)(P,{children:(0,R.jsx)(y,{className:`h-4 w-full`})},t))},t))})]})})]}):(0,R.jsxs)(`div`,{className:`flex flex-col gap-4 max-w-[90vw] m-2`,children:[(0,R.jsxs)(`div`,{className:`flex items-center justify-between gap-4 flex-wrap`,children:[(0,R.jsxs)(`div`,{className:`flex items-center gap-4 flex-wrap`,children:[(0,R.jsxs)(`div`,{className:`relative flex-1 min-w-[200px] max-w-sm`,children:[(0,R.jsx)(S,{className:`absolute left-2.5 top-2.5 h-4 w-4 text-gray-500`}),(0,R.jsx)(p,{placeholder:`Search reference, details, business...`,value:h??``,onChange:e=>g(e.target.value),className:`pl-8`})]}),(0,R.jsxs)(T,{children:[(0,R.jsx)(w,{asChild:!0,children:(0,R.jsxs)(ne,{variant:`outline`,size:`sm`,children:[(0,R.jsx)(d,{className:`mr-2 h-4 w-4`}),`Columns`]})}),(0,R.jsx)(C,{align:`end`,className:`max-h-96 overflow-y-auto`,children:Y.getAllColumns().filter(e=>e.getCanHide()).map(e=>(0,R.jsx)(te,{className:`capitalize`,checked:e.getIsVisible(),onCheckedChange:t=>e.toggleVisibility(!!t),children:e.id},e.id))})]})]}),(0,R.jsx)(ce,{ledgerRecords:U,businessName:X,fromDate:t?.fromDate??void 0,toDate:t?.toDate??void 0})]}),(0,R.jsx)(`div`,{className:`rounded-md border overflow-x-auto`,children:(0,R.jsxs)(I,{children:[(0,R.jsx)(D,{className:`sticky top-0 z-20 bg-white border-b`,children:Y.getHeaderGroups().map(e=>(0,R.jsx)(M,{children:e.headers.map(e=>(0,R.jsx)(k,{colSpan:e.colSpan,children:e.isPlaceholder?null:F(e.column.columnDef.header,e.getContext())},e.id))},e.id))}),(0,R.jsx)(j,{children:Y.getRowModel().rows?.length?Y.getRowModel().rows.map(e=>(0,R.jsx)(se,{row:e},e.id)):(0,R.jsx)(M,{children:(0,R.jsx)(P,{colSpan:G.length,className:`h-24 text-center`,children:`No transactions found.`})})})]})}),(0,R.jsxs)(`div`,{className:`flex items-center justify-between gap-4 flex-wrap`,children:[(0,R.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,R.jsxs)(`p`,{className:`text-sm text-gray-700`,children:[`Showing`,` `,Y.getState().pagination.pageIndex*Y.getState().pagination.pageSize+1,` to`,` `,Math.min((Y.getState().pagination.pageIndex+1)*Y.getState().pagination.pageSize,Y.getFilteredRowModel().rows.length),` `,`of `,Y.getFilteredRowModel().rows.length,` transactions`]})}),(0,R.jsxs)(`div`,{className:`flex items-center gap-6`,children:[(0,R.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,R.jsx)(`p`,{className:`text-sm font-medium`,children:`Rows per page:`}),(0,R.jsxs)(m,{value:String(Y.getState().pagination.pageSize),onValueChange:e=>{Y.setPageSize(Number(e))},children:[(0,R.jsx)(u,{className:`h-8 w-[70px]`,children:(0,R.jsx)(l,{placeholder:Y.getState().pagination.pageSize})}),(0,R.jsx)(f,{side:`top`,children:[25,50,100,200,500].map(e=>(0,R.jsx)(ee,{value:String(e),children:e},e))})]})]}),(0,R.jsx)(x,{className:`w-fit mx-0`,currentPageIndex:Y.getState().pagination.pageIndex,totalPages:Y.getPageCount(),onChange:e=>Y.setPageIndex(e)})]})]})]})}export{de as t};