@accounter/client 0.0.11-alpha-20260126102906-e2f97aac11150a8d1bac3d3fba7a2805e5a71368 → 0.0.11-alpha-20260126121840-9987d09cc7cb596314ad01124c1061feba2117b0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -1
- package/dist/assets/{Checkbox-Dmuz3t7B.js → Checkbox-D5PsdcQv.js} +1 -1
- package/dist/assets/{MultiSelect-DBeIExB5.js → MultiSelect-C5wjF9jC.js} +1 -1
- package/dist/assets/{Progress---sZILQb.js → Progress-CUpt9lUI.js} +1 -1
- package/dist/assets/{Table-BQv3frL8.js → Table-pGQWLQ8H.js} +1 -1
- package/dist/assets/{Typography-B8Kph7eR.js → Typography-B3aRT5ej.js} +1 -1
- package/dist/assets/{accordion-Bn08_4fN.js → accordion-Bd6kAhfN.js} +1 -1
- package/dist/assets/{accountant-approvals-DuNl7y6H.js → accountant-approvals-BJGkKn8O.js} +1 -1
- package/dist/assets/{accounter-table-DTsgtq5M.js → accounter-table-CioecC_Y.js} +1 -1
- package/dist/assets/{addDays-DTiBTTns.js → addDays-DhQZBfTq.js} +1 -1
- package/dist/assets/{all-charges-DPyM-a74.js → all-charges-UjLePnh5.js} +1 -1
- package/dist/assets/{arrow-up-down-VY6mkkTR.js → arrow-up-down-YhPbp1Ud.js} +1 -1
- package/dist/assets/{building-2-CMKd_bU8.js → building-2-Df516nsd.js} +1 -1
- package/dist/assets/{business-BVMKhHFx.js → business-CryBsRqy.js} +1 -1
- package/dist/assets/{business-extended-info-B94y5ZK6.js → business-extended-info-zz1obrFs.js} +1 -1
- package/dist/assets/{business-header-BC86M-9m.js → business-header-DL-hzsQ4.js} +1 -1
- package/dist/assets/{business-ledger-filters-es3H4rPK.js → business-ledger-filters-Dh6IJIbe.js} +1 -1
- package/dist/assets/{business-ledger-single-U3zkqgW2.js → business-ledger-single-ebXw596v.js} +1 -1
- package/dist/assets/{business-trip-BUKYnQkG.js → business-trip-Bn5hm1D5.js} +1 -1
- package/dist/assets/charge-DhvD1RST.js +1 -0
- package/dist/assets/{charges-filters-CFCAP-bP.js → charges-filters-BLSfy08K.js} +1 -1
- package/dist/assets/{charges-ledger-validation-CCTNRpCE.js → charges-ledger-validation-BOn22w9P.js} +1 -1
- package/dist/assets/charges-table-Bjk5Mz--.js +7 -0
- package/dist/assets/{contracts-ljjcB_x7.js → contracts-iKKpsNnL.js} +1 -1
- package/dist/assets/{data-table-column-header-CZ1dXiU0.js → data-table-column-header--gzXkv5r.js} +1 -1
- package/dist/assets/{data-table-pagination-XAlQIbO9.js → data-table-pagination-CLXUcmJJ.js} +1 -1
- package/dist/assets/{deposits-transactions-table-2rtRFZgK.js → deposits-transactions-table-CV-YceTW.js} +1 -1
- package/dist/assets/{download-csv-button-CMQBUQeX.js → download-csv-button-DVLHjMAB.js} +1 -1
- package/dist/assets/{download-csv-BSGaUZsM.js → download-csv-weF1Lwst.js} +1 -1
- package/dist/assets/{editable-business-trip-CED1Su3d.js → editable-business-trip-DRSlJ54m.js} +1 -1
- package/dist/assets/{eye-off-Buv7eciz.js → eye-off-DWYC0Eax.js} +1 -1
- package/dist/assets/{funnel-Cfb9Pxmr.js → funnel-0IvwyZBf.js} +1 -1
- package/dist/assets/{index-CPMJQkvw.js → index-1oajNqKA.js} +1 -1
- package/dist/assets/{index-CcZll7L2.js → index-AI_GyykK.js} +1 -1
- package/dist/assets/{index-B4OP8iL7.js → index-B6VKQBtu.js} +1 -1
- package/dist/assets/{index-DIrLsKod.js → index-BA-I_zCt.js} +1 -1
- package/dist/assets/{index-DRBzHdu9.js → index-BESPuoZl.js} +1 -1
- package/dist/assets/{index-8fdLByFg.js → index-BFEE5U-A.js} +1 -1
- package/dist/assets/{index-DGAT1KYx.js → index-BINmUTjA.js} +1 -1
- package/dist/assets/{index-DokXNUuN.js → index-BoVSybOL.js} +1 -1
- package/dist/assets/{index-C7p19nIa.js → index-BrgWieYs.js} +1 -1
- package/dist/assets/{index-CSdQtH7c.js → index-Bw_9Tifu.js} +1 -1
- package/dist/assets/{index-BN-I0GSO.js → index-CAAL0SGN.js} +1 -1
- package/dist/assets/{index-Dq33WQoi.js → index-CGpiJ6wl.js} +1 -1
- package/dist/assets/{index-X9rrwleE.js → index-CHzieg87.js} +1 -1
- package/dist/assets/{index-B0hZ0TDG.js → index-CVefTdZ8.js} +1 -1
- package/dist/assets/{index-DOy0Yf1i.js → index-CYLoUT7S.js} +1 -1
- package/dist/assets/{index-Dal_ULkA.js → index-CgvjLFyG.js} +1 -1
- package/dist/assets/{index-DzzUoyj4.js → index-CkPv0ZF8.js} +1 -1
- package/dist/assets/{index-X3RoQQa9.js → index-Cm0VDoDd.js} +1 -1
- package/dist/assets/{index-rI994S3C.js → index-D1_HHRLX.js} +4 -4
- package/dist/assets/{index-BhFsGqUx.js → index-DSAS0BpU.js} +1 -1
- package/dist/assets/{index-7gCTV42h.js → index-DZFQ92ui.js} +1 -1
- package/dist/assets/{index-3ev2Q3E9.js → index-D_XfDEW8.js} +1 -1
- package/dist/assets/{index-Bui9zV-z.js → index-DaDghnaZ.js} +1 -1
- package/dist/assets/{index-DJY6AKiM.js → index-MPZl3TTq.js} +1 -1
- package/dist/assets/{index-GlUqZUgQ.js → index-ajJcMQms.js} +1 -1
- package/dist/assets/{index-CjG9JDZB.js → index-v8SIf-h9.js} +1 -1
- package/dist/assets/{index.es-C2YDJ0AL.js → index.es-Dkm1W8bL.js} +1 -1
- package/dist/assets/issue-document-yi3XXbpe.js +1 -0
- package/dist/assets/{login-page-BimTSmTC.js → login-page-B5bqhOTx.js} +1 -1
- package/dist/assets/{missing-info-charges-CVhY60ZL.js → missing-info-charges-DiIM7lBQ.js} +1 -1
- package/dist/assets/{modal-BXR_xgUm.js → modal-CNW2FGYc.js} +1 -1
- package/dist/assets/{modify-contract-dialog-flMl2p_T.js → modify-contract-dialog-BBPR_IL8.js} +1 -1
- package/dist/assets/{page-layout-DMGj5xhW.js → page-layout-BOjYoqoi.js} +1 -1
- package/dist/assets/{page-not-found-B_GB5ntj.js → page-not-found-UQZi0ekr.js} +1 -1
- package/dist/assets/{panel-top-open-Bf39HBrp.js → panel-top-open-Bxnxp1BU.js} +1 -1
- package/dist/assets/{report-commentary-row-BMyeQR9J.js → report-commentary-row-BtmSnv64.js} +1 -1
- package/dist/assets/{save-jkuyCWyY.js → save-BHNOV5fu.js} +1 -1
- package/dist/assets/{similar-transactions-modal-DX3CPrMo.js → similar-transactions-modal-BTidmv0G.js} +1 -1
- package/dist/assets/{sub-CEXBz_OW.js → sub-6-HnNA3H.js} +1 -1
- package/dist/assets/subMonths-nC9-M0qS.js +1 -0
- package/dist/assets/{summary-CPKS_69D.js → summary-C5TvRXn1.js} +1 -1
- package/dist/assets/{toggle-expansion-button-Y2eS7nqg.js → toggle-expansion-button-Dg_XsE6y.js} +1 -1
- package/dist/assets/{update-accountant-status-zL6vnwU9.js → update-accountant-status-CU6mIJqS.js} +1 -1
- package/dist/assets/{use-issue-monthly-documents-D9vQpbaZ.js → use-issue-monthly-documents-CdxtNiuP.js} +1 -1
- package/dist/assets/{use-url-query-CqWra6gD.js → use-url-query-RoURh24O.js} +1 -1
- package/dist/index.html +1 -1
- package/package.json +1 -1
- package/src/components/common/merge-charges/index.tsx +1 -1
- package/src/components/common/modals/preview-document-modal.tsx +5 -2
- package/src/gql/graphql.ts +1 -1
- package/dist/assets/charge-DuqIMfNm.js +0 -1
- package/dist/assets/charges-table-BJtpvXfL.js +0 -7
- package/dist/assets/issue-document-zNxGzRkY.js +0 -1
- package/dist/assets/subMonths-DY4HlBVa.js +0 -1
package/dist/assets/{editable-business-trip-CED1Su3d.js → editable-business-trip-DRSlJ54m.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{v as ve,cj as We,ck as qe,r as x,j as e,B as v,L as Be,g as w,cl as Ge,t as m,i as B,H as Se,u as ie,cm as ge,bE as b,bH as Y,cn as oe,co as Ne,cp as Ie,aC as Ye,bF as q,bG as G,w as F,ay as Fe,cq as Me,l as U,T as C,a3 as J,E as N,n as E,V as S,Y as M,Z as z,_ as Q,$ as P,I as ee,a1 as H,b7 as ze,cr as Z,d as K,cs as Ze,ct as Ke,cu as Xe,bv as D,cv as Qe,bX as Pe,cw as $e,ah as be,R as ye,a6 as A,cx as Je,ag as se,e as te,cy as es,cz as ss,cA as ts,cB as ns,bD as Oe,cC as rs,cD as is,cE as as,cF as Re,cG as os,cH as cs,cI as ds,cJ as ls,cK as us,cL as hs,at as je,cM as xs,cN as ps,cO as ms,cP as gs,cQ as js,cR as fs,cS as vs,cT as bs,cU as ys,cV as Ts,cW as Es,cX as Cs,cY as As,cZ as Ds,c_ as ws,c$ as Bs,d0 as Ss,d1 as Ns,d2 as Is,q as Fs,d3 as Ms,d4 as zs,d5 as Ps,d6 as $s,d7 as Os,d8 as fe,d9 as Rs,da as ks}from"./index-rI994S3C.js";import{G as re,L as me,C as ke,R as Hs,S as Vs}from"./summary-CPKS_69D.js";import{T as ne}from"./Table-BQv3frL8.js";import{T as Us}from"./toggle-expansion-button-Y2eS7nqg.js";import{M as He}from"./MultiSelect-DBeIExB5.js";import{a as Ls,u as _s,S as Ws}from"./similar-transactions-modal-DX3CPrMo.js";import{A as qs,a as L,b as _,c as W}from"./accordion-Bn08_4fN.js";const Gs=[["path",{d:"M19 17h2c.6 0 1-.4 1-1v-3c0-.9-.7-1.7-1.5-1.9C18.7 10.6 16 10 16 10s-1.3-1.4-2.2-2.3c-.5-.4-1.1-.7-1.8-.7H5c-.6 0-1.1.4-1.4.9l-1.4 2.9A3.7 3.7 0 0 0 2 12v4c0 .6.4 1 1 1h2",key:"5owen"}],["circle",{cx:"7",cy:"17",r:"2",key:"u2ysq9"}],["path",{d:"M9 17h6",key:"r8uit2"}],["circle",{cx:"17",cy:"17",r:"2",key:"axvx0g"}]],Ys=ve("car",Gs);const Zs=[["path",{d:"M14 13h2a2 2 0 0 1 2 2v2a2 2 0 0 0 4 0v-6.998a2 2 0 0 0-.59-1.42L18 5",key:"1wtuz0"}],["path",{d:"M14 21V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v16",key:"e09ifn"}],["path",{d:"M2 21h13",key:"1x0fut"}],["path",{d:"M3 9h11",key:"1p7c0w"}]],Ks=ve("fuel",Zs);const Xs=[["path",{d:"M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2",key:"143wyd"}],["path",{d:"M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6",key:"1itne7"}],["rect",{x:"6",y:"14",width:"12",height:"8",rx:"1",key:"1ue0tg"}]],Qs=ve("printer",Xs);var k=3.77952755906,xe={method:"save",resolution:3,page:{margin:0,format:"A4",orientation:"portrait"},canvas:{mimeType:"image/jpeg",qualityRatio:1,useCORS:!0,logging:!1},overrides:{}},Js=class{pdf;canvas;options;constructor(a,n){this.canvas=a,this.options=n,this.pdf=new qe({format:this.options.page.format,orientation:this.options.page.orientation,...this.options.overrides?.pdf,unit:"mm"})}getMarginTopMM(){const a=typeof this.options.page.margin=="object"?this.options.page.margin.top:this.options.page.margin;return Number(a)}getMarginLeftMM(){const a=typeof this.options.page.margin=="object"?this.options.page.margin.left:this.options.page.margin;return Number(a)}getMarginRightMM(){const a=typeof this.options.page.margin=="object"?this.options.page.margin.right:this.options.page.margin;return Number(a)}getMarginBottomMM(){const a=typeof this.options.page.margin=="object"?this.options.page.margin.bottom:this.options.page.margin;return Number(a)}getMarginTop(){return this.getMarginTopMM()*k}getMarginBottom(){return this.getMarginBottomMM()*k}getMarginLeft(){return this.getMarginLeftMM()*k}getMarginRight(){return this.getMarginRightMM()*k}getScale(){return this.options.resolution}getPageHeight(){return this.getPageHeightMM()*k}getPageHeightMM(){return this.pdf.internal.pageSize.height}getPageWidthMM(){return this.pdf.internal.pageSize.width}getPageWidth(){return this.getPageWidthMM()*k}getOriginalCanvasWidth(){return this.canvas.width/this.getScale()}getOriginalCanvasHeight(){return this.canvas.height/this.getScale()}getCanvasPageAvailableHeight(){return this.getPageAvailableHeight()*this.getScale()*this.getHorizontalFitFactor()}getPageAvailableWidth(){return this.getPageWidth()-(this.getMarginLeft()+this.getMarginRight())}getPageAvailableHeight(){return this.getPageHeight()-(this.getMarginTop()+this.getMarginBottom())}getPageAvailableWidthMM(){return this.getPageAvailableWidth()/k}getPageAvailableHeightMM(){return this.getPageAvailableHeight()/k}getNumberPages(){return Math.ceil(this.canvas.height/this.getCanvasPageAvailableHeight())}getHorizontalFitFactor(){return this.getPageAvailableWidth()<this.getOriginalCanvasWidth()?this.getOriginalCanvasWidth()/this.getPageAvailableWidth():1}getCanvasOffsetY(a){return this.getCanvasPageAvailableHeight()*(a-1)}getCanvasHeightLeft(a){return this.canvas.height-this.getCanvasOffsetY(a)}getCanvasPageHeight(a){if(this.canvas.height<this.getCanvasPageAvailableHeight())return this.canvas.height;const n=this.getCanvasHeightLeft(a);return n<this.getCanvasPageAvailableHeight()?n:this.getCanvasPageAvailableHeight()}getCanvasPageWidth(){return this.canvas.width}createCanvasPage(a){const n=this.getCanvasPageWidth(),i=this.getCanvasPageHeight(a),t=document.createElement("canvas");return t.setAttribute("width",String(n)),t.setAttribute("height",String(i)),t.getContext("2d").drawImage(this.canvas,0,this.getCanvasOffsetY(a),this.canvas.width,i,0,0,this.canvas.width,i),t}convert(){let a=1;const n=this.getNumberPages();for(;a<=n;){a>1&&this.pdf.addPage(this.options.page.format,this.options.page.orientation);const i=this.createCanvasPage(a),t=i.toDataURL(this.options.canvas.mimeType,this.options.canvas.qualityRatio);this.pdf.setPage(a),this.pdf.addImage({imageData:t,width:i.width/(this.getScale()*k*this.getHorizontalFitFactor()),height:i.height/(this.getScale()*k*this.getHorizontalFitFactor()),x:this.getMarginLeftMM(),y:this.getMarginTopMM()}),a+=1}return this.pdf}},et=a=>a?{...xe,...a,canvas:{...xe.canvas,...a.canvas},page:{...xe.page,...a.page}}:xe,st=a=>typeof a=="function"?a():a?.current,tt=async(a,n)=>{const i=et(n),t=st(a);if(!t){console.error("Unable to get the target element.");return}const s=await We(t,{useCORS:i.canvas.useCORS,logging:i.canvas.logging,scale:i.resolution,...i.overrides?.canvas}),o=new Js(s,i).convert();switch(i.method){case"build":return o;case"open":return window.open(o.output("bloburl"),"_blank"),o;default:{const d=i.filename??`${new Date().getTime()}.pdf`;return await o.save(d,{returnPromise:!0}),o}}},nt=tt;const rt={method:"open",overrides:{pdf:{compress:!0}}},it=()=>document.getElementById("main-page"),Dn=({filename:a})=>{const[n,i]=x.useState(!1),t=async()=>{i(!0),await nt(it,{...rt,filename:a}),i(!1)};return e.jsx(v,{variant:"outline",size:"icon",className:"size-7.5",onClick:t,disabled:n,children:n?e.jsx(Be,{className:"h-10 w-10 animate-spin mr-2 self-center"}):e.jsx(Qs,{className:"size-5"})})},at="addBusinessTripAccommodationsExpense",ot=()=>{const[{fetching:a},n]=w(Ge),i=x.useCallback(async t=>{const s="Error adding business trip accommodations expense",r=at;m.loading("Adding Business Trip Accommodations Expense",{id:r});try{const o=await n(t),d=B(o,s,r);if(d)return m.success("Success",{id:r,description:"Business trip accommodations expense added"}),d.addBusinessTripAccommodationsExpense}catch(o){console.error(`${s}: ${o}`),m.error("Error",{id:r,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:a,addBusinessTripAccommodationsExpense:i}};function Ve({formManager:a,attendeesStayPath:n,attendeesData:i,fetchingAttendees:t=!1,businessTripId:s}){const{control:r,watch:o,trigger:d}=a,{fields:g,append:j,remove:h}=Se({control:r,name:n}),[l,c]=x.useState(t),[u,p]=x.useState(i??[]),f=o(n),T=g.map((I,O)=>({...I,...f[O]}));x.useEffect(()=>{i&&p(i)},[i]),x.useEffect(()=>{c(t)},[t]);const[{data:y,fetching:$},X]=ie({query:ge,pause:!0,variables:{businessTripId:s??""}});return x.useEffect(()=>{if(y?.businessTrip?.attendees.length){const I=y.businessTrip.attendees.map(O=>({value:O.id,label:O.name}))??[];p(I)}},[y?.businessTrip?.attendees]),x.useEffect(()=>{c($)},[$]),x.useEffect(()=>{!i&&!y&&!t&&!$&&X({businessTripId:s})},[i,t,$,X,s,y]),!s&&!i?e.jsx("div",{children:"Cannot edit attendees stay, lacking some mandatory information!"}):e.jsxs("div",{children:[e.jsx("span",{className:"mantine-InputWrapper-label mantine-Select-label",children:"Employees Stay"}),e.jsxs("div",{className:"h-full flex flex-col overflow-hidden",children:[T?.map((I,O)=>e.jsxs("div",{className:"flex items-end gap-2 text-gray-600 mb-2",children:[e.jsx("div",{className:"w-full mt-1 relative rounded-md shadow-xs",children:e.jsx(b,{name:`${n}.${O}.attendeeId`,control:r,rules:{required:"Required"},render:({field:R,fieldState:ae})=>e.jsx(Y,{...R,disabled:l,data:u,value:R.value??void 0,label:"Attendee",placeholder:"Scroll to see all options",maxDropdownHeight:160,searchable:!0,error:ae.error?.message,withinPortal:!0,required:!0})})}),e.jsx("div",{className:"w-full mt-1 relative rounded-md shadow-xs",children:e.jsx(b,{control:r,name:`${n}.${O}.nightsCount`,render:({field:R,fieldState:ae})=>e.jsx(oe,{className:"w-full",...R,min:0,label:"Nights Count",value:R.value??void 0,hideControls:!0,precision:0,error:ae.error?.message,required:!0,onChange:V=>R.onChange(V&&typeof V=="number"?V:void 0)})})}),e.jsx(v,{variant:"ghost",size:"icon",className:"mb-2 size-7.5",onClick:()=>{h(O),d(n)},children:e.jsx(Ne,{className:"size-5"})})]},I.id)),e.jsx(v,{variant:"ghost",size:"icon",className:"size-7.5",onClick:()=>{j({}),d(n)},children:e.jsx(Ie,{className:"size-5"})})]})]})}function ce({businessTripId:a,control:n,setFetching:i}){const[t,s]=x.useState([]),[{data:r,fetching:o,error:d}]=ie({query:ge,variables:{businessTripId:a}}),{userContext:g}=x.useContext(Ye);x.useEffect(()=>{r?.businessTrip?.attendees.length&&s(r.businessTrip.attendees.map(h=>({value:h.id,label:h.name})).sort((h,l)=>h.label>l.label?1:-1))},[r,s]),x.useEffect(()=>{i(o)},[i,o]),x.useEffect(()=>{d&&m.error("Error",{description:"Oops, we have an error fetching attendees"})},[d]);const j=x.useMemo(()=>g?.context.ledgerLock,[g]);return e.jsxs(e.Fragment,{children:[e.jsx(b,{name:"date",control:n,rules:{min:j?{value:j,message:`Date must be after ${j}`}:void 0,pattern:{value:q,message:"Date must be im format yyyy-mm-dd"}},render:({field:h,fieldState:l})=>e.jsx(G,{"data-autofocus":!0,...h,onChange:c=>{const u=c?typeof c=="string"?c:F(c,"yyyy-MM-dd"):void 0;u!==h.value&&h.onChange(u)},value:h.value?new Date(h.value):void 0,error:l.error?.message,label:"Date",popoverProps:{withinPortal:!0}})}),e.jsx(b,{name:"valueDate",control:n,rules:{pattern:{value:q,message:"Date must be im format yyyy-mm-dd"},min:j?{value:j,message:`Date must be after ${j}`}:void 0},render:({field:h,fieldState:l})=>e.jsx(G,{...h,onChange:c=>{const u=c?typeof c=="string"?c:F(c,"yyyy-MM-dd"):void 0;u!==h.value&&h.onChange(u)},value:h.value?new Date(h.value):void 0,error:l.error?.message,label:"Value Date",popoverProps:{withinPortal:!0}})}),e.jsx(b,{name:"amount",control:n,render:({field:h,fieldState:l})=>e.jsx(b,{name:"currency",control:n,defaultValue:Fe.Ils,render:({field:c,fieldState:u})=>e.jsx(Me,{...h,value:h.value??void 0,error:l.error?.message||u.error?.message,label:"Amount",currencyCodeProps:{...c,label:"Currency"}})})}),e.jsx(b,{name:"employeeBusinessId",control:n,render:({field:h,fieldState:l})=>e.jsx(Y,{...h,data:t,value:h.value,disabled:o,label:"Attendee",placeholder:"Scroll to see all options",maxDropdownHeight:160,searchable:!0,error:l.error?.message,withinPortal:!0})})]})}function Te(a){const{businessTripId:n,onAdd:i}=a,[t,{close:s,open:r}]=U(!1);return e.jsxs(e.Fragment,{children:[e.jsx(C,{content:"Add Accommodations Expense",children:e.jsx(v,{variant:"outline",size:"icon",className:"size-7.5",onClick:o=>{o.stopPropagation(),r()},children:e.jsx(J,{className:"size-5"})})}),t&&e.jsx(ct,{businessTripId:n,opened:t,close:s,onAdd:i})]})}function ct({businessTripId:a,opened:n,close:i,onAdd:t}){const s=N({defaultValues:{businessTripId:a}}),{control:r,handleSubmit:o}=s,[d,g]=x.useState(!1),{addBusinessTripAccommodationsExpense:j,fetching:h}=ot(),l=c=>{j({fields:c}).then(()=>{t?.(),i()})};return e.jsxs(E,{opened:n,onClose:i,centered:!0,lockScroll:!0,children:[e.jsx(E.Title,{children:"Add Accommodation Expense"}),e.jsx(E.Body,{children:e.jsx(S,{...s,children:e.jsxs("form",{onSubmit:o(l),className:"space-y-3",children:[e.jsx(ce,{businessTripId:a,control:r,setFetching:g}),e.jsx(M,{control:r,name:"country",render:({field:c})=>e.jsxs(z,{children:[e.jsx(Q,{children:"Country"}),e.jsx(P,{children:e.jsx(ee,{...c,value:c.value??void 0})}),e.jsx(H,{})]})}),e.jsx(M,{name:"nightsCount",control:r,render:({field:c})=>e.jsxs(z,{children:[e.jsx(Q,{children:"Nights Count"}),e.jsx(P,{children:e.jsx(ze,{...c,value:c.value??void 0,hideControls:!0,decimalScale:0,thousandSeparator:","})}),e.jsx(H,{})]})}),e.jsx(Ve,{formManager:s,attendeesStayPath:"attendeesStay",businessTripId:a}),e.jsx("div",{className:"flex justify-center mt-5 gap-3",children:e.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:"Add"})})]})})}),(h||d)&&e.jsx(Z,{blur:1,center:!0,children:e.jsx(K,{})})]})}const dt="updateBusinessTripAccommodationsExpense",lt=()=>{const[{fetching:a},n]=w(Ze),i=x.useCallback(async t=>{const s="Error updating business trip accommodations expense",r=dt;m.loading("Updating trip accommodations expense",{id:r});try{const o=await n(t),d=B(o,s,r);if(d)return m.success("Success",{id:r,description:"Business trip accommodations expense was updated"}),d.updateBusinessTripAccommodationsExpense}catch(o){console.error(`${s}: ${o}`),m.error("Error",{id:r,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:a,updateBusinessTripAccommodationsExpense:i}},ut="categorizeIntoExistingBusinessTripExpense",ht=()=>{const[{fetching:a},n]=w(Ke),i=x.useCallback(async t=>{const s="Error updating business trip expense category",r=ut;m.loading("Updating business trip expense category",{id:r});try{const o=await n(t),d=B(o,s,r);if(d)return m.success("Success",{id:r,description:"Business trip expense category was updated"}),d.categorizeIntoExistingBusinessTripExpense}catch(o){console.error(`${s}: ${o}`),m.error("Error",{id:r,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:a,categorizeIntoExistingBusinessTripExpense:i}};function de(a){const{businessTripExpenseId:n,businessTripId:i,onChange:t}=a,[s,{close:r,open:o}]=U(!1);return e.jsxs(e.Fragment,{children:[e.jsx(C,{content:"Attach Uncategorized Transaction",children:e.jsx(v,{variant:"outline",size:"icon",className:"size-7.5",onClick:d=>{d.stopPropagation(),o()},children:e.jsx(J,{className:"size-5"})})}),s&&e.jsx(xt,{businessTripExpenseId:n,businessTripId:i,opened:s,close:r,onChange:t})]})}function xt({businessTripExpenseId:a,businessTripId:n,opened:i,close:t,onChange:s}){const{control:r,handleSubmit:o,setValue:d}=N({defaultValues:{businessTripExpenseId:a}}),[g,j]=x.useState([]),[{data:h,fetching:l,error:c}]=ie({query:Xe,variables:{businessTripId:n}}),{categorizeIntoExistingBusinessTripExpense:u,fetching:p}=ht(),f=T=>{u({fields:T}).then(()=>{s?.(),t()})};return x.useEffect(()=>{if(h?.businessTrip?.uncategorizedTransactions.length){const T=h.businessTrip.uncategorizedTransactions.filter(y=>y?.transaction);j(T.map(({transaction:y})=>({eventDate:y.eventDate,sourceDescription:y.sourceDescription,referenceKey:y.referenceKey,counterparty:y.counterparty?.name,amount:y.amount.formatted,rawAmount:y.amount.raw,value:y.id,label:`${y.eventDate} | ${y.counterparty?.name} | ${y.amount.formatted}`})).sort((y,$)=>y.eventDate.localeCompare($.eventDate)))}},[h,j]),x.useEffect(()=>{c&&m.error("Error",{description:"Oops, we have an error fetching transactions to categorize"})},[c]),e.jsxs(E,{opened:i,onClose:t,centered:!0,children:[e.jsx(E.Title,{children:"Set Transaction Category"}),e.jsx(E.Body,{children:e.jsxs("form",{onSubmit:o(f),className:"flex flex-col gap-3 mt-3",children:[e.jsx(b,{name:"transactionId",control:r,render:({field:T,fieldState:y})=>e.jsx(Y,{...T,itemComponent:pt,data:g??[],disabled:l,label:"Transactions",placeholder:"Scroll to see all options",maxDropdownHeight:160,error:y.error?.message,withAsterisk:!0,withinPortal:!0,onChange:$=>{const X=g.find(I=>I.value===$);X?.rawAmount&&d("amount",X.rawAmount),T.onChange($)}})}),e.jsx(b,{name:"amount",control:r,render:({field:T,fieldState:y})=>e.jsx(oe,{...T,value:T.value??void 0,hideControls:!0,precision:2,removeTrailingZeros:!0,error:y.error?.message,label:"Amount"})}),e.jsx("div",{className:"flex justify-center gap-3",children:e.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:"Confirm"})})]})}),p&&e.jsx(Z,{blur:1,center:!0,children:e.jsx(K,{})})]})}const pt=x.forwardRef(({eventDate:a,sourceDescription:n,referenceKey:i,counterparty:t,amount:s,...r},o)=>e.jsx("div",{ref:o,...r,children:e.jsxs(re,{children:[e.jsx(re.Col,{span:4,children:a}),e.jsx(re.Col,{span:4,children:e.jsx(D,{size:"sm",children:t})}),e.jsx(re.Col,{span:4,children:e.jsx(D,{size:"sm",children:s})}),e.jsx(re.Col,{span:8,children:e.jsx(D,{size:"xs",opacity:.65,children:n})}),e.jsxs(re.Col,{span:4,children:["Reference: ",i]})]})})),mt="deleteBusinessTripExpense",gt=()=>{const[{fetching:a},n]=w(Qe),i=x.useCallback(async t=>{const s="Error deleting business trip expense",r=`${mt}-${t.businessTripExpenseId}`;m.loading("Deleting trip expense",{id:r});try{const o=await n(t),d=B(o,s,r);if(d)return m.success("Success",{id:r,description:"Business trip expense was deleted"}),d.deleteBusinessTripExpense}catch(o){console.error(`${s}: ${o}`),m.error("Error",{id:r,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:a,deleteBusinessTripExpense:i}};function le(a){const{fetching:n,deleteBusinessTripExpense:i}=gt(),t=x.useCallback(()=>{i({businessTripExpenseId:a.businessTripExpenseId}).then(()=>{a.onDelete?.()})},[a,i]);return e.jsx(C,{content:"Remove Expense",children:e.jsx(Pe,{onConfirm:t,title:"Are you sure you want to remove expense?",children:e.jsx(v,{variant:"outline",size:"icon",className:"size-7.5 text-red-500",disabled:n,children:e.jsx($e,{className:"size-5"})})})})}const ue=({data:a,isEditMode:n=!1,control:i,businessTripId:t})=>{const s=A(Je,a),[r,o]=x.useState([]),[{data:d,fetching:g,error:j}]=ie({query:ge,variables:{businessTripId:t}});x.useEffect(()=>{d?.businessTrip?.attendees.length&&o(d.businessTrip.attendees.map(l=>({value:l.id,label:l.name})).sort((l,c)=>l.label>c.label?1:-1))},[d,o]),x.useEffect(()=>{j&&m.error("Error",{description:"Oops, we have an error fetching attendees"})},[j]);const h=Array.from(new Set(s.charges?.map(l=>l.id)));return e.jsxs(e.Fragment,{children:[e.jsx("td",{children:e.jsx("div",{className:"flex flex-col gap-2 justify-center",children:n&&s.payedByEmployee?e.jsxs(e.Fragment,{children:[e.jsx(b,{name:"date",control:i,defaultValue:s.date,rules:{pattern:{value:q,message:"Date must be im format yyyy-mm-dd"}},render:({field:l,fieldState:c})=>e.jsx(G,{...l,form:`form ${s.id}`,"data-autofocus":!0,onChange:u=>{const p=u?typeof u=="string"?u:F(u,"yyyy-MM-dd"):void 0;p!==l.value&&l.onChange(p)},value:l.value?new Date(l.value):void 0,label:"Date",error:c.error?.message,popoverProps:{withinPortal:!0}})}),e.jsx(b,{name:"valueDate",control:i,defaultValue:s.valueDate,rules:{pattern:{value:q,message:"Date must be im format yyyy-mm-dd"}},render:({field:l,fieldState:c})=>e.jsx(G,{...l,form:`form ${s.id}`,onChange:u=>{const p=u?typeof u=="string"?u:F(u,"yyyy-MM-dd"):void 0;p!==l.value&&l.onChange(p)},value:l.value?new Date(l.value):void 0,label:"Value Date",error:c.error?.message,popoverProps:{withinPortal:!0}})})]}):e.jsxs(e.Fragment,{children:[s.date&&F(new Date(s.date),"dd/MM/yy"),e.jsx(D,{fz:"sm",c:"dimmed",children:s.valueDate&&F(new Date(s.valueDate),"dd/MM/yy")})]})})}),e.jsx("td",{children:n&&s.payedByEmployee?e.jsx(b,{name:"amount",control:i,defaultValue:s.amount?.raw??void 0,render:({field:l,fieldState:c})=>e.jsx(b,{name:"currency",control:i,defaultValue:s.amount?.currency??Fe.Ils,render:({field:u,fieldState:p})=>e.jsx(Me,{form:`form ${s.id}`,...l,value:l.value??void 0,error:c.error?.message||p.error?.message,label:"Amount",currencyCodeProps:{...u,label:"Currency",form:`form ${s.id}`}})})}):e.jsx("div",{children:s.amount?.formatted})}),e.jsx("td",{children:e.jsx("div",{className:"flex flex-col gap-2 justify-center",children:n&&s.payedByEmployee?e.jsx(b,{name:"employeeBusinessId",control:i,defaultValue:s.employee?.id,render:({field:l,fieldState:c})=>e.jsx(Y,{form:`form ${s.id}`,...l,data:r,value:l.value,disabled:g,label:"Attendee",placeholder:"Scroll to see all options",maxDropdownHeight:160,searchable:!0,error:c.error?.message,withinPortal:!0})}):e.jsx("div",{className:"flex flex-row gap-2 items-center",children:s.payedByEmployee&&e.jsx(D,{c:s.employee?.name?void 0:"red",children:s.employee?.name??"Missing"})})})}),e.jsx("td",{children:e.jsx("div",{className:"flex flex-col gap-2",children:h.map(l=>e.jsx(be,{to:ye.CHARGES.DETAIL(l),target:"_blank",rel:"noreferrer",onClick:c=>c.stopPropagation(),className:"inline-flex items-center font-semibold",children:"To Charge"},l))})})]})},he=()=>e.jsxs(e.Fragment,{children:[e.jsx("th",{children:"Date"}),e.jsx("th",{children:"Amount"}),e.jsx("th",{children:"Payed By Attendee"}),e.jsx("th",{children:"Charges"})]}),jt=({data:a,businessTripId:n,onChange:i})=>{const t=A(es,a),[s,r]=x.useState(!1),o=N({defaultValues:{id:t.id,businessTripId:n,attendeesStay:t.attendeesStay.map(c=>({attendeeId:c.id,nightsCount:c.nightsCount}))}}),{control:d,handleSubmit:g}=o,{updateBusinessTripAccommodationsExpense:j,fetching:h}=lt(),l=c=>{j({fields:c}).then(()=>{i?.(),r(!1)})};return e.jsxs("tr",{children:[e.jsx(ue,{data:t,isEditMode:s,control:d,businessTripId:n}),e.jsx("td",{children:e.jsx(S,{...o,children:e.jsx("form",{id:`form ${t.id}`,onSubmit:g(l),children:s?e.jsx(M,{name:"country",control:d,defaultValue:t.country,render:({field:c})=>e.jsxs(z,{children:[e.jsx(P,{children:e.jsx(ee,{form:`form ${t.id}`,...c,value:c.value??void 0})}),e.jsx(H,{})]})}):e.jsx(D,{c:t.country?void 0:"red",children:t.country?.name??"Missing"})})})}),e.jsx("td",{children:e.jsx("div",{className:"flex flex-col gap-2 justify-center",children:s?e.jsx(S,{...o,children:e.jsx(M,{name:"nightsCount",control:d,defaultValue:t.nightsCount,render:({field:c})=>e.jsxs(z,{children:[e.jsx(P,{children:e.jsx(ze,{...c,value:c.value??void 0,form:`form ${t.id}`,hideControls:!0,decimalScale:0,thousandSeparator:","})}),e.jsx(H,{})]})})}):e.jsx(D,{c:t.nightsCount?void 0:"red",children:t.nightsCount??"Missing"})})}),e.jsx("td",{children:s?e.jsx(S,{...o,children:e.jsx(Ve,{formManager:o,attendeesStayPath:"attendeesStay",businessTripId:n})}):e.jsx(me,{listStyleType:"disc",children:t.attendeesStay?.length?t.attendeesStay.map(c=>e.jsxs(me.Item,{children:[c.attendee.name," (",c.nightsCount,")"]},c.id)):e.jsx(D,{c:"red",fz:"sm",children:"Missing"})})}),e.jsx("td",{children:i&&e.jsxs(e.Fragment,{children:[e.jsx(C,{content:"Edit",children:e.jsx(v,{disabled:h,variant:s?"default":"outline",size:"icon",className:"size-7.5",onClick:c=>{c.stopPropagation(),r(u=>!u)},children:e.jsx(se,{className:"size-5"})})}),s&&e.jsx(C,{content:"Confirm Changes",children:e.jsx(v,{type:"submit",form:`form ${t.id}`,variant:"outline",size:"icon",className:"size-7.5 text-green-500",children:e.jsx(te,{className:"size-5"})})}),e.jsx(de,{businessTripExpenseId:t.id,businessTripId:n,onChange:i}),e.jsx(le,{businessTripExpenseId:t.id,onDelete:i})]})})]},t.id)},Ue=({businessTripId:a,expenses:n,onChange:i})=>{if(!n?.length)return i?e.jsx(Te,{businessTripId:a,onAdd:i}):e.jsx(e.Fragment,{});const t=n.map(s=>A(ss,s));return e.jsx("div",{className:"flex flex-col gap-2 mt-5",children:e.jsxs(ne,{highlightOnHover:!0,withBorder:!0,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx(he,{}),e.jsx("th",{children:"Location"}),e.jsx("th",{children:"Nights"}),e.jsx("th",{children:"Attendees Stay"}),e.jsx("th",{})]})}),e.jsxs("tbody",{children:[t.sort((s,r)=>s.date&&r.date?s.date<r.date?1:-1:s.date?-1:r.date?1:0).map(s=>e.jsx(jt,{data:s,businessTripId:a,onChange:i},s.id)),i&&e.jsx("tr",{children:e.jsx("td",{colSpan:6,children:e.jsx(Te,{businessTripId:a,onAdd:i})})})]})]})})},ft=({data:a,onChange:n})=>{const{accommodationExpenses:i,id:t}=A(ts,a);return e.jsx(Ue,{businessTripId:t,expenses:i,onChange:n})},vt="insertBusinessTripAttendee",bt=()=>{const[{fetching:a},n]=w(ns),i=x.useCallback(async t=>{const s="Error adding attendee to business trip",r=vt;m.loading("Adding attendee",{id:r});try{const o=await n(t),d=B(o,s,r);if(d)return m.success("Success",{id:r,description:"Attendee was added to the business trip"}),d.insertBusinessTripAttendee}catch(o){console.error(`${s}: ${o}`),m.error("Error",{id:r,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:a,insertBusinessTripAttendee:i}};function Ee(a){const{businessTripId:n,onAdd:i}=a,[t,{close:s,open:r}]=U(!1);return e.jsxs(e.Fragment,{children:[e.jsx(C,{content:"Add Attendee",children:e.jsx(v,{variant:"outline",size:"icon",onClick:o=>{o.stopPropagation(),r()},className:"size-7.5",children:e.jsx(J,{className:"size-5"})})}),t&&e.jsx(yt,{businessTripId:n,opened:t,close:s,onAdd:i})]})}function yt({businessTripId:a,opened:n,close:i,onAdd:t}){const{selectableBusinesses:s,fetching:r}=Oe(),{control:o,handleSubmit:d}=N({defaultValues:{businessTripId:a}}),{insertBusinessTripAttendee:g,fetching:j}=bt(),h=l=>{g({fields:l}).then(()=>{t?.(),i()})};return e.jsxs(E,{opened:n,onClose:i,centered:!0,children:[e.jsx(E.Title,{children:"Add Attendee"}),e.jsx(E.Body,{children:e.jsxs("form",{onSubmit:d(h),children:[e.jsx(b,{name:"attendeeId",control:o,render:({field:l,fieldState:c})=>e.jsx(Y,{"data-autofocus":!0,...l,data:s,value:l.value,disabled:r,label:"Attendee",placeholder:"Scroll to see all options",maxDropdownHeight:160,searchable:!0,error:c.error?.message,withAsterisk:!0,withinPortal:!0})}),e.jsx(b,{name:"arrivalDate",control:o,rules:{pattern:{value:q,message:"Date must be im format yyyy-mm-dd"}},render:({field:l,fieldState:c})=>e.jsx(G,{...l,onChange:u=>{const p=u?typeof u=="string"?u:F(u,"yyyy-MM-dd"):void 0;p!==l.value&&l.onChange(p)},value:l.value?new Date(l.value):void 0,error:c.error?.message,label:"Arrival",popoverProps:{withinPortal:!0}})}),e.jsx(b,{name:"departureDate",control:o,rules:{pattern:{value:q,message:"Date must be im format yyyy-mm-dd"}},render:({field:l,fieldState:c})=>e.jsx(G,{...l,onChange:u=>{const p=u?typeof u=="string"?u:F(u,"yyyy-MM-dd"):void 0;p!==l.value&&l.onChange(p)},value:l.value?new Date(l.value):void 0,error:c.error?.message,label:"Departure",popoverProps:{withinPortal:!0}})}),e.jsx("div",{className:"flex justify-center mt-5 gap-3",children:e.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:"Add"})})]})}),(j||r)&&e.jsx(Z,{blur:1,center:!0,children:e.jsx(K,{})})]})}const Tt="updateBusinessTripAttendee",Et=()=>{const[{fetching:a},n]=w(rs),i=x.useCallback(async t=>{const s="Error updating business trip attendee",r=Tt;m.loading("Updating trip attendee",{id:r});try{const o=await n(t),d=B(o,s,r);if(d)return m.success("Success",{id:r,description:"Business trip attendee was updated"}),d.updateBusinessTripAttendee}catch(o){console.error(`${s}: ${o}`),m.error("Error",{id:r,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:a,updateBusinessTripAttendee:i}},Ct="deleteBusinessTripAttendee",At=()=>{const[{fetching:a},n]=w(is),i=x.useCallback(async t=>{const s="Error removing business trip attendee",r=Ct;m.loading("Removing business trip attendee",{id:r});try{const o=await n(t),d=B(o,s,r);if(d)return m.success("Success",{id:r,description:"Business trip attendee was removed"}),d.deleteBusinessTripAttendee}catch(o){console.error(`${s}: ${o}`),m.error("Error",{id:r,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:a,deleteBusinessTripAttendee:i}};function Dt(a){const{fetching:n,deleteBusinessTripAttendee:i}=At(),t=x.useCallback(()=>{i({fields:{businessTripId:a.businessTripId,attendeeId:a.attendeeId}}).then(()=>{a.onDelete?.()})},[a,i]);return e.jsx(C,{content:"Remove Attendee",children:e.jsx(Pe,{onConfirm:t,title:"Are you sure you want to remove attendee?",children:e.jsx(v,{variant:"outline",size:"icon",className:"size-7.5 text-red-500",disabled:n,children:e.jsx($e,{className:"size-5"})})})})}const wt="addBusinessTripFlightsExpense",Bt=()=>{const[{fetching:a},n]=w(as),i=x.useCallback(async t=>{const s="Error adding business trip flight expense",r=wt;m.loading("Adding business trip flight expense",{id:r});try{const o=await n(t),d=B(o,s,r);if(d)return m.success("Success",{id:r,description:"Business trip flight expense added"}),d.addBusinessTripFlightsExpense}catch(o){console.error(`${s}: ${o}`),m.error("Error",{id:r,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:a,addBusinessTripFlightsExpense:i}};function Le({formManager:a,flightPathPath:n,flightPathData:i}){const{control:t,watch:s,trigger:r}=a,{fields:o,append:d,remove:g}=Se({control:t,name:n}),j=s(n),h=o.map((l,c)=>({...l,...j[c]}));return i?e.jsxs("div",{children:[e.jsx("span",{className:"mantine-InputWrapper-label mantine-Select-label",children:"Flight Path"}),e.jsxs("div",{className:"h-full flex flex-col overflow-hidden",children:[h?.map((l,c)=>e.jsxs("div",{className:"flex items-end gap-2 text-gray-600 mb-2",children:[e.jsx("div",{className:"w-full mt-1 relative rounded-md shadow-xs",children:e.jsx(M,{name:`${n}.${c}`,control:t,rules:{required:"Required"},render:({field:u})=>e.jsxs(z,{children:[e.jsx(P,{children:e.jsx(ee,{...u,value:u.value??void 0,placeholder:"Destination"})}),e.jsx(H,{})]})})}),e.jsx(v,{variant:"ghost",size:"icon",className:"mb-2 size-7.5",onClick:()=>{g(c),r(n)},children:e.jsx(Ne,{className:"size-5"})})]},l.id)),e.jsx(v,{variant:"ghost",size:"icon",className:"size-7.5",onClick:()=>{d(""),r(n)},children:e.jsx(Ie,{className:"size-5"})})]})]}):e.jsx("div",{children:"Cannot edit flight path stay, lacking some mandatory information!"})}function Ce(a){const{businessTripId:n,onAdd:i}=a,[t,{close:s,open:r}]=U(!1);return e.jsxs(e.Fragment,{children:[e.jsx(C,{content:"Add Flight Expense",children:e.jsx(v,{variant:"outline",size:"icon",className:"size-7.5",onClick:o=>{o.stopPropagation(),r()},children:e.jsx(J,{className:"size-5"})})}),t&&e.jsx(Nt,{businessTripId:n,opened:t,close:s,onAdd:i})]})}const St=Object.entries(Re).map(([a,n])=>({value:n,label:a}));function Nt({businessTripId:a,opened:n,close:i,onAdd:t}){const s=N({defaultValues:{businessTripId:a}}),{control:r,handleSubmit:o}=s,[d,g]=x.useState(!1),[{data:j,fetching:h}]=ie({query:ge,variables:{businessTripId:a}}),{addBusinessTripFlightsExpense:l,fetching:c}=Bt(),u=f=>{l({fields:f}).then(()=>{t?.(),i()})},p=j?.businessTrip?.attendees.map(f=>({value:f.id,label:f.name}))??[];return e.jsxs(E,{opened:n,onClose:i,centered:!0,lockScroll:!0,children:[e.jsx(E.Title,{children:"Add Flight Expense"}),e.jsx(E.Body,{children:e.jsx(S,{...s,children:e.jsxs("form",{onSubmit:o(u),children:[e.jsx(ce,{businessTripId:a,control:r,setFetching:g}),e.jsx(Le,{formManager:s,flightPathPath:"path"}),e.jsx(b,{name:"flightClass",control:r,render:({field:f,fieldState:T})=>e.jsx(Y,{...f,data:St,value:f.value,label:"Flight Class",placeholder:"Scroll to see all options",maxDropdownHeight:160,searchable:!0,error:T.error?.message,withinPortal:!0})}),e.jsx(b,{name:"attendeeIds",control:r,render:({field:f,fieldState:T})=>e.jsx(He,{...f,disabled:h,data:p,value:f.value??[],label:"Attendees",placeholder:"Scroll to see all options",maxDropdownHeight:160,searchable:!0,error:T.error?.message,withinPortal:!0})}),e.jsx("div",{className:"flex justify-center mt-5 gap-3",children:e.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:"Add"})})]})})}),(c||d)&&e.jsx(Z,{blur:1,center:!0,children:e.jsx(K,{})})]})}const It="updateBusinessTripFlightsExpense",Ft=()=>{const[{fetching:a},n]=w(os),i=x.useCallback(async t=>{const s="Error updating business trip flights expense",r=It;m.loading("Updating trip flights expense",{id:r});try{const o=await n(t),d=B(o,s,r);if(d)return m.success("Success",{id:r,description:"Business trip flights expense was updated"}),d.updateBusinessTripFlightsExpense}catch(o){console.error(`${s}: ${o}`),m.error("Error",{id:r,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:a,updateBusinessTripFlightsExpense:i}},Mt=Object.entries(Re).map(([a,n])=>({value:n,label:a})),zt=({data:a,businessTripId:n,onChange:i,attendees:t})=>{const s=A(cs,a),[r,o]=x.useState(!1),d=N({defaultValues:{id:s.id,businessTripId:n,attendeeIds:s.attendees?.map(p=>p.id)??[],path:s.path??[]}}),{control:g,handleSubmit:j}=d,{updateBusinessTripFlightsExpense:h,fetching:l}=Ft(),c=p=>{h({fields:p}).then(()=>{i?.(),o(!1)})},u=t.map(p=>({value:p.id,label:p.name}));return e.jsxs("tr",{children:[e.jsx(ue,{data:s,isEditMode:r,control:g,businessTripId:n}),e.jsx("td",{children:e.jsx(S,{...d,children:e.jsx("form",{id:`form ${s.id}`,onSubmit:j(c),children:e.jsxs("div",{className:"flex flex-col gap-2 justify-center",children:[r?e.jsx(Le,{formManager:d,flightPathPath:"path",flightPathData:s.path??void 0}):e.jsx("div",{className:"flex gap-2 items-center",children:s.path?.length?s.path.map((p,f)=>e.jsxs(e.Fragment,{children:[e.jsx(D,{fw:700,children:p},f),f<s.path.length-1&&(p===s.path[f+1]?" | ":" → ")]})):e.jsx(D,{fw:700,className:"flex gap-2 items-center",c:"red",children:"Missing"})}),r?e.jsx(b,{name:"flightClass",control:g,defaultValue:s.class??void 0,render:({field:p,fieldState:f})=>e.jsx(Y,{form:`form ${s.id}`,"data-autofocus":!0,...p,data:Mt,value:p.value,label:"Flight Class",placeholder:"Scroll to see all options",maxDropdownHeight:160,searchable:!0,error:f.error?.message,withinPortal:!0})}):e.jsx(D,{c:s.class?void 0:"red",fz:"sm",children:`Class: ${s.class??"Missing"}`})]})})})}),e.jsx("td",{children:r?e.jsx(b,{name:"attendeeIds",control:g,defaultValue:s.attendees?.map(p=>p.id)??void 0,render:({field:p,fieldState:f})=>e.jsx(He,{...p,form:`form ${s.id}`,data:u,value:p.value??[],label:"Attendees",placeholder:"Scroll to see all options",maxDropdownHeight:160,searchable:!0,error:f.error?.message,withinPortal:!0})}):e.jsx(me,{listStyleType:"disc",children:s.attendees?.length?s.attendees.map(p=>e.jsx(me.Item,{children:p.name},p.id)):e.jsx(D,{c:"red",fz:"sm",children:"Missing"})})}),e.jsx("td",{children:i&&e.jsxs(e.Fragment,{children:[e.jsx(C,{content:"Edit",children:e.jsx(v,{disabled:l,variant:r?"default":"outline",size:"icon",className:"size-7.5",onClick:p=>{p.stopPropagation(),o(f=>!f)},children:e.jsx(se,{className:"size-5"})})}),r&&e.jsx(C,{content:"Confirm Changes",children:e.jsx(v,{type:"submit",form:`form ${s.id}`,variant:"outline",size:"icon",className:"size-7.5 text-green-500",children:e.jsx(te,{className:"size-5"})})}),e.jsx(de,{businessTripExpenseId:s.id,businessTripId:n,onChange:i}),e.jsx(le,{businessTripExpenseId:s.id,onDelete:i})]})})]},s.id)},_e=({businessTripId:a,expenses:n,attendees:i,onChange:t})=>{if(!n?.length)return t?e.jsx(Ce,{businessTripId:a,onAdd:t}):e.jsx(e.Fragment,{});const s=n.map(r=>A(ds,r));return e.jsx("div",{className:"flex flex-col gap-2 mt-5",children:e.jsxs(ne,{highlightOnHover:!0,withBorder:!0,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx(he,{}),e.jsx("th",{children:"Flight"}),e.jsx("th",{children:"Attendees"}),e.jsx("th",{})]})}),e.jsxs("tbody",{children:[s.sort((r,o)=>r.date&&o.date?r.date<o.date?1:-1:r.date?-1:o.date?1:0).map(r=>e.jsx(zt,{data:r,businessTripId:a,onChange:t,attendees:i},r.id)),t&&e.jsx("tr",{children:e.jsx("td",{colSpan:5,children:e.jsx(Ce,{businessTripId:a,onAdd:t})})})]})]})})},Pt=({data:a,businessTripId:n,onChange:i})=>{const t=A(ls,a),[s,r]=x.useState(!1),[o,d]=x.useState(!1),{control:g,handleSubmit:j}=N({defaultValues:{businessTripId:n,attendeeId:t.id,arrivalDate:t.arrivalDate,departureDate:t.departureDate}}),{updateBusinessTripAttendee:h,fetching:l}=Et(),c=u=>{h({fields:u}).then(()=>{i?.(),r(!1)})};return e.jsxs(e.Fragment,{children:[e.jsxs("tr",{children:[e.jsx("td",{children:t.name}),e.jsx("td",{children:s?e.jsx("form",{id:`form ${t.id}`,onSubmit:j(c),children:e.jsx(b,{name:"arrivalDate",control:g,defaultValue:t.arrivalDate,rules:{pattern:{value:q,message:"Date must be im format yyyy-mm-dd"}},render:({field:u,fieldState:p})=>e.jsx(G,{...u,onChange:f=>{const T=f?typeof f=="string"?f:F(f,"yyyy-MM-dd"):void 0;T!==u.value&&u.onChange(T)},"data-autofocus":!0,value:u.value?new Date(u.value):void 0,error:p.error?.message,label:"Arrival",popoverProps:{withinPortal:!0}})})}):t.arrivalDate}),e.jsx("td",{children:s?e.jsx(b,{name:"departureDate",control:g,defaultValue:t.departureDate,rules:{pattern:{value:q,message:"Date must be im format yyyy-mm-dd"}},render:({field:u,fieldState:p})=>e.jsx(G,{...u,onChange:f=>{const T=f?typeof f=="string"?f:F(f,"yyyy-MM-dd"):void 0;T!==u.value&&u.onChange(T)},value:u.value?new Date(u.value):void 0,error:p.error?.message,label:"Departure",popoverProps:{withinPortal:!0}})}):t.departureDate}),e.jsxs("td",{className:"flex items-center gap-2",children:[e.jsx(C,{content:"Edit",children:e.jsx(v,{disabled:l,variant:s?"default":"outline",size:"icon",className:"size-7.5",onClick:u=>{u.stopPropagation(),r(p=>!p)},children:e.jsx(se,{className:"size-5"})})}),s&&e.jsx(C,{content:"Confirm Changes",children:e.jsx(v,{type:"submit",form:`form ${t.id}`,variant:"outline",size:"icon",className:"size-7.5 text-green-500",children:e.jsx(te,{className:"size-5"})})}),e.jsx(Dt,{businessTripId:n,attendeeId:t.id,onDelete:i}),e.jsx(Us,{toggleExpansion:d,isExpanded:o})]})]},t.id),o&&e.jsx("tr",{children:e.jsx("td",{colSpan:4,children:e.jsx(ke,{shadow:"sm",withBorder:!0,children:e.jsxs("div",{className:"flex flex-col gap-2",children:[t.flights&&e.jsxs(e.Fragment,{children:[e.jsx("div",{children:"Flights:"}),e.jsx(_e,{businessTripId:n,attendees:[],expenses:t.flights})]}),t.accommodations&&e.jsxs(e.Fragment,{children:[e.jsx("div",{children:"Accommodations:"}),e.jsx(Ue,{businessTripId:n,expenses:t.accommodations})]})]})})})},`${t.id}-expension`)]})},$t=({data:a,onChange:n})=>{const{attendees:i,id:t}=A(us,a);return i?.length?e.jsx("div",{className:"flex flex-col gap-2 mt-5",children:e.jsxs(ne,{highlightOnHover:!0,withBorder:!0,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Name"}),e.jsx("th",{children:"Arrival Date"}),e.jsx("th",{children:"Departure Date"}),e.jsx("th",{})]})}),e.jsxs("tbody",{children:[i.sort((s,r)=>s.name.toLocaleLowerCase()>r.name.toLocaleLowerCase()?1:-1).map(s=>e.jsx(Pt,{data:s,businessTripId:t,onChange:n},s.id)),e.jsx("tr",{children:e.jsx("td",{colSpan:4,children:e.jsx(Ee,{businessTripId:t,onAdd:n})})})]})]})}):e.jsx(Ee,{businessTripId:t,onAdd:n})},pe="addBusinessTripCarRentalExpense",Ot=()=>{const[{fetching:a},n]=w(hs),i=x.useCallback(async t=>{const s="Error adding business trip car rental expense";m.loading("Adding car rental expense...",{id:pe});try{const r=await n(t),o=B(r,s,pe);if(o)return m.success("Success",{id:pe,description:"Car rental expense added"}),o.addBusinessTripCarRentalExpense}catch(r){console.error(`${s}: ${r}`),m.error("Error",{id:pe,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:a,addBusinessTripCarRentalExpense:i}};function Ae(a){const{businessTripId:n,onAdd:i}=a,[t,{close:s,open:r}]=U(!1);return e.jsxs(e.Fragment,{children:[e.jsx(C,{content:"Add Car Rental Expense",children:e.jsx(v,{variant:"outline",size:"icon",onClick:o=>{o.stopPropagation(),r()},className:"size-7.5",children:e.jsx(J,{className:"size-5"})})}),t&&e.jsx(Rt,{businessTripId:n,opened:t,close:s,onAdd:i})]})}function Rt({businessTripId:a,opened:n,close:i,onAdd:t}){const s=N({defaultValues:{businessTripId:a}}),{control:r,handleSubmit:o}=s,[d,g]=x.useState(!1),{addBusinessTripCarRentalExpense:j,fetching:h}=Ot(),l=c=>{j({fields:c}).then(()=>{t?.(),i()})};return e.jsxs(E,{opened:n,onClose:i,centered:!0,lockScroll:!0,children:[e.jsx(E.Title,{children:"Add Car Rental Expense"}),e.jsx(E.Body,{children:e.jsx(S,{...s,children:e.jsxs("form",{onSubmit:o(l),children:[e.jsx(ce,{businessTripId:a,control:r,setFetching:g}),e.jsx(b,{name:"days",control:r,render:({field:c,fieldState:u})=>e.jsx(oe,{...c,value:c.value??void 0,hideControls:!0,precision:2,removeTrailingZeros:!0,error:u.error?.message,label:"Rent Days"})}),e.jsx(M,{name:"isFuelExpense",control:r,render:({field:{value:c,...u}})=>e.jsxs(z,{className:"flex flex-row items-center justify-between rounded-lg border p-3 shadow-sm",children:[e.jsx("div",{className:"space-y-0.5",children:e.jsx(Q,{children:"Is Fuel Expense"})}),e.jsx(P,{children:e.jsx(je,{...u,checked:c===!0,onCheckedChange:u.onChange})}),e.jsx(H,{})]})}),e.jsx("div",{className:"flex justify-center mt-5 gap-3",children:e.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:"Add"})})]})})}),(h||d)&&e.jsx(Z,{blur:1,center:!0,children:e.jsx(K,{})})]})}const kt="updateBusinessTripCarRentalExpense",Ht=()=>{const[{fetching:a},n]=w(xs),i=x.useCallback(async t=>{const s="Error updating business trip car rental expense",r=kt;m.loading("Updating trip car rental expense",{id:r});try{const o=await n(t),d=B(o,s,r);if(d)return m.success("Success",{id:r,description:"Business trip car rental expense was updated"}),d.updateBusinessTripCarRentalExpense}catch(o){console.error(`${s}: ${o}`),m.error("Error",{id:r,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:a,updateBusinessTripCarRentalExpense:i}},Vt=({data:a,businessTripId:n,onChange:i})=>{const t=A(ps,a),[s,r]=x.useState(!1),o=N({defaultValues:{id:t.id,businessTripId:n}}),{control:d,handleSubmit:g}=o,{updateBusinessTripCarRentalExpense:j,fetching:h}=Ht(),l=c=>{j({fields:c}).then(()=>{i?.(),r(!1)})};return e.jsxs("tr",{children:[e.jsx(ue,{data:t,isEditMode:s,control:d,businessTripId:n}),e.jsx("td",{children:e.jsx(S,{...o,children:e.jsx("form",{id:`form ${t.id}`,onSubmit:g(l),children:e.jsx("div",{className:"flex flex-col gap-2 justify-center",children:t.isFuelExpense!==!0&&(s?e.jsx(b,{name:"days",control:d,defaultValue:t.days,render:({field:c,fieldState:u})=>e.jsx(oe,{...c,value:c.value??void 0,form:`form ${t.id}`,hideControls:!0,precision:2,removeTrailingZeros:!0,error:u.error?.message,placeholder:"Rent Days"})}):e.jsx(D,{c:t.days?void 0:"red",children:t.days??"Missing"}))})})})}),e.jsx("td",{children:s?e.jsx(S,{...o,children:e.jsx(M,{name:"isFuelExpense",control:d,defaultValue:t.isFuelExpense,render:({field:c})=>e.jsxs(z,{className:"flex flex-row items-center justify-between rounded-lg border p-3 shadow-sm",children:[e.jsx("div",{className:"space-y-0.5",children:e.jsx(Q,{children:"Is Fuel Expense"})}),e.jsx(P,{children:e.jsx(je,{form:`form ${t.id}`,checked:c.value===!0,onCheckedChange:c.onChange})})]})})}):t.isFuelExpense===!0?e.jsx(Ks,{}):e.jsx(Ys,{})}),e.jsxs("td",{children:[e.jsx(C,{content:"Edit",children:e.jsx(v,{disabled:h,variant:s?"default":"outline",size:"icon",className:"size-7.5",onClick:c=>{c.stopPropagation(),r(u=>!u)},children:e.jsx(se,{className:"size-5"})})}),s&&e.jsx(C,{content:"Confirm Changes",children:e.jsx(v,{type:"submit",form:`form ${t.id}`,variant:"outline",size:"icon",className:"size-7.5 text-green-500",children:e.jsx(te,{className:"size-5"})})}),e.jsx(de,{businessTripExpenseId:t.id,businessTripId:n,onChange:i}),e.jsx(le,{businessTripExpenseId:t.id,onDelete:i})]})]},t.id)},Ut=({data:a,onChange:n})=>{const{carRentalExpenses:i,id:t}=A(ms,a);return i?.length?e.jsx("div",{className:"flex flex-col gap-2 mt-5",children:e.jsxs(ne,{highlightOnHover:!0,withBorder:!0,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx(he,{}),e.jsx("th",{children:"Days"}),e.jsx("th",{children:"Type"}),e.jsx("th",{})]})}),e.jsxs("tbody",{children:[i.sort((s,r)=>s.date&&r.date?s.date<r.date?1:-1:s.date?-1:r.date?1:0).map(s=>e.jsx(Vt,{data:s,businessTripId:t,onChange:n},s.id)),e.jsx("tr",{children:e.jsx("td",{colSpan:6,children:e.jsx(Ae,{businessTripId:t,onAdd:n})})})]})]})}):e.jsx(Ae,{businessTripId:t,onAdd:n})},Lt=({data:a,onChange:n})=>{const{flightExpenses:i,id:t,attendees:s}=A(gs,a);return e.jsx(_e,{businessTripId:t,attendees:s,expenses:i,onChange:n})},_t="addBusinessTripOtherExpense",Wt=()=>{const[{fetching:a},n]=w(js),i=x.useCallback(async t=>{const s='Error adding business trip "other" expense',r=_t;m.loading('Adding trip "other" expense',{id:r});try{const o=await n(t),d=B(o,s,r);if(d)return m.success("Success",{id:r,description:'Business trip "other" expense was added'}),d.addBusinessTripOtherExpense}catch(o){console.error(`${s}: ${o}`),m.error("Error",{id:r,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:a,addBusinessTripOtherExpense:i}};function De(a){const{businessTripId:n,onAdd:i}=a,[t,{close:s,open:r}]=U(!1);return e.jsxs(e.Fragment,{children:[e.jsx(C,{content:"Add Other Expense",children:e.jsx(v,{variant:"outline",size:"icon",className:"size-7.5",onClick:o=>{o.stopPropagation(),r()},children:e.jsx(J,{className:"size-5"})})}),t&&e.jsx(qt,{businessTripId:n,opened:t,close:s,onAdd:i})]})}function qt({businessTripId:a,opened:n,close:i,onAdd:t}){const s=N({defaultValues:{businessTripId:a}}),{control:r,handleSubmit:o}=s,[d,g]=x.useState(!1),{addBusinessTripOtherExpense:j,fetching:h}=Wt(),l=c=>{j({fields:c}).then(()=>{t?.(),i()})};return e.jsxs(E,{opened:n,onClose:i,centered:!0,lockScroll:!0,children:[e.jsx(E.Title,{children:"Add Other Expense"}),e.jsx(E.Body,{children:e.jsx(S,{...s,children:e.jsxs("form",{onSubmit:o(l),className:"space-y-3",children:[e.jsx(ce,{businessTripId:a,control:r,setFetching:g}),e.jsx(M,{name:"description",control:r,render:({field:c})=>e.jsxs(z,{children:[e.jsx(Q,{children:"Description"}),e.jsx(P,{children:e.jsx(ee,{...c,value:c.value??void 0})}),e.jsx(H,{})]})}),e.jsx(M,{control:s.control,name:"deductibleExpense",render:({field:c})=>e.jsxs(z,{className:"flex flex-row items-center justify-between rounded-lg border p-3 shadow-sm",children:[e.jsx("div",{className:"space-y-0.5",children:e.jsx(Q,{children:"Deductible Expense"})}),e.jsx(P,{children:e.jsx(je,{checked:c.value===!0,onCheckedChange:c.onChange})})]})}),e.jsx("div",{className:"flex justify-center mt-5 gap-3",children:e.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:"Add"})})]})})}),(h||d)&&e.jsx(Z,{blur:1,center:!0,children:e.jsx(K,{})})]})}const Gt="updateBusinessTripOtherExpense",Yt=()=>{const[{fetching:a},n]=w(fs),i=x.useCallback(async t=>{const s='Error updating business trip "other" expense',r=Gt;m.loading('Updating business trip "other" expense',{id:r});try{const o=await n(t),d=B(o,s,r);if(d)return m.success("Success",{id:r,description:'Business trip "other" expense was updated'}),d.updateBusinessTripOtherExpense}catch(o){console.error(`${s}: ${o}`),m.error("Error",{id:r,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:a,updateBusinessTripOtherExpense:i}},Zt=({data:a,businessTripId:n,onChange:i})=>{const t=A(vs,a),[s,r]=x.useState(!1),o=N({defaultValues:{id:t.id,businessTripId:n}}),{control:d,handleSubmit:g}=o,{updateBusinessTripOtherExpense:j,fetching:h}=Yt(),l=c=>{j({fields:c}).then(()=>{i?.(),r(!1)})};return e.jsxs("tr",{children:[e.jsx(ue,{data:t,isEditMode:s,control:d,businessTripId:n}),e.jsx("td",{children:e.jsx(S,{...o,children:e.jsx("form",{id:`form ${t.id}`,onSubmit:g(l),children:s?e.jsx(M,{name:"description",control:d,defaultValue:t.description,render:({field:c})=>e.jsxs(z,{children:[e.jsx(P,{children:e.jsx(ee,{form:`form ${t.id}`,...c,value:c.value??void 0})}),e.jsx(H,{})]})}):e.jsx(D,{c:t.description?void 0:"red",children:t.description??"Missing"})})})}),e.jsx("td",{children:e.jsx("div",{className:"flex flex-col gap-2 justify-center",children:s?e.jsx(S,{...o,children:e.jsx(M,{name:"deductibleExpense",control:o.control,defaultValue:t.deductibleExpense,render:({field:c})=>e.jsx(z,{children:e.jsx(P,{children:e.jsx(je,{form:`form ${t.id}`,checked:c.value===!0,onCheckedChange:c.onChange})})})})}):e.jsx(D,{c:t.deductibleExpense?void 0:"red",children:t.deductibleExpense===!0?"Yes":t.deductibleExpense===!1?"No":"Missing"})})}),e.jsxs("td",{children:[e.jsx(C,{content:"Edit",children:e.jsx(v,{disabled:h,variant:s?"default":"outline",size:"icon",className:"size-7.5",onClick:c=>{c.stopPropagation(),r(u=>!u)},children:e.jsx(se,{className:"size-5"})})}),s&&e.jsx(C,{content:"Confirm Changes",children:e.jsx(v,{type:"submit",form:`form ${t.id}`,variant:"outline",size:"icon",className:"size-7.5 text-green-500",children:e.jsx(te,{className:"size-5"})})}),e.jsx(de,{businessTripExpenseId:t.id,businessTripId:n,onChange:i}),e.jsx(le,{businessTripExpenseId:t.id,onDelete:i})]})]},t.id)},Kt=({data:a,onChange:n})=>{const{otherExpenses:i,id:t}=A(bs,a);return i?.length?e.jsx("div",{className:"flex flex-col gap-2 mt-5",children:e.jsxs(ne,{highlightOnHover:!0,withBorder:!0,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx(he,{}),e.jsx("th",{children:"Description"}),e.jsx("th",{children:"Deductible Expense"}),e.jsx("th",{})]})}),e.jsxs("tbody",{children:[i.sort((s,r)=>s.date&&r.date?s.date<r.date?1:-1:s.date?-1:r.date?1:0).map(s=>e.jsx(Zt,{data:s,businessTripId:t,onChange:n},s.id)),e.jsx("tr",{children:e.jsx("td",{colSpan:6,children:e.jsx(De,{businessTripId:t,onAdd:n})})})]})]})}):e.jsx(De,{businessTripId:t,onAdd:n})},Xt="addBusinessTripTravelAndSubsistenceExpense",Qt=()=>{const[{fetching:a},n]=w(ys),i=x.useCallback(async t=>{const s="Error adding business trip travel&subsistence expense",r=Xt;m.loading("Adding trip travel&subsistence expense",{id:r});try{const o=await n(t),d=B(o,s,r);if(d)return m.success("Success",{id:r,description:"Business trip travel&subsistence expense was added"}),d.addBusinessTripTravelAndSubsistenceExpense}catch(o){console.error(`${s}: ${o}`),m.error("Error",{id:r,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:a,addBusinessTripTravelAndSubsistenceExpense:i}};function we(a){const{businessTripId:n,onAdd:i}=a,[t,{close:s,open:r}]=U(!1);return e.jsxs(e.Fragment,{children:[e.jsx(C,{content:"Add T&S Expense",children:e.jsx(v,{variant:"outline",size:"icon",className:"size-7.5",onClick:o=>{o.stopPropagation(),r()},children:e.jsx(J,{className:"size-5"})})}),t&&e.jsx(Jt,{businessTripId:n,opened:t,close:s,onAdd:i})]})}function Jt({businessTripId:a,opened:n,close:i,onAdd:t}){const s=N({defaultValues:{businessTripId:a}}),{control:r,handleSubmit:o}=s,[d,g]=x.useState(!1),{addBusinessTripTravelAndSubsistenceExpense:j,fetching:h}=Qt(),l=c=>{j({fields:c}).then(()=>{t?.(),i()})};return e.jsxs(E,{opened:n,onClose:i,centered:!0,lockScroll:!0,children:[e.jsx(E.Title,{children:"Add Travel & Subsistence Expense"}),e.jsx(E.Body,{children:e.jsx(S,{...s,children:e.jsxs("form",{onSubmit:o(l),className:"space-y-3",children:[e.jsx(ce,{businessTripId:a,control:r,setFetching:g}),e.jsx(M,{name:"expenseType",control:r,render:({field:c})=>e.jsxs(z,{children:[e.jsx(Q,{children:"Expense Type"}),e.jsx(P,{children:e.jsx(ee,{...c,value:c.value??void 0})}),e.jsx(H,{})]})}),e.jsx("div",{className:"flex justify-center mt-5 gap-3",children:e.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:"Add"})})]})})}),(h||d)&&e.jsx(Z,{blur:1,center:!0,children:e.jsx(K,{})})]})}const en="updateBusinessTripTravelAndSubsistenceExpense",sn=()=>{const[{fetching:a},n]=w(Ts),i=x.useCallback(async t=>{const s="Error updating business trip travel&subsistence expense",r=en;m.loading("Updating trip travel&subsistence expense",{id:r});try{const o=await n(t),d=B(o,s,r);if(d)return m.success("Success",{id:r,description:"Business trip travel&subsistence expense was updated"}),d.updateBusinessTripTravelAndSubsistenceExpense}catch(o){console.error(`${s}: ${o}`),m.error("Error",{id:r,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:a,updateBusinessTripTravelAndSubsistenceExpense:i}},tn=({data:a,businessTripId:n,onChange:i})=>{const t=A(Es,a),[s,r]=x.useState(!1),o=N({defaultValues:{id:t.id,businessTripId:n}}),{control:d,handleSubmit:g}=o,{updateBusinessTripTravelAndSubsistenceExpense:j,fetching:h}=sn(),l=c=>{j({fields:c}).then(()=>{i?.(),r(!1)})};return e.jsxs("tr",{children:[e.jsx(ue,{data:t,isEditMode:s,control:d,businessTripId:n}),e.jsx("td",{children:e.jsx(S,{...o,children:e.jsx("form",{id:`form ${t.id}`,onSubmit:g(l),children:s?e.jsx(M,{name:"expenseType",control:d,defaultValue:t.expenseType,render:({field:c})=>e.jsxs(z,{children:[e.jsx(P,{children:e.jsx(ee,{form:`form ${t.id}`,...c,value:c.value??void 0})}),e.jsx(H,{})]})}):e.jsx(D,{c:t.expenseType?void 0:"red",children:t.expenseType??"Missing"})})})}),e.jsxs("td",{children:[e.jsx(C,{content:"Edit",children:e.jsx(v,{disabled:h,variant:s?"default":"outline",size:"icon",className:"size-7.5",onClick:c=>{c.stopPropagation(),r(u=>!u)},children:e.jsx(se,{className:"size-5"})})}),s&&e.jsx(C,{content:"Confirm Changes",children:e.jsx(v,{type:"submit",form:`form ${t.id}`,variant:"outline",size:"icon",className:"size-7.5 text-green-500",children:e.jsx(te,{className:"size-5"})})}),e.jsx(de,{businessTripExpenseId:t.id,businessTripId:n,onChange:i}),e.jsx(le,{businessTripExpenseId:t.id,onDelete:i})]})]},t.id)},nn=({data:a,onChange:n})=>{const{travelAndSubsistenceExpenses:i,id:t}=A(Cs,a);return i?.length?e.jsx("div",{className:"flex flex-col gap-2 mt-5",children:e.jsxs(ne,{highlightOnHover:!0,withBorder:!0,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx(he,{}),e.jsx("th",{children:"Expense Type"}),e.jsx("th",{})]})}),e.jsxs("tbody",{children:[i.sort((s,r)=>s.date&&r.date?s.date<r.date?1:-1:s.date?-1:r.date?1:0).map(s=>e.jsx(tn,{data:s,businessTripId:t,onChange:n},s.id)),e.jsx("tr",{children:e.jsx("td",{colSpan:6,children:e.jsx(we,{businessTripId:t,onAdd:n})})})]})]})}):e.jsx(we,{businessTripId:t,onAdd:n})},rn=({data:a})=>{const n=A(As,a),i="effectiveDate"in n?n.effectiveDate:void 0;return e.jsx("td",{children:e.jsxs("div",{className:"flex flex-col justify-center",children:[e.jsx("div",{children:i&&F(new Date(i),"dd/MM/yy")}),n.sourceEffectiveDate&&e.jsxs("div",{className:"text-xs text-gray-500",children:["(Originally ",F(new Date(n.sourceEffectiveDate),"dd/MM/yy"),")"]})]})})},an=({data:a})=>{const n=A(Ds,a),i="eventDate"in n?n.eventDate:void 0;return e.jsx("td",{children:e.jsx("div",{className:"flex flex-col justify-center",children:i&&F(new Date(i),"dd/MM/yy")})})},on=({data:a})=>{const n=A(ws,a),{account:i}=n,t=Ls(i.type),s=i.name;return e.jsx("td",{children:e.jsxs("div",{className:"flex flex-col gap-2 items-center",children:[e.jsx("p",{children:t}),e.jsx("p",{children:s})]})})},cn=({data:a})=>{const n=A(Bs,a),i="sourceDescription"in n?n.sourceDescription:"Missing";return e.jsx("td",{children:e.jsx("div",{className:"flex flex-wrap",children:e.jsx("div",{className:"flex flex-col justify-center",children:i})})})},dn=({data:a})=>{const n=A(Ss,a);return e.jsx("td",{children:e.jsx("div",{className:"flex flex-wrap",children:e.jsx("div",{className:"flex flex-col justify-center",children:n.referenceKey})})})};function ln({data:a,onChange:n,enableEdit:i}){const{id:t,counterparty:s,missingInfoSuggestions:r,id:o,sourceDescription:d}=A(Ns,a),g=!!r?.business&&i,j=g?r?.business?.name:"Missing",h=g?r?.business?.id:null,l=s?.name??j,[c,u]=x.useState(!1),{updateTransaction:p,fetching:f}=_s(),T=x.useCallback(async V=>{await p({transactionId:o,fields:{counterpartyId:V}}),u(!0)},[o,p]),y=x.useCallback(async V=>{await T(V),n?.()},[T,n]),{selectableBusinesses:$,fetching:X}=Oe(),[I,O]=x.useState(h??null),[R,ae]=x.useState(d);return e.jsxs("td",{children:[e.jsx("div",{className:"flex flex-wrap gap-1 items-center justify-center",children:s?.id?e.jsx(be,{to:ye.BUSINESSES.DETAIL(s.id),target:"_blank",rel:"noreferrer",onClick:V=>V.stopPropagation(),className:"inline-flex items-center font-semibold",children:l}):e.jsxs(e.Fragment,{children:[e.jsx(Is,{options:$,value:I,onChange:O,search:R,onSearchChange:ae,placeholder:"Choose or create a business",empty:R?e.jsx(Fs,{description:R,onAdd:y}):null}),e.jsx(C,{content:"Approve",children:e.jsx(v,{variant:"outline",size:"icon",onClick:()=>I&&T(I),disabled:f||X||!I,children:e.jsx(te,{className:"size-4"})})})]})}),e.jsx(Ws,{transactionId:t,counterpartyId:s?.id??I,open:c,onOpenChange:u,onClose:n})]})}const un="categorizeBusinessTripExpense",hn=()=>{const[{fetching:a},n]=w(Ms),i=x.useCallback(async t=>{const s="Error updating business trip expense category",r=un;m.loading("Updating trip expense category",{id:r});try{const o=await n(t),d=B(o,s,r);if(d)return m.success("Success",{id:r,description:"Business trip expense category was updated"}),d.categorizeBusinessTripExpense}catch(o){console.error(`${s}: ${o}`),m.error("Error",{id:r,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:a,categorizeBusinessTripExpense:i}};function xn(a){const{businessTripId:n,transactionId:i,onChange:t,defaultAmount:s}=a,[r,{close:o,open:d}]=U(!1);return e.jsxs(e.Fragment,{children:[e.jsx(C,{content:"Categorize",children:e.jsx(v,{variant:"outline",size:"icon",className:"size-7.5",onClick:g=>{g.stopPropagation(),d()},children:e.jsx(se,{className:"size-5"})})}),r&&e.jsx(mn,{businessTripId:n,transactionId:i,opened:r,close:o,onChange:t,defaultAmount:s})]})}const pn=Object.entries(zs).map(([a,n])=>({value:n,label:a}));function mn({businessTripId:a,transactionId:n,defaultAmount:i,opened:t,close:s,onChange:r}){const{control:o,handleSubmit:d}=N({defaultValues:{businessTripId:a,transactionId:n}}),{categorizeBusinessTripExpense:g,fetching:j}=hn(),h=l=>{g({fields:l}).then(()=>{r?.(),s()})};return e.jsxs(E,{opened:t,onClose:s,centered:!0,children:[e.jsx(E.Title,{children:"Set Expense Category"}),e.jsx(E.Body,{children:e.jsxs("form",{onSubmit:d(h),className:"flex flex-col gap-3 mt-3",children:[e.jsx(b,{name:"category",control:o,render:({field:l,fieldState:c})=>e.jsx(Y,{"data-autofocus":!0,...l,data:pn,value:l.value,label:"Category",placeholder:"Scroll to see all options",maxDropdownHeight:160,searchable:!0,error:c.error?.message,withinPortal:!0})}),e.jsx(b,{name:"amount",control:o,defaultValue:i,render:({field:l,fieldState:c})=>e.jsx(oe,{...l,value:l.value??void 0,hideControls:!0,precision:2,removeTrailingZeros:!0,error:c.error?.message,label:"Amount"})}),e.jsx("div",{className:"flex justify-center gap-3",children:e.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:"Confirm"})})]})}),j&&e.jsx(Z,{blur:1,center:!0,children:e.jsx(K,{})})]})}const gn=({data:a,onChange:n})=>{const{uncategorizedTransactions:i,id:t}=A(Ps,a);return i?.length?e.jsx("div",{className:"flex flex-col gap-2 mt-5",children:e.jsxs(ne,{highlightOnHover:!0,withBorder:!0,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Event Date"}),e.jsx("th",{children:"Debit Date"}),e.jsx("th",{children:"Amount"}),e.jsx("th",{}),e.jsx("th",{children:"Account"}),e.jsx("th",{children:"Description"}),e.jsx("th",{children:"Reference#"}),e.jsx("th",{children:"Counterparty"}),e.jsx("th",{})]})}),e.jsx("tbody",{children:i.sort((s,r)=>s.transaction.eventDate.localeCompare(r.transaction.eventDate)).map(s=>e.jsxs("tr",{children:[e.jsx(an,{data:s.transaction}),e.jsx(rn,{data:s.transaction}),e.jsx(jn,{data:s}),e.jsx("td",{children:e.jsx(be,{to:ye.CHARGES.DETAIL(s.transaction.chargeId),target:"_blank",rel:"noreferrer",onClick:r=>r.stopPropagation(),className:"inline-flex items-center font-semibold",children:"To Charge"})}),e.jsx(on,{data:s.transaction}),e.jsx(cn,{data:s.transaction}),e.jsx(dn,{data:s.transaction}),e.jsx(ln,{data:s.transaction}),e.jsx("td",{children:e.jsx(xn,{businessTripId:t,transactionId:s.transaction.id,onChange:n,defaultAmount:s.transaction.amount.raw})})]},s.transaction.id))})]})}):e.jsx(e.Fragment,{})},jn=({data:a})=>{const{transaction:n,categorizedAmount:i,errors:t}=A($s,a),s="amount"in n?n.amount:void 0,r=s?.raw!==i.raw&&i.raw!==0;return e.jsx("td",{children:e.jsxs("div",{className:"flex flex-col whitespace-nowrap",style:{color:Number(s?.raw)>0?"green":"red"},children:[e.jsxs("div",{className:"flex gap-1",children:[s?.formatted,t.length>0&&e.jsx(fn,{errors:t})]}),r&&e.jsxs("div",{className:"text-gray-500 ml-2",children:[i.formatted," categorized "]}),n.cryptoExchangeRate&&e.jsxs("div",{className:"text-gray-500 ml-2",children:[`(Rate: ${n.cryptoExchangeRate.rate})`,e.jsx("br",{}),s?.raw?`${Os(s.raw*n.cryptoExchangeRate.rate)}$`:null]})]})})},fn=({errors:a})=>{const[n,{close:i,open:t}]=U(!1);return e.jsxs(fe,{width:200,position:"bottom",shadow:"md",opened:n,children:[e.jsx(fe.Target,{children:e.jsx(Rs,{onMouseEnter:t,onMouseLeave:i})}),e.jsx(fe.Dropdown,{sx:{pointerEvents:"none"},className:"whitespace-normal text-red-500",children:a.map((s,r)=>e.jsx(D,{size:"sm",children:s},r))})]})};function wn({tripId:a,isExtended:n=!1}){const[i,t]=x.useState(),[{data:s},r]=ie({query:ks,variables:{businessTripId:a}}),o=r;return x.useEffect(()=>{s?.businessTrip&&t(s.businessTrip)},[s?.businessTrip]),e.jsx(ke,{shadow:"sm",radius:"md",withBorder:!0,children:i?e.jsxs(e.Fragment,{children:[e.jsx(Hs,{data:i,onChange:o}),e.jsxs(qs,{className:"w-full",type:"multiple",children:[e.jsxs(L,{value:"attendees",children:[e.jsx(_,{children:"Attendees"}),e.jsx(W,{children:e.jsx($t,{data:i,onChange:o})})]}),n&&e.jsxs(L,{value:"uncategorized-transactions",children:[e.jsx(_,{disabled:!i.uncategorizedTransactions?.length,children:"Uncategorized Transactions"}),e.jsx(W,{children:e.jsx(gn,{data:i,onChange:o})})]}),e.jsxs(L,{value:"flights",children:[e.jsx(_,{children:"Flights"}),e.jsx(W,{children:e.jsx(Lt,{data:i,onChange:o})})]}),e.jsxs(L,{value:"accommodations",children:[e.jsx(_,{children:"Accommodations"}),e.jsx(W,{children:e.jsx(ft,{data:i,onChange:o})})]}),e.jsxs(L,{value:"travelAndSubsistence",children:[e.jsx(_,{children:"Travel & Subsistence"}),e.jsx(W,{children:e.jsx(nn,{data:i,onChange:o})})]}),e.jsxs(L,{value:"other",children:[e.jsx(_,{children:"Other"}),e.jsx(W,{children:e.jsx(Kt,{data:i,onChange:o})})]}),e.jsxs(L,{value:"carRental",children:[e.jsx(_,{children:"Car Rental"}),e.jsx(W,{children:e.jsx(Ut,{data:i,onChange:o})})]}),e.jsxs(L,{value:"summary",children:[e.jsx(_,{children:"Summary"}),e.jsx(W,{children:e.jsx(Vs,{data:i})})]})]})]}):e.jsx(Be,{className:"h-10 w-10 animate-spin mr-2 self-center"})})}export{wn as E,Dn as P};
|
|
1
|
+
import{v as ve,cj as We,ck as qe,r as x,j as e,B as v,L as Be,g as w,cl as Ge,t as m,i as B,H as Se,u as ie,cm as ge,bE as b,bH as Y,cn as oe,co as Ne,cp as Ie,aC as Ye,bF as q,bG as G,w as F,ay as Fe,cq as Me,l as U,T as C,a3 as J,E as N,n as E,V as S,Y as M,Z as z,_ as Q,$ as P,I as ee,a1 as H,b7 as ze,cr as Z,d as K,cs as Ze,ct as Ke,cu as Xe,bv as D,cv as Qe,bX as Pe,cw as $e,ah as be,R as ye,a6 as A,cx as Je,ag as se,e as te,cy as es,cz as ss,cA as ts,cB as ns,bD as Oe,cC as rs,cD as is,cE as as,cF as Re,cG as os,cH as cs,cI as ds,cJ as ls,cK as us,cL as hs,at as je,cM as xs,cN as ps,cO as ms,cP as gs,cQ as js,cR as fs,cS as vs,cT as bs,cU as ys,cV as Ts,cW as Es,cX as Cs,cY as As,cZ as Ds,c_ as ws,c$ as Bs,d0 as Ss,d1 as Ns,d2 as Is,q as Fs,d3 as Ms,d4 as zs,d5 as Ps,d6 as $s,d7 as Os,d8 as fe,d9 as Rs,da as ks}from"./index-D1_HHRLX.js";import{G as re,L as me,C as ke,R as Hs,S as Vs}from"./summary-C5TvRXn1.js";import{T as ne}from"./Table-pGQWLQ8H.js";import{T as Us}from"./toggle-expansion-button-Dg_XsE6y.js";import{M as He}from"./MultiSelect-C5wjF9jC.js";import{a as Ls,u as _s,S as Ws}from"./similar-transactions-modal-BTidmv0G.js";import{A as qs,a as L,b as _,c as W}from"./accordion-Bd6kAhfN.js";const Gs=[["path",{d:"M19 17h2c.6 0 1-.4 1-1v-3c0-.9-.7-1.7-1.5-1.9C18.7 10.6 16 10 16 10s-1.3-1.4-2.2-2.3c-.5-.4-1.1-.7-1.8-.7H5c-.6 0-1.1.4-1.4.9l-1.4 2.9A3.7 3.7 0 0 0 2 12v4c0 .6.4 1 1 1h2",key:"5owen"}],["circle",{cx:"7",cy:"17",r:"2",key:"u2ysq9"}],["path",{d:"M9 17h6",key:"r8uit2"}],["circle",{cx:"17",cy:"17",r:"2",key:"axvx0g"}]],Ys=ve("car",Gs);const Zs=[["path",{d:"M14 13h2a2 2 0 0 1 2 2v2a2 2 0 0 0 4 0v-6.998a2 2 0 0 0-.59-1.42L18 5",key:"1wtuz0"}],["path",{d:"M14 21V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v16",key:"e09ifn"}],["path",{d:"M2 21h13",key:"1x0fut"}],["path",{d:"M3 9h11",key:"1p7c0w"}]],Ks=ve("fuel",Zs);const Xs=[["path",{d:"M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2",key:"143wyd"}],["path",{d:"M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6",key:"1itne7"}],["rect",{x:"6",y:"14",width:"12",height:"8",rx:"1",key:"1ue0tg"}]],Qs=ve("printer",Xs);var k=3.77952755906,xe={method:"save",resolution:3,page:{margin:0,format:"A4",orientation:"portrait"},canvas:{mimeType:"image/jpeg",qualityRatio:1,useCORS:!0,logging:!1},overrides:{}},Js=class{pdf;canvas;options;constructor(a,n){this.canvas=a,this.options=n,this.pdf=new qe({format:this.options.page.format,orientation:this.options.page.orientation,...this.options.overrides?.pdf,unit:"mm"})}getMarginTopMM(){const a=typeof this.options.page.margin=="object"?this.options.page.margin.top:this.options.page.margin;return Number(a)}getMarginLeftMM(){const a=typeof this.options.page.margin=="object"?this.options.page.margin.left:this.options.page.margin;return Number(a)}getMarginRightMM(){const a=typeof this.options.page.margin=="object"?this.options.page.margin.right:this.options.page.margin;return Number(a)}getMarginBottomMM(){const a=typeof this.options.page.margin=="object"?this.options.page.margin.bottom:this.options.page.margin;return Number(a)}getMarginTop(){return this.getMarginTopMM()*k}getMarginBottom(){return this.getMarginBottomMM()*k}getMarginLeft(){return this.getMarginLeftMM()*k}getMarginRight(){return this.getMarginRightMM()*k}getScale(){return this.options.resolution}getPageHeight(){return this.getPageHeightMM()*k}getPageHeightMM(){return this.pdf.internal.pageSize.height}getPageWidthMM(){return this.pdf.internal.pageSize.width}getPageWidth(){return this.getPageWidthMM()*k}getOriginalCanvasWidth(){return this.canvas.width/this.getScale()}getOriginalCanvasHeight(){return this.canvas.height/this.getScale()}getCanvasPageAvailableHeight(){return this.getPageAvailableHeight()*this.getScale()*this.getHorizontalFitFactor()}getPageAvailableWidth(){return this.getPageWidth()-(this.getMarginLeft()+this.getMarginRight())}getPageAvailableHeight(){return this.getPageHeight()-(this.getMarginTop()+this.getMarginBottom())}getPageAvailableWidthMM(){return this.getPageAvailableWidth()/k}getPageAvailableHeightMM(){return this.getPageAvailableHeight()/k}getNumberPages(){return Math.ceil(this.canvas.height/this.getCanvasPageAvailableHeight())}getHorizontalFitFactor(){return this.getPageAvailableWidth()<this.getOriginalCanvasWidth()?this.getOriginalCanvasWidth()/this.getPageAvailableWidth():1}getCanvasOffsetY(a){return this.getCanvasPageAvailableHeight()*(a-1)}getCanvasHeightLeft(a){return this.canvas.height-this.getCanvasOffsetY(a)}getCanvasPageHeight(a){if(this.canvas.height<this.getCanvasPageAvailableHeight())return this.canvas.height;const n=this.getCanvasHeightLeft(a);return n<this.getCanvasPageAvailableHeight()?n:this.getCanvasPageAvailableHeight()}getCanvasPageWidth(){return this.canvas.width}createCanvasPage(a){const n=this.getCanvasPageWidth(),i=this.getCanvasPageHeight(a),t=document.createElement("canvas");return t.setAttribute("width",String(n)),t.setAttribute("height",String(i)),t.getContext("2d").drawImage(this.canvas,0,this.getCanvasOffsetY(a),this.canvas.width,i,0,0,this.canvas.width,i),t}convert(){let a=1;const n=this.getNumberPages();for(;a<=n;){a>1&&this.pdf.addPage(this.options.page.format,this.options.page.orientation);const i=this.createCanvasPage(a),t=i.toDataURL(this.options.canvas.mimeType,this.options.canvas.qualityRatio);this.pdf.setPage(a),this.pdf.addImage({imageData:t,width:i.width/(this.getScale()*k*this.getHorizontalFitFactor()),height:i.height/(this.getScale()*k*this.getHorizontalFitFactor()),x:this.getMarginLeftMM(),y:this.getMarginTopMM()}),a+=1}return this.pdf}},et=a=>a?{...xe,...a,canvas:{...xe.canvas,...a.canvas},page:{...xe.page,...a.page}}:xe,st=a=>typeof a=="function"?a():a?.current,tt=async(a,n)=>{const i=et(n),t=st(a);if(!t){console.error("Unable to get the target element.");return}const s=await We(t,{useCORS:i.canvas.useCORS,logging:i.canvas.logging,scale:i.resolution,...i.overrides?.canvas}),o=new Js(s,i).convert();switch(i.method){case"build":return o;case"open":return window.open(o.output("bloburl"),"_blank"),o;default:{const d=i.filename??`${new Date().getTime()}.pdf`;return await o.save(d,{returnPromise:!0}),o}}},nt=tt;const rt={method:"open",overrides:{pdf:{compress:!0}}},it=()=>document.getElementById("main-page"),Dn=({filename:a})=>{const[n,i]=x.useState(!1),t=async()=>{i(!0),await nt(it,{...rt,filename:a}),i(!1)};return e.jsx(v,{variant:"outline",size:"icon",className:"size-7.5",onClick:t,disabled:n,children:n?e.jsx(Be,{className:"h-10 w-10 animate-spin mr-2 self-center"}):e.jsx(Qs,{className:"size-5"})})},at="addBusinessTripAccommodationsExpense",ot=()=>{const[{fetching:a},n]=w(Ge),i=x.useCallback(async t=>{const s="Error adding business trip accommodations expense",r=at;m.loading("Adding Business Trip Accommodations Expense",{id:r});try{const o=await n(t),d=B(o,s,r);if(d)return m.success("Success",{id:r,description:"Business trip accommodations expense added"}),d.addBusinessTripAccommodationsExpense}catch(o){console.error(`${s}: ${o}`),m.error("Error",{id:r,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:a,addBusinessTripAccommodationsExpense:i}};function Ve({formManager:a,attendeesStayPath:n,attendeesData:i,fetchingAttendees:t=!1,businessTripId:s}){const{control:r,watch:o,trigger:d}=a,{fields:g,append:j,remove:h}=Se({control:r,name:n}),[l,c]=x.useState(t),[u,p]=x.useState(i??[]),f=o(n),T=g.map((I,O)=>({...I,...f[O]}));x.useEffect(()=>{i&&p(i)},[i]),x.useEffect(()=>{c(t)},[t]);const[{data:y,fetching:$},X]=ie({query:ge,pause:!0,variables:{businessTripId:s??""}});return x.useEffect(()=>{if(y?.businessTrip?.attendees.length){const I=y.businessTrip.attendees.map(O=>({value:O.id,label:O.name}))??[];p(I)}},[y?.businessTrip?.attendees]),x.useEffect(()=>{c($)},[$]),x.useEffect(()=>{!i&&!y&&!t&&!$&&X({businessTripId:s})},[i,t,$,X,s,y]),!s&&!i?e.jsx("div",{children:"Cannot edit attendees stay, lacking some mandatory information!"}):e.jsxs("div",{children:[e.jsx("span",{className:"mantine-InputWrapper-label mantine-Select-label",children:"Employees Stay"}),e.jsxs("div",{className:"h-full flex flex-col overflow-hidden",children:[T?.map((I,O)=>e.jsxs("div",{className:"flex items-end gap-2 text-gray-600 mb-2",children:[e.jsx("div",{className:"w-full mt-1 relative rounded-md shadow-xs",children:e.jsx(b,{name:`${n}.${O}.attendeeId`,control:r,rules:{required:"Required"},render:({field:R,fieldState:ae})=>e.jsx(Y,{...R,disabled:l,data:u,value:R.value??void 0,label:"Attendee",placeholder:"Scroll to see all options",maxDropdownHeight:160,searchable:!0,error:ae.error?.message,withinPortal:!0,required:!0})})}),e.jsx("div",{className:"w-full mt-1 relative rounded-md shadow-xs",children:e.jsx(b,{control:r,name:`${n}.${O}.nightsCount`,render:({field:R,fieldState:ae})=>e.jsx(oe,{className:"w-full",...R,min:0,label:"Nights Count",value:R.value??void 0,hideControls:!0,precision:0,error:ae.error?.message,required:!0,onChange:V=>R.onChange(V&&typeof V=="number"?V:void 0)})})}),e.jsx(v,{variant:"ghost",size:"icon",className:"mb-2 size-7.5",onClick:()=>{h(O),d(n)},children:e.jsx(Ne,{className:"size-5"})})]},I.id)),e.jsx(v,{variant:"ghost",size:"icon",className:"size-7.5",onClick:()=>{j({}),d(n)},children:e.jsx(Ie,{className:"size-5"})})]})]})}function ce({businessTripId:a,control:n,setFetching:i}){const[t,s]=x.useState([]),[{data:r,fetching:o,error:d}]=ie({query:ge,variables:{businessTripId:a}}),{userContext:g}=x.useContext(Ye);x.useEffect(()=>{r?.businessTrip?.attendees.length&&s(r.businessTrip.attendees.map(h=>({value:h.id,label:h.name})).sort((h,l)=>h.label>l.label?1:-1))},[r,s]),x.useEffect(()=>{i(o)},[i,o]),x.useEffect(()=>{d&&m.error("Error",{description:"Oops, we have an error fetching attendees"})},[d]);const j=x.useMemo(()=>g?.context.ledgerLock,[g]);return e.jsxs(e.Fragment,{children:[e.jsx(b,{name:"date",control:n,rules:{min:j?{value:j,message:`Date must be after ${j}`}:void 0,pattern:{value:q,message:"Date must be im format yyyy-mm-dd"}},render:({field:h,fieldState:l})=>e.jsx(G,{"data-autofocus":!0,...h,onChange:c=>{const u=c?typeof c=="string"?c:F(c,"yyyy-MM-dd"):void 0;u!==h.value&&h.onChange(u)},value:h.value?new Date(h.value):void 0,error:l.error?.message,label:"Date",popoverProps:{withinPortal:!0}})}),e.jsx(b,{name:"valueDate",control:n,rules:{pattern:{value:q,message:"Date must be im format yyyy-mm-dd"},min:j?{value:j,message:`Date must be after ${j}`}:void 0},render:({field:h,fieldState:l})=>e.jsx(G,{...h,onChange:c=>{const u=c?typeof c=="string"?c:F(c,"yyyy-MM-dd"):void 0;u!==h.value&&h.onChange(u)},value:h.value?new Date(h.value):void 0,error:l.error?.message,label:"Value Date",popoverProps:{withinPortal:!0}})}),e.jsx(b,{name:"amount",control:n,render:({field:h,fieldState:l})=>e.jsx(b,{name:"currency",control:n,defaultValue:Fe.Ils,render:({field:c,fieldState:u})=>e.jsx(Me,{...h,value:h.value??void 0,error:l.error?.message||u.error?.message,label:"Amount",currencyCodeProps:{...c,label:"Currency"}})})}),e.jsx(b,{name:"employeeBusinessId",control:n,render:({field:h,fieldState:l})=>e.jsx(Y,{...h,data:t,value:h.value,disabled:o,label:"Attendee",placeholder:"Scroll to see all options",maxDropdownHeight:160,searchable:!0,error:l.error?.message,withinPortal:!0})})]})}function Te(a){const{businessTripId:n,onAdd:i}=a,[t,{close:s,open:r}]=U(!1);return e.jsxs(e.Fragment,{children:[e.jsx(C,{content:"Add Accommodations Expense",children:e.jsx(v,{variant:"outline",size:"icon",className:"size-7.5",onClick:o=>{o.stopPropagation(),r()},children:e.jsx(J,{className:"size-5"})})}),t&&e.jsx(ct,{businessTripId:n,opened:t,close:s,onAdd:i})]})}function ct({businessTripId:a,opened:n,close:i,onAdd:t}){const s=N({defaultValues:{businessTripId:a}}),{control:r,handleSubmit:o}=s,[d,g]=x.useState(!1),{addBusinessTripAccommodationsExpense:j,fetching:h}=ot(),l=c=>{j({fields:c}).then(()=>{t?.(),i()})};return e.jsxs(E,{opened:n,onClose:i,centered:!0,lockScroll:!0,children:[e.jsx(E.Title,{children:"Add Accommodation Expense"}),e.jsx(E.Body,{children:e.jsx(S,{...s,children:e.jsxs("form",{onSubmit:o(l),className:"space-y-3",children:[e.jsx(ce,{businessTripId:a,control:r,setFetching:g}),e.jsx(M,{control:r,name:"country",render:({field:c})=>e.jsxs(z,{children:[e.jsx(Q,{children:"Country"}),e.jsx(P,{children:e.jsx(ee,{...c,value:c.value??void 0})}),e.jsx(H,{})]})}),e.jsx(M,{name:"nightsCount",control:r,render:({field:c})=>e.jsxs(z,{children:[e.jsx(Q,{children:"Nights Count"}),e.jsx(P,{children:e.jsx(ze,{...c,value:c.value??void 0,hideControls:!0,decimalScale:0,thousandSeparator:","})}),e.jsx(H,{})]})}),e.jsx(Ve,{formManager:s,attendeesStayPath:"attendeesStay",businessTripId:a}),e.jsx("div",{className:"flex justify-center mt-5 gap-3",children:e.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:"Add"})})]})})}),(h||d)&&e.jsx(Z,{blur:1,center:!0,children:e.jsx(K,{})})]})}const dt="updateBusinessTripAccommodationsExpense",lt=()=>{const[{fetching:a},n]=w(Ze),i=x.useCallback(async t=>{const s="Error updating business trip accommodations expense",r=dt;m.loading("Updating trip accommodations expense",{id:r});try{const o=await n(t),d=B(o,s,r);if(d)return m.success("Success",{id:r,description:"Business trip accommodations expense was updated"}),d.updateBusinessTripAccommodationsExpense}catch(o){console.error(`${s}: ${o}`),m.error("Error",{id:r,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:a,updateBusinessTripAccommodationsExpense:i}},ut="categorizeIntoExistingBusinessTripExpense",ht=()=>{const[{fetching:a},n]=w(Ke),i=x.useCallback(async t=>{const s="Error updating business trip expense category",r=ut;m.loading("Updating business trip expense category",{id:r});try{const o=await n(t),d=B(o,s,r);if(d)return m.success("Success",{id:r,description:"Business trip expense category was updated"}),d.categorizeIntoExistingBusinessTripExpense}catch(o){console.error(`${s}: ${o}`),m.error("Error",{id:r,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:a,categorizeIntoExistingBusinessTripExpense:i}};function de(a){const{businessTripExpenseId:n,businessTripId:i,onChange:t}=a,[s,{close:r,open:o}]=U(!1);return e.jsxs(e.Fragment,{children:[e.jsx(C,{content:"Attach Uncategorized Transaction",children:e.jsx(v,{variant:"outline",size:"icon",className:"size-7.5",onClick:d=>{d.stopPropagation(),o()},children:e.jsx(J,{className:"size-5"})})}),s&&e.jsx(xt,{businessTripExpenseId:n,businessTripId:i,opened:s,close:r,onChange:t})]})}function xt({businessTripExpenseId:a,businessTripId:n,opened:i,close:t,onChange:s}){const{control:r,handleSubmit:o,setValue:d}=N({defaultValues:{businessTripExpenseId:a}}),[g,j]=x.useState([]),[{data:h,fetching:l,error:c}]=ie({query:Xe,variables:{businessTripId:n}}),{categorizeIntoExistingBusinessTripExpense:u,fetching:p}=ht(),f=T=>{u({fields:T}).then(()=>{s?.(),t()})};return x.useEffect(()=>{if(h?.businessTrip?.uncategorizedTransactions.length){const T=h.businessTrip.uncategorizedTransactions.filter(y=>y?.transaction);j(T.map(({transaction:y})=>({eventDate:y.eventDate,sourceDescription:y.sourceDescription,referenceKey:y.referenceKey,counterparty:y.counterparty?.name,amount:y.amount.formatted,rawAmount:y.amount.raw,value:y.id,label:`${y.eventDate} | ${y.counterparty?.name} | ${y.amount.formatted}`})).sort((y,$)=>y.eventDate.localeCompare($.eventDate)))}},[h,j]),x.useEffect(()=>{c&&m.error("Error",{description:"Oops, we have an error fetching transactions to categorize"})},[c]),e.jsxs(E,{opened:i,onClose:t,centered:!0,children:[e.jsx(E.Title,{children:"Set Transaction Category"}),e.jsx(E.Body,{children:e.jsxs("form",{onSubmit:o(f),className:"flex flex-col gap-3 mt-3",children:[e.jsx(b,{name:"transactionId",control:r,render:({field:T,fieldState:y})=>e.jsx(Y,{...T,itemComponent:pt,data:g??[],disabled:l,label:"Transactions",placeholder:"Scroll to see all options",maxDropdownHeight:160,error:y.error?.message,withAsterisk:!0,withinPortal:!0,onChange:$=>{const X=g.find(I=>I.value===$);X?.rawAmount&&d("amount",X.rawAmount),T.onChange($)}})}),e.jsx(b,{name:"amount",control:r,render:({field:T,fieldState:y})=>e.jsx(oe,{...T,value:T.value??void 0,hideControls:!0,precision:2,removeTrailingZeros:!0,error:y.error?.message,label:"Amount"})}),e.jsx("div",{className:"flex justify-center gap-3",children:e.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:"Confirm"})})]})}),p&&e.jsx(Z,{blur:1,center:!0,children:e.jsx(K,{})})]})}const pt=x.forwardRef(({eventDate:a,sourceDescription:n,referenceKey:i,counterparty:t,amount:s,...r},o)=>e.jsx("div",{ref:o,...r,children:e.jsxs(re,{children:[e.jsx(re.Col,{span:4,children:a}),e.jsx(re.Col,{span:4,children:e.jsx(D,{size:"sm",children:t})}),e.jsx(re.Col,{span:4,children:e.jsx(D,{size:"sm",children:s})}),e.jsx(re.Col,{span:8,children:e.jsx(D,{size:"xs",opacity:.65,children:n})}),e.jsxs(re.Col,{span:4,children:["Reference: ",i]})]})})),mt="deleteBusinessTripExpense",gt=()=>{const[{fetching:a},n]=w(Qe),i=x.useCallback(async t=>{const s="Error deleting business trip expense",r=`${mt}-${t.businessTripExpenseId}`;m.loading("Deleting trip expense",{id:r});try{const o=await n(t),d=B(o,s,r);if(d)return m.success("Success",{id:r,description:"Business trip expense was deleted"}),d.deleteBusinessTripExpense}catch(o){console.error(`${s}: ${o}`),m.error("Error",{id:r,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:a,deleteBusinessTripExpense:i}};function le(a){const{fetching:n,deleteBusinessTripExpense:i}=gt(),t=x.useCallback(()=>{i({businessTripExpenseId:a.businessTripExpenseId}).then(()=>{a.onDelete?.()})},[a,i]);return e.jsx(C,{content:"Remove Expense",children:e.jsx(Pe,{onConfirm:t,title:"Are you sure you want to remove expense?",children:e.jsx(v,{variant:"outline",size:"icon",className:"size-7.5 text-red-500",disabled:n,children:e.jsx($e,{className:"size-5"})})})})}const ue=({data:a,isEditMode:n=!1,control:i,businessTripId:t})=>{const s=A(Je,a),[r,o]=x.useState([]),[{data:d,fetching:g,error:j}]=ie({query:ge,variables:{businessTripId:t}});x.useEffect(()=>{d?.businessTrip?.attendees.length&&o(d.businessTrip.attendees.map(l=>({value:l.id,label:l.name})).sort((l,c)=>l.label>c.label?1:-1))},[d,o]),x.useEffect(()=>{j&&m.error("Error",{description:"Oops, we have an error fetching attendees"})},[j]);const h=Array.from(new Set(s.charges?.map(l=>l.id)));return e.jsxs(e.Fragment,{children:[e.jsx("td",{children:e.jsx("div",{className:"flex flex-col gap-2 justify-center",children:n&&s.payedByEmployee?e.jsxs(e.Fragment,{children:[e.jsx(b,{name:"date",control:i,defaultValue:s.date,rules:{pattern:{value:q,message:"Date must be im format yyyy-mm-dd"}},render:({field:l,fieldState:c})=>e.jsx(G,{...l,form:`form ${s.id}`,"data-autofocus":!0,onChange:u=>{const p=u?typeof u=="string"?u:F(u,"yyyy-MM-dd"):void 0;p!==l.value&&l.onChange(p)},value:l.value?new Date(l.value):void 0,label:"Date",error:c.error?.message,popoverProps:{withinPortal:!0}})}),e.jsx(b,{name:"valueDate",control:i,defaultValue:s.valueDate,rules:{pattern:{value:q,message:"Date must be im format yyyy-mm-dd"}},render:({field:l,fieldState:c})=>e.jsx(G,{...l,form:`form ${s.id}`,onChange:u=>{const p=u?typeof u=="string"?u:F(u,"yyyy-MM-dd"):void 0;p!==l.value&&l.onChange(p)},value:l.value?new Date(l.value):void 0,label:"Value Date",error:c.error?.message,popoverProps:{withinPortal:!0}})})]}):e.jsxs(e.Fragment,{children:[s.date&&F(new Date(s.date),"dd/MM/yy"),e.jsx(D,{fz:"sm",c:"dimmed",children:s.valueDate&&F(new Date(s.valueDate),"dd/MM/yy")})]})})}),e.jsx("td",{children:n&&s.payedByEmployee?e.jsx(b,{name:"amount",control:i,defaultValue:s.amount?.raw??void 0,render:({field:l,fieldState:c})=>e.jsx(b,{name:"currency",control:i,defaultValue:s.amount?.currency??Fe.Ils,render:({field:u,fieldState:p})=>e.jsx(Me,{form:`form ${s.id}`,...l,value:l.value??void 0,error:c.error?.message||p.error?.message,label:"Amount",currencyCodeProps:{...u,label:"Currency",form:`form ${s.id}`}})})}):e.jsx("div",{children:s.amount?.formatted})}),e.jsx("td",{children:e.jsx("div",{className:"flex flex-col gap-2 justify-center",children:n&&s.payedByEmployee?e.jsx(b,{name:"employeeBusinessId",control:i,defaultValue:s.employee?.id,render:({field:l,fieldState:c})=>e.jsx(Y,{form:`form ${s.id}`,...l,data:r,value:l.value,disabled:g,label:"Attendee",placeholder:"Scroll to see all options",maxDropdownHeight:160,searchable:!0,error:c.error?.message,withinPortal:!0})}):e.jsx("div",{className:"flex flex-row gap-2 items-center",children:s.payedByEmployee&&e.jsx(D,{c:s.employee?.name?void 0:"red",children:s.employee?.name??"Missing"})})})}),e.jsx("td",{children:e.jsx("div",{className:"flex flex-col gap-2",children:h.map(l=>e.jsx(be,{to:ye.CHARGES.DETAIL(l),target:"_blank",rel:"noreferrer",onClick:c=>c.stopPropagation(),className:"inline-flex items-center font-semibold",children:"To Charge"},l))})})]})},he=()=>e.jsxs(e.Fragment,{children:[e.jsx("th",{children:"Date"}),e.jsx("th",{children:"Amount"}),e.jsx("th",{children:"Payed By Attendee"}),e.jsx("th",{children:"Charges"})]}),jt=({data:a,businessTripId:n,onChange:i})=>{const t=A(es,a),[s,r]=x.useState(!1),o=N({defaultValues:{id:t.id,businessTripId:n,attendeesStay:t.attendeesStay.map(c=>({attendeeId:c.id,nightsCount:c.nightsCount}))}}),{control:d,handleSubmit:g}=o,{updateBusinessTripAccommodationsExpense:j,fetching:h}=lt(),l=c=>{j({fields:c}).then(()=>{i?.(),r(!1)})};return e.jsxs("tr",{children:[e.jsx(ue,{data:t,isEditMode:s,control:d,businessTripId:n}),e.jsx("td",{children:e.jsx(S,{...o,children:e.jsx("form",{id:`form ${t.id}`,onSubmit:g(l),children:s?e.jsx(M,{name:"country",control:d,defaultValue:t.country,render:({field:c})=>e.jsxs(z,{children:[e.jsx(P,{children:e.jsx(ee,{form:`form ${t.id}`,...c,value:c.value??void 0})}),e.jsx(H,{})]})}):e.jsx(D,{c:t.country?void 0:"red",children:t.country?.name??"Missing"})})})}),e.jsx("td",{children:e.jsx("div",{className:"flex flex-col gap-2 justify-center",children:s?e.jsx(S,{...o,children:e.jsx(M,{name:"nightsCount",control:d,defaultValue:t.nightsCount,render:({field:c})=>e.jsxs(z,{children:[e.jsx(P,{children:e.jsx(ze,{...c,value:c.value??void 0,form:`form ${t.id}`,hideControls:!0,decimalScale:0,thousandSeparator:","})}),e.jsx(H,{})]})})}):e.jsx(D,{c:t.nightsCount?void 0:"red",children:t.nightsCount??"Missing"})})}),e.jsx("td",{children:s?e.jsx(S,{...o,children:e.jsx(Ve,{formManager:o,attendeesStayPath:"attendeesStay",businessTripId:n})}):e.jsx(me,{listStyleType:"disc",children:t.attendeesStay?.length?t.attendeesStay.map(c=>e.jsxs(me.Item,{children:[c.attendee.name," (",c.nightsCount,")"]},c.id)):e.jsx(D,{c:"red",fz:"sm",children:"Missing"})})}),e.jsx("td",{children:i&&e.jsxs(e.Fragment,{children:[e.jsx(C,{content:"Edit",children:e.jsx(v,{disabled:h,variant:s?"default":"outline",size:"icon",className:"size-7.5",onClick:c=>{c.stopPropagation(),r(u=>!u)},children:e.jsx(se,{className:"size-5"})})}),s&&e.jsx(C,{content:"Confirm Changes",children:e.jsx(v,{type:"submit",form:`form ${t.id}`,variant:"outline",size:"icon",className:"size-7.5 text-green-500",children:e.jsx(te,{className:"size-5"})})}),e.jsx(de,{businessTripExpenseId:t.id,businessTripId:n,onChange:i}),e.jsx(le,{businessTripExpenseId:t.id,onDelete:i})]})})]},t.id)},Ue=({businessTripId:a,expenses:n,onChange:i})=>{if(!n?.length)return i?e.jsx(Te,{businessTripId:a,onAdd:i}):e.jsx(e.Fragment,{});const t=n.map(s=>A(ss,s));return e.jsx("div",{className:"flex flex-col gap-2 mt-5",children:e.jsxs(ne,{highlightOnHover:!0,withBorder:!0,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx(he,{}),e.jsx("th",{children:"Location"}),e.jsx("th",{children:"Nights"}),e.jsx("th",{children:"Attendees Stay"}),e.jsx("th",{})]})}),e.jsxs("tbody",{children:[t.sort((s,r)=>s.date&&r.date?s.date<r.date?1:-1:s.date?-1:r.date?1:0).map(s=>e.jsx(jt,{data:s,businessTripId:a,onChange:i},s.id)),i&&e.jsx("tr",{children:e.jsx("td",{colSpan:6,children:e.jsx(Te,{businessTripId:a,onAdd:i})})})]})]})})},ft=({data:a,onChange:n})=>{const{accommodationExpenses:i,id:t}=A(ts,a);return e.jsx(Ue,{businessTripId:t,expenses:i,onChange:n})},vt="insertBusinessTripAttendee",bt=()=>{const[{fetching:a},n]=w(ns),i=x.useCallback(async t=>{const s="Error adding attendee to business trip",r=vt;m.loading("Adding attendee",{id:r});try{const o=await n(t),d=B(o,s,r);if(d)return m.success("Success",{id:r,description:"Attendee was added to the business trip"}),d.insertBusinessTripAttendee}catch(o){console.error(`${s}: ${o}`),m.error("Error",{id:r,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:a,insertBusinessTripAttendee:i}};function Ee(a){const{businessTripId:n,onAdd:i}=a,[t,{close:s,open:r}]=U(!1);return e.jsxs(e.Fragment,{children:[e.jsx(C,{content:"Add Attendee",children:e.jsx(v,{variant:"outline",size:"icon",onClick:o=>{o.stopPropagation(),r()},className:"size-7.5",children:e.jsx(J,{className:"size-5"})})}),t&&e.jsx(yt,{businessTripId:n,opened:t,close:s,onAdd:i})]})}function yt({businessTripId:a,opened:n,close:i,onAdd:t}){const{selectableBusinesses:s,fetching:r}=Oe(),{control:o,handleSubmit:d}=N({defaultValues:{businessTripId:a}}),{insertBusinessTripAttendee:g,fetching:j}=bt(),h=l=>{g({fields:l}).then(()=>{t?.(),i()})};return e.jsxs(E,{opened:n,onClose:i,centered:!0,children:[e.jsx(E.Title,{children:"Add Attendee"}),e.jsx(E.Body,{children:e.jsxs("form",{onSubmit:d(h),children:[e.jsx(b,{name:"attendeeId",control:o,render:({field:l,fieldState:c})=>e.jsx(Y,{"data-autofocus":!0,...l,data:s,value:l.value,disabled:r,label:"Attendee",placeholder:"Scroll to see all options",maxDropdownHeight:160,searchable:!0,error:c.error?.message,withAsterisk:!0,withinPortal:!0})}),e.jsx(b,{name:"arrivalDate",control:o,rules:{pattern:{value:q,message:"Date must be im format yyyy-mm-dd"}},render:({field:l,fieldState:c})=>e.jsx(G,{...l,onChange:u=>{const p=u?typeof u=="string"?u:F(u,"yyyy-MM-dd"):void 0;p!==l.value&&l.onChange(p)},value:l.value?new Date(l.value):void 0,error:c.error?.message,label:"Arrival",popoverProps:{withinPortal:!0}})}),e.jsx(b,{name:"departureDate",control:o,rules:{pattern:{value:q,message:"Date must be im format yyyy-mm-dd"}},render:({field:l,fieldState:c})=>e.jsx(G,{...l,onChange:u=>{const p=u?typeof u=="string"?u:F(u,"yyyy-MM-dd"):void 0;p!==l.value&&l.onChange(p)},value:l.value?new Date(l.value):void 0,error:c.error?.message,label:"Departure",popoverProps:{withinPortal:!0}})}),e.jsx("div",{className:"flex justify-center mt-5 gap-3",children:e.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:"Add"})})]})}),(j||r)&&e.jsx(Z,{blur:1,center:!0,children:e.jsx(K,{})})]})}const Tt="updateBusinessTripAttendee",Et=()=>{const[{fetching:a},n]=w(rs),i=x.useCallback(async t=>{const s="Error updating business trip attendee",r=Tt;m.loading("Updating trip attendee",{id:r});try{const o=await n(t),d=B(o,s,r);if(d)return m.success("Success",{id:r,description:"Business trip attendee was updated"}),d.updateBusinessTripAttendee}catch(o){console.error(`${s}: ${o}`),m.error("Error",{id:r,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:a,updateBusinessTripAttendee:i}},Ct="deleteBusinessTripAttendee",At=()=>{const[{fetching:a},n]=w(is),i=x.useCallback(async t=>{const s="Error removing business trip attendee",r=Ct;m.loading("Removing business trip attendee",{id:r});try{const o=await n(t),d=B(o,s,r);if(d)return m.success("Success",{id:r,description:"Business trip attendee was removed"}),d.deleteBusinessTripAttendee}catch(o){console.error(`${s}: ${o}`),m.error("Error",{id:r,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:a,deleteBusinessTripAttendee:i}};function Dt(a){const{fetching:n,deleteBusinessTripAttendee:i}=At(),t=x.useCallback(()=>{i({fields:{businessTripId:a.businessTripId,attendeeId:a.attendeeId}}).then(()=>{a.onDelete?.()})},[a,i]);return e.jsx(C,{content:"Remove Attendee",children:e.jsx(Pe,{onConfirm:t,title:"Are you sure you want to remove attendee?",children:e.jsx(v,{variant:"outline",size:"icon",className:"size-7.5 text-red-500",disabled:n,children:e.jsx($e,{className:"size-5"})})})})}const wt="addBusinessTripFlightsExpense",Bt=()=>{const[{fetching:a},n]=w(as),i=x.useCallback(async t=>{const s="Error adding business trip flight expense",r=wt;m.loading("Adding business trip flight expense",{id:r});try{const o=await n(t),d=B(o,s,r);if(d)return m.success("Success",{id:r,description:"Business trip flight expense added"}),d.addBusinessTripFlightsExpense}catch(o){console.error(`${s}: ${o}`),m.error("Error",{id:r,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:a,addBusinessTripFlightsExpense:i}};function Le({formManager:a,flightPathPath:n,flightPathData:i}){const{control:t,watch:s,trigger:r}=a,{fields:o,append:d,remove:g}=Se({control:t,name:n}),j=s(n),h=o.map((l,c)=>({...l,...j[c]}));return i?e.jsxs("div",{children:[e.jsx("span",{className:"mantine-InputWrapper-label mantine-Select-label",children:"Flight Path"}),e.jsxs("div",{className:"h-full flex flex-col overflow-hidden",children:[h?.map((l,c)=>e.jsxs("div",{className:"flex items-end gap-2 text-gray-600 mb-2",children:[e.jsx("div",{className:"w-full mt-1 relative rounded-md shadow-xs",children:e.jsx(M,{name:`${n}.${c}`,control:t,rules:{required:"Required"},render:({field:u})=>e.jsxs(z,{children:[e.jsx(P,{children:e.jsx(ee,{...u,value:u.value??void 0,placeholder:"Destination"})}),e.jsx(H,{})]})})}),e.jsx(v,{variant:"ghost",size:"icon",className:"mb-2 size-7.5",onClick:()=>{g(c),r(n)},children:e.jsx(Ne,{className:"size-5"})})]},l.id)),e.jsx(v,{variant:"ghost",size:"icon",className:"size-7.5",onClick:()=>{d(""),r(n)},children:e.jsx(Ie,{className:"size-5"})})]})]}):e.jsx("div",{children:"Cannot edit flight path stay, lacking some mandatory information!"})}function Ce(a){const{businessTripId:n,onAdd:i}=a,[t,{close:s,open:r}]=U(!1);return e.jsxs(e.Fragment,{children:[e.jsx(C,{content:"Add Flight Expense",children:e.jsx(v,{variant:"outline",size:"icon",className:"size-7.5",onClick:o=>{o.stopPropagation(),r()},children:e.jsx(J,{className:"size-5"})})}),t&&e.jsx(Nt,{businessTripId:n,opened:t,close:s,onAdd:i})]})}const St=Object.entries(Re).map(([a,n])=>({value:n,label:a}));function Nt({businessTripId:a,opened:n,close:i,onAdd:t}){const s=N({defaultValues:{businessTripId:a}}),{control:r,handleSubmit:o}=s,[d,g]=x.useState(!1),[{data:j,fetching:h}]=ie({query:ge,variables:{businessTripId:a}}),{addBusinessTripFlightsExpense:l,fetching:c}=Bt(),u=f=>{l({fields:f}).then(()=>{t?.(),i()})},p=j?.businessTrip?.attendees.map(f=>({value:f.id,label:f.name}))??[];return e.jsxs(E,{opened:n,onClose:i,centered:!0,lockScroll:!0,children:[e.jsx(E.Title,{children:"Add Flight Expense"}),e.jsx(E.Body,{children:e.jsx(S,{...s,children:e.jsxs("form",{onSubmit:o(u),children:[e.jsx(ce,{businessTripId:a,control:r,setFetching:g}),e.jsx(Le,{formManager:s,flightPathPath:"path"}),e.jsx(b,{name:"flightClass",control:r,render:({field:f,fieldState:T})=>e.jsx(Y,{...f,data:St,value:f.value,label:"Flight Class",placeholder:"Scroll to see all options",maxDropdownHeight:160,searchable:!0,error:T.error?.message,withinPortal:!0})}),e.jsx(b,{name:"attendeeIds",control:r,render:({field:f,fieldState:T})=>e.jsx(He,{...f,disabled:h,data:p,value:f.value??[],label:"Attendees",placeholder:"Scroll to see all options",maxDropdownHeight:160,searchable:!0,error:T.error?.message,withinPortal:!0})}),e.jsx("div",{className:"flex justify-center mt-5 gap-3",children:e.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:"Add"})})]})})}),(c||d)&&e.jsx(Z,{blur:1,center:!0,children:e.jsx(K,{})})]})}const It="updateBusinessTripFlightsExpense",Ft=()=>{const[{fetching:a},n]=w(os),i=x.useCallback(async t=>{const s="Error updating business trip flights expense",r=It;m.loading("Updating trip flights expense",{id:r});try{const o=await n(t),d=B(o,s,r);if(d)return m.success("Success",{id:r,description:"Business trip flights expense was updated"}),d.updateBusinessTripFlightsExpense}catch(o){console.error(`${s}: ${o}`),m.error("Error",{id:r,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:a,updateBusinessTripFlightsExpense:i}},Mt=Object.entries(Re).map(([a,n])=>({value:n,label:a})),zt=({data:a,businessTripId:n,onChange:i,attendees:t})=>{const s=A(cs,a),[r,o]=x.useState(!1),d=N({defaultValues:{id:s.id,businessTripId:n,attendeeIds:s.attendees?.map(p=>p.id)??[],path:s.path??[]}}),{control:g,handleSubmit:j}=d,{updateBusinessTripFlightsExpense:h,fetching:l}=Ft(),c=p=>{h({fields:p}).then(()=>{i?.(),o(!1)})},u=t.map(p=>({value:p.id,label:p.name}));return e.jsxs("tr",{children:[e.jsx(ue,{data:s,isEditMode:r,control:g,businessTripId:n}),e.jsx("td",{children:e.jsx(S,{...d,children:e.jsx("form",{id:`form ${s.id}`,onSubmit:j(c),children:e.jsxs("div",{className:"flex flex-col gap-2 justify-center",children:[r?e.jsx(Le,{formManager:d,flightPathPath:"path",flightPathData:s.path??void 0}):e.jsx("div",{className:"flex gap-2 items-center",children:s.path?.length?s.path.map((p,f)=>e.jsxs(e.Fragment,{children:[e.jsx(D,{fw:700,children:p},f),f<s.path.length-1&&(p===s.path[f+1]?" | ":" → ")]})):e.jsx(D,{fw:700,className:"flex gap-2 items-center",c:"red",children:"Missing"})}),r?e.jsx(b,{name:"flightClass",control:g,defaultValue:s.class??void 0,render:({field:p,fieldState:f})=>e.jsx(Y,{form:`form ${s.id}`,"data-autofocus":!0,...p,data:Mt,value:p.value,label:"Flight Class",placeholder:"Scroll to see all options",maxDropdownHeight:160,searchable:!0,error:f.error?.message,withinPortal:!0})}):e.jsx(D,{c:s.class?void 0:"red",fz:"sm",children:`Class: ${s.class??"Missing"}`})]})})})}),e.jsx("td",{children:r?e.jsx(b,{name:"attendeeIds",control:g,defaultValue:s.attendees?.map(p=>p.id)??void 0,render:({field:p,fieldState:f})=>e.jsx(He,{...p,form:`form ${s.id}`,data:u,value:p.value??[],label:"Attendees",placeholder:"Scroll to see all options",maxDropdownHeight:160,searchable:!0,error:f.error?.message,withinPortal:!0})}):e.jsx(me,{listStyleType:"disc",children:s.attendees?.length?s.attendees.map(p=>e.jsx(me.Item,{children:p.name},p.id)):e.jsx(D,{c:"red",fz:"sm",children:"Missing"})})}),e.jsx("td",{children:i&&e.jsxs(e.Fragment,{children:[e.jsx(C,{content:"Edit",children:e.jsx(v,{disabled:l,variant:r?"default":"outline",size:"icon",className:"size-7.5",onClick:p=>{p.stopPropagation(),o(f=>!f)},children:e.jsx(se,{className:"size-5"})})}),r&&e.jsx(C,{content:"Confirm Changes",children:e.jsx(v,{type:"submit",form:`form ${s.id}`,variant:"outline",size:"icon",className:"size-7.5 text-green-500",children:e.jsx(te,{className:"size-5"})})}),e.jsx(de,{businessTripExpenseId:s.id,businessTripId:n,onChange:i}),e.jsx(le,{businessTripExpenseId:s.id,onDelete:i})]})})]},s.id)},_e=({businessTripId:a,expenses:n,attendees:i,onChange:t})=>{if(!n?.length)return t?e.jsx(Ce,{businessTripId:a,onAdd:t}):e.jsx(e.Fragment,{});const s=n.map(r=>A(ds,r));return e.jsx("div",{className:"flex flex-col gap-2 mt-5",children:e.jsxs(ne,{highlightOnHover:!0,withBorder:!0,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx(he,{}),e.jsx("th",{children:"Flight"}),e.jsx("th",{children:"Attendees"}),e.jsx("th",{})]})}),e.jsxs("tbody",{children:[s.sort((r,o)=>r.date&&o.date?r.date<o.date?1:-1:r.date?-1:o.date?1:0).map(r=>e.jsx(zt,{data:r,businessTripId:a,onChange:t,attendees:i},r.id)),t&&e.jsx("tr",{children:e.jsx("td",{colSpan:5,children:e.jsx(Ce,{businessTripId:a,onAdd:t})})})]})]})})},Pt=({data:a,businessTripId:n,onChange:i})=>{const t=A(ls,a),[s,r]=x.useState(!1),[o,d]=x.useState(!1),{control:g,handleSubmit:j}=N({defaultValues:{businessTripId:n,attendeeId:t.id,arrivalDate:t.arrivalDate,departureDate:t.departureDate}}),{updateBusinessTripAttendee:h,fetching:l}=Et(),c=u=>{h({fields:u}).then(()=>{i?.(),r(!1)})};return e.jsxs(e.Fragment,{children:[e.jsxs("tr",{children:[e.jsx("td",{children:t.name}),e.jsx("td",{children:s?e.jsx("form",{id:`form ${t.id}`,onSubmit:j(c),children:e.jsx(b,{name:"arrivalDate",control:g,defaultValue:t.arrivalDate,rules:{pattern:{value:q,message:"Date must be im format yyyy-mm-dd"}},render:({field:u,fieldState:p})=>e.jsx(G,{...u,onChange:f=>{const T=f?typeof f=="string"?f:F(f,"yyyy-MM-dd"):void 0;T!==u.value&&u.onChange(T)},"data-autofocus":!0,value:u.value?new Date(u.value):void 0,error:p.error?.message,label:"Arrival",popoverProps:{withinPortal:!0}})})}):t.arrivalDate}),e.jsx("td",{children:s?e.jsx(b,{name:"departureDate",control:g,defaultValue:t.departureDate,rules:{pattern:{value:q,message:"Date must be im format yyyy-mm-dd"}},render:({field:u,fieldState:p})=>e.jsx(G,{...u,onChange:f=>{const T=f?typeof f=="string"?f:F(f,"yyyy-MM-dd"):void 0;T!==u.value&&u.onChange(T)},value:u.value?new Date(u.value):void 0,error:p.error?.message,label:"Departure",popoverProps:{withinPortal:!0}})}):t.departureDate}),e.jsxs("td",{className:"flex items-center gap-2",children:[e.jsx(C,{content:"Edit",children:e.jsx(v,{disabled:l,variant:s?"default":"outline",size:"icon",className:"size-7.5",onClick:u=>{u.stopPropagation(),r(p=>!p)},children:e.jsx(se,{className:"size-5"})})}),s&&e.jsx(C,{content:"Confirm Changes",children:e.jsx(v,{type:"submit",form:`form ${t.id}`,variant:"outline",size:"icon",className:"size-7.5 text-green-500",children:e.jsx(te,{className:"size-5"})})}),e.jsx(Dt,{businessTripId:n,attendeeId:t.id,onDelete:i}),e.jsx(Us,{toggleExpansion:d,isExpanded:o})]})]},t.id),o&&e.jsx("tr",{children:e.jsx("td",{colSpan:4,children:e.jsx(ke,{shadow:"sm",withBorder:!0,children:e.jsxs("div",{className:"flex flex-col gap-2",children:[t.flights&&e.jsxs(e.Fragment,{children:[e.jsx("div",{children:"Flights:"}),e.jsx(_e,{businessTripId:n,attendees:[],expenses:t.flights})]}),t.accommodations&&e.jsxs(e.Fragment,{children:[e.jsx("div",{children:"Accommodations:"}),e.jsx(Ue,{businessTripId:n,expenses:t.accommodations})]})]})})})},`${t.id}-expension`)]})},$t=({data:a,onChange:n})=>{const{attendees:i,id:t}=A(us,a);return i?.length?e.jsx("div",{className:"flex flex-col gap-2 mt-5",children:e.jsxs(ne,{highlightOnHover:!0,withBorder:!0,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Name"}),e.jsx("th",{children:"Arrival Date"}),e.jsx("th",{children:"Departure Date"}),e.jsx("th",{})]})}),e.jsxs("tbody",{children:[i.sort((s,r)=>s.name.toLocaleLowerCase()>r.name.toLocaleLowerCase()?1:-1).map(s=>e.jsx(Pt,{data:s,businessTripId:t,onChange:n},s.id)),e.jsx("tr",{children:e.jsx("td",{colSpan:4,children:e.jsx(Ee,{businessTripId:t,onAdd:n})})})]})]})}):e.jsx(Ee,{businessTripId:t,onAdd:n})},pe="addBusinessTripCarRentalExpense",Ot=()=>{const[{fetching:a},n]=w(hs),i=x.useCallback(async t=>{const s="Error adding business trip car rental expense";m.loading("Adding car rental expense...",{id:pe});try{const r=await n(t),o=B(r,s,pe);if(o)return m.success("Success",{id:pe,description:"Car rental expense added"}),o.addBusinessTripCarRentalExpense}catch(r){console.error(`${s}: ${r}`),m.error("Error",{id:pe,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:a,addBusinessTripCarRentalExpense:i}};function Ae(a){const{businessTripId:n,onAdd:i}=a,[t,{close:s,open:r}]=U(!1);return e.jsxs(e.Fragment,{children:[e.jsx(C,{content:"Add Car Rental Expense",children:e.jsx(v,{variant:"outline",size:"icon",onClick:o=>{o.stopPropagation(),r()},className:"size-7.5",children:e.jsx(J,{className:"size-5"})})}),t&&e.jsx(Rt,{businessTripId:n,opened:t,close:s,onAdd:i})]})}function Rt({businessTripId:a,opened:n,close:i,onAdd:t}){const s=N({defaultValues:{businessTripId:a}}),{control:r,handleSubmit:o}=s,[d,g]=x.useState(!1),{addBusinessTripCarRentalExpense:j,fetching:h}=Ot(),l=c=>{j({fields:c}).then(()=>{t?.(),i()})};return e.jsxs(E,{opened:n,onClose:i,centered:!0,lockScroll:!0,children:[e.jsx(E.Title,{children:"Add Car Rental Expense"}),e.jsx(E.Body,{children:e.jsx(S,{...s,children:e.jsxs("form",{onSubmit:o(l),children:[e.jsx(ce,{businessTripId:a,control:r,setFetching:g}),e.jsx(b,{name:"days",control:r,render:({field:c,fieldState:u})=>e.jsx(oe,{...c,value:c.value??void 0,hideControls:!0,precision:2,removeTrailingZeros:!0,error:u.error?.message,label:"Rent Days"})}),e.jsx(M,{name:"isFuelExpense",control:r,render:({field:{value:c,...u}})=>e.jsxs(z,{className:"flex flex-row items-center justify-between rounded-lg border p-3 shadow-sm",children:[e.jsx("div",{className:"space-y-0.5",children:e.jsx(Q,{children:"Is Fuel Expense"})}),e.jsx(P,{children:e.jsx(je,{...u,checked:c===!0,onCheckedChange:u.onChange})}),e.jsx(H,{})]})}),e.jsx("div",{className:"flex justify-center mt-5 gap-3",children:e.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:"Add"})})]})})}),(h||d)&&e.jsx(Z,{blur:1,center:!0,children:e.jsx(K,{})})]})}const kt="updateBusinessTripCarRentalExpense",Ht=()=>{const[{fetching:a},n]=w(xs),i=x.useCallback(async t=>{const s="Error updating business trip car rental expense",r=kt;m.loading("Updating trip car rental expense",{id:r});try{const o=await n(t),d=B(o,s,r);if(d)return m.success("Success",{id:r,description:"Business trip car rental expense was updated"}),d.updateBusinessTripCarRentalExpense}catch(o){console.error(`${s}: ${o}`),m.error("Error",{id:r,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:a,updateBusinessTripCarRentalExpense:i}},Vt=({data:a,businessTripId:n,onChange:i})=>{const t=A(ps,a),[s,r]=x.useState(!1),o=N({defaultValues:{id:t.id,businessTripId:n}}),{control:d,handleSubmit:g}=o,{updateBusinessTripCarRentalExpense:j,fetching:h}=Ht(),l=c=>{j({fields:c}).then(()=>{i?.(),r(!1)})};return e.jsxs("tr",{children:[e.jsx(ue,{data:t,isEditMode:s,control:d,businessTripId:n}),e.jsx("td",{children:e.jsx(S,{...o,children:e.jsx("form",{id:`form ${t.id}`,onSubmit:g(l),children:e.jsx("div",{className:"flex flex-col gap-2 justify-center",children:t.isFuelExpense!==!0&&(s?e.jsx(b,{name:"days",control:d,defaultValue:t.days,render:({field:c,fieldState:u})=>e.jsx(oe,{...c,value:c.value??void 0,form:`form ${t.id}`,hideControls:!0,precision:2,removeTrailingZeros:!0,error:u.error?.message,placeholder:"Rent Days"})}):e.jsx(D,{c:t.days?void 0:"red",children:t.days??"Missing"}))})})})}),e.jsx("td",{children:s?e.jsx(S,{...o,children:e.jsx(M,{name:"isFuelExpense",control:d,defaultValue:t.isFuelExpense,render:({field:c})=>e.jsxs(z,{className:"flex flex-row items-center justify-between rounded-lg border p-3 shadow-sm",children:[e.jsx("div",{className:"space-y-0.5",children:e.jsx(Q,{children:"Is Fuel Expense"})}),e.jsx(P,{children:e.jsx(je,{form:`form ${t.id}`,checked:c.value===!0,onCheckedChange:c.onChange})})]})})}):t.isFuelExpense===!0?e.jsx(Ks,{}):e.jsx(Ys,{})}),e.jsxs("td",{children:[e.jsx(C,{content:"Edit",children:e.jsx(v,{disabled:h,variant:s?"default":"outline",size:"icon",className:"size-7.5",onClick:c=>{c.stopPropagation(),r(u=>!u)},children:e.jsx(se,{className:"size-5"})})}),s&&e.jsx(C,{content:"Confirm Changes",children:e.jsx(v,{type:"submit",form:`form ${t.id}`,variant:"outline",size:"icon",className:"size-7.5 text-green-500",children:e.jsx(te,{className:"size-5"})})}),e.jsx(de,{businessTripExpenseId:t.id,businessTripId:n,onChange:i}),e.jsx(le,{businessTripExpenseId:t.id,onDelete:i})]})]},t.id)},Ut=({data:a,onChange:n})=>{const{carRentalExpenses:i,id:t}=A(ms,a);return i?.length?e.jsx("div",{className:"flex flex-col gap-2 mt-5",children:e.jsxs(ne,{highlightOnHover:!0,withBorder:!0,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx(he,{}),e.jsx("th",{children:"Days"}),e.jsx("th",{children:"Type"}),e.jsx("th",{})]})}),e.jsxs("tbody",{children:[i.sort((s,r)=>s.date&&r.date?s.date<r.date?1:-1:s.date?-1:r.date?1:0).map(s=>e.jsx(Vt,{data:s,businessTripId:t,onChange:n},s.id)),e.jsx("tr",{children:e.jsx("td",{colSpan:6,children:e.jsx(Ae,{businessTripId:t,onAdd:n})})})]})]})}):e.jsx(Ae,{businessTripId:t,onAdd:n})},Lt=({data:a,onChange:n})=>{const{flightExpenses:i,id:t,attendees:s}=A(gs,a);return e.jsx(_e,{businessTripId:t,attendees:s,expenses:i,onChange:n})},_t="addBusinessTripOtherExpense",Wt=()=>{const[{fetching:a},n]=w(js),i=x.useCallback(async t=>{const s='Error adding business trip "other" expense',r=_t;m.loading('Adding trip "other" expense',{id:r});try{const o=await n(t),d=B(o,s,r);if(d)return m.success("Success",{id:r,description:'Business trip "other" expense was added'}),d.addBusinessTripOtherExpense}catch(o){console.error(`${s}: ${o}`),m.error("Error",{id:r,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:a,addBusinessTripOtherExpense:i}};function De(a){const{businessTripId:n,onAdd:i}=a,[t,{close:s,open:r}]=U(!1);return e.jsxs(e.Fragment,{children:[e.jsx(C,{content:"Add Other Expense",children:e.jsx(v,{variant:"outline",size:"icon",className:"size-7.5",onClick:o=>{o.stopPropagation(),r()},children:e.jsx(J,{className:"size-5"})})}),t&&e.jsx(qt,{businessTripId:n,opened:t,close:s,onAdd:i})]})}function qt({businessTripId:a,opened:n,close:i,onAdd:t}){const s=N({defaultValues:{businessTripId:a}}),{control:r,handleSubmit:o}=s,[d,g]=x.useState(!1),{addBusinessTripOtherExpense:j,fetching:h}=Wt(),l=c=>{j({fields:c}).then(()=>{t?.(),i()})};return e.jsxs(E,{opened:n,onClose:i,centered:!0,lockScroll:!0,children:[e.jsx(E.Title,{children:"Add Other Expense"}),e.jsx(E.Body,{children:e.jsx(S,{...s,children:e.jsxs("form",{onSubmit:o(l),className:"space-y-3",children:[e.jsx(ce,{businessTripId:a,control:r,setFetching:g}),e.jsx(M,{name:"description",control:r,render:({field:c})=>e.jsxs(z,{children:[e.jsx(Q,{children:"Description"}),e.jsx(P,{children:e.jsx(ee,{...c,value:c.value??void 0})}),e.jsx(H,{})]})}),e.jsx(M,{control:s.control,name:"deductibleExpense",render:({field:c})=>e.jsxs(z,{className:"flex flex-row items-center justify-between rounded-lg border p-3 shadow-sm",children:[e.jsx("div",{className:"space-y-0.5",children:e.jsx(Q,{children:"Deductible Expense"})}),e.jsx(P,{children:e.jsx(je,{checked:c.value===!0,onCheckedChange:c.onChange})})]})}),e.jsx("div",{className:"flex justify-center mt-5 gap-3",children:e.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:"Add"})})]})})}),(h||d)&&e.jsx(Z,{blur:1,center:!0,children:e.jsx(K,{})})]})}const Gt="updateBusinessTripOtherExpense",Yt=()=>{const[{fetching:a},n]=w(fs),i=x.useCallback(async t=>{const s='Error updating business trip "other" expense',r=Gt;m.loading('Updating business trip "other" expense',{id:r});try{const o=await n(t),d=B(o,s,r);if(d)return m.success("Success",{id:r,description:'Business trip "other" expense was updated'}),d.updateBusinessTripOtherExpense}catch(o){console.error(`${s}: ${o}`),m.error("Error",{id:r,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:a,updateBusinessTripOtherExpense:i}},Zt=({data:a,businessTripId:n,onChange:i})=>{const t=A(vs,a),[s,r]=x.useState(!1),o=N({defaultValues:{id:t.id,businessTripId:n}}),{control:d,handleSubmit:g}=o,{updateBusinessTripOtherExpense:j,fetching:h}=Yt(),l=c=>{j({fields:c}).then(()=>{i?.(),r(!1)})};return e.jsxs("tr",{children:[e.jsx(ue,{data:t,isEditMode:s,control:d,businessTripId:n}),e.jsx("td",{children:e.jsx(S,{...o,children:e.jsx("form",{id:`form ${t.id}`,onSubmit:g(l),children:s?e.jsx(M,{name:"description",control:d,defaultValue:t.description,render:({field:c})=>e.jsxs(z,{children:[e.jsx(P,{children:e.jsx(ee,{form:`form ${t.id}`,...c,value:c.value??void 0})}),e.jsx(H,{})]})}):e.jsx(D,{c:t.description?void 0:"red",children:t.description??"Missing"})})})}),e.jsx("td",{children:e.jsx("div",{className:"flex flex-col gap-2 justify-center",children:s?e.jsx(S,{...o,children:e.jsx(M,{name:"deductibleExpense",control:o.control,defaultValue:t.deductibleExpense,render:({field:c})=>e.jsx(z,{children:e.jsx(P,{children:e.jsx(je,{form:`form ${t.id}`,checked:c.value===!0,onCheckedChange:c.onChange})})})})}):e.jsx(D,{c:t.deductibleExpense?void 0:"red",children:t.deductibleExpense===!0?"Yes":t.deductibleExpense===!1?"No":"Missing"})})}),e.jsxs("td",{children:[e.jsx(C,{content:"Edit",children:e.jsx(v,{disabled:h,variant:s?"default":"outline",size:"icon",className:"size-7.5",onClick:c=>{c.stopPropagation(),r(u=>!u)},children:e.jsx(se,{className:"size-5"})})}),s&&e.jsx(C,{content:"Confirm Changes",children:e.jsx(v,{type:"submit",form:`form ${t.id}`,variant:"outline",size:"icon",className:"size-7.5 text-green-500",children:e.jsx(te,{className:"size-5"})})}),e.jsx(de,{businessTripExpenseId:t.id,businessTripId:n,onChange:i}),e.jsx(le,{businessTripExpenseId:t.id,onDelete:i})]})]},t.id)},Kt=({data:a,onChange:n})=>{const{otherExpenses:i,id:t}=A(bs,a);return i?.length?e.jsx("div",{className:"flex flex-col gap-2 mt-5",children:e.jsxs(ne,{highlightOnHover:!0,withBorder:!0,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx(he,{}),e.jsx("th",{children:"Description"}),e.jsx("th",{children:"Deductible Expense"}),e.jsx("th",{})]})}),e.jsxs("tbody",{children:[i.sort((s,r)=>s.date&&r.date?s.date<r.date?1:-1:s.date?-1:r.date?1:0).map(s=>e.jsx(Zt,{data:s,businessTripId:t,onChange:n},s.id)),e.jsx("tr",{children:e.jsx("td",{colSpan:6,children:e.jsx(De,{businessTripId:t,onAdd:n})})})]})]})}):e.jsx(De,{businessTripId:t,onAdd:n})},Xt="addBusinessTripTravelAndSubsistenceExpense",Qt=()=>{const[{fetching:a},n]=w(ys),i=x.useCallback(async t=>{const s="Error adding business trip travel&subsistence expense",r=Xt;m.loading("Adding trip travel&subsistence expense",{id:r});try{const o=await n(t),d=B(o,s,r);if(d)return m.success("Success",{id:r,description:"Business trip travel&subsistence expense was added"}),d.addBusinessTripTravelAndSubsistenceExpense}catch(o){console.error(`${s}: ${o}`),m.error("Error",{id:r,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:a,addBusinessTripTravelAndSubsistenceExpense:i}};function we(a){const{businessTripId:n,onAdd:i}=a,[t,{close:s,open:r}]=U(!1);return e.jsxs(e.Fragment,{children:[e.jsx(C,{content:"Add T&S Expense",children:e.jsx(v,{variant:"outline",size:"icon",className:"size-7.5",onClick:o=>{o.stopPropagation(),r()},children:e.jsx(J,{className:"size-5"})})}),t&&e.jsx(Jt,{businessTripId:n,opened:t,close:s,onAdd:i})]})}function Jt({businessTripId:a,opened:n,close:i,onAdd:t}){const s=N({defaultValues:{businessTripId:a}}),{control:r,handleSubmit:o}=s,[d,g]=x.useState(!1),{addBusinessTripTravelAndSubsistenceExpense:j,fetching:h}=Qt(),l=c=>{j({fields:c}).then(()=>{t?.(),i()})};return e.jsxs(E,{opened:n,onClose:i,centered:!0,lockScroll:!0,children:[e.jsx(E.Title,{children:"Add Travel & Subsistence Expense"}),e.jsx(E.Body,{children:e.jsx(S,{...s,children:e.jsxs("form",{onSubmit:o(l),className:"space-y-3",children:[e.jsx(ce,{businessTripId:a,control:r,setFetching:g}),e.jsx(M,{name:"expenseType",control:r,render:({field:c})=>e.jsxs(z,{children:[e.jsx(Q,{children:"Expense Type"}),e.jsx(P,{children:e.jsx(ee,{...c,value:c.value??void 0})}),e.jsx(H,{})]})}),e.jsx("div",{className:"flex justify-center mt-5 gap-3",children:e.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:"Add"})})]})})}),(h||d)&&e.jsx(Z,{blur:1,center:!0,children:e.jsx(K,{})})]})}const en="updateBusinessTripTravelAndSubsistenceExpense",sn=()=>{const[{fetching:a},n]=w(Ts),i=x.useCallback(async t=>{const s="Error updating business trip travel&subsistence expense",r=en;m.loading("Updating trip travel&subsistence expense",{id:r});try{const o=await n(t),d=B(o,s,r);if(d)return m.success("Success",{id:r,description:"Business trip travel&subsistence expense was updated"}),d.updateBusinessTripTravelAndSubsistenceExpense}catch(o){console.error(`${s}: ${o}`),m.error("Error",{id:r,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:a,updateBusinessTripTravelAndSubsistenceExpense:i}},tn=({data:a,businessTripId:n,onChange:i})=>{const t=A(Es,a),[s,r]=x.useState(!1),o=N({defaultValues:{id:t.id,businessTripId:n}}),{control:d,handleSubmit:g}=o,{updateBusinessTripTravelAndSubsistenceExpense:j,fetching:h}=sn(),l=c=>{j({fields:c}).then(()=>{i?.(),r(!1)})};return e.jsxs("tr",{children:[e.jsx(ue,{data:t,isEditMode:s,control:d,businessTripId:n}),e.jsx("td",{children:e.jsx(S,{...o,children:e.jsx("form",{id:`form ${t.id}`,onSubmit:g(l),children:s?e.jsx(M,{name:"expenseType",control:d,defaultValue:t.expenseType,render:({field:c})=>e.jsxs(z,{children:[e.jsx(P,{children:e.jsx(ee,{form:`form ${t.id}`,...c,value:c.value??void 0})}),e.jsx(H,{})]})}):e.jsx(D,{c:t.expenseType?void 0:"red",children:t.expenseType??"Missing"})})})}),e.jsxs("td",{children:[e.jsx(C,{content:"Edit",children:e.jsx(v,{disabled:h,variant:s?"default":"outline",size:"icon",className:"size-7.5",onClick:c=>{c.stopPropagation(),r(u=>!u)},children:e.jsx(se,{className:"size-5"})})}),s&&e.jsx(C,{content:"Confirm Changes",children:e.jsx(v,{type:"submit",form:`form ${t.id}`,variant:"outline",size:"icon",className:"size-7.5 text-green-500",children:e.jsx(te,{className:"size-5"})})}),e.jsx(de,{businessTripExpenseId:t.id,businessTripId:n,onChange:i}),e.jsx(le,{businessTripExpenseId:t.id,onDelete:i})]})]},t.id)},nn=({data:a,onChange:n})=>{const{travelAndSubsistenceExpenses:i,id:t}=A(Cs,a);return i?.length?e.jsx("div",{className:"flex flex-col gap-2 mt-5",children:e.jsxs(ne,{highlightOnHover:!0,withBorder:!0,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx(he,{}),e.jsx("th",{children:"Expense Type"}),e.jsx("th",{})]})}),e.jsxs("tbody",{children:[i.sort((s,r)=>s.date&&r.date?s.date<r.date?1:-1:s.date?-1:r.date?1:0).map(s=>e.jsx(tn,{data:s,businessTripId:t,onChange:n},s.id)),e.jsx("tr",{children:e.jsx("td",{colSpan:6,children:e.jsx(we,{businessTripId:t,onAdd:n})})})]})]})}):e.jsx(we,{businessTripId:t,onAdd:n})},rn=({data:a})=>{const n=A(As,a),i="effectiveDate"in n?n.effectiveDate:void 0;return e.jsx("td",{children:e.jsxs("div",{className:"flex flex-col justify-center",children:[e.jsx("div",{children:i&&F(new Date(i),"dd/MM/yy")}),n.sourceEffectiveDate&&e.jsxs("div",{className:"text-xs text-gray-500",children:["(Originally ",F(new Date(n.sourceEffectiveDate),"dd/MM/yy"),")"]})]})})},an=({data:a})=>{const n=A(Ds,a),i="eventDate"in n?n.eventDate:void 0;return e.jsx("td",{children:e.jsx("div",{className:"flex flex-col justify-center",children:i&&F(new Date(i),"dd/MM/yy")})})},on=({data:a})=>{const n=A(ws,a),{account:i}=n,t=Ls(i.type),s=i.name;return e.jsx("td",{children:e.jsxs("div",{className:"flex flex-col gap-2 items-center",children:[e.jsx("p",{children:t}),e.jsx("p",{children:s})]})})},cn=({data:a})=>{const n=A(Bs,a),i="sourceDescription"in n?n.sourceDescription:"Missing";return e.jsx("td",{children:e.jsx("div",{className:"flex flex-wrap",children:e.jsx("div",{className:"flex flex-col justify-center",children:i})})})},dn=({data:a})=>{const n=A(Ss,a);return e.jsx("td",{children:e.jsx("div",{className:"flex flex-wrap",children:e.jsx("div",{className:"flex flex-col justify-center",children:n.referenceKey})})})};function ln({data:a,onChange:n,enableEdit:i}){const{id:t,counterparty:s,missingInfoSuggestions:r,id:o,sourceDescription:d}=A(Ns,a),g=!!r?.business&&i,j=g?r?.business?.name:"Missing",h=g?r?.business?.id:null,l=s?.name??j,[c,u]=x.useState(!1),{updateTransaction:p,fetching:f}=_s(),T=x.useCallback(async V=>{await p({transactionId:o,fields:{counterpartyId:V}}),u(!0)},[o,p]),y=x.useCallback(async V=>{await T(V),n?.()},[T,n]),{selectableBusinesses:$,fetching:X}=Oe(),[I,O]=x.useState(h??null),[R,ae]=x.useState(d);return e.jsxs("td",{children:[e.jsx("div",{className:"flex flex-wrap gap-1 items-center justify-center",children:s?.id?e.jsx(be,{to:ye.BUSINESSES.DETAIL(s.id),target:"_blank",rel:"noreferrer",onClick:V=>V.stopPropagation(),className:"inline-flex items-center font-semibold",children:l}):e.jsxs(e.Fragment,{children:[e.jsx(Is,{options:$,value:I,onChange:O,search:R,onSearchChange:ae,placeholder:"Choose or create a business",empty:R?e.jsx(Fs,{description:R,onAdd:y}):null}),e.jsx(C,{content:"Approve",children:e.jsx(v,{variant:"outline",size:"icon",onClick:()=>I&&T(I),disabled:f||X||!I,children:e.jsx(te,{className:"size-4"})})})]})}),e.jsx(Ws,{transactionId:t,counterpartyId:s?.id??I,open:c,onOpenChange:u,onClose:n})]})}const un="categorizeBusinessTripExpense",hn=()=>{const[{fetching:a},n]=w(Ms),i=x.useCallback(async t=>{const s="Error updating business trip expense category",r=un;m.loading("Updating trip expense category",{id:r});try{const o=await n(t),d=B(o,s,r);if(d)return m.success("Success",{id:r,description:"Business trip expense category was updated"}),d.categorizeBusinessTripExpense}catch(o){console.error(`${s}: ${o}`),m.error("Error",{id:r,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:a,categorizeBusinessTripExpense:i}};function xn(a){const{businessTripId:n,transactionId:i,onChange:t,defaultAmount:s}=a,[r,{close:o,open:d}]=U(!1);return e.jsxs(e.Fragment,{children:[e.jsx(C,{content:"Categorize",children:e.jsx(v,{variant:"outline",size:"icon",className:"size-7.5",onClick:g=>{g.stopPropagation(),d()},children:e.jsx(se,{className:"size-5"})})}),r&&e.jsx(mn,{businessTripId:n,transactionId:i,opened:r,close:o,onChange:t,defaultAmount:s})]})}const pn=Object.entries(zs).map(([a,n])=>({value:n,label:a}));function mn({businessTripId:a,transactionId:n,defaultAmount:i,opened:t,close:s,onChange:r}){const{control:o,handleSubmit:d}=N({defaultValues:{businessTripId:a,transactionId:n}}),{categorizeBusinessTripExpense:g,fetching:j}=hn(),h=l=>{g({fields:l}).then(()=>{r?.(),s()})};return e.jsxs(E,{opened:t,onClose:s,centered:!0,children:[e.jsx(E.Title,{children:"Set Expense Category"}),e.jsx(E.Body,{children:e.jsxs("form",{onSubmit:d(h),className:"flex flex-col gap-3 mt-3",children:[e.jsx(b,{name:"category",control:o,render:({field:l,fieldState:c})=>e.jsx(Y,{"data-autofocus":!0,...l,data:pn,value:l.value,label:"Category",placeholder:"Scroll to see all options",maxDropdownHeight:160,searchable:!0,error:c.error?.message,withinPortal:!0})}),e.jsx(b,{name:"amount",control:o,defaultValue:i,render:({field:l,fieldState:c})=>e.jsx(oe,{...l,value:l.value??void 0,hideControls:!0,precision:2,removeTrailingZeros:!0,error:c.error?.message,label:"Amount"})}),e.jsx("div",{className:"flex justify-center gap-3",children:e.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:"Confirm"})})]})}),j&&e.jsx(Z,{blur:1,center:!0,children:e.jsx(K,{})})]})}const gn=({data:a,onChange:n})=>{const{uncategorizedTransactions:i,id:t}=A(Ps,a);return i?.length?e.jsx("div",{className:"flex flex-col gap-2 mt-5",children:e.jsxs(ne,{highlightOnHover:!0,withBorder:!0,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Event Date"}),e.jsx("th",{children:"Debit Date"}),e.jsx("th",{children:"Amount"}),e.jsx("th",{}),e.jsx("th",{children:"Account"}),e.jsx("th",{children:"Description"}),e.jsx("th",{children:"Reference#"}),e.jsx("th",{children:"Counterparty"}),e.jsx("th",{})]})}),e.jsx("tbody",{children:i.sort((s,r)=>s.transaction.eventDate.localeCompare(r.transaction.eventDate)).map(s=>e.jsxs("tr",{children:[e.jsx(an,{data:s.transaction}),e.jsx(rn,{data:s.transaction}),e.jsx(jn,{data:s}),e.jsx("td",{children:e.jsx(be,{to:ye.CHARGES.DETAIL(s.transaction.chargeId),target:"_blank",rel:"noreferrer",onClick:r=>r.stopPropagation(),className:"inline-flex items-center font-semibold",children:"To Charge"})}),e.jsx(on,{data:s.transaction}),e.jsx(cn,{data:s.transaction}),e.jsx(dn,{data:s.transaction}),e.jsx(ln,{data:s.transaction}),e.jsx("td",{children:e.jsx(xn,{businessTripId:t,transactionId:s.transaction.id,onChange:n,defaultAmount:s.transaction.amount.raw})})]},s.transaction.id))})]})}):e.jsx(e.Fragment,{})},jn=({data:a})=>{const{transaction:n,categorizedAmount:i,errors:t}=A($s,a),s="amount"in n?n.amount:void 0,r=s?.raw!==i.raw&&i.raw!==0;return e.jsx("td",{children:e.jsxs("div",{className:"flex flex-col whitespace-nowrap",style:{color:Number(s?.raw)>0?"green":"red"},children:[e.jsxs("div",{className:"flex gap-1",children:[s?.formatted,t.length>0&&e.jsx(fn,{errors:t})]}),r&&e.jsxs("div",{className:"text-gray-500 ml-2",children:[i.formatted," categorized "]}),n.cryptoExchangeRate&&e.jsxs("div",{className:"text-gray-500 ml-2",children:[`(Rate: ${n.cryptoExchangeRate.rate})`,e.jsx("br",{}),s?.raw?`${Os(s.raw*n.cryptoExchangeRate.rate)}$`:null]})]})})},fn=({errors:a})=>{const[n,{close:i,open:t}]=U(!1);return e.jsxs(fe,{width:200,position:"bottom",shadow:"md",opened:n,children:[e.jsx(fe.Target,{children:e.jsx(Rs,{onMouseEnter:t,onMouseLeave:i})}),e.jsx(fe.Dropdown,{sx:{pointerEvents:"none"},className:"whitespace-normal text-red-500",children:a.map((s,r)=>e.jsx(D,{size:"sm",children:s},r))})]})};function wn({tripId:a,isExtended:n=!1}){const[i,t]=x.useState(),[{data:s},r]=ie({query:ks,variables:{businessTripId:a}}),o=r;return x.useEffect(()=>{s?.businessTrip&&t(s.businessTrip)},[s?.businessTrip]),e.jsx(ke,{shadow:"sm",radius:"md",withBorder:!0,children:i?e.jsxs(e.Fragment,{children:[e.jsx(Hs,{data:i,onChange:o}),e.jsxs(qs,{className:"w-full",type:"multiple",children:[e.jsxs(L,{value:"attendees",children:[e.jsx(_,{children:"Attendees"}),e.jsx(W,{children:e.jsx($t,{data:i,onChange:o})})]}),n&&e.jsxs(L,{value:"uncategorized-transactions",children:[e.jsx(_,{disabled:!i.uncategorizedTransactions?.length,children:"Uncategorized Transactions"}),e.jsx(W,{children:e.jsx(gn,{data:i,onChange:o})})]}),e.jsxs(L,{value:"flights",children:[e.jsx(_,{children:"Flights"}),e.jsx(W,{children:e.jsx(Lt,{data:i,onChange:o})})]}),e.jsxs(L,{value:"accommodations",children:[e.jsx(_,{children:"Accommodations"}),e.jsx(W,{children:e.jsx(ft,{data:i,onChange:o})})]}),e.jsxs(L,{value:"travelAndSubsistence",children:[e.jsx(_,{children:"Travel & Subsistence"}),e.jsx(W,{children:e.jsx(nn,{data:i,onChange:o})})]}),e.jsxs(L,{value:"other",children:[e.jsx(_,{children:"Other"}),e.jsx(W,{children:e.jsx(Kt,{data:i,onChange:o})})]}),e.jsxs(L,{value:"carRental",children:[e.jsx(_,{children:"Car Rental"}),e.jsx(W,{children:e.jsx(Ut,{data:i,onChange:o})})]}),e.jsxs(L,{value:"summary",children:[e.jsx(_,{children:"Summary"}),e.jsx(W,{children:e.jsx(Vs,{data:i})})]})]})]}):e.jsx(Be,{className:"h-10 w-10 animate-spin mr-2 self-center"})})}export{wn as E,Dn as P};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{v as e}from"./index-
|
|
1
|
+
import{v as e}from"./index-D1_HHRLX.js";const a=[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]],t=e("eye-off",a);export{t as E};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{v as e}from"./index-
|
|
1
|
+
import{v as e}from"./index-D1_HHRLX.js";const n=[["path",{d:"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z",key:"sc7q7i"}]],a=e("funnel",n);export{a as F};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as b,r as o,j as a,B as D,b$ as R,gh as w,af as i,bY as f,bO as y,bP as C,bQ as s,bR as N,c2 as d,bS as I,bT as r,d9 as v,fE as B,ed as E,c5 as F,c6 as S}from"./index-
|
|
1
|
+
import{u as b,r as o,j as a,B as D,b$ as R,gh as w,af as i,bY as f,bO as y,bP as C,bQ as s,bR as N,c2 as d,bS as I,bT as r,d9 as v,fE as B,ed as E,c5 as F,c6 as S}from"./index-D1_HHRLX.js";import{D as T}from"./deposits-transactions-table-CV-YceTW.js";function V(){const[{data:c,fetching:g},p]=b({query:B}),[u,x]=o.useState([{id:"openDate",desc:!1}]),m=o.useMemo(()=>(c?.allDeposits??[]).map(t=>({id:t.id,currency:t.currency,openDate:t.openDate,closeDate:t.closeDate??null,isOpen:t.isOpen,currencyError:t.currencyError??[],currentBalanceRaw:t.currentBalance?.raw??0,currentBalanceFormatted:t.currentBalance?.formatted??"",totalDepositRaw:t.totalDeposit?.raw??0,totalDepositFormatted:t.totalDeposit?.formatted??"",totalInterestRaw:t.totalInterest?.raw??0,totalInterestFormatted:t.totalInterest?.formatted??""})),[c]),n=o.useRef([{id:"expander",header:()=>null,cell:({row:e})=>a.jsx(D,{variant:"ghost",size:"icon",onClick:()=>e.toggleExpanded(),"aria-label":e.getIsExpanded()?"Collapse":"Expand",children:e.getIsExpanded()?a.jsx(R,{}):a.jsx(w,{})}),enableSorting:!1},{accessorKey:"id",header:"Deposit ID",cell:e=>a.jsx("span",{className:"font-mono text-xs",children:e.getValue()})},{accessorKey:"currency",header:"Currency"},{accessorKey:"isOpen",header:"Status",cell:e=>e.getValue()?a.jsx(i,{className:"bg-green-600 text-white",variant:"secondary",children:"Open"}):a.jsx(i,{variant:"secondary",children:"Closed"}),sortingFn:(e,t)=>Number(e.original.isOpen)-Number(t.original.isOpen)},{accessorKey:"openDate",header:"Open Date",cell:e=>a.jsx("span",{children:e.getValue()})},{accessorKey:"closeDate",header:"Close Date",cell:e=>a.jsx("span",{children:e.getValue()??"-"}),sortingFn:(e,t)=>{const h=e.original.closeDate??"",j=t.original.closeDate??"";return h.localeCompare(j)}},{id:"totalDeposit",header:"Total Deposit",accessorFn:e=>e.totalDepositRaw,cell:e=>a.jsx("span",{className:"tabular-nums",children:e.row.original.totalDepositFormatted}),sortingFn:(e,t)=>e.original.totalDepositRaw-t.original.totalDepositRaw},{id:"currentBalance",header:"Current Balance",accessorFn:e=>e.currentBalanceRaw,cell:e=>a.jsx("span",{className:"tabular-nums",children:e.row.original.currentBalanceFormatted}),sortingFn:(e,t)=>e.original.currentBalanceRaw-t.original.currentBalanceRaw},{id:"totalInterest",header:"Total Interest",accessorFn:e=>e.totalInterestRaw,cell:e=>a.jsx("span",{className:"tabular-nums",children:e.row.original.totalInterestFormatted}),sortingFn:(e,t)=>e.original.totalInterestRaw-t.original.totalInterestRaw}]).current,l=f({data:m,columns:n,state:{sorting:u},onSortingChange:x,getCoreRowModel:S(),getSortedRowModel:F(),getExpandedRowModel:E(),getRowCanExpand:()=>!0});return a.jsxs("div",{className:"max-w-[95vw]",children:[a.jsx("div",{className:"flex items-center justify-between",children:a.jsx("h1",{className:"text-2xl font-semibold",children:"Bank Deposits"})}),a.jsx("div",{className:"mt-6 overflow-hidden rounded-md border",children:a.jsxs(y,{children:[a.jsx(C,{children:l.getHeaderGroups().map(e=>a.jsx(s,{children:e.headers.map(t=>a.jsx(N,{colSpan:t.colSpan,children:t.isPlaceholder?null:d(t.column.columnDef.header,t.getContext())},t.id))},e.id))}),a.jsx(I,{children:g?a.jsx(s,{children:a.jsx(r,{colSpan:n.length,className:"h-24 text-center",children:"Loading..."})}):l.getRowModel().rows?.length?l.getRowModel().rows.map(e=>a.jsxs(a.Fragment,{children:[a.jsx(s,{"data-state":e.getIsSelected()&&"selected",children:e.getVisibleCells().map(t=>a.jsx(r,{children:d(t.column.columnDef.cell,t.getContext())},t.id))},e.id),e.getIsExpanded()?a.jsx(s,{children:a.jsxs(r,{colSpan:n.length,children:[e.original.currencyError.length>0&&a.jsxs("div",{className:"mb-3 flex items-center gap-2 rounded-md border border-red-300 bg-red-50 px-3 py-2 text-sm text-red-800",children:[a.jsx(v,{className:"size-4"}),a.jsxs("div",{children:[a.jsx("div",{className:"font-medium",children:"Currency Conflict"}),a.jsxs("div",{className:"opacity-90",children:["Affected transaction IDs: ",e.original.currencyError.join(", ")]})]})]}),a.jsx(T,{depositId:e.original.id,enableReassign:!0,refetch:p})]})}):null]})):a.jsx(s,{children:a.jsx(r,{colSpan:n.length,className:"h-24 text-center",children:"No results."})})})]})})]})}export{V as DepositsScreen};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as m,ce as f,r,j as s,bC as h,a6 as g,cf as T,F as j,cg as B,T as w,at as C,L as E,ch as y}from"./index-
|
|
1
|
+
import{u as m,ce as f,r,j as s,bC as h,a6 as g,cf as T,F as j,cg as B,T as w,at as C,L as E,ch as y}from"./index-D1_HHRLX.js";import{E as b,P as v}from"./editable-business-trip-DRSlJ54m.js";import{P as A}from"./page-layout-BOjYoqoi.js";import{a as L,b as P,c as F,A as S}from"./accordion-Bd6kAhfN.js";import"./summary-C5TvRXn1.js";import"./update-accountant-status-CU6mIJqS.js";import"./Table-pGQWLQ8H.js";import"./toggle-expansion-button-Dg_XsE6y.js";import"./panel-top-open-Bxnxp1BU.js";import"./MultiSelect-C5wjF9jC.js";import"./similar-transactions-modal-BTidmv0G.js";import"./building-2-Df516nsd.js";const D=({data:d,isOpened:o,shouldValidate:c})=>{const e=g(T,d),[{data:i,fetching:a}]=m({pause:!c,query:f,variables:{id:e.id}}),l=r.useMemo(()=>c?i?.businessTrip&&(i.businessTrip.uncategorizedTransactions?.length||i?.businessTrip.summary?.errors?.length):!1,[i]),u=l||e?.accountantApproval!=="APPROVED";return s.jsxs(L,{value:e.id,children:[s.jsx(P,{children:s.jsx(h,{inline:!0,size:12,processing:a,disabled:!u,color:l?"red":"yellow",zIndex:"auto",children:e.name})}),s.jsx(F,{children:o&&s.jsx(b,{tripId:e.id,isExtended:!0},e.id)})]})},G=()=>{const{setFiltersContext:d}=r.useContext(j),[o,c]=r.useState([]),[e,i]=r.useState(!1),[{data:a,fetching:l}]=m({query:y});r.useEffect(()=>{if(!a?.allBusinessTrips?.length){c([]);return}const t=a.allBusinessTrips.sort((n,p)=>n.dates?.start&&p.dates?.start?n.dates.start<p.dates.start?1:-1:n.dates?.start?-1:p.dates?.start?1:n.name.toLocaleLowerCase()<p.name.toLocaleLowerCase()?-1:1);c(t)},[a?.allBusinessTrips]);const[u,x]=r.useState([]);return r.useEffect(()=>{d(s.jsxs("div",{className:"flex flex-row gap-x-5",children:[s.jsx(B,{}),s.jsx(w,{content:"Toggle business trips validation",children:s.jsxs("div",{className:"flex flex-row items-center gap-x-2",children:[s.jsx(C,{checked:e??!1,onCheckedChange:t=>i(t)}),s.jsx("span",{className:"text-sm text-gray-500",children:"Validate"})]})}),s.jsx(v,{filename:"business_trips"})]}))},[a,l,d,e]),s.jsx(A,{title:"Business Trips",description:"Manage business trips",children:o.length===0&&l?s.jsx(E,{className:"h-10 w-10 animate-spin mr-2 self-center"}):s.jsx(S,{className:"w-full",type:"multiple",value:u,onValueChange:x,children:o?.map(t=>s.jsx(D,{data:o.find(n=>n.id===t.id),shouldValidate:e,isOpened:u.includes(t.id)},t.id))})})};export{G as BusinessTrips};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{v as Ge,r as m,dh as Nc,aF as V,dl as kc,aG as ae,j as v,dk as vn,dK as It,dL as ge,dM as Ho,dm as Lc,dN as Vc,dO as nn,dP as jc,bB as Fi,D as _r,aL as zr,bC as Fc,B as ee,x as $r,al as Ur,am as Hr,E as Wo,bD as Bc,aC as _c,bE as An,bF as Bi,bG as _i,w as rn,at as Go,a2 as Ko,bI as zc,g as qo,dQ as $c,t as Pe,i as Yo,T as yn,u as rr,dR as Uc,bY as Hc,c3 as Wc,c5 as Gc,c4 as Kc,c6 as qc,L as Xo,I as Wr,bO as Yc,bP as Xc,bQ as Nn,bR as Zc,c2 as zi,bS as Jc,bT as $i,bZ as Zo,b_ as Jo,c0 as Qo,dS as Qc,dT as eu,dU as sn,dV as tu,G as nu,V as ru,Y as iu,Z as su,_ as ou,$ as au,a1 as lu,au as cu,aa as uu,ae as Ui,dW as du,e as hu,a4 as fu,af as Hi,dX as pu,dY as Wi,cw as gu,dZ as mu,ay as vu,F as yu,b3 as bu,d_ as Tu,d$ as xu}from"./index-
|
|
1
|
+
import{v as Ge,r as m,dh as Nc,aF as V,dl as kc,aG as ae,j as v,dk as vn,dK as It,dL as ge,dM as Ho,dm as Lc,dN as Vc,dO as nn,dP as jc,bB as Fi,D as _r,aL as zr,bC as Fc,B as ee,x as $r,al as Ur,am as Hr,E as Wo,bD as Bc,aC as _c,bE as An,bF as Bi,bG as _i,w as rn,at as Go,a2 as Ko,bI as zc,g as qo,dQ as $c,t as Pe,i as Yo,T as yn,u as rr,dR as Uc,bY as Hc,c3 as Wc,c5 as Gc,c4 as Kc,c6 as qc,L as Xo,I as Wr,bO as Yc,bP as Xc,bQ as Nn,bR as Zc,c2 as zi,bS as Jc,bT as $i,bZ as Zo,b_ as Jo,c0 as Qo,dS as Qc,dT as eu,dU as sn,dV as tu,G as nu,V as ru,Y as iu,Z as su,_ as ou,$ as au,a1 as lu,au as cu,aa as uu,ae as Ui,dW as du,e as hu,a4 as fu,af as Hi,dX as pu,dY as Wi,cw as gu,dZ as mu,ay as vu,F as yu,b3 as bu,d_ as Tu,d$ as xu}from"./index-D1_HHRLX.js";import{u as ea}from"./use-url-query-RoURh24O.js";import{A as Gi}from"./arrow-up-down-YhPbp1Ud.js";import{D as Su}from"./download-csv-button-DVLHjMAB.js";import{B as wu}from"./business-extended-info-zz1obrFs.js";import{_ as Du,a as bn,s as we,g as Gr,u as Ki,c as Kr,m as wt,d as ir,T as sr}from"./Typography-B3aRT5ej.js";import{P as Cu,a as Eu}from"./panel-top-open-Bxnxp1BU.js";import{F as Ou}from"./funnel-0IvwyZBf.js";import{M as Pu}from"./MultiSelect-C5wjF9jC.js";import"./data-table-column-header--gzXkv5r.js";import"./eye-off-DWYC0Eax.js";const Mu=[["path",{d:"m10.852 19.772-.383.924",key:"r7sl7d"}],["path",{d:"m13.148 14.228.383-.923",key:"1d5zpm"}],["path",{d:"M13.148 19.772a3 3 0 1 0-2.296-5.544l-.383-.923",key:"1ydik7"}],["path",{d:"m13.53 20.696-.382-.924a3 3 0 1 1-2.296-5.544",key:"1m1vsf"}],["path",{d:"m14.772 15.852.923-.383",key:"660p6e"}],["path",{d:"m14.772 18.148.923.383",key:"hrcpis"}],["path",{d:"M4.2 15.1a7 7 0 1 1 9.93-9.858A7 7 0 0 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.2",key:"j2q98n"}],["path",{d:"m9.228 15.852-.923-.383",key:"1p9ong"}],["path",{d:"m9.228 18.148-.923.383",key:"6558rz"}]],Iu=Ge("cloud-cog",Mu);const Ru=[["path",{d:"M12 13v8",key:"1l5pq0"}],["path",{d:"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242",key:"1pljnt"}],["path",{d:"m8 17 4-4 4 4",key:"1quai1"}]],Au=Ge("cloud-upload",Ru);const Nu=[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"19",cy:"12",r:"1",key:"1wjl8i"}],["circle",{cx:"5",cy:"12",r:"1",key:"1pcz8c"}]],ta=Ge("ellipsis",Nu);const ku=[["path",{d:"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2",key:"usdka0"}]],Lu=Ge("folder-open",ku);const Vu=[["path",{d:"M12 10v6",key:"1bos4e"}],["path",{d:"M9 13h6",key:"1uhe8q"}],["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]],ju=Ge("folder-plus",Vu);const Fu=[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]],Bu=Ge("folder",Fu);const _u=[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]],zu=Ge("pencil",_u);function Gt(t){const e=m.useRef(t);return Nc(()=>{e.current=t}),m.useRef((...n)=>(0,e.current)(...n)).current}function or(t,e){return or=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(n,r){return n.__proto__=r,n},or(t,e)}function $u(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,or(t,e)}const qi=V.createContext(null);function Uu(t){if(t===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function qr(t,e){var n=function(s){return e&&m.isValidElement(s)?e(s):s},r=Object.create(null);return t&&m.Children.map(t,function(i){return i}).forEach(function(i){r[i.key]=n(i)}),r}function Hu(t,e){t=t||{},e=e||{};function n(u){return u in e?e[u]:t[u]}var r=Object.create(null),i=[];for(var s in t)s in e?i.length&&(r[s]=i,i=[]):i.push(s);var o,a={};for(var l in e){if(r[l])for(o=0;o<r[l].length;o++){var c=r[l][o];a[r[l][o]]=n(c)}a[l]=n(l)}for(o=0;o<i.length;o++)a[i[o]]=n(i[o]);return a}function _e(t,e,n){return n[e]!=null?n[e]:t.props[e]}function Wu(t,e){return qr(t.children,function(n){return m.cloneElement(n,{onExited:e.bind(null,n),in:!0,appear:_e(n,"appear",t),enter:_e(n,"enter",t),exit:_e(n,"exit",t)})})}function Gu(t,e,n){var r=qr(t.children),i=Hu(e,r);return Object.keys(i).forEach(function(s){var o=i[s];if(m.isValidElement(o)){var a=s in e,l=s in r,c=e[s],u=m.isValidElement(c)&&!c.props.in;l&&(!a||u)?i[s]=m.cloneElement(o,{onExited:n.bind(null,o),in:!0,exit:_e(o,"exit",t),enter:_e(o,"enter",t)}):!l&&a&&!u?i[s]=m.cloneElement(o,{in:!1}):l&&a&&m.isValidElement(c)&&(i[s]=m.cloneElement(o,{onExited:n.bind(null,o),in:c.props.in,exit:_e(o,"exit",t),enter:_e(o,"enter",t)}))}}),i}var Ku=Object.values||function(t){return Object.keys(t).map(function(e){return t[e]})},qu={component:"div",childFactory:function(e){return e}},Yr=(function(t){$u(e,t);function e(r,i){var s;s=t.call(this,r,i)||this;var o=s.handleExited.bind(Uu(s));return s.state={contextValue:{isMounting:!0},handleExited:o,firstRender:!0},s}var n=e.prototype;return n.componentDidMount=function(){this.mounted=!0,this.setState({contextValue:{isMounting:!1}})},n.componentWillUnmount=function(){this.mounted=!1},e.getDerivedStateFromProps=function(i,s){var o=s.children,a=s.handleExited,l=s.firstRender;return{children:l?Wu(i,a):Gu(i,o,a),firstRender:!1}},n.handleExited=function(i,s){var o=qr(this.props.children);i.key in o||(i.props.onExited&&i.props.onExited(s),this.mounted&&this.setState(function(a){var l=kc({},a.children);return delete l[i.key],{children:l}}))},n.render=function(){var i=this.props,s=i.component,o=i.childFactory,a=Du(i,["component","childFactory"]),l=this.state.contextValue,c=Ku(this.state.children).map(o);return delete a.appear,delete a.enter,delete a.exit,s===null?V.createElement(qi.Provider,{value:l},c):V.createElement(qi.Provider,{value:l},V.createElement(s,a,c))},e})(V.Component);Yr.propTypes={};Yr.defaultProps=qu;const Yi={};function na(t,e){const n=m.useRef(Yi);return n.current===Yi&&(n.current=t(e)),n}const Yu=[];function Xu(t){m.useEffect(t,Yu)}class Xr{static create(){return new Xr}currentId=null;start(e,n){this.clear(),this.currentId=setTimeout(()=>{this.currentId=null,n()},e)}clear=()=>{this.currentId!==null&&(clearTimeout(this.currentId),this.currentId=null)};disposeEffect=()=>this.clear}function Zu(){const t=na(Xr.create).current;return Xu(t.disposeEffect),t}function Xi(t){try{return t.matches(":focus-visible")}catch{}return!1}class on{static create(){return new on}static use(){const e=na(on.create).current,[n,r]=m.useState(!1);return e.shouldMount=n,e.setShouldMount=r,m.useEffect(e.mountEffect,[n]),e}constructor(){this.ref={current:null},this.mounted=null,this.didMount=!1,this.shouldMount=!1,this.setShouldMount=null}mount(){return this.mounted||(this.mounted=Qu(),this.shouldMount=!0,this.setShouldMount(this.shouldMount)),this.mounted}mountEffect=()=>{this.shouldMount&&!this.didMount&&this.ref.current!==null&&(this.didMount=!0,this.mounted.resolve())};start(...e){this.mount().then(()=>this.ref.current?.start(...e))}stop(...e){this.mount().then(()=>this.ref.current?.stop(...e))}pulsate(...e){this.mount().then(()=>this.ref.current?.pulsate(...e))}}function Ju(){return on.use()}function Qu(){let t,e;const n=new Promise((r,i)=>{t=r,e=i});return n.resolve=t,n.reject=e,n}function ed(t){const{className:e,classes:n,pulsate:r=!1,rippleX:i,rippleY:s,rippleSize:o,in:a,onExited:l,timeout:c}=t,[u,d]=m.useState(!1),h=ae(e,n.ripple,n.rippleVisible,r&&n.ripplePulsate),f={width:o,height:o,top:-(o/2)+s,left:-(o/2)+i},p=ae(n.child,u&&n.childLeaving,r&&n.childPulsate);return!a&&!u&&d(!0),m.useEffect(()=>{if(!a&&l!=null){const g=setTimeout(l,c);return()=>{clearTimeout(g)}}},[l,a,c]),v.jsx("span",{className:h,style:f,children:v.jsx("span",{className:p})})}const le=bn("MuiTouchRipple",["root","ripple","rippleVisible","ripplePulsate","child","childLeaving","childPulsate"]),ar=550,td=80,nd=It`
|
|
2
2
|
0% {
|
|
3
3
|
transform: scale(0);
|
|
4
4
|
opacity: 0.1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as v,ig as L,r as g,t as m,i as F,b3 as U,j as e,Y as C,Z as j,_ as f,$ as p,I as B,a0 as y,a1 as b,bE as V,bH as _,b7 as z,at as K,D as E,aL as D,B as h,x as M,al as R,am as A,E as O,V as P,ih as Q,ag as Y,u as $,ii as G,L as k,F as Z,bY as J,bO as W,bP as X,bQ as T,bR as ee,c2 as S,bS as se,bT as w,ij as te,c5 as ae,c4 as re,c6 as oe}from"./index-
|
|
1
|
+
import{g as v,ig as L,r as g,t as m,i as F,b3 as U,j as e,Y as C,Z as j,_ as f,$ as p,I as B,a0 as y,a1 as b,bE as V,bH as _,b7 as z,at as K,D as E,aL as D,B as h,x as M,al as R,am as A,E as O,V as P,ih as Q,ag as Y,u as $,ii as G,L as k,F as Z,bY as J,bO as W,bP as X,bQ as T,bR as ee,c2 as S,bS as se,bT as w,ij as te,c5 as ae,c4 as re,c6 as oe}from"./index-D1_HHRLX.js";import{D as ne}from"./data-table-pagination-CLXUcmJJ.js";import{P as ie}from"./page-layout-BOjYoqoi.js";import{A as N}from"./arrow-up-down-YhPbp1Ud.js";const de="insertTaxCategory",ce=()=>{const[{fetching:s},n]=v(L),t=g.useCallback(async a=>{const d="Error creating tax category",r=de;m.loading("Adding Tax Category",{id:r});try{const i=await n(a),l=F(i,d,r);if(l)return m.success("Success",{id:r,description:`${l.insertTaxCategory.name} was created`}),l.insertTaxCategory}catch(i){console.error(`${d}: ${i}`),m.error("Error",{id:r,description:d,duration:1e5,closeButton:!0})}},[n]);return{fetching:s,insertTaxCategory:t}};function q({formManager:s,setFetching:n,isInsert:t}){const{control:a,watch:d,setValue:r}=s,{selectableSortCodes:i,fetching:l,sortCodes:x}=U();g.useEffect(()=>{n(l)},[n,l]);const c=d("sortCode");return g.useEffect(()=>{if(c){const o=x.find(u=>u.key===c);o?.defaultIrsCode&&r("irsCode",o.defaultIrsCode,{shouldDirty:!0})}},[c,x,r]),e.jsxs(e.Fragment,{children:[e.jsx(C,{name:"name",control:a,rules:{required:"Required",minLength:{value:2,message:"Must be at least 2 characters"}},render:({field:o,fieldState:u})=>e.jsxs(j,{children:[e.jsx(f,{children:"Name"}),e.jsx(p,{children:e.jsx(B,{...o,value:o.value??void 0,required:!0,className:t?"":y(u)})}),e.jsx(b,{})]})}),e.jsx(V,{name:"sortCode",control:a,render:({field:o,fieldState:u})=>e.jsx(_,{...o,onChange:H=>{o.onChange(Number(H))},data:i,value:o.value?.toString(),disabled:l,label:"Sort Code",placeholder:"Scroll to see all options",maxDropdownHeight:160,searchable:!0,className:t?"":y(u)})}),e.jsx(C,{name:"irsCode",control:a,render:({field:o,fieldState:u})=>e.jsxs(j,{children:[e.jsx(f,{children:"IRS Code"}),e.jsx(p,{children:e.jsx(z,{...o,className:t?"":y(u),value:o.value??void 0,hideControls:!0,decimalScale:0})}),e.jsx(b,{})]})}),e.jsx(C,{control:a,name:"taxExcluded",render:({field:o})=>e.jsxs(j,{className:"flex flex-row items-center justify-between",children:[e.jsx("div",{className:"space-y-0.5",children:e.jsx(f,{children:"Tax excluded category"})}),e.jsx(p,{children:e.jsx(K,{onCheckedChange:o.onChange,checked:o.value??void 0})})]})})]})}function le({onAdd:s}){const[n,t]=g.useState(!1);return e.jsxs(E,{open:n,onOpenChange:t,children:[e.jsx(D,{asChild:!0,children:e.jsx(h,{children:"Add Tax Category"})}),e.jsxs(M,{className:"w-[90vw] max-w-screen-md",children:[e.jsx(R,{children:e.jsx(A,{children:"Add New Tax Category"})}),e.jsx(xe,{close:()=>t(!1),onAdd:s})]})]})}function xe({close:s,onAdd:n}){const t=O({}),{handleSubmit:a}=t,[d,r]=g.useState(!1),{insertTaxCategory:i,fetching:l}=ce(),x=c=>{c.sortCode&&=parseInt(c.sortCode.toString()),i({fields:c}).then(o=>{o?.id&&(n?.(o.id),s())})};return e.jsx(P,{...t,children:e.jsxs("form",{onSubmit:a(x),children:[e.jsx("div",{className:"flex flex-col gap-4 my-4",children:e.jsx(q,{isInsert:!0,formManager:t,setFetching:r})}),e.jsx("div",{className:"flex justify-end mt-4",children:e.jsx(h,{type:"submit",disabled:l||d,children:"Add Tax Category"})})]})})}const ge="updateTaxCategory",ue=()=>{const[{fetching:s},n]=v(Q),t=g.useCallback(async a=>{const d="Error updating tax category",r=`${ge}-${a.taxCategoryId}`;m.loading("Uploading Tax Category",{id:r});try{const i=await n(a),l=F(i,d,r,"updateTaxCategory");if(l)return m.success("Success",{id:r,description:`${l.updateTaxCategory.name} was updated`}),l.updateTaxCategory}catch(i){console.error(`${d}: ${i}`),m.error("Error",{id:r,description:d,duration:1e5,closeButton:!0})}},[n]);return{fetching:s,updateTaxCategory:t}};function me({taxCategoryId:s,onAdd:n}){const[t,a]=g.useState(!1);return e.jsxs(E,{open:t,onOpenChange:a,children:[e.jsx(D,{asChild:!0,children:e.jsx(h,{variant:"outline",size:"icon",children:e.jsx(Y,{})})}),e.jsxs(M,{className:"w-[400px] max-w-screen-md",children:[e.jsx(R,{children:e.jsx(A,{children:"Edit Tax Category"})}),e.jsx(he,{taxCategoryId:s,close:()=>a(!1),onAdd:n})]})]})}function he({taxCategoryId:s,close:n,onAdd:t}){const[{data:a,fetching:d}]=$({query:G,variables:{id:s}}),r=a?.taxCategory;return!r&&!d&&m.error("Error",{description:"Couldn'nt find tax category"}),d?e.jsx(k,{className:"h-10 w-10 animate-spin"}):e.jsx(Ce,{taxCategory:r,close:n,onAdd:t})}function Ce({taxCategory:s,close:n,onAdd:t}){const a=O({defaultValues:{sortCode:s.sortCode?.key,name:s.name,irsCode:s.irsCode}}),{handleSubmit:d}=a,[r,i]=g.useState(!1),{updateTaxCategory:l,fetching:x}=ue(),c=o=>{o.sortCode&&=parseInt(o.sortCode.toString()),l({fields:o,taxCategoryId:s.id}).then(u=>{u?.id&&(t?.(u.id),n())})};return e.jsx(P,{...a,children:e.jsxs("form",{onSubmit:d(c),children:[e.jsx("div",{className:"flex flex-col gap-4 my-4",children:e.jsx(q,{isInsert:!1,formManager:a,setFetching:i})}),e.jsx("div",{className:"flex justify-end mt-4",children:e.jsx(h,{type:"submit",disabled:x||r,children:"Update"})})]})})}const je=({data:s})=>e.jsx("td",{children:s.name}),fe=({data:s})=>e.jsx("td",{children:s.sortCode?e.jsxs("span",{children:[s.sortCode?.name," (",s.sortCode?.id,")"]}):"N/A"}),I=[{id:"name",accessorKey:"name",cell:({row:s})=>e.jsx(je,{data:s.original}),header:({column:s})=>e.jsxs(h,{variant:"ghost",onClick:()=>s.toggleSorting(s.getIsSorted()==="asc"),children:["Name",e.jsx(N,{})]})},{id:"sortCode",accessorKey:"sortCode.key",cell:({row:s})=>e.jsx(fe,{data:s.original}),header:({column:s})=>e.jsxs(h,{variant:"ghost",onClick:()=>s.toggleSorting(s.getIsSorted()==="asc"),children:["Sort Code",e.jsx(N,{})]})},{id:"edit",cell:({row:s})=>e.jsx(me,{taxCategoryId:s.original.id})}],Se=()=>{const[{data:s,fetching:n,error:t},a]=$({query:te}),{setFiltersContext:d}=g.useContext(Z),r=s?.taxCategories??[],i=J({data:r,columns:I,getCoreRowModel:oe(),getPaginationRowModel:re(),getSortedRowModel:ae(),initialState:{pagination:{pageSize:30}}}),l=i.getPageOptions();return g.useEffect(()=>{d(e.jsx("div",{className:"flex items-center justify-end gap-10 space-x-2 py-4",children:e.jsx("div",{className:"flex items-center justify-between px-2",children:e.jsx(ne,{table:i})})}))},[d,i,l]),g.useEffect(()=>{t&&m.error("Error",{description:"Error fetching tax categories"})},[t]),e.jsx(ie,{title:`Tax Categories (${r.length})`,description:"All tax categories",headerActions:e.jsx(le,{onAdd:()=>a()}),children:n?e.jsx("div",{className:"flex flex-row justify-center",children:e.jsx(k,{className:"h-10 w-10 animate-spin mr-2"})}):e.jsx("div",{className:"flex flex-col gap-4 rounded-md border",children:e.jsxs(W,{children:[e.jsx(X,{children:i.getHeaderGroups().map(x=>e.jsx(T,{children:x.headers.map(c=>e.jsx(ee,{children:c.isPlaceholder?null:S(c.column.columnDef.header,c.getContext())},c.id))},x.id))}),e.jsx(se,{children:i.getRowModel().rows.length===0?e.jsx(T,{children:e.jsx(w,{colSpan:I.length,className:"text-center py-8",children:"No tax categories found"})}):i.getRowModel().rows.map(x=>e.jsx(T,{children:x.getVisibleCells().map(c=>e.jsx(w,{children:S(c.column.columnDef.cell,c.getContext())},c.id))},x.id))})]})})})};export{Se as TaxCategories};
|