@accounter/client
Version:
Accounter client application
2 lines • 10.8 kB
JavaScript
import{Al as e,Cu as t,Du as n,Fa as r,Ia as i,Id as a,La as o,Pa as s,Rl as c,Wl as l,Xn as u,Yi as d,ds as f,er as p,jd as m,ln as h,md as g,nr as _,pd as v,sd as y,xd as b}from"./index-CSYTUOOk.js";import{t as x}from"./page-layout-DE94O32j.js";var S=a(m(),1),C=(e,t)=>d(t,{minimumFractionDigits:0}).format(e),w=t();function T(e){return{id:e.id,chargeId:e.chargeId,date:e.date,description:e.description??``,reference:e.reference??``,amountILS:e.revenueLocal.raw,amountUSD:e.revenueDefaultForeign.raw,originalAmount:e.revenueOriginal.formatted}}var E=({recordData:e})=>{let t=T(u(i,e));return(0,w.jsx)(`div`,{className:`p-2 bg-background rounded-lg border border-border/30 text-sm`,children:(0,w.jsxs)(b,{to:n.CHARGES.DETAIL(t.chargeId),target:`_blank`,rel:`noreferrer`,onClick:e=>e.stopPropagation(),className:`flex items-start justify-between gap-2`,children:[(0,w.jsxs)(`div`,{className:`flex-1`,children:[(0,w.jsx)(`p`,{className:`font-medium text-foreground`,children:t.reference}),(0,w.jsx)(`p`,{className:`font-medium text-foreground`,children:t.description}),(0,w.jsxs)(`div`,{className:`flex gap-4 mt-1 text-xs text-muted-foreground`,children:[(0,w.jsx)(`span`,{children:t.chargeId}),(0,w.jsx)(`span`,{children:t.date})]})]}),(0,w.jsxs)(`div`,{className:`invisible md:visible md:text-right flex-shrink-0`,children:[(0,w.jsx)(`p`,{className:`text-sm font-medium text-foreground`,children:C(t.amountILS,f.Ils)}),(0,w.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:C(t.amountUSD,f.Usd)}),(0,w.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:t.originalAmount})]}),(0,w.jsx)(`div`,{className:`md:invisible ml-2 text-right`,children:(0,w.jsx)(`p`,{className:`text-xs font-medium text-foreground`,children:C(t.amountILS,f.Ils)})})]})})};function D(e){return{id:e.id,name:e.name,revenueILS:e.revenueLocal.raw,revenueUSD:e.revenueDefaultForeign.raw,records:e.records.map(e=>({id:e.id,data:e}))}}var O=({clientData:e})=>{let[t,n]=(0,S.useState)(!1),r=D(u(s,e)),i=()=>{n(e=>!e)},a=(0,S.useMemo)(()=>r.records.slice().sort((e,t)=>e.data.date.localeCompare(t.data.date)),[r.records]);return(0,w.jsxs)(`div`,{children:[(0,w.jsxs)(`button`,{onClick:i,className:`w-full flex items-center justify-between p-2 bg-background rounded-lg border border-border/50 hover:bg-accent/5 transition-colors`,children:[(0,w.jsxs)(`div`,{className:`flex items-center gap-3 flex-1`,children:[t?(0,w.jsx)(g,{className:`size-4 text-muted-foreground flex-shrink-0`}):(0,w.jsx)(v,{className:`size-4 text-muted-foreground flex-shrink-0`}),(0,w.jsxs)(`div`,{className:`text-left`,children:[(0,w.jsx)(`p`,{className:`font-medium text-foreground text-sm`,children:r.name}),(0,w.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[r.records?.length||0,` record`,r.records?.length===1?``:`s`]})]})]}),(0,w.jsxs)(`div`,{className:`hidden md:grid grid-cols-2 gap-4 text-right flex-shrink-0`,children:[(0,w.jsx)(`div`,{children:(0,w.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:C(r.revenueILS,f.Ils)})}),(0,w.jsx)(`div`,{children:(0,w.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:C(r.revenueUSD,f.Usd)})})]}),(0,w.jsxs)(`div`,{className:`md:hidden ml-4 text-right`,children:[(0,w.jsx)(`p`,{className:`text-xs font-medium text-foreground`,children:C(r.revenueILS,f.Ils)}),(0,w.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:C(r.revenueUSD,f.Usd)})]})]}),t&&a&&(0,w.jsx)(`div`,{className:`mt-3 ml-2 space-y-3 border-l-2 border-border/50 pl-2`,children:a.map(e=>(0,w.jsx)(E,{recordData:e.data},e.id))})]})};function k(e){return{code:e.code,name:e.name,revenues:{ILS:e.revenueLocal.raw,USD:e.revenueDefaultForeign.raw},clients:e.clients.map(e=>({id:e.id,data:e}))}}var A=({countryData:e})=>{let[t,n]=(0,S.useState)(!1),i=k(u(r,e)),a=()=>{n(e=>!e)},o={ILS:i.revenues.ILS,USD:i.revenues.USD},s=i.clients.slice().sort((e,t)=>t.data.revenueDefaultForeign.raw-e.data.revenueDefaultForeign.raw);return(0,w.jsxs)(c,{className:`border border-border`,children:[(0,w.jsxs)(`button`,{onClick:()=>a(),className:`w-full px-4 py-2 hover:bg-accent/5 transition-colors flex items-center justify-between`,children:[(0,w.jsxs)(`div`,{className:`flex items-center gap-2 flex-1`,children:[t?(0,w.jsx)(g,{className:`size-5 text-muted-foreground flex-shrink-0`}):(0,w.jsx)(v,{className:`size-5 text-muted-foreground flex-shrink-0`}),(0,w.jsxs)(`div`,{className:`text-left`,children:[(0,w.jsx)(`p`,{className:`font-semibold text-foreground text-lg`,children:i.name}),(0,w.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[i.clients.length,` clients`]})]})]}),(0,w.jsxs)(`div`,{className:`hidden md:grid grid-cols-2 gap-4 text-right flex-shrink-0`,children:[(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`p`,{className:`text-sm text-muted-foreground mb-1`,children:`ILS`}),(0,w.jsx)(`p`,{className:`font-semibold text-foreground`,children:C(i.revenues.ILS,f.Ils)})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`p`,{className:`text-sm text-muted-foreground mb-1`,children:`USD`}),(0,w.jsx)(`p`,{className:`font-semibold text-foreground`,children:C(i.revenues.USD,f.Usd)})]})]})]}),(0,w.jsxs)(`div`,{className:`md:hidden px-2 py-2 bg-accent/5 border-t border-border flex gap-4`,children:[(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`p`,{className:`text-xs text-muted-foreground mb-1`,children:`ILS`}),(0,w.jsx)(`p`,{className:`font-semibold text-foreground`,children:C(i.revenues.ILS,f.Ils)})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`p`,{className:`text-xs text-muted-foreground mb-1`,children:`USD`}),(0,w.jsx)(`p`,{className:`font-semibold text-foreground`,children:C(i.revenues.USD,f.Usd)})]})]}),t&&(0,w.jsx)(`div`,{className:`border-t border-border`,children:(0,w.jsxs)(`div`,{className:`space-y-2 p-3 bg-muted/30`,children:[s.map(e=>(0,w.jsx)(O,{clientData:e.data},e.id)),(0,w.jsx)(`div`,{className:`pt-2 border-t border-border/50 mt-4`,children:(0,w.jsxs)(`div`,{className:`flex items-center justify-between p-2`,children:[(0,w.jsx)(`p`,{className:`font-semibold text-foreground text-sm`,children:`Clients Subtotal`}),(0,w.jsxs)(`div`,{className:`hidden md:grid grid-cols-2 gap-4 text-right`,children:[(0,w.jsx)(`div`,{children:(0,w.jsx)(`p`,{className:`font-semibold text-foreground`,children:C(o.ILS,f.Ils)})}),(0,w.jsx)(`div`,{children:(0,w.jsx)(`p`,{className:`font-semibold text-foreground`,children:C(o.USD,f.Usd)})})]}),(0,w.jsxs)(`div`,{className:`md:hidden ml-4 text-right`,children:[(0,w.jsx)(`p`,{className:`text-sm font-semibold text-foreground`,children:C(o.ILS,f.Ils)}),(0,w.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:C(o.USD,f.Usd)})]})]})})]})})]},i.code)},j=()=>{let[t,n]=(0,S.useState)(new Date().getFullYear()-1),[{data:r,fetching:i}]=e({query:o,variables:{filters:{year:t}}}),{setFiltersContext:a}=(0,S.useContext)(p),s=(0,S.useMemo)(()=>`Annual Revenue Report for ${t}`,[t]),{totalClients:u,totalRevenueIls:d,totalRevenueUsd:m}=(0,S.useMemo)(()=>{let e={totalClients:0,totalRevenueIls:0,totalRevenueUsd:0};return r?.annualRevenueReport?.countries?.map(t=>{e.totalClients+=t.clients.length,e.totalRevenueIls+=t.revenueLocal.raw,e.totalRevenueUsd+=t.revenueDefaultForeign.raw}),e},[r?.annualRevenueReport?.countries]),g=(0,S.useCallback)(()=>{let e=[];e.push(`Country,Client,charge ID,Date,Description,Revenue ILS,Revenue USD`),e.push(`Annual,,,,TOTAL,${d.toFixed(2)},${m.toFixed(2)}`),[...r?.annualRevenueReport?.countries??[]].sort((e,t)=>t.revenueDefaultForeign.raw-e.revenueDefaultForeign.raw).map(t=>{e.push(`${t.name},,,,TOTAL,${t.revenueLocal.raw.toFixed(2)},${t.revenueDefaultForeign.raw.toFixed(2)}`),t.clients.sort((e,t)=>t.revenueDefaultForeign.raw-e.revenueDefaultForeign.raw).map(n=>{n.records&&n.records.length>0?(e.push(`${t.name},${n.name},,,TOTAL,${n.revenueLocal.raw.toFixed(2)},${n.revenueDefaultForeign.raw.toFixed(2)}`),n.records.sort((e,t)=>e.date.localeCompare(t.date)).map(r=>{e.push(`${t.name},${n.name},${r.chargeId},${r.date},${r.description},${r.revenueLocal.raw.toFixed(2)},${r.revenueDefaultForeign.raw.toFixed(2)}`)})):e.push(`${t.name},${n.name},,,,,`)})});let n=e.join(`
`),i=new Blob([n],{type:`text/csv;charset=utf-8;`}),a=document.createElement(`a`),o=URL.createObjectURL(i);a.setAttribute(`href`,o),a.setAttribute(`download`,`annual-revenue-${t}.csv`),a.style.visibility=`hidden`,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(o)},[t,r,d,m]);(0,S.useEffect)(()=>{a((0,w.jsxs)(`div`,{className:`flex items-center justify-end gap-2`,children:[(0,w.jsx)(h,{value:new Date(t,0,1),onChange:e=>e&&n(e?.getFullYear()),popoverProps:{withinPortal:!0},minDate:new Date(2010,0,1),maxDate:new Date}),(0,w.jsxs)(l,{onClick:g,variant:`outline`,size:`sm`,className:`flex items-center gap-2 bg-transparent`,children:[(0,w.jsx)(y,{className:`h-4 w-4`}),(0,w.jsx)(`span`,{className:`hidden sm:inline`,children:`Export CSV`})]})]}))},[t,i,a,g]);let v=(0,S.useMemo)(()=>r?.annualRevenueReport.countries.slice().sort((e,t)=>t.revenueDefaultForeign.raw-e.revenueDefaultForeign.raw),[r]);return(0,w.jsx)(x,{title:`Annual Revenue Report`,description:s,children:i?(0,w.jsx)(_,{}):(0,w.jsx)(`div`,{className:`min-h-screen bg-background`,children:(0,w.jsx)(`main`,{className:`container mx-auto px-2 py-2 max-w-7xl`,children:(0,w.jsxs)(`div`,{className:`space-y-2`,children:[(0,w.jsxs)(c,{className:`border border-border bg-accent/10`,children:[(0,w.jsxs)(`div`,{className:`w-full px-4 py-2 pl-12 transition-colors flex items-center justify-between`,children:[(0,w.jsx)(`div`,{className:`flex items-center gap-2 flex-1`,children:(0,w.jsxs)(`div`,{className:`text-left`,children:[(0,w.jsx)(`p`,{className:`font-semibold text-foreground text-lg`,children:`Total Revenue`}),(0,w.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[u,` clients`]})]})}),(0,w.jsxs)(`div`,{className:`hidden md:grid grid-cols-2 gap-4 text-right flex-shrink-0`,children:[(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`p`,{className:`text-sm text-muted-foreground mb-1`,children:`ILS`}),(0,w.jsx)(`p`,{className:`font-semibold text-foreground`,children:C(d,f.Ils)})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`p`,{className:`text-sm text-muted-foreground mb-1`,children:`USD`}),(0,w.jsx)(`p`,{className:`font-semibold text-foreground`,children:C(m,f.Usd)})]})]})]}),(0,w.jsxs)(`div`,{className:`md:hidden px-2 py-2 bg-accent/5 border-t border-border flex gap-4`,children:[(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`p`,{className:`text-xs text-muted-foreground mb-1`,children:`ILS`}),(0,w.jsx)(`p`,{className:`font-semibold text-foreground`,children:C(d,f.Ils)})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`p`,{className:`text-xs text-muted-foreground mb-1`,children:`USD`}),(0,w.jsx)(`p`,{className:`font-semibold text-foreground`,children:C(m,f.Usd)})]})]})]}),v?.map(e=>(0,w.jsx)(A,{countryData:e},e.id))]})})})})};export{j as AnnualRevenueReport};