@accounter/client 0.0.9-alpha-20260104175259-0cfdb3799f7d10fb1cc55d2927f207878d58a147 → 0.0.9-alpha-20260104194509-1bbd863eb3e889196f321663613c729992d236b4
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-BH1IIeNJ.js → Checkbox-Bqh8Rs3Y.js} +1 -1
- package/dist/assets/{MultiSelect-D8J4lKn1.js → MultiSelect-BLtBUfDG.js} +1 -1
- package/dist/assets/{Progress-D1M53czd.js → Progress-zdcZiq7-.js} +1 -1
- package/dist/assets/{Table-BtjfJOYs.js → Table-LzLjpZeA.js} +1 -1
- package/dist/assets/{Typography-D9btUsoo.js → Typography-DemEN63p.js} +1 -1
- package/dist/assets/{YearPickerInput-MjulkM_Y.js → YearPickerInput-wefUMrNX.js} +1 -1
- package/dist/assets/{accordion-DWtdC7qA.js → accordion-DY8sNVhh.js} +1 -1
- package/dist/assets/{accountant-approvals-Cc5NHMux.js → accountant-approvals-DtBIRZC5.js} +1 -1
- package/dist/assets/{accounter-table-MZhZXb7J.js → accounter-table-pB9Clv36.js} +1 -1
- package/dist/assets/{addDays-DUT_gu0K.js → addDays-z7yxKvSG.js} +1 -1
- package/dist/assets/{all-charges-Dy67FA9h.js → all-charges-BqRr5A4S.js} +1 -1
- package/dist/assets/{arrow-up-down-CERAZirv.js → arrow-up-down-DB7wmydC.js} +1 -1
- package/dist/assets/{building-2-Zm7-uxXz.js → building-2-BUBxSuvf.js} +1 -1
- package/dist/assets/{business-CfmdaFwH.js → business-B33OdXng.js} +1 -1
- package/dist/assets/{business-extended-info-D91kiKcV.js → business-extended-info-C3BaFkvQ.js} +1 -1
- package/dist/assets/{business-header-DnQdiN1O.js → business-header-DH34C-UW.js} +1 -1
- package/dist/assets/{business-ledger-filters-BUhtZML3.js → business-ledger-filters-C_W4Kia6.js} +1 -1
- package/dist/assets/{business-ledger-single-CxiH5o95.js → business-ledger-single-CLw2fXXF.js} +1 -1
- package/dist/assets/{business-trip-Clfc9zNq.js → business-trip-BDIbjeVM.js} +1 -1
- package/dist/assets/{charge-DMNSQsdP.js → charge-BZqb4exj.js} +1 -1
- package/dist/assets/{charges-filters-CC7wajcY.js → charges-filters-f-jBUxw-.js} +1 -1
- package/dist/assets/{charges-ledger-validation-Drxd3iv_.js → charges-ledger-validation-vQXFL31X.js} +1 -1
- package/dist/assets/{charges-table-CIiKWIRY.js → charges-table-CYqBhSR-.js} +3 -3
- package/dist/assets/{chart-BxYdUvn4.js → chart-D-802gvL.js} +1 -1
- package/dist/assets/{contracts-BJVpmFOt.js → contracts-40v4c5wb.js} +1 -1
- package/dist/assets/{data-table-column-header-BehoFhh3.js → data-table-column-header-RVA6DnfK.js} +1 -1
- package/dist/assets/{data-table-pagination-Bt9QV1Mq.js → data-table-pagination-UNpJ4XY4.js} +1 -1
- package/dist/assets/{deposits-transactions-table-EMblqiaF.js → deposits-transactions-table-CcCuygQV.js} +1 -1
- package/dist/assets/{download-csv-button-CYFgeqT9.js → download-csv-button-C_FDbZVI.js} +1 -1
- package/dist/assets/{editable-business-trip-DkBA5SHd.js → editable-business-trip-D7udcq6I.js} +1 -1
- package/dist/assets/{eye-off-olnDPZJi.js → eye-off-A1glr3Lh.js} +1 -1
- package/dist/assets/{funnel-KaERRUXZ.js → funnel-BFG62oJX.js} +1 -1
- package/dist/assets/{index-gHSkqWdQ.js → index-BANZ4FYC.js} +1 -1
- package/dist/assets/{index-DKgnEepV.js → index-BWAOW53d.js} +3 -3
- package/dist/assets/{index-SAcrlylT.js → index-BXi4oDGN.js} +1 -1
- package/dist/assets/{index-xabh7QB1.js → index-BhoUb_ON.js} +1 -1
- package/dist/assets/{index-BmP79SRr.js → index-Bk6qb18g.js} +1 -1
- package/dist/assets/{index-CNbthlrK.js → index-BlXqh5bw.js} +1 -1
- package/dist/assets/{index-EfPFblxi.js → index-Bps1VY5w.js} +1 -1
- package/dist/assets/{index-EruBQClb.js → index-CR08bGyj.js} +1 -1
- package/dist/assets/{index-C1ULw7dy.js → index-CV3eOseE.js} +1 -1
- package/dist/assets/{index-CaiSBzHp.js → index-C_D1SRFk.js} +1 -1
- package/dist/assets/{index-DynQh3E_.js → index-CcCOZohd.js} +1 -1
- package/dist/assets/{index-DdUOOX67.js → index-Clz8I9dK.js} +1 -1
- package/dist/assets/{index-D3Un5dPO.js → index-Cwq6ofsb.js} +1 -1
- package/dist/assets/{index-BqGY0muC.js → index-DJDErZF_.js} +1 -1
- package/dist/assets/{index-BxPTZfSR.js → index-DLnIlpCq.js} +1 -1
- package/dist/assets/{index-DC3Ai1ti.js → index-DhMdXJus.js} +1 -1
- package/dist/assets/{index-UT_KOC6Y.js → index-Djgjvx0H.js} +1 -1
- package/dist/assets/{index-DbAReVHG.js → index-DqYn-i8w.js} +1 -1
- package/dist/assets/{index-CJsuAHHS.js → index-HOYMUDFE.js} +1 -1
- package/dist/assets/{index-CMDzDe5z.js → index-_JHX2B8O.js} +1 -1
- package/dist/assets/{index-DYfbfh_d.js → index-_kREhIPr.js} +1 -1
- package/dist/assets/{index-ZSnwRv-1.js → index-b-MiIoC6.js} +1 -1
- package/dist/assets/{index-DGggiX2N.js → index-hOl2Gwvk.js} +1 -1
- package/dist/assets/{index-kkH5w2B_.js → index-iu4sjTwc.js} +1 -1
- package/dist/assets/{index-BEAmMiNK.js → index-nugs82ok.js} +1 -1
- package/dist/assets/{index-DRHZldqB.js → index-qqIdqRd-.js} +1 -1
- package/dist/assets/{index.es-XO1ZhiZl.js → index.es-DTX7vrgg.js} +1 -1
- package/dist/assets/{insert-business-trip-modal-J5RpCFnt.js → insert-business-trip-modal-C4MiJk_g.js} +1 -1
- package/dist/assets/issue-document-DlLf2ULj.js +1 -0
- package/dist/assets/{list-plus-CWTTnrll.js → list-plus-C0XPnNVe.js} +1 -1
- package/dist/assets/{login-page-DUHei41d.js → login-page-Ck5nqn-L.js} +1 -1
- package/dist/assets/{match-document-modal-CjVeE2eq.js → match-document-modal-B8E3M5F6.js} +1 -1
- package/dist/assets/{missing-info-charges-BHNr4-Wb.js → missing-info-charges-DGgTFt-D.js} +1 -1
- package/dist/assets/{modal-C1kXA1jp.js → modal-DGBtDZun.js} +1 -1
- package/dist/assets/{modify-contract-dialog-DMz9Di5C.js → modify-contract-dialog-BoLoZhIr.js} +1 -1
- package/dist/assets/{page-layout-Chhs5IvQ.js → page-layout-Ck_xKyt0.js} +1 -1
- package/dist/assets/{page-not-found-DGJb9D0w.js → page-not-found-BTbs3XmD.js} +1 -1
- package/dist/assets/{panel-top-open-Ba5J6unI.js → panel-top-open-EMjzc-ww.js} +1 -1
- package/dist/assets/{report-commentary-row-BeiDDY5a.js → report-commentary-row-C0J-6IpH.js} +1 -1
- package/dist/assets/{save-CW7u9Bj7.js → save-BMNpevK9.js} +1 -1
- package/dist/assets/{similar-transactions-modal-uC-RSWbS.js → similar-transactions-modal--yMHokZr.js} +1 -1
- package/dist/assets/{sub-CYz4MbL4.js → sub-B9GwcGJi.js} +1 -1
- package/dist/assets/subMonths-KzuARV4a.js +1 -0
- package/dist/assets/{summary-Ly68yShX.js → summary-BU7IrLve.js} +1 -1
- package/dist/assets/{toggle-expansion-button-CeC-srw7.js → toggle-expansion-button-wXVsrHLI.js} +1 -1
- package/dist/assets/{use-issue-monthly-documents-DkHjv8CR.js → use-issue-monthly-documents-DEVr0ix_.js} +1 -1
- package/dist/assets/{use-url-query-Ba7WQN7V.js → use-url-query-DG-wQ19o.js} +1 -1
- package/dist/index.html +1 -1
- package/package.json +1 -1
- package/src/components/charges/charge-extended-info.tsx +11 -14
- package/dist/assets/issue-document-B2UCFoeg.js +0 -1
- package/dist/assets/subMonths-D3QBldu3.js +0 -1
package/dist/assets/{editable-business-trip-DkBA5SHd.js → editable-business-trip-D7udcq6I.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{v as ve,bx as Ye,ch as Ze,r as x,by as Ke,ci as ie,aF as Xe,bz as Qe,cj as Je,ck as es,j as e,B as v,L as Se,g as B,cl as ss,t as j,i as S,H as Ie,u as ne,cm as ge,bD as b,bG as q,cn as ae,co as Ne,aC as ts,bE as U,bF as W,w as M,ay as Fe,cp as Me,l as L,T as A,a3 as G,z as N,n as C,V as I,Y as z,Z as P,_ as X,$,I as Q,a1 as _,b7 as ze,cq as Y,d as Z,cr as ns,cs as rs,ct as is,bu as D,cu as as,bW as Pe,cv as $e,G as w,ai as be,R as ye,cw as os,ah as J,e as ee,cx as cs,cy as ds,cz as ls,cA as us,bC as Oe,cB as hs,cC as xs,cD as ps,cE as Re,cF as ms,cG as gs,cH as js,cI as fs,cJ as vs,cK as bs,at as je,cL as ys,cM as Ts,cN as Es,cO as Cs,cP as As,cQ as ws,cR as Ds,cS as Bs,cT as Ss,cU as Is,cV as Ns,cW as Fs,cX as Ms,cY as zs,cZ as Ps,c_ as $s,c$ as Os,d0 as Rs,d1 as ks,q as Hs,d2 as _s,d3 as Vs,d4 as Ls,d5 as Us,d6 as Ws,d7 as fe,d8 as qs,d9 as Gs}from"./index-DKgnEepV.js";import{L as ke}from"./list-plus-CWTTnrll.js";import{G as te,L as pe,C as He,R as Ys,A as E,S as Zs}from"./summary-Ly68yShX.js";import{T as se}from"./Table-BtjfJOYs.js";import{T as Ks}from"./toggle-expansion-button-CeC-srw7.js";import{M as _e}from"./MultiSelect-D8J4lKn1.js";import{u as Xs,S as Qs}from"./similar-transactions-modal-uC-RSWbS.js";const Js=[["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"}]],et=ve("car",Js);const st=[["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"}]],tt=ve("fuel",st);const nt=[["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"}]],rt=ve("printer",nt);var it=Ye((i,{fluid:n,sizes:r},{size:t})=>({root:{paddingLeft:i.spacing.md,paddingRight:i.spacing.md,maxWidth:n?"100%":Ze({size:t,sizes:r}),marginLeft:"auto",marginRight:"auto"}})),at=Object.defineProperty,me=Object.getOwnPropertySymbols,Ve=Object.prototype.hasOwnProperty,Le=Object.prototype.propertyIsEnumerable,Te=(i,n,r)=>n in i?at(i,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):i[n]=r,ot=(i,n)=>{for(var r in n||(n={}))Ve.call(n,r)&&Te(i,r,n[r]);if(me)for(var r of me(n))Le.call(n,r)&&Te(i,r,n[r]);return i},ct=(i,n)=>{var r={};for(var t in i)Ve.call(i,t)&&n.indexOf(t)<0&&(r[t]=i[t]);if(i!=null&&me)for(var t of me(i))n.indexOf(t)<0&&Le.call(i,t)&&(r[t]=i[t]);return r};const dt={sizes:{xs:ie(540),sm:ie(720),md:ie(960),lg:ie(1140),xl:ie(1320)}},lt=x.forwardRef((i,n)=>{const r=Ke("Container",dt,i),{className:t,fluid:s,size:a,unstyled:o,sizes:d,variant:p}=r,m=ct(r,["className","fluid","size","unstyled","sizes","variant"]),{classes:h,cx:l}=it({fluid:s,sizes:d},{unstyled:o,name:"Container",variant:p,size:a});return Xe.createElement(Qe,ot({className:l(h.root,t),ref:n},m))});lt.displayName="@mantine/core/Container";var H=3.77952755906,he={method:"save",resolution:3,page:{margin:0,format:"A4",orientation:"portrait"},canvas:{mimeType:"image/jpeg",qualityRatio:1,useCORS:!0,logging:!1},overrides:{}},ut=class{pdf;canvas;options;constructor(i,n){this.canvas=i,this.options=n,this.pdf=new es({format:this.options.page.format,orientation:this.options.page.orientation,...this.options.overrides?.pdf,unit:"mm"})}getMarginTopMM(){const i=typeof this.options.page.margin=="object"?this.options.page.margin.top:this.options.page.margin;return Number(i)}getMarginLeftMM(){const i=typeof this.options.page.margin=="object"?this.options.page.margin.left:this.options.page.margin;return Number(i)}getMarginRightMM(){const i=typeof this.options.page.margin=="object"?this.options.page.margin.right:this.options.page.margin;return Number(i)}getMarginBottomMM(){const i=typeof this.options.page.margin=="object"?this.options.page.margin.bottom:this.options.page.margin;return Number(i)}getMarginTop(){return this.getMarginTopMM()*H}getMarginBottom(){return this.getMarginBottomMM()*H}getMarginLeft(){return this.getMarginLeftMM()*H}getMarginRight(){return this.getMarginRightMM()*H}getScale(){return this.options.resolution}getPageHeight(){return this.getPageHeightMM()*H}getPageHeightMM(){return this.pdf.internal.pageSize.height}getPageWidthMM(){return this.pdf.internal.pageSize.width}getPageWidth(){return this.getPageWidthMM()*H}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()/H}getPageAvailableHeightMM(){return this.getPageAvailableHeight()/H}getNumberPages(){return Math.ceil(this.canvas.height/this.getCanvasPageAvailableHeight())}getHorizontalFitFactor(){return this.getPageAvailableWidth()<this.getOriginalCanvasWidth()?this.getOriginalCanvasWidth()/this.getPageAvailableWidth():1}getCanvasOffsetY(i){return this.getCanvasPageAvailableHeight()*(i-1)}getCanvasHeightLeft(i){return this.canvas.height-this.getCanvasOffsetY(i)}getCanvasPageHeight(i){if(this.canvas.height<this.getCanvasPageAvailableHeight())return this.canvas.height;const n=this.getCanvasHeightLeft(i);return n<this.getCanvasPageAvailableHeight()?n:this.getCanvasPageAvailableHeight()}getCanvasPageWidth(){return this.canvas.width}createCanvasPage(i){const n=this.getCanvasPageWidth(),r=this.getCanvasPageHeight(i),t=document.createElement("canvas");return t.setAttribute("width",String(n)),t.setAttribute("height",String(r)),t.getContext("2d").drawImage(this.canvas,0,this.getCanvasOffsetY(i),this.canvas.width,r,0,0,this.canvas.width,r),t}convert(){let i=1;const n=this.getNumberPages();for(;i<=n;){i>1&&this.pdf.addPage(this.options.page.format,this.options.page.orientation);const r=this.createCanvasPage(i),t=r.toDataURL(this.options.canvas.mimeType,this.options.canvas.qualityRatio);this.pdf.setPage(i),this.pdf.addImage({imageData:t,width:r.width/(this.getScale()*H*this.getHorizontalFitFactor()),height:r.height/(this.getScale()*H*this.getHorizontalFitFactor()),x:this.getMarginLeftMM(),y:this.getMarginTopMM()}),i+=1}return this.pdf}},ht=i=>i?{...he,...i,canvas:{...he.canvas,...i.canvas},page:{...he.page,...i.page}}:he,xt=i=>typeof i=="function"?i():i?.current,pt=async(i,n)=>{const r=ht(n),t=xt(i);if(!t){console.error("Unable to get the target element.");return}const s=await Je(t,{useCORS:r.canvas.useCORS,logging:r.canvas.logging,scale:r.resolution,...r.overrides?.canvas}),o=new ut(s,r).convert();switch(r.method){case"build":return o;case"open":return window.open(o.output("bloburl"),"_blank"),o;default:{const d=r.filename??`${new Date().getTime()}.pdf`;return await o.save(d,{returnPromise:!0}),o}}},mt=pt;const gt={method:"open",overrides:{pdf:{compress:!0}}},jt=()=>document.getElementById("main-page"),Rn=({filename:i})=>{const[n,r]=x.useState(!1),t=async()=>{r(!0),await mt(jt,{...gt,filename:i}),r(!1)};return e.jsx(v,{variant:"outline",size:"icon",className:"size-7.5",onClick:t,disabled:n,children:n?e.jsx(Se,{className:"h-10 w-10 animate-spin mr-2 self-center"}):e.jsx(rt,{className:"size-5"})})},ft="addBusinessTripAccommodationsExpense",vt=()=>{const[{fetching:i},n]=B(ss),r=x.useCallback(async t=>{const s="Error adding business trip accommodations expense",a=ft;j.loading("Adding Business Trip Accommodations Expense",{id:a});try{const o=await n(t),d=S(o,s,a);if(d)return j.success("Success",{id:a,description:"Business trip accommodations expense added"}),d.addBusinessTripAccommodationsExpense}catch(o){console.error(`${s}: ${o}`),j.error("Error",{id:a,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:i,addBusinessTripAccommodationsExpense:r}};function Ue({formManager:i,attendeesStayPath:n,attendeesData:r,fetchingAttendees:t=!1,businessTripId:s}){const{control:a,watch:o,trigger:d}=i,{fields:p,append:m,remove:h}=Ie({control:a,name:n}),[l,c]=x.useState(t),[u,g]=x.useState(r??[]),f=o(n),T=p.map((F,R)=>({...F,...f[R]}));x.useEffect(()=>{r&&g(r)},[r]),x.useEffect(()=>{c(t)},[t]);const[{data:y,fetching:O},K]=ne({query:ge,pause:!0,variables:{businessTripId:s??""}});return x.useEffect(()=>{if(y?.businessTrip?.attendees.length){const F=y.businessTrip.attendees.map(R=>({value:R.id,label:R.name}))??[];g(F)}},[y?.businessTrip?.attendees]),x.useEffect(()=>{c(O)},[O]),x.useEffect(()=>{!r&&!y&&!t&&!O&&K({businessTripId:s})},[r,t,O,K,s,y]),!s&&!r?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((F,R)=>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}.${R}.attendeeId`,control:a,rules:{required:"Required"},render:({field:k,fieldState:re})=>e.jsx(q,{...k,disabled:l,data:u,value:k.value??void 0,label:"Attendee",placeholder:"Scroll to see all options",maxDropdownHeight:160,searchable:!0,error:re.error?.message,withinPortal:!0,required:!0})})}),e.jsx("div",{className:"w-full mt-1 relative rounded-md shadow-xs",children:e.jsx(b,{control:a,name:`${n}.${R}.nightsCount`,render:({field:k,fieldState:re})=>e.jsx(ae,{className:"w-full",...k,min:0,label:"Nights Count",value:k.value??void 0,hideControls:!0,precision:0,error:re.error?.message,required:!0,onChange:V=>k.onChange(V&&typeof V=="number"?V:void 0)})})}),e.jsx(v,{variant:"ghost",size:"icon",className:"mb-2 size-7.5",onClick:()=>{h(R),d(n)},children:e.jsx(Ne,{className:"size-5"})})]},F.id)),e.jsx(v,{variant:"ghost",size:"icon",className:"size-7.5",onClick:()=>{m({}),d(n)},children:e.jsx(ke,{className:"size-5"})})]})]})}function oe({businessTripId:i,control:n,setFetching:r}){const[t,s]=x.useState([]),[{data:a,fetching:o,error:d}]=ne({query:ge,variables:{businessTripId:i}}),{userContext:p}=x.useContext(ts);x.useEffect(()=>{a?.businessTrip?.attendees.length&&s(a.businessTrip.attendees.map(h=>({value:h.id,label:h.name})).sort((h,l)=>h.label>l.label?1:-1))},[a,s]),x.useEffect(()=>{r(o)},[r,o]),x.useEffect(()=>{d&&j.error("Error",{description:"Oops, we have an error fetching attendees"})},[d]);const m=x.useMemo(()=>p?.context.ledgerLock,[p]);return e.jsxs(e.Fragment,{children:[e.jsx(b,{name:"date",control:n,rules:{min:m?{value:m,message:`Date must be after ${m}`}:void 0,pattern:{value:U,message:"Date must be im format yyyy-mm-dd"}},render:({field:h,fieldState:l})=>e.jsx(W,{"data-autofocus":!0,...h,onChange:c=>{const u=c?typeof c=="string"?c:M(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:U,message:"Date must be im format yyyy-mm-dd"},min:m?{value:m,message:`Date must be after ${m}`}:void 0},render:({field:h,fieldState:l})=>e.jsx(W,{...h,onChange:c=>{const u=c?typeof c=="string"?c:M(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(q,{...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 Ee(i){const{businessTripId:n,onAdd:r}=i,[t,{close:s,open:a}]=L(!1);return e.jsxs(e.Fragment,{children:[e.jsx(A,{content:"Add Accommodations Expense",children:e.jsx(v,{variant:"outline",size:"icon",className:"size-7.5",onClick:o=>{o.stopPropagation(),a()},children:e.jsx(G,{className:"size-5"})})}),t&&e.jsx(bt,{businessTripId:n,opened:t,close:s,onAdd:r})]})}function bt({businessTripId:i,opened:n,close:r,onAdd:t}){const s=N({defaultValues:{businessTripId:i}}),{control:a,handleSubmit:o}=s,[d,p]=x.useState(!1),{addBusinessTripAccommodationsExpense:m,fetching:h}=vt(),l=c=>{m({fields:c}).then(()=>{t?.(),r()})};return e.jsxs(C,{opened:n,onClose:r,centered:!0,lockScroll:!0,children:[e.jsx(C.Title,{children:"Add Accommodation Expense"}),e.jsx(C.Body,{children:e.jsx(I,{...s,children:e.jsxs("form",{onSubmit:o(l),className:"space-y-3",children:[e.jsx(oe,{businessTripId:i,control:a,setFetching:p}),e.jsx(z,{control:a,name:"country",render:({field:c})=>e.jsxs(P,{children:[e.jsx(X,{children:"Country"}),e.jsx($,{children:e.jsx(Q,{...c,value:c.value??void 0})}),e.jsx(_,{})]})}),e.jsx(z,{name:"nightsCount",control:a,render:({field:c})=>e.jsxs(P,{children:[e.jsx(X,{children:"Nights Count"}),e.jsx($,{children:e.jsx(ze,{...c,value:c.value??void 0,hideControls:!0,decimalScale:0,thousandSeparator:","})}),e.jsx(_,{})]})}),e.jsx(Ue,{formManager:s,attendeesStayPath:"attendeesStay",businessTripId:i}),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(Y,{blur:1,center:!0,children:e.jsx(Z,{})})]})}const yt="updateBusinessTripAccommodationsExpense",Tt=()=>{const[{fetching:i},n]=B(ns),r=x.useCallback(async t=>{const s="Error updating business trip accommodations expense",a=yt;j.loading("Updating trip accommodations expense",{id:a});try{const o=await n(t),d=S(o,s,a);if(d)return j.success("Success",{id:a,description:"Business trip accommodations expense was updated"}),d.updateBusinessTripAccommodationsExpense}catch(o){console.error(`${s}: ${o}`),j.error("Error",{id:a,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:i,updateBusinessTripAccommodationsExpense:r}},Et="categorizeIntoExistingBusinessTripExpense",Ct=()=>{const[{fetching:i},n]=B(rs),r=x.useCallback(async t=>{const s="Error updating business trip expense category",a=Et;j.loading("Updating business trip expense category",{id:a});try{const o=await n(t),d=S(o,s,a);if(d)return j.success("Success",{id:a,description:"Business trip expense category was updated"}),d.categorizeIntoExistingBusinessTripExpense}catch(o){console.error(`${s}: ${o}`),j.error("Error",{id:a,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:i,categorizeIntoExistingBusinessTripExpense:r}};function ce(i){const{businessTripExpenseId:n,businessTripId:r,onChange:t}=i,[s,{close:a,open:o}]=L(!1);return e.jsxs(e.Fragment,{children:[e.jsx(A,{content:"Attach Uncategorized Transaction",children:e.jsx(v,{variant:"outline",size:"icon",className:"size-7.5",onClick:d=>{d.stopPropagation(),o()},children:e.jsx(G,{className:"size-5"})})}),s&&e.jsx(At,{businessTripExpenseId:n,businessTripId:r,opened:s,close:a,onChange:t})]})}function At({businessTripExpenseId:i,businessTripId:n,opened:r,close:t,onChange:s}){const{control:a,handleSubmit:o,setValue:d}=N({defaultValues:{businessTripExpenseId:i}}),[p,m]=x.useState([]),[{data:h,fetching:l,error:c}]=ne({query:is,variables:{businessTripId:n}}),{categorizeIntoExistingBusinessTripExpense:u,fetching:g}=Ct(),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);m(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,O)=>y.eventDate.localeCompare(O.eventDate)))}},[h,m]),x.useEffect(()=>{c&&j.error("Error",{description:"Oops, we have an error fetching transactions to categorize"})},[c]),e.jsxs(C,{opened:r,onClose:t,centered:!0,children:[e.jsx(C.Title,{children:"Set Transaction Category"}),e.jsx(C.Body,{children:e.jsxs("form",{onSubmit:o(f),className:"flex flex-col gap-3 mt-3",children:[e.jsx(b,{name:"transactionId",control:a,render:({field:T,fieldState:y})=>e.jsx(q,{...T,itemComponent:wt,data:p??[],disabled:l,label:"Transactions",placeholder:"Scroll to see all options",maxDropdownHeight:160,error:y.error?.message,withAsterisk:!0,withinPortal:!0,onChange:O=>{const K=p.find(F=>F.value===O);K?.rawAmount&&d("amount",K.rawAmount),T.onChange(O)}})}),e.jsx(b,{name:"amount",control:a,render:({field:T,fieldState:y})=>e.jsx(ae,{...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"})})]})}),g&&e.jsx(Y,{blur:1,center:!0,children:e.jsx(Z,{})})]})}const wt=x.forwardRef(({eventDate:i,sourceDescription:n,referenceKey:r,counterparty:t,amount:s,...a},o)=>e.jsx("div",{ref:o,...a,children:e.jsxs(te,{children:[e.jsx(te.Col,{span:4,children:i}),e.jsx(te.Col,{span:4,children:e.jsx(D,{size:"sm",children:t})}),e.jsx(te.Col,{span:4,children:e.jsx(D,{size:"sm",children:s})}),e.jsx(te.Col,{span:8,children:e.jsx(D,{size:"xs",opacity:.65,children:n})}),e.jsxs(te.Col,{span:4,children:["Reference: ",r]})]})})),Dt="deleteBusinessTripExpense",Bt=()=>{const[{fetching:i},n]=B(as),r=x.useCallback(async t=>{const s="Error deleting business trip expense",a=`${Dt}-${t.businessTripExpenseId}`;j.loading("Deleting trip expense",{id:a});try{const o=await n(t),d=S(o,s,a);if(d)return j.success("Success",{id:a,description:"Business trip expense was deleted"}),d.deleteBusinessTripExpense}catch(o){console.error(`${s}: ${o}`),j.error("Error",{id:a,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:i,deleteBusinessTripExpense:r}};function de(i){const{fetching:n,deleteBusinessTripExpense:r}=Bt(),t=x.useCallback(()=>{r({businessTripExpenseId:i.businessTripExpenseId}).then(()=>{i.onDelete?.()})},[i,r]);return e.jsx(A,{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 le=({data:i,isEditMode:n=!1,control:r,businessTripId:t})=>{const s=w(os,i),[a,o]=x.useState([]),[{data:d,fetching:p,error:m}]=ne({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(()=>{m&&j.error("Error",{description:"Oops, we have an error fetching attendees"})},[m]);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:r,defaultValue:s.date,rules:{pattern:{value:U,message:"Date must be im format yyyy-mm-dd"}},render:({field:l,fieldState:c})=>e.jsx(W,{...l,form:`form ${s.id}`,"data-autofocus":!0,onChange:u=>{const g=u?typeof u=="string"?u:M(u,"yyyy-MM-dd"):void 0;g!==l.value&&l.onChange(g)},value:l.value?new Date(l.value):void 0,label:"Date",error:c.error?.message,popoverProps:{withinPortal:!0}})}),e.jsx(b,{name:"valueDate",control:r,defaultValue:s.valueDate,rules:{pattern:{value:U,message:"Date must be im format yyyy-mm-dd"}},render:({field:l,fieldState:c})=>e.jsx(W,{...l,form:`form ${s.id}`,onChange:u=>{const g=u?typeof u=="string"?u:M(u,"yyyy-MM-dd"):void 0;g!==l.value&&l.onChange(g)},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&&M(new Date(s.date),"dd/MM/yy"),e.jsx(D,{fz:"sm",c:"dimmed",children:s.valueDate&&M(new Date(s.valueDate),"dd/MM/yy")})]})})}),e.jsx("td",{children:n&&s.payedByEmployee?e.jsx(b,{name:"amount",control:r,defaultValue:s.amount?.raw??void 0,render:({field:l,fieldState:c})=>e.jsx(b,{name:"currency",control:r,defaultValue:s.amount?.currency??Fe.Ils,render:({field:u,fieldState:g})=>e.jsx(Me,{form:`form ${s.id}`,...l,value:l.value??void 0,error:c.error?.message||g.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:r,defaultValue:s.employee?.id,render:({field:l,fieldState:c})=>e.jsx(q,{form:`form ${s.id}`,...l,data:a,value:l.value,disabled:p,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))})})]})},ue=()=>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"})]}),St=({data:i,businessTripId:n,onChange:r})=>{const t=w(cs,i),[s,a]=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:p}=o,{updateBusinessTripAccommodationsExpense:m,fetching:h}=Tt(),l=c=>{m({fields:c}).then(()=>{r?.(),a(!1)})};return e.jsxs("tr",{children:[e.jsx(le,{data:t,isEditMode:s,control:d,businessTripId:n}),e.jsx("td",{children:e.jsx(I,{...o,children:e.jsx("form",{id:`form ${t.id}`,onSubmit:p(l),children:s?e.jsx(z,{name:"country",control:d,defaultValue:t.country,render:({field:c})=>e.jsxs(P,{children:[e.jsx($,{children:e.jsx(Q,{form:`form ${t.id}`,...c,value:c.value??void 0})}),e.jsx(_,{})]})}):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(I,{...o,children:e.jsx(z,{name:"nightsCount",control:d,defaultValue:t.nightsCount,render:({field:c})=>e.jsxs(P,{children:[e.jsx($,{children:e.jsx(ze,{...c,value:c.value??void 0,form:`form ${t.id}`,hideControls:!0,decimalScale:0,thousandSeparator:","})}),e.jsx(_,{})]})})}):e.jsx(D,{c:t.nightsCount?void 0:"red",children:t.nightsCount??"Missing"})})}),e.jsx("td",{children:s?e.jsx(I,{...o,children:e.jsx(Ue,{formManager:o,attendeesStayPath:"attendeesStay",businessTripId:n})}):e.jsx(pe,{listStyleType:"disc",children:t.attendeesStay?.length?t.attendeesStay.map(c=>e.jsxs(pe.Item,{children:[c.attendee.name," (",c.nightsCount,")"]},c.id)):e.jsx(D,{c:"red",fz:"sm",children:"Missing"})})}),e.jsx("td",{children:r&&e.jsxs(e.Fragment,{children:[e.jsx(A,{content:"Edit",children:e.jsx(v,{disabled:h,variant:s?"default":"outline",size:"icon",className:"size-7.5",onClick:c=>{c.stopPropagation(),a(u=>!u)},children:e.jsx(J,{className:"size-5"})})}),s&&e.jsx(A,{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(ee,{className:"size-5"})})}),e.jsx(ce,{businessTripExpenseId:t.id,businessTripId:n,onChange:r}),e.jsx(de,{businessTripExpenseId:t.id,onDelete:r})]})})]},t.id)},We=({businessTripId:i,expenses:n,onChange:r})=>{if(!n?.length)return r?e.jsx(Ee,{businessTripId:i,onAdd:r}):e.jsx(e.Fragment,{});const t=n.map(s=>w(ds,s));return e.jsx("div",{className:"flex flex-col gap-2 mt-5",children:e.jsxs(se,{highlightOnHover:!0,withBorder:!0,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx(ue,{}),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,a)=>s.date&&a.date?s.date<a.date?1:-1:s.date?-1:a.date?1:0).map(s=>e.jsx(St,{data:s,businessTripId:i,onChange:r},s.id)),r&&e.jsx("tr",{children:e.jsx("td",{colSpan:6,children:e.jsx(Ee,{businessTripId:i,onAdd:r})})})]})]})})},It=({data:i,onChange:n})=>{const{accommodationExpenses:r,id:t}=w(ls,i);return e.jsx(We,{businessTripId:t,expenses:r,onChange:n})},Nt="insertBusinessTripAttendee",Ft=()=>{const[{fetching:i},n]=B(us),r=x.useCallback(async t=>{const s="Error adding attendee to business trip",a=Nt;j.loading("Adding attendee",{id:a});try{const o=await n(t),d=S(o,s,a);if(d)return j.success("Success",{id:a,description:"Attendee was added to the business trip"}),d.insertBusinessTripAttendee}catch(o){console.error(`${s}: ${o}`),j.error("Error",{id:a,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:i,insertBusinessTripAttendee:r}};function Ce(i){const{businessTripId:n,onAdd:r}=i,[t,{close:s,open:a}]=L(!1);return e.jsxs(e.Fragment,{children:[e.jsx(A,{content:"Add Attendee",children:e.jsx(v,{variant:"outline",size:"icon",onClick:o=>{o.stopPropagation(),a()},className:"size-7.5",children:e.jsx(G,{className:"size-5"})})}),t&&e.jsx(Mt,{businessTripId:n,opened:t,close:s,onAdd:r})]})}function Mt({businessTripId:i,opened:n,close:r,onAdd:t}){const{selectableBusinesses:s,fetching:a}=Oe(),{control:o,handleSubmit:d}=N({defaultValues:{businessTripId:i}}),{insertBusinessTripAttendee:p,fetching:m}=Ft(),h=l=>{p({fields:l}).then(()=>{t?.(),r()})};return e.jsxs(C,{opened:n,onClose:r,centered:!0,children:[e.jsx(C.Title,{children:"Add Attendee"}),e.jsx(C.Body,{children:e.jsxs("form",{onSubmit:d(h),children:[e.jsx(b,{name:"attendeeId",control:o,render:({field:l,fieldState:c})=>e.jsx(q,{"data-autofocus":!0,...l,data:s,value:l.value,disabled:a,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:U,message:"Date must be im format yyyy-mm-dd"}},render:({field:l,fieldState:c})=>e.jsx(W,{...l,onChange:u=>{const g=u?typeof u=="string"?u:M(u,"yyyy-MM-dd"):void 0;g!==l.value&&l.onChange(g)},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:U,message:"Date must be im format yyyy-mm-dd"}},render:({field:l,fieldState:c})=>e.jsx(W,{...l,onChange:u=>{const g=u?typeof u=="string"?u:M(u,"yyyy-MM-dd"):void 0;g!==l.value&&l.onChange(g)},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"})})]})}),(m||a)&&e.jsx(Y,{blur:1,center:!0,children:e.jsx(Z,{})})]})}const zt="updateBusinessTripAttendee",Pt=()=>{const[{fetching:i},n]=B(hs),r=x.useCallback(async t=>{const s="Error updating business trip attendee",a=zt;j.loading("Updating trip attendee",{id:a});try{const o=await n(t),d=S(o,s,a);if(d)return j.success("Success",{id:a,description:"Business trip attendee was updated"}),d.updateBusinessTripAttendee}catch(o){console.error(`${s}: ${o}`),j.error("Error",{id:a,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:i,updateBusinessTripAttendee:r}},$t="deleteBusinessTripAttendee",Ot=()=>{const[{fetching:i},n]=B(xs),r=x.useCallback(async t=>{const s="Error removing business trip attendee",a=$t;j.loading("Removing business trip attendee",{id:a});try{const o=await n(t),d=S(o,s,a);if(d)return j.success("Success",{id:a,description:"Business trip attendee was removed"}),d.deleteBusinessTripAttendee}catch(o){console.error(`${s}: ${o}`),j.error("Error",{id:a,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:i,deleteBusinessTripAttendee:r}};function Rt(i){const{fetching:n,deleteBusinessTripAttendee:r}=Ot(),t=x.useCallback(()=>{r({fields:{businessTripId:i.businessTripId,attendeeId:i.attendeeId}}).then(()=>{i.onDelete?.()})},[i,r]);return e.jsx(A,{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 kt="addBusinessTripFlightsExpense",Ht=()=>{const[{fetching:i},n]=B(ps),r=x.useCallback(async t=>{const s="Error adding business trip flight expense",a=kt;j.loading("Adding business trip flight expense",{id:a});try{const o=await n(t),d=S(o,s,a);if(d)return j.success("Success",{id:a,description:"Business trip flight expense added"}),d.addBusinessTripFlightsExpense}catch(o){console.error(`${s}: ${o}`),j.error("Error",{id:a,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:i,addBusinessTripFlightsExpense:r}};function qe({formManager:i,flightPathPath:n,flightPathData:r}){const{control:t,watch:s,trigger:a}=i,{fields:o,append:d,remove:p}=Ie({control:t,name:n}),m=s(n),h=o.map((l,c)=>({...l,...m[c]}));return r?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(z,{name:`${n}.${c}`,control:t,rules:{required:"Required"},render:({field:u})=>e.jsxs(P,{children:[e.jsx($,{children:e.jsx(Q,{...u,value:u.value??void 0,placeholder:"Destination"})}),e.jsx(_,{})]})})}),e.jsx(v,{variant:"ghost",size:"icon",className:"mb-2 size-7.5",onClick:()=>{p(c),a(n)},children:e.jsx(Ne,{className:"size-5"})})]},l.id)),e.jsx(v,{variant:"ghost",size:"icon",className:"size-7.5",onClick:()=>{d(""),a(n)},children:e.jsx(ke,{className:"size-5"})})]})]}):e.jsx("div",{children:"Cannot edit flight path stay, lacking some mandatory information!"})}function Ae(i){const{businessTripId:n,onAdd:r}=i,[t,{close:s,open:a}]=L(!1);return e.jsxs(e.Fragment,{children:[e.jsx(A,{content:"Add Flight Expense",children:e.jsx(v,{variant:"outline",size:"icon",className:"size-7.5",onClick:o=>{o.stopPropagation(),a()},children:e.jsx(G,{className:"size-5"})})}),t&&e.jsx(Vt,{businessTripId:n,opened:t,close:s,onAdd:r})]})}const _t=Object.entries(Re).map(([i,n])=>({value:n,label:i}));function Vt({businessTripId:i,opened:n,close:r,onAdd:t}){const s=N({defaultValues:{businessTripId:i}}),{control:a,handleSubmit:o}=s,[d,p]=x.useState(!1),[{data:m,fetching:h}]=ne({query:ge,variables:{businessTripId:i}}),{addBusinessTripFlightsExpense:l,fetching:c}=Ht(),u=f=>{l({fields:f}).then(()=>{t?.(),r()})},g=m?.businessTrip?.attendees.map(f=>({value:f.id,label:f.name}))??[];return e.jsxs(C,{opened:n,onClose:r,centered:!0,lockScroll:!0,children:[e.jsx(C.Title,{children:"Add Flight Expense"}),e.jsx(C.Body,{children:e.jsx(I,{...s,children:e.jsxs("form",{onSubmit:o(u),children:[e.jsx(oe,{businessTripId:i,control:a,setFetching:p}),e.jsx(qe,{formManager:s,flightPathPath:"path"}),e.jsx(b,{name:"flightClass",control:a,render:({field:f,fieldState:T})=>e.jsx(q,{...f,data:_t,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:a,render:({field:f,fieldState:T})=>e.jsx(_e,{...f,disabled:h,data:g,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(Y,{blur:1,center:!0,children:e.jsx(Z,{})})]})}const Lt="updateBusinessTripFlightsExpense",Ut=()=>{const[{fetching:i},n]=B(ms),r=x.useCallback(async t=>{const s="Error updating business trip flights expense",a=Lt;j.loading("Updating trip flights expense",{id:a});try{const o=await n(t),d=S(o,s,a);if(d)return j.success("Success",{id:a,description:"Business trip flights expense was updated"}),d.updateBusinessTripFlightsExpense}catch(o){console.error(`${s}: ${o}`),j.error("Error",{id:a,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:i,updateBusinessTripFlightsExpense:r}},Wt=Object.entries(Re).map(([i,n])=>({value:n,label:i})),qt=({data:i,businessTripId:n,onChange:r,attendees:t})=>{const s=w(gs,i),[a,o]=x.useState(!1),d=N({defaultValues:{id:s.id,businessTripId:n,attendeeIds:s.attendees?.map(g=>g.id)??[],path:s.path??[]}}),{control:p,handleSubmit:m}=d,{updateBusinessTripFlightsExpense:h,fetching:l}=Ut(),c=g=>{h({fields:g}).then(()=>{r?.(),o(!1)})},u=t.map(g=>({value:g.id,label:g.name}));return e.jsxs("tr",{children:[e.jsx(le,{data:s,isEditMode:a,control:p,businessTripId:n}),e.jsx("td",{children:e.jsx(I,{...d,children:e.jsx("form",{id:`form ${s.id}`,onSubmit:m(c),children:e.jsxs("div",{className:"flex flex-col gap-2 justify-center",children:[a?e.jsx(qe,{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((g,f)=>e.jsxs(e.Fragment,{children:[e.jsx(D,{fw:700,children:g},f),f<s.path.length-1&&(g===s.path[f+1]?" | ":" → ")]})):e.jsx(D,{fw:700,className:"flex gap-2 items-center",c:"red",children:"Missing"})}),a?e.jsx(b,{name:"flightClass",control:p,defaultValue:s.class??void 0,render:({field:g,fieldState:f})=>e.jsx(q,{form:`form ${s.id}`,"data-autofocus":!0,...g,data:Wt,value:g.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:a?e.jsx(b,{name:"attendeeIds",control:p,defaultValue:s.attendees?.map(g=>g.id)??void 0,render:({field:g,fieldState:f})=>e.jsx(_e,{...g,form:`form ${s.id}`,data:u,value:g.value??[],label:"Attendees",placeholder:"Scroll to see all options",maxDropdownHeight:160,searchable:!0,error:f.error?.message,withinPortal:!0})}):e.jsx(pe,{listStyleType:"disc",children:s.attendees?.length?s.attendees.map(g=>e.jsx(pe.Item,{children:g.name},g.id)):e.jsx(D,{c:"red",fz:"sm",children:"Missing"})})}),e.jsx("td",{children:r&&e.jsxs(e.Fragment,{children:[e.jsx(A,{content:"Edit",children:e.jsx(v,{disabled:l,variant:a?"default":"outline",size:"icon",className:"size-7.5",onClick:g=>{g.stopPropagation(),o(f=>!f)},children:e.jsx(J,{className:"size-5"})})}),a&&e.jsx(A,{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(ee,{className:"size-5"})})}),e.jsx(ce,{businessTripExpenseId:s.id,businessTripId:n,onChange:r}),e.jsx(de,{businessTripExpenseId:s.id,onDelete:r})]})})]},s.id)},Ge=({businessTripId:i,expenses:n,attendees:r,onChange:t})=>{if(!n?.length)return t?e.jsx(Ae,{businessTripId:i,onAdd:t}):e.jsx(e.Fragment,{});const s=n.map(a=>w(js,a));return e.jsx("div",{className:"flex flex-col gap-2 mt-5",children:e.jsxs(se,{highlightOnHover:!0,withBorder:!0,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx(ue,{}),e.jsx("th",{children:"Flight"}),e.jsx("th",{children:"Attendees"}),e.jsx("th",{})]})}),e.jsxs("tbody",{children:[s.sort((a,o)=>a.date&&o.date?a.date<o.date?1:-1:a.date?-1:o.date?1:0).map(a=>e.jsx(qt,{data:a,businessTripId:i,onChange:t,attendees:r},a.id)),t&&e.jsx("tr",{children:e.jsx("td",{colSpan:5,children:e.jsx(Ae,{businessTripId:i,onAdd:t})})})]})]})})},Gt=({data:i,businessTripId:n,onChange:r})=>{const t=w(fs,i),[s,a]=x.useState(!1),[o,d]=x.useState(!1),{control:p,handleSubmit:m}=N({defaultValues:{businessTripId:n,attendeeId:t.id,arrivalDate:t.arrivalDate,departureDate:t.departureDate}}),{updateBusinessTripAttendee:h,fetching:l}=Pt(),c=u=>{h({fields:u}).then(()=>{r?.(),a(!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:m(c),children:e.jsx(b,{name:"arrivalDate",control:p,defaultValue:t.arrivalDate,rules:{pattern:{value:U,message:"Date must be im format yyyy-mm-dd"}},render:({field:u,fieldState:g})=>e.jsx(W,{...u,onChange:f=>{const T=f?typeof f=="string"?f:M(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:g.error?.message,label:"Arrival",popoverProps:{withinPortal:!0}})})}):t.arrivalDate}),e.jsx("td",{children:s?e.jsx(b,{name:"departureDate",control:p,defaultValue:t.departureDate,rules:{pattern:{value:U,message:"Date must be im format yyyy-mm-dd"}},render:({field:u,fieldState:g})=>e.jsx(W,{...u,onChange:f=>{const T=f?typeof f=="string"?f:M(f,"yyyy-MM-dd"):void 0;T!==u.value&&u.onChange(T)},value:u.value?new Date(u.value):void 0,error:g.error?.message,label:"Departure",popoverProps:{withinPortal:!0}})}):t.departureDate}),e.jsxs("td",{className:"flex items-center gap-2",children:[e.jsx(A,{content:"Edit",children:e.jsx(v,{disabled:l,variant:s?"default":"outline",size:"icon",className:"size-7.5",onClick:u=>{u.stopPropagation(),a(g=>!g)},children:e.jsx(J,{className:"size-5"})})}),s&&e.jsx(A,{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(ee,{className:"size-5"})})}),e.jsx(Rt,{businessTripId:n,attendeeId:t.id,onDelete:r}),e.jsx(Ks,{toggleExpansion:d,isExpanded:o})]})]},t.id),o&&e.jsx("tr",{children:e.jsx("td",{colSpan:4,children:e.jsx(He,{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(Ge,{businessTripId:n,attendees:[],expenses:t.flights})]}),t.accommodations&&e.jsxs(e.Fragment,{children:[e.jsx("div",{children:"Accommodations:"}),e.jsx(We,{businessTripId:n,expenses:t.accommodations})]})]})})})},`${t.id}-expension`)]})},Yt=({data:i,onChange:n})=>{const{attendees:r,id:t}=w(vs,i);return r?.length?e.jsx("div",{className:"flex flex-col gap-2 mt-5",children:e.jsxs(se,{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:[r.sort((s,a)=>s.name.toLocaleLowerCase()>a.name.toLocaleLowerCase()?1:-1).map(s=>e.jsx(Gt,{data:s,businessTripId:t,onChange:n},s.id)),e.jsx("tr",{children:e.jsx("td",{colSpan:4,children:e.jsx(Ce,{businessTripId:t,onAdd:n})})})]})]})}):e.jsx(Ce,{businessTripId:t,onAdd:n})},xe="addBusinessTripCarRentalExpense",Zt=()=>{const[{fetching:i},n]=B(bs),r=x.useCallback(async t=>{const s="Error adding business trip car rental expense";j.loading("Adding car rental expense...",{id:xe});try{const a=await n(t),o=S(a,s,xe);if(o)return j.success("Success",{id:xe,description:"Car rental expense added"}),o.addBusinessTripCarRentalExpense}catch(a){console.error(`${s}: ${a}`),j.error("Error",{id:xe,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:i,addBusinessTripCarRentalExpense:r}};function we(i){const{businessTripId:n,onAdd:r}=i,[t,{close:s,open:a}]=L(!1);return e.jsxs(e.Fragment,{children:[e.jsx(A,{content:"Add Car Rental Expense",children:e.jsx(v,{variant:"outline",size:"icon",onClick:o=>{o.stopPropagation(),a()},className:"size-7.5",children:e.jsx(G,{className:"size-5"})})}),t&&e.jsx(Kt,{businessTripId:n,opened:t,close:s,onAdd:r})]})}function Kt({businessTripId:i,opened:n,close:r,onAdd:t}){const s=N({defaultValues:{businessTripId:i}}),{control:a,handleSubmit:o}=s,[d,p]=x.useState(!1),{addBusinessTripCarRentalExpense:m,fetching:h}=Zt(),l=c=>{m({fields:c}).then(()=>{t?.(),r()})};return e.jsxs(C,{opened:n,onClose:r,centered:!0,lockScroll:!0,children:[e.jsx(C.Title,{children:"Add Car Rental Expense"}),e.jsx(C.Body,{children:e.jsx(I,{...s,children:e.jsxs("form",{onSubmit:o(l),children:[e.jsx(oe,{businessTripId:i,control:a,setFetching:p}),e.jsx(b,{name:"days",control:a,render:({field:c,fieldState:u})=>e.jsx(ae,{...c,value:c.value??void 0,hideControls:!0,precision:2,removeTrailingZeros:!0,error:u.error?.message,label:"Rent Days"})}),e.jsx(z,{name:"isFuelExpense",control:a,render:({field:{value:c,...u}})=>e.jsxs(P,{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(X,{children:"Is Fuel Expense"})}),e.jsx($,{children:e.jsx(je,{...u,checked:c===!0,onCheckedChange:u.onChange})}),e.jsx(_,{})]})}),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(Y,{blur:1,center:!0,children:e.jsx(Z,{})})]})}const Xt="updateBusinessTripCarRentalExpense",Qt=()=>{const[{fetching:i},n]=B(ys),r=x.useCallback(async t=>{const s="Error updating business trip car rental expense",a=Xt;j.loading("Updating trip car rental expense",{id:a});try{const o=await n(t),d=S(o,s,a);if(d)return j.success("Success",{id:a,description:"Business trip car rental expense was updated"}),d.updateBusinessTripCarRentalExpense}catch(o){console.error(`${s}: ${o}`),j.error("Error",{id:a,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:i,updateBusinessTripCarRentalExpense:r}},Jt=({data:i,businessTripId:n,onChange:r})=>{const t=w(Ts,i),[s,a]=x.useState(!1),o=N({defaultValues:{id:t.id,businessTripId:n}}),{control:d,handleSubmit:p}=o,{updateBusinessTripCarRentalExpense:m,fetching:h}=Qt(),l=c=>{m({fields:c}).then(()=>{r?.(),a(!1)})};return e.jsxs("tr",{children:[e.jsx(le,{data:t,isEditMode:s,control:d,businessTripId:n}),e.jsx("td",{children:e.jsx(I,{...o,children:e.jsx("form",{id:`form ${t.id}`,onSubmit:p(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(ae,{...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(I,{...o,children:e.jsx(z,{name:"isFuelExpense",control:d,defaultValue:t.isFuelExpense,render:({field:c})=>e.jsxs(P,{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(X,{children:"Is Fuel Expense"})}),e.jsx($,{children:e.jsx(je,{form:`form ${t.id}`,checked:c.value===!0,onCheckedChange:c.onChange})})]})})}):t.isFuelExpense===!0?e.jsx(tt,{}):e.jsx(et,{})}),e.jsxs("td",{children:[e.jsx(A,{content:"Edit",children:e.jsx(v,{disabled:h,variant:s?"default":"outline",size:"icon",className:"size-7.5",onClick:c=>{c.stopPropagation(),a(u=>!u)},children:e.jsx(J,{className:"size-5"})})}),s&&e.jsx(A,{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(ee,{className:"size-5"})})}),e.jsx(ce,{businessTripExpenseId:t.id,businessTripId:n,onChange:r}),e.jsx(de,{businessTripExpenseId:t.id,onDelete:r})]})]},t.id)},en=({data:i,onChange:n})=>{const{carRentalExpenses:r,id:t}=w(Es,i);return r?.length?e.jsx("div",{className:"flex flex-col gap-2 mt-5",children:e.jsxs(se,{highlightOnHover:!0,withBorder:!0,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx(ue,{}),e.jsx("th",{children:"Days"}),e.jsx("th",{children:"Type"}),e.jsx("th",{})]})}),e.jsxs("tbody",{children:[r.sort((s,a)=>s.date&&a.date?s.date<a.date?1:-1:s.date?-1:a.date?1:0).map(s=>e.jsx(Jt,{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})},sn=({data:i,onChange:n})=>{const{flightExpenses:r,id:t,attendees:s}=w(Cs,i);return e.jsx(Ge,{businessTripId:t,attendees:s,expenses:r,onChange:n})},tn="addBusinessTripOtherExpense",nn=()=>{const[{fetching:i},n]=B(As),r=x.useCallback(async t=>{const s='Error adding business trip "other" expense',a=tn;j.loading('Adding trip "other" expense',{id:a});try{const o=await n(t),d=S(o,s,a);if(d)return j.success("Success",{id:a,description:'Business trip "other" expense was added'}),d.addBusinessTripOtherExpense}catch(o){console.error(`${s}: ${o}`),j.error("Error",{id:a,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:i,addBusinessTripOtherExpense:r}};function De(i){const{businessTripId:n,onAdd:r}=i,[t,{close:s,open:a}]=L(!1);return e.jsxs(e.Fragment,{children:[e.jsx(A,{content:"Add Other Expense",children:e.jsx(v,{variant:"outline",size:"icon",className:"size-7.5",onClick:o=>{o.stopPropagation(),a()},children:e.jsx(G,{className:"size-5"})})}),t&&e.jsx(rn,{businessTripId:n,opened:t,close:s,onAdd:r})]})}function rn({businessTripId:i,opened:n,close:r,onAdd:t}){const s=N({defaultValues:{businessTripId:i}}),{control:a,handleSubmit:o}=s,[d,p]=x.useState(!1),{addBusinessTripOtherExpense:m,fetching:h}=nn(),l=c=>{m({fields:c}).then(()=>{t?.(),r()})};return e.jsxs(C,{opened:n,onClose:r,centered:!0,lockScroll:!0,children:[e.jsx(C.Title,{children:"Add Other Expense"}),e.jsx(C.Body,{children:e.jsx(I,{...s,children:e.jsxs("form",{onSubmit:o(l),className:"space-y-3",children:[e.jsx(oe,{businessTripId:i,control:a,setFetching:p}),e.jsx(z,{name:"description",control:a,render:({field:c})=>e.jsxs(P,{children:[e.jsx(X,{children:"Description"}),e.jsx($,{children:e.jsx(Q,{...c,value:c.value??void 0})}),e.jsx(_,{})]})}),e.jsx(z,{control:s.control,name:"deductibleExpense",render:({field:c})=>e.jsxs(P,{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(X,{children:"Deductible Expense"})}),e.jsx($,{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(Y,{blur:1,center:!0,children:e.jsx(Z,{})})]})}const an="updateBusinessTripOtherExpense",on=()=>{const[{fetching:i},n]=B(ws),r=x.useCallback(async t=>{const s='Error updating business trip "other" expense',a=an;j.loading('Updating business trip "other" expense',{id:a});try{const o=await n(t),d=S(o,s,a);if(d)return j.success("Success",{id:a,description:'Business trip "other" expense was updated'}),d.updateBusinessTripOtherExpense}catch(o){console.error(`${s}: ${o}`),j.error("Error",{id:a,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:i,updateBusinessTripOtherExpense:r}},cn=({data:i,businessTripId:n,onChange:r})=>{const t=w(Ds,i),[s,a]=x.useState(!1),o=N({defaultValues:{id:t.id,businessTripId:n}}),{control:d,handleSubmit:p}=o,{updateBusinessTripOtherExpense:m,fetching:h}=on(),l=c=>{m({fields:c}).then(()=>{r?.(),a(!1)})};return e.jsxs("tr",{children:[e.jsx(le,{data:t,isEditMode:s,control:d,businessTripId:n}),e.jsx("td",{children:e.jsx(I,{...o,children:e.jsx("form",{id:`form ${t.id}`,onSubmit:p(l),children:s?e.jsx(z,{name:"description",control:d,defaultValue:t.description,render:({field:c})=>e.jsxs(P,{children:[e.jsx($,{children:e.jsx(Q,{form:`form ${t.id}`,...c,value:c.value??void 0})}),e.jsx(_,{})]})}):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(I,{...o,children:e.jsx(z,{name:"deductibleExpense",control:o.control,defaultValue:t.deductibleExpense,render:({field:c})=>e.jsx(P,{children:e.jsx($,{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(A,{content:"Edit",children:e.jsx(v,{disabled:h,variant:s?"default":"outline",size:"icon",className:"size-7.5",onClick:c=>{c.stopPropagation(),a(u=>!u)},children:e.jsx(J,{className:"size-5"})})}),s&&e.jsx(A,{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(ee,{className:"size-5"})})}),e.jsx(ce,{businessTripExpenseId:t.id,businessTripId:n,onChange:r}),e.jsx(de,{businessTripExpenseId:t.id,onDelete:r})]})]},t.id)},dn=({data:i,onChange:n})=>{const{otherExpenses:r,id:t}=w(Bs,i);return r?.length?e.jsx("div",{className:"flex flex-col gap-2 mt-5",children:e.jsxs(se,{highlightOnHover:!0,withBorder:!0,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx(ue,{}),e.jsx("th",{children:"Description"}),e.jsx("th",{children:"Deductible Expense"}),e.jsx("th",{})]})}),e.jsxs("tbody",{children:[r.sort((s,a)=>s.date&&a.date?s.date<a.date?1:-1:s.date?-1:a.date?1:0).map(s=>e.jsx(cn,{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})},ln="addBusinessTripTravelAndSubsistenceExpense",un=()=>{const[{fetching:i},n]=B(Ss),r=x.useCallback(async t=>{const s="Error adding business trip travel&subsistence expense",a=ln;j.loading("Adding trip travel&subsistence expense",{id:a});try{const o=await n(t),d=S(o,s,a);if(d)return j.success("Success",{id:a,description:"Business trip travel&subsistence expense was added"}),d.addBusinessTripTravelAndSubsistenceExpense}catch(o){console.error(`${s}: ${o}`),j.error("Error",{id:a,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:i,addBusinessTripTravelAndSubsistenceExpense:r}};function Be(i){const{businessTripId:n,onAdd:r}=i,[t,{close:s,open:a}]=L(!1);return e.jsxs(e.Fragment,{children:[e.jsx(A,{content:"Add T&S Expense",children:e.jsx(v,{variant:"outline",size:"icon",className:"size-7.5",onClick:o=>{o.stopPropagation(),a()},children:e.jsx(G,{className:"size-5"})})}),t&&e.jsx(hn,{businessTripId:n,opened:t,close:s,onAdd:r})]})}function hn({businessTripId:i,opened:n,close:r,onAdd:t}){const s=N({defaultValues:{businessTripId:i}}),{control:a,handleSubmit:o}=s,[d,p]=x.useState(!1),{addBusinessTripTravelAndSubsistenceExpense:m,fetching:h}=un(),l=c=>{m({fields:c}).then(()=>{t?.(),r()})};return e.jsxs(C,{opened:n,onClose:r,centered:!0,lockScroll:!0,children:[e.jsx(C.Title,{children:"Add Travel & Subsistence Expense"}),e.jsx(C.Body,{children:e.jsx(I,{...s,children:e.jsxs("form",{onSubmit:o(l),className:"space-y-3",children:[e.jsx(oe,{businessTripId:i,control:a,setFetching:p}),e.jsx(z,{name:"expenseType",control:a,render:({field:c})=>e.jsxs(P,{children:[e.jsx(X,{children:"Expense Type"}),e.jsx($,{children:e.jsx(Q,{...c,value:c.value??void 0})}),e.jsx(_,{})]})}),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(Y,{blur:1,center:!0,children:e.jsx(Z,{})})]})}const xn="updateBusinessTripTravelAndSubsistenceExpense",pn=()=>{const[{fetching:i},n]=B(Is),r=x.useCallback(async t=>{const s="Error updating business trip travel&subsistence expense",a=xn;j.loading("Updating trip travel&subsistence expense",{id:a});try{const o=await n(t),d=S(o,s,a);if(d)return j.success("Success",{id:a,description:"Business trip travel&subsistence expense was updated"}),d.updateBusinessTripTravelAndSubsistenceExpense}catch(o){console.error(`${s}: ${o}`),j.error("Error",{id:a,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:i,updateBusinessTripTravelAndSubsistenceExpense:r}},mn=({data:i,businessTripId:n,onChange:r})=>{const t=w(Ns,i),[s,a]=x.useState(!1),o=N({defaultValues:{id:t.id,businessTripId:n}}),{control:d,handleSubmit:p}=o,{updateBusinessTripTravelAndSubsistenceExpense:m,fetching:h}=pn(),l=c=>{m({fields:c}).then(()=>{r?.(),a(!1)})};return e.jsxs("tr",{children:[e.jsx(le,{data:t,isEditMode:s,control:d,businessTripId:n}),e.jsx("td",{children:e.jsx(I,{...o,children:e.jsx("form",{id:`form ${t.id}`,onSubmit:p(l),children:s?e.jsx(z,{name:"expenseType",control:d,defaultValue:t.expenseType,render:({field:c})=>e.jsxs(P,{children:[e.jsx($,{children:e.jsx(Q,{form:`form ${t.id}`,...c,value:c.value??void 0})}),e.jsx(_,{})]})}):e.jsx(D,{c:t.expenseType?void 0:"red",children:t.expenseType??"Missing"})})})}),e.jsxs("td",{children:[e.jsx(A,{content:"Edit",children:e.jsx(v,{disabled:h,variant:s?"default":"outline",size:"icon",className:"size-7.5",onClick:c=>{c.stopPropagation(),a(u=>!u)},children:e.jsx(J,{className:"size-5"})})}),s&&e.jsx(A,{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(ee,{className:"size-5"})})}),e.jsx(ce,{businessTripExpenseId:t.id,businessTripId:n,onChange:r}),e.jsx(de,{businessTripExpenseId:t.id,onDelete:r})]})]},t.id)},gn=({data:i,onChange:n})=>{const{travelAndSubsistenceExpenses:r,id:t}=w(Fs,i);return r?.length?e.jsx("div",{className:"flex flex-col gap-2 mt-5",children:e.jsxs(se,{highlightOnHover:!0,withBorder:!0,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx(ue,{}),e.jsx("th",{children:"Expense Type"}),e.jsx("th",{})]})}),e.jsxs("tbody",{children:[r.sort((s,a)=>s.date&&a.date?s.date<a.date?1:-1:s.date?-1:a.date?1:0).map(s=>e.jsx(mn,{data:s,businessTripId:t,onChange:n},s.id)),e.jsx("tr",{children:e.jsx("td",{colSpan:6,children:e.jsx(Be,{businessTripId:t,onAdd:n})})})]})]})}):e.jsx(Be,{businessTripId:t,onAdd:n})},jn=({data:i})=>{const n=w(Ms,i),r="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:r&&M(new Date(r),"dd/MM/yy")}),n.sourceEffectiveDate&&e.jsxs("div",{className:"text-xs text-gray-500",children:["(Originally ",M(new Date(n.sourceEffectiveDate),"dd/MM/yy"),")"]})]})})},fn=({data:i})=>{const n=w(zs,i),r="eventDate"in n?n.eventDate:void 0;return e.jsx("td",{children:e.jsx("div",{className:"flex flex-col justify-center",children:r&&M(new Date(r),"dd/MM/yy")})})},vn=({data:i})=>{const n=w(Ps,i),{account:r}=n,t=r.type,s=r.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})]})})},bn=({data:i})=>{const n=w($s,i),r="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:r})})})},yn=({data:i})=>{const n=w(Os,i);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 Tn({data:i,onChange:n,enableEdit:r}){const{id:t,counterparty:s,missingInfoSuggestions:a,id:o,sourceDescription:d}=w(Rs,i),p=!!a?.business&&r,m=p?a?.business?.name:"Missing",h=p?a?.business?.id:null,l=s?.name??m,[c,u]=x.useState(!1),{updateTransaction:g,fetching:f}=Xs(),T=x.useCallback(async V=>{await g({transactionId:o,fields:{counterpartyId:V}}),u(!0)},[o,g]),y=x.useCallback(async V=>{await T(V),n?.()},[T,n]),{selectableBusinesses:O,fetching:K}=Oe(),[F,R]=x.useState(h??null),[k,re]=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(ks,{options:O,value:F,onChange:R,search:k,onSearchChange:re,placeholder:"Choose or create a business",empty:k?e.jsx(Hs,{description:k,onAdd:y}):null}),e.jsx(A,{content:"Approve",children:e.jsx(v,{variant:"outline",size:"icon",onClick:()=>F&&T(F),disabled:f||K||!F,children:e.jsx(ee,{className:"size-4"})})})]})}),e.jsx(Qs,{transactionId:t,counterpartyId:s?.id??F,open:c,onOpenChange:u,onClose:n})]})}const En="categorizeBusinessTripExpense",Cn=()=>{const[{fetching:i},n]=B(_s),r=x.useCallback(async t=>{const s="Error updating business trip expense category",a=En;j.loading("Updating trip expense category",{id:a});try{const o=await n(t),d=S(o,s,a);if(d)return j.success("Success",{id:a,description:"Business trip expense category was updated"}),d.categorizeBusinessTripExpense}catch(o){console.error(`${s}: ${o}`),j.error("Error",{id:a,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:i,categorizeBusinessTripExpense:r}};function An(i){const{businessTripId:n,transactionId:r,onChange:t,defaultAmount:s}=i,[a,{close:o,open:d}]=L(!1);return e.jsxs(e.Fragment,{children:[e.jsx(A,{content:"Categorize",children:e.jsx(v,{variant:"outline",size:"icon",className:"size-7.5",onClick:p=>{p.stopPropagation(),d()},children:e.jsx(J,{className:"size-5"})})}),a&&e.jsx(Dn,{businessTripId:n,transactionId:r,opened:a,close:o,onChange:t,defaultAmount:s})]})}const wn=Object.entries(Vs).map(([i,n])=>({value:n,label:i}));function Dn({businessTripId:i,transactionId:n,defaultAmount:r,opened:t,close:s,onChange:a}){const{control:o,handleSubmit:d}=N({defaultValues:{businessTripId:i,transactionId:n}}),{categorizeBusinessTripExpense:p,fetching:m}=Cn(),h=l=>{p({fields:l}).then(()=>{a?.(),s()})};return e.jsxs(C,{opened:t,onClose:s,centered:!0,children:[e.jsx(C.Title,{children:"Set Expense Category"}),e.jsx(C.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(q,{"data-autofocus":!0,...l,data:wn,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:r,render:({field:l,fieldState:c})=>e.jsx(ae,{...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"})})]})}),m&&e.jsx(Y,{blur:1,center:!0,children:e.jsx(Z,{})})]})}const Bn=({data:i,onChange:n})=>{const{uncategorizedTransactions:r,id:t}=w(Ls,i);return r?.length?e.jsx("div",{className:"flex flex-col gap-2 mt-5",children:e.jsxs(se,{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:r.sort((s,a)=>s.transaction.eventDate.localeCompare(a.transaction.eventDate)).map(s=>e.jsxs("tr",{children:[e.jsx(fn,{data:s.transaction}),e.jsx(jn,{data:s.transaction}),e.jsx(Sn,{data:s}),e.jsx("td",{children:e.jsx(be,{to:ye.CHARGES.DETAIL(s.transaction.chargeId),target:"_blank",rel:"noreferrer",onClick:a=>a.stopPropagation(),className:"inline-flex items-center font-semibold",children:"To Charge"})}),e.jsx(vn,{data:s.transaction}),e.jsx(bn,{data:s.transaction}),e.jsx(yn,{data:s.transaction}),e.jsx(Tn,{data:s.transaction}),e.jsx("td",{children:e.jsx(An,{businessTripId:t,transactionId:s.transaction.id,onChange:n,defaultAmount:s.transaction.amount.raw})})]},s.transaction.id))})]})}):e.jsx(e.Fragment,{})},Sn=({data:i})=>{const{transaction:n,categorizedAmount:r,errors:t}=w(Us,i),s="amount"in n?n.amount:void 0,a=s?.raw!==r.raw&&r.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(In,{errors:t})]}),a&&e.jsxs("div",{className:"text-gray-500 ml-2",children:[r.formatted," categorized "]}),n.cryptoExchangeRate&&e.jsxs("div",{className:"text-gray-500 ml-2",children:[`(Rate: ${n.cryptoExchangeRate.rate})`,e.jsx("br",{}),s?.raw?`${Ws(s.raw*n.cryptoExchangeRate.rate)}$`:null]})]})})},In=({errors:i})=>{const[n,{close:r,open:t}]=L(!1);return e.jsxs(fe,{width:200,position:"bottom",shadow:"md",opened:n,children:[e.jsx(fe.Target,{children:e.jsx(qs,{onMouseEnter:t,onMouseLeave:r})}),e.jsx(fe.Dropdown,{sx:{pointerEvents:"none"},className:"whitespace-normal text-red-500",children:i.map((s,a)=>e.jsx(D,{size:"sm",children:s},a))})]})};function kn({tripId:i,isExtended:n=!1}){const[r,t]=x.useState(),[s,a]=x.useState([]),[{data:o},d]=ne({query:Gs,variables:{businessTripId:i}});function p(h){s.includes(h)?a(l=>l.filter(c=>c!==h)):a(l=>[...l,h])}const m=d;return x.useEffect(()=>{o?.businessTrip&&t(o.businessTrip)},[o?.businessTrip]),e.jsx(He,{shadow:"sm",radius:"md",withBorder:!0,children:r?e.jsxs(e.Fragment,{children:[e.jsx(Ys,{data:r,onChange:m}),e.jsxs(E,{className:"w-full",multiple:!0,value:s,chevron:e.jsx(G,{size:"1rem"}),styles:{chevron:{"&[data-rotate]":{transform:"rotate(45deg)"}}},children:[e.jsxs(E.Item,{value:"attendees",children:[e.jsx(E.Control,{onClick:()=>p("attendees"),children:"Attendees"}),e.jsx(E.Panel,{children:e.jsx(Yt,{data:r,onChange:m})})]}),n&&e.jsxs(E.Item,{value:"uncategorized-transactions",children:[e.jsx(E.Control,{onClick:()=>p("uncategorized-transactions"),disabled:!r.uncategorizedTransactions?.length,children:"Uncategorized Transactions"}),e.jsx(E.Panel,{children:e.jsx(Bn,{data:r,onChange:m})})]}),e.jsxs(E.Item,{value:"flights",children:[e.jsx(E.Control,{onClick:()=>p("flights"),children:"Flights"}),e.jsx(E.Panel,{children:e.jsx(sn,{data:r,onChange:m})})]}),e.jsxs(E.Item,{value:"accommodations",children:[e.jsx(E.Control,{onClick:()=>p("accommodations"),children:"Accommodations"}),e.jsx(E.Panel,{children:e.jsx(It,{data:r,onChange:m})})]}),e.jsxs(E.Item,{value:"travelAndSubsistence",children:[e.jsx(E.Control,{onClick:()=>p("travelAndSubsistence"),children:"Travel & Subsistence"}),e.jsx(E.Panel,{children:e.jsx(gn,{data:r,onChange:m})})]}),e.jsxs(E.Item,{value:"other",children:[e.jsx(E.Control,{onClick:()=>p("other"),children:"Other"}),e.jsx(E.Panel,{children:e.jsx(dn,{data:r,onChange:m})})]}),e.jsxs(E.Item,{value:"carRental",children:[e.jsx(E.Control,{onClick:()=>p("carRental"),children:"Car Rental"}),e.jsx(E.Panel,{children:e.jsx(en,{data:r,onChange:m})})]}),e.jsxs(E.Item,{value:"summary",children:[e.jsx(E.Control,{onClick:()=>p("summary"),children:"Summary"}),e.jsx(E.Panel,{children:e.jsx(Zs,{data:r})})]})]})]}):e.jsx(Se,{className:"h-10 w-10 animate-spin mr-2 self-center"})})}export{lt as C,kn as E,Rn as P};
|
|
1
|
+
import{v as ve,bx as Ye,ch as Ze,r as x,by as Ke,ci as ie,aF as Xe,bz as Qe,cj as Je,ck as es,j as e,B as v,L as Se,g as B,cl as ss,t as j,i as S,H as Ie,u as ne,cm as ge,bD as b,bG as q,cn as ae,co as Ne,aC as ts,bE as U,bF as W,w as M,ay as Fe,cp as Me,l as L,T as A,a3 as G,z as N,n as C,V as I,Y as z,Z as P,_ as X,$,I as Q,a1 as _,b7 as ze,cq as Y,d as Z,cr as ns,cs as rs,ct as is,bu as D,cu as as,bW as Pe,cv as $e,G as w,ai as be,R as ye,cw as os,ah as J,e as ee,cx as cs,cy as ds,cz as ls,cA as us,bC as Oe,cB as hs,cC as xs,cD as ps,cE as Re,cF as ms,cG as gs,cH as js,cI as fs,cJ as vs,cK as bs,at as je,cL as ys,cM as Ts,cN as Es,cO as Cs,cP as As,cQ as ws,cR as Ds,cS as Bs,cT as Ss,cU as Is,cV as Ns,cW as Fs,cX as Ms,cY as zs,cZ as Ps,c_ as $s,c$ as Os,d0 as Rs,d1 as ks,q as Hs,d2 as _s,d3 as Vs,d4 as Ls,d5 as Us,d6 as Ws,d7 as fe,d8 as qs,d9 as Gs}from"./index-BWAOW53d.js";import{L as ke}from"./list-plus-C0XPnNVe.js";import{G as te,L as pe,C as He,R as Ys,A as E,S as Zs}from"./summary-BU7IrLve.js";import{T as se}from"./Table-LzLjpZeA.js";import{T as Ks}from"./toggle-expansion-button-wXVsrHLI.js";import{M as _e}from"./MultiSelect-BLtBUfDG.js";import{u as Xs,S as Qs}from"./similar-transactions-modal--yMHokZr.js";const Js=[["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"}]],et=ve("car",Js);const st=[["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"}]],tt=ve("fuel",st);const nt=[["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"}]],rt=ve("printer",nt);var it=Ye((i,{fluid:n,sizes:r},{size:t})=>({root:{paddingLeft:i.spacing.md,paddingRight:i.spacing.md,maxWidth:n?"100%":Ze({size:t,sizes:r}),marginLeft:"auto",marginRight:"auto"}})),at=Object.defineProperty,me=Object.getOwnPropertySymbols,Ve=Object.prototype.hasOwnProperty,Le=Object.prototype.propertyIsEnumerable,Te=(i,n,r)=>n in i?at(i,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):i[n]=r,ot=(i,n)=>{for(var r in n||(n={}))Ve.call(n,r)&&Te(i,r,n[r]);if(me)for(var r of me(n))Le.call(n,r)&&Te(i,r,n[r]);return i},ct=(i,n)=>{var r={};for(var t in i)Ve.call(i,t)&&n.indexOf(t)<0&&(r[t]=i[t]);if(i!=null&&me)for(var t of me(i))n.indexOf(t)<0&&Le.call(i,t)&&(r[t]=i[t]);return r};const dt={sizes:{xs:ie(540),sm:ie(720),md:ie(960),lg:ie(1140),xl:ie(1320)}},lt=x.forwardRef((i,n)=>{const r=Ke("Container",dt,i),{className:t,fluid:s,size:a,unstyled:o,sizes:d,variant:p}=r,m=ct(r,["className","fluid","size","unstyled","sizes","variant"]),{classes:h,cx:l}=it({fluid:s,sizes:d},{unstyled:o,name:"Container",variant:p,size:a});return Xe.createElement(Qe,ot({className:l(h.root,t),ref:n},m))});lt.displayName="@mantine/core/Container";var H=3.77952755906,he={method:"save",resolution:3,page:{margin:0,format:"A4",orientation:"portrait"},canvas:{mimeType:"image/jpeg",qualityRatio:1,useCORS:!0,logging:!1},overrides:{}},ut=class{pdf;canvas;options;constructor(i,n){this.canvas=i,this.options=n,this.pdf=new es({format:this.options.page.format,orientation:this.options.page.orientation,...this.options.overrides?.pdf,unit:"mm"})}getMarginTopMM(){const i=typeof this.options.page.margin=="object"?this.options.page.margin.top:this.options.page.margin;return Number(i)}getMarginLeftMM(){const i=typeof this.options.page.margin=="object"?this.options.page.margin.left:this.options.page.margin;return Number(i)}getMarginRightMM(){const i=typeof this.options.page.margin=="object"?this.options.page.margin.right:this.options.page.margin;return Number(i)}getMarginBottomMM(){const i=typeof this.options.page.margin=="object"?this.options.page.margin.bottom:this.options.page.margin;return Number(i)}getMarginTop(){return this.getMarginTopMM()*H}getMarginBottom(){return this.getMarginBottomMM()*H}getMarginLeft(){return this.getMarginLeftMM()*H}getMarginRight(){return this.getMarginRightMM()*H}getScale(){return this.options.resolution}getPageHeight(){return this.getPageHeightMM()*H}getPageHeightMM(){return this.pdf.internal.pageSize.height}getPageWidthMM(){return this.pdf.internal.pageSize.width}getPageWidth(){return this.getPageWidthMM()*H}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()/H}getPageAvailableHeightMM(){return this.getPageAvailableHeight()/H}getNumberPages(){return Math.ceil(this.canvas.height/this.getCanvasPageAvailableHeight())}getHorizontalFitFactor(){return this.getPageAvailableWidth()<this.getOriginalCanvasWidth()?this.getOriginalCanvasWidth()/this.getPageAvailableWidth():1}getCanvasOffsetY(i){return this.getCanvasPageAvailableHeight()*(i-1)}getCanvasHeightLeft(i){return this.canvas.height-this.getCanvasOffsetY(i)}getCanvasPageHeight(i){if(this.canvas.height<this.getCanvasPageAvailableHeight())return this.canvas.height;const n=this.getCanvasHeightLeft(i);return n<this.getCanvasPageAvailableHeight()?n:this.getCanvasPageAvailableHeight()}getCanvasPageWidth(){return this.canvas.width}createCanvasPage(i){const n=this.getCanvasPageWidth(),r=this.getCanvasPageHeight(i),t=document.createElement("canvas");return t.setAttribute("width",String(n)),t.setAttribute("height",String(r)),t.getContext("2d").drawImage(this.canvas,0,this.getCanvasOffsetY(i),this.canvas.width,r,0,0,this.canvas.width,r),t}convert(){let i=1;const n=this.getNumberPages();for(;i<=n;){i>1&&this.pdf.addPage(this.options.page.format,this.options.page.orientation);const r=this.createCanvasPage(i),t=r.toDataURL(this.options.canvas.mimeType,this.options.canvas.qualityRatio);this.pdf.setPage(i),this.pdf.addImage({imageData:t,width:r.width/(this.getScale()*H*this.getHorizontalFitFactor()),height:r.height/(this.getScale()*H*this.getHorizontalFitFactor()),x:this.getMarginLeftMM(),y:this.getMarginTopMM()}),i+=1}return this.pdf}},ht=i=>i?{...he,...i,canvas:{...he.canvas,...i.canvas},page:{...he.page,...i.page}}:he,xt=i=>typeof i=="function"?i():i?.current,pt=async(i,n)=>{const r=ht(n),t=xt(i);if(!t){console.error("Unable to get the target element.");return}const s=await Je(t,{useCORS:r.canvas.useCORS,logging:r.canvas.logging,scale:r.resolution,...r.overrides?.canvas}),o=new ut(s,r).convert();switch(r.method){case"build":return o;case"open":return window.open(o.output("bloburl"),"_blank"),o;default:{const d=r.filename??`${new Date().getTime()}.pdf`;return await o.save(d,{returnPromise:!0}),o}}},mt=pt;const gt={method:"open",overrides:{pdf:{compress:!0}}},jt=()=>document.getElementById("main-page"),Rn=({filename:i})=>{const[n,r]=x.useState(!1),t=async()=>{r(!0),await mt(jt,{...gt,filename:i}),r(!1)};return e.jsx(v,{variant:"outline",size:"icon",className:"size-7.5",onClick:t,disabled:n,children:n?e.jsx(Se,{className:"h-10 w-10 animate-spin mr-2 self-center"}):e.jsx(rt,{className:"size-5"})})},ft="addBusinessTripAccommodationsExpense",vt=()=>{const[{fetching:i},n]=B(ss),r=x.useCallback(async t=>{const s="Error adding business trip accommodations expense",a=ft;j.loading("Adding Business Trip Accommodations Expense",{id:a});try{const o=await n(t),d=S(o,s,a);if(d)return j.success("Success",{id:a,description:"Business trip accommodations expense added"}),d.addBusinessTripAccommodationsExpense}catch(o){console.error(`${s}: ${o}`),j.error("Error",{id:a,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:i,addBusinessTripAccommodationsExpense:r}};function Ue({formManager:i,attendeesStayPath:n,attendeesData:r,fetchingAttendees:t=!1,businessTripId:s}){const{control:a,watch:o,trigger:d}=i,{fields:p,append:m,remove:h}=Ie({control:a,name:n}),[l,c]=x.useState(t),[u,g]=x.useState(r??[]),f=o(n),T=p.map((F,R)=>({...F,...f[R]}));x.useEffect(()=>{r&&g(r)},[r]),x.useEffect(()=>{c(t)},[t]);const[{data:y,fetching:O},K]=ne({query:ge,pause:!0,variables:{businessTripId:s??""}});return x.useEffect(()=>{if(y?.businessTrip?.attendees.length){const F=y.businessTrip.attendees.map(R=>({value:R.id,label:R.name}))??[];g(F)}},[y?.businessTrip?.attendees]),x.useEffect(()=>{c(O)},[O]),x.useEffect(()=>{!r&&!y&&!t&&!O&&K({businessTripId:s})},[r,t,O,K,s,y]),!s&&!r?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((F,R)=>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}.${R}.attendeeId`,control:a,rules:{required:"Required"},render:({field:k,fieldState:re})=>e.jsx(q,{...k,disabled:l,data:u,value:k.value??void 0,label:"Attendee",placeholder:"Scroll to see all options",maxDropdownHeight:160,searchable:!0,error:re.error?.message,withinPortal:!0,required:!0})})}),e.jsx("div",{className:"w-full mt-1 relative rounded-md shadow-xs",children:e.jsx(b,{control:a,name:`${n}.${R}.nightsCount`,render:({field:k,fieldState:re})=>e.jsx(ae,{className:"w-full",...k,min:0,label:"Nights Count",value:k.value??void 0,hideControls:!0,precision:0,error:re.error?.message,required:!0,onChange:V=>k.onChange(V&&typeof V=="number"?V:void 0)})})}),e.jsx(v,{variant:"ghost",size:"icon",className:"mb-2 size-7.5",onClick:()=>{h(R),d(n)},children:e.jsx(Ne,{className:"size-5"})})]},F.id)),e.jsx(v,{variant:"ghost",size:"icon",className:"size-7.5",onClick:()=>{m({}),d(n)},children:e.jsx(ke,{className:"size-5"})})]})]})}function oe({businessTripId:i,control:n,setFetching:r}){const[t,s]=x.useState([]),[{data:a,fetching:o,error:d}]=ne({query:ge,variables:{businessTripId:i}}),{userContext:p}=x.useContext(ts);x.useEffect(()=>{a?.businessTrip?.attendees.length&&s(a.businessTrip.attendees.map(h=>({value:h.id,label:h.name})).sort((h,l)=>h.label>l.label?1:-1))},[a,s]),x.useEffect(()=>{r(o)},[r,o]),x.useEffect(()=>{d&&j.error("Error",{description:"Oops, we have an error fetching attendees"})},[d]);const m=x.useMemo(()=>p?.context.ledgerLock,[p]);return e.jsxs(e.Fragment,{children:[e.jsx(b,{name:"date",control:n,rules:{min:m?{value:m,message:`Date must be after ${m}`}:void 0,pattern:{value:U,message:"Date must be im format yyyy-mm-dd"}},render:({field:h,fieldState:l})=>e.jsx(W,{"data-autofocus":!0,...h,onChange:c=>{const u=c?typeof c=="string"?c:M(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:U,message:"Date must be im format yyyy-mm-dd"},min:m?{value:m,message:`Date must be after ${m}`}:void 0},render:({field:h,fieldState:l})=>e.jsx(W,{...h,onChange:c=>{const u=c?typeof c=="string"?c:M(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(q,{...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 Ee(i){const{businessTripId:n,onAdd:r}=i,[t,{close:s,open:a}]=L(!1);return e.jsxs(e.Fragment,{children:[e.jsx(A,{content:"Add Accommodations Expense",children:e.jsx(v,{variant:"outline",size:"icon",className:"size-7.5",onClick:o=>{o.stopPropagation(),a()},children:e.jsx(G,{className:"size-5"})})}),t&&e.jsx(bt,{businessTripId:n,opened:t,close:s,onAdd:r})]})}function bt({businessTripId:i,opened:n,close:r,onAdd:t}){const s=N({defaultValues:{businessTripId:i}}),{control:a,handleSubmit:o}=s,[d,p]=x.useState(!1),{addBusinessTripAccommodationsExpense:m,fetching:h}=vt(),l=c=>{m({fields:c}).then(()=>{t?.(),r()})};return e.jsxs(C,{opened:n,onClose:r,centered:!0,lockScroll:!0,children:[e.jsx(C.Title,{children:"Add Accommodation Expense"}),e.jsx(C.Body,{children:e.jsx(I,{...s,children:e.jsxs("form",{onSubmit:o(l),className:"space-y-3",children:[e.jsx(oe,{businessTripId:i,control:a,setFetching:p}),e.jsx(z,{control:a,name:"country",render:({field:c})=>e.jsxs(P,{children:[e.jsx(X,{children:"Country"}),e.jsx($,{children:e.jsx(Q,{...c,value:c.value??void 0})}),e.jsx(_,{})]})}),e.jsx(z,{name:"nightsCount",control:a,render:({field:c})=>e.jsxs(P,{children:[e.jsx(X,{children:"Nights Count"}),e.jsx($,{children:e.jsx(ze,{...c,value:c.value??void 0,hideControls:!0,decimalScale:0,thousandSeparator:","})}),e.jsx(_,{})]})}),e.jsx(Ue,{formManager:s,attendeesStayPath:"attendeesStay",businessTripId:i}),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(Y,{blur:1,center:!0,children:e.jsx(Z,{})})]})}const yt="updateBusinessTripAccommodationsExpense",Tt=()=>{const[{fetching:i},n]=B(ns),r=x.useCallback(async t=>{const s="Error updating business trip accommodations expense",a=yt;j.loading("Updating trip accommodations expense",{id:a});try{const o=await n(t),d=S(o,s,a);if(d)return j.success("Success",{id:a,description:"Business trip accommodations expense was updated"}),d.updateBusinessTripAccommodationsExpense}catch(o){console.error(`${s}: ${o}`),j.error("Error",{id:a,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:i,updateBusinessTripAccommodationsExpense:r}},Et="categorizeIntoExistingBusinessTripExpense",Ct=()=>{const[{fetching:i},n]=B(rs),r=x.useCallback(async t=>{const s="Error updating business trip expense category",a=Et;j.loading("Updating business trip expense category",{id:a});try{const o=await n(t),d=S(o,s,a);if(d)return j.success("Success",{id:a,description:"Business trip expense category was updated"}),d.categorizeIntoExistingBusinessTripExpense}catch(o){console.error(`${s}: ${o}`),j.error("Error",{id:a,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:i,categorizeIntoExistingBusinessTripExpense:r}};function ce(i){const{businessTripExpenseId:n,businessTripId:r,onChange:t}=i,[s,{close:a,open:o}]=L(!1);return e.jsxs(e.Fragment,{children:[e.jsx(A,{content:"Attach Uncategorized Transaction",children:e.jsx(v,{variant:"outline",size:"icon",className:"size-7.5",onClick:d=>{d.stopPropagation(),o()},children:e.jsx(G,{className:"size-5"})})}),s&&e.jsx(At,{businessTripExpenseId:n,businessTripId:r,opened:s,close:a,onChange:t})]})}function At({businessTripExpenseId:i,businessTripId:n,opened:r,close:t,onChange:s}){const{control:a,handleSubmit:o,setValue:d}=N({defaultValues:{businessTripExpenseId:i}}),[p,m]=x.useState([]),[{data:h,fetching:l,error:c}]=ne({query:is,variables:{businessTripId:n}}),{categorizeIntoExistingBusinessTripExpense:u,fetching:g}=Ct(),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);m(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,O)=>y.eventDate.localeCompare(O.eventDate)))}},[h,m]),x.useEffect(()=>{c&&j.error("Error",{description:"Oops, we have an error fetching transactions to categorize"})},[c]),e.jsxs(C,{opened:r,onClose:t,centered:!0,children:[e.jsx(C.Title,{children:"Set Transaction Category"}),e.jsx(C.Body,{children:e.jsxs("form",{onSubmit:o(f),className:"flex flex-col gap-3 mt-3",children:[e.jsx(b,{name:"transactionId",control:a,render:({field:T,fieldState:y})=>e.jsx(q,{...T,itemComponent:wt,data:p??[],disabled:l,label:"Transactions",placeholder:"Scroll to see all options",maxDropdownHeight:160,error:y.error?.message,withAsterisk:!0,withinPortal:!0,onChange:O=>{const K=p.find(F=>F.value===O);K?.rawAmount&&d("amount",K.rawAmount),T.onChange(O)}})}),e.jsx(b,{name:"amount",control:a,render:({field:T,fieldState:y})=>e.jsx(ae,{...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"})})]})}),g&&e.jsx(Y,{blur:1,center:!0,children:e.jsx(Z,{})})]})}const wt=x.forwardRef(({eventDate:i,sourceDescription:n,referenceKey:r,counterparty:t,amount:s,...a},o)=>e.jsx("div",{ref:o,...a,children:e.jsxs(te,{children:[e.jsx(te.Col,{span:4,children:i}),e.jsx(te.Col,{span:4,children:e.jsx(D,{size:"sm",children:t})}),e.jsx(te.Col,{span:4,children:e.jsx(D,{size:"sm",children:s})}),e.jsx(te.Col,{span:8,children:e.jsx(D,{size:"xs",opacity:.65,children:n})}),e.jsxs(te.Col,{span:4,children:["Reference: ",r]})]})})),Dt="deleteBusinessTripExpense",Bt=()=>{const[{fetching:i},n]=B(as),r=x.useCallback(async t=>{const s="Error deleting business trip expense",a=`${Dt}-${t.businessTripExpenseId}`;j.loading("Deleting trip expense",{id:a});try{const o=await n(t),d=S(o,s,a);if(d)return j.success("Success",{id:a,description:"Business trip expense was deleted"}),d.deleteBusinessTripExpense}catch(o){console.error(`${s}: ${o}`),j.error("Error",{id:a,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:i,deleteBusinessTripExpense:r}};function de(i){const{fetching:n,deleteBusinessTripExpense:r}=Bt(),t=x.useCallback(()=>{r({businessTripExpenseId:i.businessTripExpenseId}).then(()=>{i.onDelete?.()})},[i,r]);return e.jsx(A,{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 le=({data:i,isEditMode:n=!1,control:r,businessTripId:t})=>{const s=w(os,i),[a,o]=x.useState([]),[{data:d,fetching:p,error:m}]=ne({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(()=>{m&&j.error("Error",{description:"Oops, we have an error fetching attendees"})},[m]);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:r,defaultValue:s.date,rules:{pattern:{value:U,message:"Date must be im format yyyy-mm-dd"}},render:({field:l,fieldState:c})=>e.jsx(W,{...l,form:`form ${s.id}`,"data-autofocus":!0,onChange:u=>{const g=u?typeof u=="string"?u:M(u,"yyyy-MM-dd"):void 0;g!==l.value&&l.onChange(g)},value:l.value?new Date(l.value):void 0,label:"Date",error:c.error?.message,popoverProps:{withinPortal:!0}})}),e.jsx(b,{name:"valueDate",control:r,defaultValue:s.valueDate,rules:{pattern:{value:U,message:"Date must be im format yyyy-mm-dd"}},render:({field:l,fieldState:c})=>e.jsx(W,{...l,form:`form ${s.id}`,onChange:u=>{const g=u?typeof u=="string"?u:M(u,"yyyy-MM-dd"):void 0;g!==l.value&&l.onChange(g)},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&&M(new Date(s.date),"dd/MM/yy"),e.jsx(D,{fz:"sm",c:"dimmed",children:s.valueDate&&M(new Date(s.valueDate),"dd/MM/yy")})]})})}),e.jsx("td",{children:n&&s.payedByEmployee?e.jsx(b,{name:"amount",control:r,defaultValue:s.amount?.raw??void 0,render:({field:l,fieldState:c})=>e.jsx(b,{name:"currency",control:r,defaultValue:s.amount?.currency??Fe.Ils,render:({field:u,fieldState:g})=>e.jsx(Me,{form:`form ${s.id}`,...l,value:l.value??void 0,error:c.error?.message||g.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:r,defaultValue:s.employee?.id,render:({field:l,fieldState:c})=>e.jsx(q,{form:`form ${s.id}`,...l,data:a,value:l.value,disabled:p,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))})})]})},ue=()=>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"})]}),St=({data:i,businessTripId:n,onChange:r})=>{const t=w(cs,i),[s,a]=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:p}=o,{updateBusinessTripAccommodationsExpense:m,fetching:h}=Tt(),l=c=>{m({fields:c}).then(()=>{r?.(),a(!1)})};return e.jsxs("tr",{children:[e.jsx(le,{data:t,isEditMode:s,control:d,businessTripId:n}),e.jsx("td",{children:e.jsx(I,{...o,children:e.jsx("form",{id:`form ${t.id}`,onSubmit:p(l),children:s?e.jsx(z,{name:"country",control:d,defaultValue:t.country,render:({field:c})=>e.jsxs(P,{children:[e.jsx($,{children:e.jsx(Q,{form:`form ${t.id}`,...c,value:c.value??void 0})}),e.jsx(_,{})]})}):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(I,{...o,children:e.jsx(z,{name:"nightsCount",control:d,defaultValue:t.nightsCount,render:({field:c})=>e.jsxs(P,{children:[e.jsx($,{children:e.jsx(ze,{...c,value:c.value??void 0,form:`form ${t.id}`,hideControls:!0,decimalScale:0,thousandSeparator:","})}),e.jsx(_,{})]})})}):e.jsx(D,{c:t.nightsCount?void 0:"red",children:t.nightsCount??"Missing"})})}),e.jsx("td",{children:s?e.jsx(I,{...o,children:e.jsx(Ue,{formManager:o,attendeesStayPath:"attendeesStay",businessTripId:n})}):e.jsx(pe,{listStyleType:"disc",children:t.attendeesStay?.length?t.attendeesStay.map(c=>e.jsxs(pe.Item,{children:[c.attendee.name," (",c.nightsCount,")"]},c.id)):e.jsx(D,{c:"red",fz:"sm",children:"Missing"})})}),e.jsx("td",{children:r&&e.jsxs(e.Fragment,{children:[e.jsx(A,{content:"Edit",children:e.jsx(v,{disabled:h,variant:s?"default":"outline",size:"icon",className:"size-7.5",onClick:c=>{c.stopPropagation(),a(u=>!u)},children:e.jsx(J,{className:"size-5"})})}),s&&e.jsx(A,{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(ee,{className:"size-5"})})}),e.jsx(ce,{businessTripExpenseId:t.id,businessTripId:n,onChange:r}),e.jsx(de,{businessTripExpenseId:t.id,onDelete:r})]})})]},t.id)},We=({businessTripId:i,expenses:n,onChange:r})=>{if(!n?.length)return r?e.jsx(Ee,{businessTripId:i,onAdd:r}):e.jsx(e.Fragment,{});const t=n.map(s=>w(ds,s));return e.jsx("div",{className:"flex flex-col gap-2 mt-5",children:e.jsxs(se,{highlightOnHover:!0,withBorder:!0,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx(ue,{}),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,a)=>s.date&&a.date?s.date<a.date?1:-1:s.date?-1:a.date?1:0).map(s=>e.jsx(St,{data:s,businessTripId:i,onChange:r},s.id)),r&&e.jsx("tr",{children:e.jsx("td",{colSpan:6,children:e.jsx(Ee,{businessTripId:i,onAdd:r})})})]})]})})},It=({data:i,onChange:n})=>{const{accommodationExpenses:r,id:t}=w(ls,i);return e.jsx(We,{businessTripId:t,expenses:r,onChange:n})},Nt="insertBusinessTripAttendee",Ft=()=>{const[{fetching:i},n]=B(us),r=x.useCallback(async t=>{const s="Error adding attendee to business trip",a=Nt;j.loading("Adding attendee",{id:a});try{const o=await n(t),d=S(o,s,a);if(d)return j.success("Success",{id:a,description:"Attendee was added to the business trip"}),d.insertBusinessTripAttendee}catch(o){console.error(`${s}: ${o}`),j.error("Error",{id:a,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:i,insertBusinessTripAttendee:r}};function Ce(i){const{businessTripId:n,onAdd:r}=i,[t,{close:s,open:a}]=L(!1);return e.jsxs(e.Fragment,{children:[e.jsx(A,{content:"Add Attendee",children:e.jsx(v,{variant:"outline",size:"icon",onClick:o=>{o.stopPropagation(),a()},className:"size-7.5",children:e.jsx(G,{className:"size-5"})})}),t&&e.jsx(Mt,{businessTripId:n,opened:t,close:s,onAdd:r})]})}function Mt({businessTripId:i,opened:n,close:r,onAdd:t}){const{selectableBusinesses:s,fetching:a}=Oe(),{control:o,handleSubmit:d}=N({defaultValues:{businessTripId:i}}),{insertBusinessTripAttendee:p,fetching:m}=Ft(),h=l=>{p({fields:l}).then(()=>{t?.(),r()})};return e.jsxs(C,{opened:n,onClose:r,centered:!0,children:[e.jsx(C.Title,{children:"Add Attendee"}),e.jsx(C.Body,{children:e.jsxs("form",{onSubmit:d(h),children:[e.jsx(b,{name:"attendeeId",control:o,render:({field:l,fieldState:c})=>e.jsx(q,{"data-autofocus":!0,...l,data:s,value:l.value,disabled:a,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:U,message:"Date must be im format yyyy-mm-dd"}},render:({field:l,fieldState:c})=>e.jsx(W,{...l,onChange:u=>{const g=u?typeof u=="string"?u:M(u,"yyyy-MM-dd"):void 0;g!==l.value&&l.onChange(g)},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:U,message:"Date must be im format yyyy-mm-dd"}},render:({field:l,fieldState:c})=>e.jsx(W,{...l,onChange:u=>{const g=u?typeof u=="string"?u:M(u,"yyyy-MM-dd"):void 0;g!==l.value&&l.onChange(g)},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"})})]})}),(m||a)&&e.jsx(Y,{blur:1,center:!0,children:e.jsx(Z,{})})]})}const zt="updateBusinessTripAttendee",Pt=()=>{const[{fetching:i},n]=B(hs),r=x.useCallback(async t=>{const s="Error updating business trip attendee",a=zt;j.loading("Updating trip attendee",{id:a});try{const o=await n(t),d=S(o,s,a);if(d)return j.success("Success",{id:a,description:"Business trip attendee was updated"}),d.updateBusinessTripAttendee}catch(o){console.error(`${s}: ${o}`),j.error("Error",{id:a,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:i,updateBusinessTripAttendee:r}},$t="deleteBusinessTripAttendee",Ot=()=>{const[{fetching:i},n]=B(xs),r=x.useCallback(async t=>{const s="Error removing business trip attendee",a=$t;j.loading("Removing business trip attendee",{id:a});try{const o=await n(t),d=S(o,s,a);if(d)return j.success("Success",{id:a,description:"Business trip attendee was removed"}),d.deleteBusinessTripAttendee}catch(o){console.error(`${s}: ${o}`),j.error("Error",{id:a,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:i,deleteBusinessTripAttendee:r}};function Rt(i){const{fetching:n,deleteBusinessTripAttendee:r}=Ot(),t=x.useCallback(()=>{r({fields:{businessTripId:i.businessTripId,attendeeId:i.attendeeId}}).then(()=>{i.onDelete?.()})},[i,r]);return e.jsx(A,{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 kt="addBusinessTripFlightsExpense",Ht=()=>{const[{fetching:i},n]=B(ps),r=x.useCallback(async t=>{const s="Error adding business trip flight expense",a=kt;j.loading("Adding business trip flight expense",{id:a});try{const o=await n(t),d=S(o,s,a);if(d)return j.success("Success",{id:a,description:"Business trip flight expense added"}),d.addBusinessTripFlightsExpense}catch(o){console.error(`${s}: ${o}`),j.error("Error",{id:a,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:i,addBusinessTripFlightsExpense:r}};function qe({formManager:i,flightPathPath:n,flightPathData:r}){const{control:t,watch:s,trigger:a}=i,{fields:o,append:d,remove:p}=Ie({control:t,name:n}),m=s(n),h=o.map((l,c)=>({...l,...m[c]}));return r?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(z,{name:`${n}.${c}`,control:t,rules:{required:"Required"},render:({field:u})=>e.jsxs(P,{children:[e.jsx($,{children:e.jsx(Q,{...u,value:u.value??void 0,placeholder:"Destination"})}),e.jsx(_,{})]})})}),e.jsx(v,{variant:"ghost",size:"icon",className:"mb-2 size-7.5",onClick:()=>{p(c),a(n)},children:e.jsx(Ne,{className:"size-5"})})]},l.id)),e.jsx(v,{variant:"ghost",size:"icon",className:"size-7.5",onClick:()=>{d(""),a(n)},children:e.jsx(ke,{className:"size-5"})})]})]}):e.jsx("div",{children:"Cannot edit flight path stay, lacking some mandatory information!"})}function Ae(i){const{businessTripId:n,onAdd:r}=i,[t,{close:s,open:a}]=L(!1);return e.jsxs(e.Fragment,{children:[e.jsx(A,{content:"Add Flight Expense",children:e.jsx(v,{variant:"outline",size:"icon",className:"size-7.5",onClick:o=>{o.stopPropagation(),a()},children:e.jsx(G,{className:"size-5"})})}),t&&e.jsx(Vt,{businessTripId:n,opened:t,close:s,onAdd:r})]})}const _t=Object.entries(Re).map(([i,n])=>({value:n,label:i}));function Vt({businessTripId:i,opened:n,close:r,onAdd:t}){const s=N({defaultValues:{businessTripId:i}}),{control:a,handleSubmit:o}=s,[d,p]=x.useState(!1),[{data:m,fetching:h}]=ne({query:ge,variables:{businessTripId:i}}),{addBusinessTripFlightsExpense:l,fetching:c}=Ht(),u=f=>{l({fields:f}).then(()=>{t?.(),r()})},g=m?.businessTrip?.attendees.map(f=>({value:f.id,label:f.name}))??[];return e.jsxs(C,{opened:n,onClose:r,centered:!0,lockScroll:!0,children:[e.jsx(C.Title,{children:"Add Flight Expense"}),e.jsx(C.Body,{children:e.jsx(I,{...s,children:e.jsxs("form",{onSubmit:o(u),children:[e.jsx(oe,{businessTripId:i,control:a,setFetching:p}),e.jsx(qe,{formManager:s,flightPathPath:"path"}),e.jsx(b,{name:"flightClass",control:a,render:({field:f,fieldState:T})=>e.jsx(q,{...f,data:_t,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:a,render:({field:f,fieldState:T})=>e.jsx(_e,{...f,disabled:h,data:g,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(Y,{blur:1,center:!0,children:e.jsx(Z,{})})]})}const Lt="updateBusinessTripFlightsExpense",Ut=()=>{const[{fetching:i},n]=B(ms),r=x.useCallback(async t=>{const s="Error updating business trip flights expense",a=Lt;j.loading("Updating trip flights expense",{id:a});try{const o=await n(t),d=S(o,s,a);if(d)return j.success("Success",{id:a,description:"Business trip flights expense was updated"}),d.updateBusinessTripFlightsExpense}catch(o){console.error(`${s}: ${o}`),j.error("Error",{id:a,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:i,updateBusinessTripFlightsExpense:r}},Wt=Object.entries(Re).map(([i,n])=>({value:n,label:i})),qt=({data:i,businessTripId:n,onChange:r,attendees:t})=>{const s=w(gs,i),[a,o]=x.useState(!1),d=N({defaultValues:{id:s.id,businessTripId:n,attendeeIds:s.attendees?.map(g=>g.id)??[],path:s.path??[]}}),{control:p,handleSubmit:m}=d,{updateBusinessTripFlightsExpense:h,fetching:l}=Ut(),c=g=>{h({fields:g}).then(()=>{r?.(),o(!1)})},u=t.map(g=>({value:g.id,label:g.name}));return e.jsxs("tr",{children:[e.jsx(le,{data:s,isEditMode:a,control:p,businessTripId:n}),e.jsx("td",{children:e.jsx(I,{...d,children:e.jsx("form",{id:`form ${s.id}`,onSubmit:m(c),children:e.jsxs("div",{className:"flex flex-col gap-2 justify-center",children:[a?e.jsx(qe,{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((g,f)=>e.jsxs(e.Fragment,{children:[e.jsx(D,{fw:700,children:g},f),f<s.path.length-1&&(g===s.path[f+1]?" | ":" → ")]})):e.jsx(D,{fw:700,className:"flex gap-2 items-center",c:"red",children:"Missing"})}),a?e.jsx(b,{name:"flightClass",control:p,defaultValue:s.class??void 0,render:({field:g,fieldState:f})=>e.jsx(q,{form:`form ${s.id}`,"data-autofocus":!0,...g,data:Wt,value:g.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:a?e.jsx(b,{name:"attendeeIds",control:p,defaultValue:s.attendees?.map(g=>g.id)??void 0,render:({field:g,fieldState:f})=>e.jsx(_e,{...g,form:`form ${s.id}`,data:u,value:g.value??[],label:"Attendees",placeholder:"Scroll to see all options",maxDropdownHeight:160,searchable:!0,error:f.error?.message,withinPortal:!0})}):e.jsx(pe,{listStyleType:"disc",children:s.attendees?.length?s.attendees.map(g=>e.jsx(pe.Item,{children:g.name},g.id)):e.jsx(D,{c:"red",fz:"sm",children:"Missing"})})}),e.jsx("td",{children:r&&e.jsxs(e.Fragment,{children:[e.jsx(A,{content:"Edit",children:e.jsx(v,{disabled:l,variant:a?"default":"outline",size:"icon",className:"size-7.5",onClick:g=>{g.stopPropagation(),o(f=>!f)},children:e.jsx(J,{className:"size-5"})})}),a&&e.jsx(A,{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(ee,{className:"size-5"})})}),e.jsx(ce,{businessTripExpenseId:s.id,businessTripId:n,onChange:r}),e.jsx(de,{businessTripExpenseId:s.id,onDelete:r})]})})]},s.id)},Ge=({businessTripId:i,expenses:n,attendees:r,onChange:t})=>{if(!n?.length)return t?e.jsx(Ae,{businessTripId:i,onAdd:t}):e.jsx(e.Fragment,{});const s=n.map(a=>w(js,a));return e.jsx("div",{className:"flex flex-col gap-2 mt-5",children:e.jsxs(se,{highlightOnHover:!0,withBorder:!0,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx(ue,{}),e.jsx("th",{children:"Flight"}),e.jsx("th",{children:"Attendees"}),e.jsx("th",{})]})}),e.jsxs("tbody",{children:[s.sort((a,o)=>a.date&&o.date?a.date<o.date?1:-1:a.date?-1:o.date?1:0).map(a=>e.jsx(qt,{data:a,businessTripId:i,onChange:t,attendees:r},a.id)),t&&e.jsx("tr",{children:e.jsx("td",{colSpan:5,children:e.jsx(Ae,{businessTripId:i,onAdd:t})})})]})]})})},Gt=({data:i,businessTripId:n,onChange:r})=>{const t=w(fs,i),[s,a]=x.useState(!1),[o,d]=x.useState(!1),{control:p,handleSubmit:m}=N({defaultValues:{businessTripId:n,attendeeId:t.id,arrivalDate:t.arrivalDate,departureDate:t.departureDate}}),{updateBusinessTripAttendee:h,fetching:l}=Pt(),c=u=>{h({fields:u}).then(()=>{r?.(),a(!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:m(c),children:e.jsx(b,{name:"arrivalDate",control:p,defaultValue:t.arrivalDate,rules:{pattern:{value:U,message:"Date must be im format yyyy-mm-dd"}},render:({field:u,fieldState:g})=>e.jsx(W,{...u,onChange:f=>{const T=f?typeof f=="string"?f:M(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:g.error?.message,label:"Arrival",popoverProps:{withinPortal:!0}})})}):t.arrivalDate}),e.jsx("td",{children:s?e.jsx(b,{name:"departureDate",control:p,defaultValue:t.departureDate,rules:{pattern:{value:U,message:"Date must be im format yyyy-mm-dd"}},render:({field:u,fieldState:g})=>e.jsx(W,{...u,onChange:f=>{const T=f?typeof f=="string"?f:M(f,"yyyy-MM-dd"):void 0;T!==u.value&&u.onChange(T)},value:u.value?new Date(u.value):void 0,error:g.error?.message,label:"Departure",popoverProps:{withinPortal:!0}})}):t.departureDate}),e.jsxs("td",{className:"flex items-center gap-2",children:[e.jsx(A,{content:"Edit",children:e.jsx(v,{disabled:l,variant:s?"default":"outline",size:"icon",className:"size-7.5",onClick:u=>{u.stopPropagation(),a(g=>!g)},children:e.jsx(J,{className:"size-5"})})}),s&&e.jsx(A,{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(ee,{className:"size-5"})})}),e.jsx(Rt,{businessTripId:n,attendeeId:t.id,onDelete:r}),e.jsx(Ks,{toggleExpansion:d,isExpanded:o})]})]},t.id),o&&e.jsx("tr",{children:e.jsx("td",{colSpan:4,children:e.jsx(He,{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(Ge,{businessTripId:n,attendees:[],expenses:t.flights})]}),t.accommodations&&e.jsxs(e.Fragment,{children:[e.jsx("div",{children:"Accommodations:"}),e.jsx(We,{businessTripId:n,expenses:t.accommodations})]})]})})})},`${t.id}-expension`)]})},Yt=({data:i,onChange:n})=>{const{attendees:r,id:t}=w(vs,i);return r?.length?e.jsx("div",{className:"flex flex-col gap-2 mt-5",children:e.jsxs(se,{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:[r.sort((s,a)=>s.name.toLocaleLowerCase()>a.name.toLocaleLowerCase()?1:-1).map(s=>e.jsx(Gt,{data:s,businessTripId:t,onChange:n},s.id)),e.jsx("tr",{children:e.jsx("td",{colSpan:4,children:e.jsx(Ce,{businessTripId:t,onAdd:n})})})]})]})}):e.jsx(Ce,{businessTripId:t,onAdd:n})},xe="addBusinessTripCarRentalExpense",Zt=()=>{const[{fetching:i},n]=B(bs),r=x.useCallback(async t=>{const s="Error adding business trip car rental expense";j.loading("Adding car rental expense...",{id:xe});try{const a=await n(t),o=S(a,s,xe);if(o)return j.success("Success",{id:xe,description:"Car rental expense added"}),o.addBusinessTripCarRentalExpense}catch(a){console.error(`${s}: ${a}`),j.error("Error",{id:xe,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:i,addBusinessTripCarRentalExpense:r}};function we(i){const{businessTripId:n,onAdd:r}=i,[t,{close:s,open:a}]=L(!1);return e.jsxs(e.Fragment,{children:[e.jsx(A,{content:"Add Car Rental Expense",children:e.jsx(v,{variant:"outline",size:"icon",onClick:o=>{o.stopPropagation(),a()},className:"size-7.5",children:e.jsx(G,{className:"size-5"})})}),t&&e.jsx(Kt,{businessTripId:n,opened:t,close:s,onAdd:r})]})}function Kt({businessTripId:i,opened:n,close:r,onAdd:t}){const s=N({defaultValues:{businessTripId:i}}),{control:a,handleSubmit:o}=s,[d,p]=x.useState(!1),{addBusinessTripCarRentalExpense:m,fetching:h}=Zt(),l=c=>{m({fields:c}).then(()=>{t?.(),r()})};return e.jsxs(C,{opened:n,onClose:r,centered:!0,lockScroll:!0,children:[e.jsx(C.Title,{children:"Add Car Rental Expense"}),e.jsx(C.Body,{children:e.jsx(I,{...s,children:e.jsxs("form",{onSubmit:o(l),children:[e.jsx(oe,{businessTripId:i,control:a,setFetching:p}),e.jsx(b,{name:"days",control:a,render:({field:c,fieldState:u})=>e.jsx(ae,{...c,value:c.value??void 0,hideControls:!0,precision:2,removeTrailingZeros:!0,error:u.error?.message,label:"Rent Days"})}),e.jsx(z,{name:"isFuelExpense",control:a,render:({field:{value:c,...u}})=>e.jsxs(P,{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(X,{children:"Is Fuel Expense"})}),e.jsx($,{children:e.jsx(je,{...u,checked:c===!0,onCheckedChange:u.onChange})}),e.jsx(_,{})]})}),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(Y,{blur:1,center:!0,children:e.jsx(Z,{})})]})}const Xt="updateBusinessTripCarRentalExpense",Qt=()=>{const[{fetching:i},n]=B(ys),r=x.useCallback(async t=>{const s="Error updating business trip car rental expense",a=Xt;j.loading("Updating trip car rental expense",{id:a});try{const o=await n(t),d=S(o,s,a);if(d)return j.success("Success",{id:a,description:"Business trip car rental expense was updated"}),d.updateBusinessTripCarRentalExpense}catch(o){console.error(`${s}: ${o}`),j.error("Error",{id:a,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:i,updateBusinessTripCarRentalExpense:r}},Jt=({data:i,businessTripId:n,onChange:r})=>{const t=w(Ts,i),[s,a]=x.useState(!1),o=N({defaultValues:{id:t.id,businessTripId:n}}),{control:d,handleSubmit:p}=o,{updateBusinessTripCarRentalExpense:m,fetching:h}=Qt(),l=c=>{m({fields:c}).then(()=>{r?.(),a(!1)})};return e.jsxs("tr",{children:[e.jsx(le,{data:t,isEditMode:s,control:d,businessTripId:n}),e.jsx("td",{children:e.jsx(I,{...o,children:e.jsx("form",{id:`form ${t.id}`,onSubmit:p(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(ae,{...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(I,{...o,children:e.jsx(z,{name:"isFuelExpense",control:d,defaultValue:t.isFuelExpense,render:({field:c})=>e.jsxs(P,{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(X,{children:"Is Fuel Expense"})}),e.jsx($,{children:e.jsx(je,{form:`form ${t.id}`,checked:c.value===!0,onCheckedChange:c.onChange})})]})})}):t.isFuelExpense===!0?e.jsx(tt,{}):e.jsx(et,{})}),e.jsxs("td",{children:[e.jsx(A,{content:"Edit",children:e.jsx(v,{disabled:h,variant:s?"default":"outline",size:"icon",className:"size-7.5",onClick:c=>{c.stopPropagation(),a(u=>!u)},children:e.jsx(J,{className:"size-5"})})}),s&&e.jsx(A,{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(ee,{className:"size-5"})})}),e.jsx(ce,{businessTripExpenseId:t.id,businessTripId:n,onChange:r}),e.jsx(de,{businessTripExpenseId:t.id,onDelete:r})]})]},t.id)},en=({data:i,onChange:n})=>{const{carRentalExpenses:r,id:t}=w(Es,i);return r?.length?e.jsx("div",{className:"flex flex-col gap-2 mt-5",children:e.jsxs(se,{highlightOnHover:!0,withBorder:!0,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx(ue,{}),e.jsx("th",{children:"Days"}),e.jsx("th",{children:"Type"}),e.jsx("th",{})]})}),e.jsxs("tbody",{children:[r.sort((s,a)=>s.date&&a.date?s.date<a.date?1:-1:s.date?-1:a.date?1:0).map(s=>e.jsx(Jt,{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})},sn=({data:i,onChange:n})=>{const{flightExpenses:r,id:t,attendees:s}=w(Cs,i);return e.jsx(Ge,{businessTripId:t,attendees:s,expenses:r,onChange:n})},tn="addBusinessTripOtherExpense",nn=()=>{const[{fetching:i},n]=B(As),r=x.useCallback(async t=>{const s='Error adding business trip "other" expense',a=tn;j.loading('Adding trip "other" expense',{id:a});try{const o=await n(t),d=S(o,s,a);if(d)return j.success("Success",{id:a,description:'Business trip "other" expense was added'}),d.addBusinessTripOtherExpense}catch(o){console.error(`${s}: ${o}`),j.error("Error",{id:a,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:i,addBusinessTripOtherExpense:r}};function De(i){const{businessTripId:n,onAdd:r}=i,[t,{close:s,open:a}]=L(!1);return e.jsxs(e.Fragment,{children:[e.jsx(A,{content:"Add Other Expense",children:e.jsx(v,{variant:"outline",size:"icon",className:"size-7.5",onClick:o=>{o.stopPropagation(),a()},children:e.jsx(G,{className:"size-5"})})}),t&&e.jsx(rn,{businessTripId:n,opened:t,close:s,onAdd:r})]})}function rn({businessTripId:i,opened:n,close:r,onAdd:t}){const s=N({defaultValues:{businessTripId:i}}),{control:a,handleSubmit:o}=s,[d,p]=x.useState(!1),{addBusinessTripOtherExpense:m,fetching:h}=nn(),l=c=>{m({fields:c}).then(()=>{t?.(),r()})};return e.jsxs(C,{opened:n,onClose:r,centered:!0,lockScroll:!0,children:[e.jsx(C.Title,{children:"Add Other Expense"}),e.jsx(C.Body,{children:e.jsx(I,{...s,children:e.jsxs("form",{onSubmit:o(l),className:"space-y-3",children:[e.jsx(oe,{businessTripId:i,control:a,setFetching:p}),e.jsx(z,{name:"description",control:a,render:({field:c})=>e.jsxs(P,{children:[e.jsx(X,{children:"Description"}),e.jsx($,{children:e.jsx(Q,{...c,value:c.value??void 0})}),e.jsx(_,{})]})}),e.jsx(z,{control:s.control,name:"deductibleExpense",render:({field:c})=>e.jsxs(P,{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(X,{children:"Deductible Expense"})}),e.jsx($,{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(Y,{blur:1,center:!0,children:e.jsx(Z,{})})]})}const an="updateBusinessTripOtherExpense",on=()=>{const[{fetching:i},n]=B(ws),r=x.useCallback(async t=>{const s='Error updating business trip "other" expense',a=an;j.loading('Updating business trip "other" expense',{id:a});try{const o=await n(t),d=S(o,s,a);if(d)return j.success("Success",{id:a,description:'Business trip "other" expense was updated'}),d.updateBusinessTripOtherExpense}catch(o){console.error(`${s}: ${o}`),j.error("Error",{id:a,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:i,updateBusinessTripOtherExpense:r}},cn=({data:i,businessTripId:n,onChange:r})=>{const t=w(Ds,i),[s,a]=x.useState(!1),o=N({defaultValues:{id:t.id,businessTripId:n}}),{control:d,handleSubmit:p}=o,{updateBusinessTripOtherExpense:m,fetching:h}=on(),l=c=>{m({fields:c}).then(()=>{r?.(),a(!1)})};return e.jsxs("tr",{children:[e.jsx(le,{data:t,isEditMode:s,control:d,businessTripId:n}),e.jsx("td",{children:e.jsx(I,{...o,children:e.jsx("form",{id:`form ${t.id}`,onSubmit:p(l),children:s?e.jsx(z,{name:"description",control:d,defaultValue:t.description,render:({field:c})=>e.jsxs(P,{children:[e.jsx($,{children:e.jsx(Q,{form:`form ${t.id}`,...c,value:c.value??void 0})}),e.jsx(_,{})]})}):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(I,{...o,children:e.jsx(z,{name:"deductibleExpense",control:o.control,defaultValue:t.deductibleExpense,render:({field:c})=>e.jsx(P,{children:e.jsx($,{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(A,{content:"Edit",children:e.jsx(v,{disabled:h,variant:s?"default":"outline",size:"icon",className:"size-7.5",onClick:c=>{c.stopPropagation(),a(u=>!u)},children:e.jsx(J,{className:"size-5"})})}),s&&e.jsx(A,{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(ee,{className:"size-5"})})}),e.jsx(ce,{businessTripExpenseId:t.id,businessTripId:n,onChange:r}),e.jsx(de,{businessTripExpenseId:t.id,onDelete:r})]})]},t.id)},dn=({data:i,onChange:n})=>{const{otherExpenses:r,id:t}=w(Bs,i);return r?.length?e.jsx("div",{className:"flex flex-col gap-2 mt-5",children:e.jsxs(se,{highlightOnHover:!0,withBorder:!0,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx(ue,{}),e.jsx("th",{children:"Description"}),e.jsx("th",{children:"Deductible Expense"}),e.jsx("th",{})]})}),e.jsxs("tbody",{children:[r.sort((s,a)=>s.date&&a.date?s.date<a.date?1:-1:s.date?-1:a.date?1:0).map(s=>e.jsx(cn,{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})},ln="addBusinessTripTravelAndSubsistenceExpense",un=()=>{const[{fetching:i},n]=B(Ss),r=x.useCallback(async t=>{const s="Error adding business trip travel&subsistence expense",a=ln;j.loading("Adding trip travel&subsistence expense",{id:a});try{const o=await n(t),d=S(o,s,a);if(d)return j.success("Success",{id:a,description:"Business trip travel&subsistence expense was added"}),d.addBusinessTripTravelAndSubsistenceExpense}catch(o){console.error(`${s}: ${o}`),j.error("Error",{id:a,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:i,addBusinessTripTravelAndSubsistenceExpense:r}};function Be(i){const{businessTripId:n,onAdd:r}=i,[t,{close:s,open:a}]=L(!1);return e.jsxs(e.Fragment,{children:[e.jsx(A,{content:"Add T&S Expense",children:e.jsx(v,{variant:"outline",size:"icon",className:"size-7.5",onClick:o=>{o.stopPropagation(),a()},children:e.jsx(G,{className:"size-5"})})}),t&&e.jsx(hn,{businessTripId:n,opened:t,close:s,onAdd:r})]})}function hn({businessTripId:i,opened:n,close:r,onAdd:t}){const s=N({defaultValues:{businessTripId:i}}),{control:a,handleSubmit:o}=s,[d,p]=x.useState(!1),{addBusinessTripTravelAndSubsistenceExpense:m,fetching:h}=un(),l=c=>{m({fields:c}).then(()=>{t?.(),r()})};return e.jsxs(C,{opened:n,onClose:r,centered:!0,lockScroll:!0,children:[e.jsx(C.Title,{children:"Add Travel & Subsistence Expense"}),e.jsx(C.Body,{children:e.jsx(I,{...s,children:e.jsxs("form",{onSubmit:o(l),className:"space-y-3",children:[e.jsx(oe,{businessTripId:i,control:a,setFetching:p}),e.jsx(z,{name:"expenseType",control:a,render:({field:c})=>e.jsxs(P,{children:[e.jsx(X,{children:"Expense Type"}),e.jsx($,{children:e.jsx(Q,{...c,value:c.value??void 0})}),e.jsx(_,{})]})}),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(Y,{blur:1,center:!0,children:e.jsx(Z,{})})]})}const xn="updateBusinessTripTravelAndSubsistenceExpense",pn=()=>{const[{fetching:i},n]=B(Is),r=x.useCallback(async t=>{const s="Error updating business trip travel&subsistence expense",a=xn;j.loading("Updating trip travel&subsistence expense",{id:a});try{const o=await n(t),d=S(o,s,a);if(d)return j.success("Success",{id:a,description:"Business trip travel&subsistence expense was updated"}),d.updateBusinessTripTravelAndSubsistenceExpense}catch(o){console.error(`${s}: ${o}`),j.error("Error",{id:a,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:i,updateBusinessTripTravelAndSubsistenceExpense:r}},mn=({data:i,businessTripId:n,onChange:r})=>{const t=w(Ns,i),[s,a]=x.useState(!1),o=N({defaultValues:{id:t.id,businessTripId:n}}),{control:d,handleSubmit:p}=o,{updateBusinessTripTravelAndSubsistenceExpense:m,fetching:h}=pn(),l=c=>{m({fields:c}).then(()=>{r?.(),a(!1)})};return e.jsxs("tr",{children:[e.jsx(le,{data:t,isEditMode:s,control:d,businessTripId:n}),e.jsx("td",{children:e.jsx(I,{...o,children:e.jsx("form",{id:`form ${t.id}`,onSubmit:p(l),children:s?e.jsx(z,{name:"expenseType",control:d,defaultValue:t.expenseType,render:({field:c})=>e.jsxs(P,{children:[e.jsx($,{children:e.jsx(Q,{form:`form ${t.id}`,...c,value:c.value??void 0})}),e.jsx(_,{})]})}):e.jsx(D,{c:t.expenseType?void 0:"red",children:t.expenseType??"Missing"})})})}),e.jsxs("td",{children:[e.jsx(A,{content:"Edit",children:e.jsx(v,{disabled:h,variant:s?"default":"outline",size:"icon",className:"size-7.5",onClick:c=>{c.stopPropagation(),a(u=>!u)},children:e.jsx(J,{className:"size-5"})})}),s&&e.jsx(A,{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(ee,{className:"size-5"})})}),e.jsx(ce,{businessTripExpenseId:t.id,businessTripId:n,onChange:r}),e.jsx(de,{businessTripExpenseId:t.id,onDelete:r})]})]},t.id)},gn=({data:i,onChange:n})=>{const{travelAndSubsistenceExpenses:r,id:t}=w(Fs,i);return r?.length?e.jsx("div",{className:"flex flex-col gap-2 mt-5",children:e.jsxs(se,{highlightOnHover:!0,withBorder:!0,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx(ue,{}),e.jsx("th",{children:"Expense Type"}),e.jsx("th",{})]})}),e.jsxs("tbody",{children:[r.sort((s,a)=>s.date&&a.date?s.date<a.date?1:-1:s.date?-1:a.date?1:0).map(s=>e.jsx(mn,{data:s,businessTripId:t,onChange:n},s.id)),e.jsx("tr",{children:e.jsx("td",{colSpan:6,children:e.jsx(Be,{businessTripId:t,onAdd:n})})})]})]})}):e.jsx(Be,{businessTripId:t,onAdd:n})},jn=({data:i})=>{const n=w(Ms,i),r="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:r&&M(new Date(r),"dd/MM/yy")}),n.sourceEffectiveDate&&e.jsxs("div",{className:"text-xs text-gray-500",children:["(Originally ",M(new Date(n.sourceEffectiveDate),"dd/MM/yy"),")"]})]})})},fn=({data:i})=>{const n=w(zs,i),r="eventDate"in n?n.eventDate:void 0;return e.jsx("td",{children:e.jsx("div",{className:"flex flex-col justify-center",children:r&&M(new Date(r),"dd/MM/yy")})})},vn=({data:i})=>{const n=w(Ps,i),{account:r}=n,t=r.type,s=r.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})]})})},bn=({data:i})=>{const n=w($s,i),r="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:r})})})},yn=({data:i})=>{const n=w(Os,i);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 Tn({data:i,onChange:n,enableEdit:r}){const{id:t,counterparty:s,missingInfoSuggestions:a,id:o,sourceDescription:d}=w(Rs,i),p=!!a?.business&&r,m=p?a?.business?.name:"Missing",h=p?a?.business?.id:null,l=s?.name??m,[c,u]=x.useState(!1),{updateTransaction:g,fetching:f}=Xs(),T=x.useCallback(async V=>{await g({transactionId:o,fields:{counterpartyId:V}}),u(!0)},[o,g]),y=x.useCallback(async V=>{await T(V),n?.()},[T,n]),{selectableBusinesses:O,fetching:K}=Oe(),[F,R]=x.useState(h??null),[k,re]=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(ks,{options:O,value:F,onChange:R,search:k,onSearchChange:re,placeholder:"Choose or create a business",empty:k?e.jsx(Hs,{description:k,onAdd:y}):null}),e.jsx(A,{content:"Approve",children:e.jsx(v,{variant:"outline",size:"icon",onClick:()=>F&&T(F),disabled:f||K||!F,children:e.jsx(ee,{className:"size-4"})})})]})}),e.jsx(Qs,{transactionId:t,counterpartyId:s?.id??F,open:c,onOpenChange:u,onClose:n})]})}const En="categorizeBusinessTripExpense",Cn=()=>{const[{fetching:i},n]=B(_s),r=x.useCallback(async t=>{const s="Error updating business trip expense category",a=En;j.loading("Updating trip expense category",{id:a});try{const o=await n(t),d=S(o,s,a);if(d)return j.success("Success",{id:a,description:"Business trip expense category was updated"}),d.categorizeBusinessTripExpense}catch(o){console.error(`${s}: ${o}`),j.error("Error",{id:a,description:s,duration:1e5,closeButton:!0})}},[n]);return{fetching:i,categorizeBusinessTripExpense:r}};function An(i){const{businessTripId:n,transactionId:r,onChange:t,defaultAmount:s}=i,[a,{close:o,open:d}]=L(!1);return e.jsxs(e.Fragment,{children:[e.jsx(A,{content:"Categorize",children:e.jsx(v,{variant:"outline",size:"icon",className:"size-7.5",onClick:p=>{p.stopPropagation(),d()},children:e.jsx(J,{className:"size-5"})})}),a&&e.jsx(Dn,{businessTripId:n,transactionId:r,opened:a,close:o,onChange:t,defaultAmount:s})]})}const wn=Object.entries(Vs).map(([i,n])=>({value:n,label:i}));function Dn({businessTripId:i,transactionId:n,defaultAmount:r,opened:t,close:s,onChange:a}){const{control:o,handleSubmit:d}=N({defaultValues:{businessTripId:i,transactionId:n}}),{categorizeBusinessTripExpense:p,fetching:m}=Cn(),h=l=>{p({fields:l}).then(()=>{a?.(),s()})};return e.jsxs(C,{opened:t,onClose:s,centered:!0,children:[e.jsx(C.Title,{children:"Set Expense Category"}),e.jsx(C.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(q,{"data-autofocus":!0,...l,data:wn,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:r,render:({field:l,fieldState:c})=>e.jsx(ae,{...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"})})]})}),m&&e.jsx(Y,{blur:1,center:!0,children:e.jsx(Z,{})})]})}const Bn=({data:i,onChange:n})=>{const{uncategorizedTransactions:r,id:t}=w(Ls,i);return r?.length?e.jsx("div",{className:"flex flex-col gap-2 mt-5",children:e.jsxs(se,{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:r.sort((s,a)=>s.transaction.eventDate.localeCompare(a.transaction.eventDate)).map(s=>e.jsxs("tr",{children:[e.jsx(fn,{data:s.transaction}),e.jsx(jn,{data:s.transaction}),e.jsx(Sn,{data:s}),e.jsx("td",{children:e.jsx(be,{to:ye.CHARGES.DETAIL(s.transaction.chargeId),target:"_blank",rel:"noreferrer",onClick:a=>a.stopPropagation(),className:"inline-flex items-center font-semibold",children:"To Charge"})}),e.jsx(vn,{data:s.transaction}),e.jsx(bn,{data:s.transaction}),e.jsx(yn,{data:s.transaction}),e.jsx(Tn,{data:s.transaction}),e.jsx("td",{children:e.jsx(An,{businessTripId:t,transactionId:s.transaction.id,onChange:n,defaultAmount:s.transaction.amount.raw})})]},s.transaction.id))})]})}):e.jsx(e.Fragment,{})},Sn=({data:i})=>{const{transaction:n,categorizedAmount:r,errors:t}=w(Us,i),s="amount"in n?n.amount:void 0,a=s?.raw!==r.raw&&r.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(In,{errors:t})]}),a&&e.jsxs("div",{className:"text-gray-500 ml-2",children:[r.formatted," categorized "]}),n.cryptoExchangeRate&&e.jsxs("div",{className:"text-gray-500 ml-2",children:[`(Rate: ${n.cryptoExchangeRate.rate})`,e.jsx("br",{}),s?.raw?`${Ws(s.raw*n.cryptoExchangeRate.rate)}$`:null]})]})})},In=({errors:i})=>{const[n,{close:r,open:t}]=L(!1);return e.jsxs(fe,{width:200,position:"bottom",shadow:"md",opened:n,children:[e.jsx(fe.Target,{children:e.jsx(qs,{onMouseEnter:t,onMouseLeave:r})}),e.jsx(fe.Dropdown,{sx:{pointerEvents:"none"},className:"whitespace-normal text-red-500",children:i.map((s,a)=>e.jsx(D,{size:"sm",children:s},a))})]})};function kn({tripId:i,isExtended:n=!1}){const[r,t]=x.useState(),[s,a]=x.useState([]),[{data:o},d]=ne({query:Gs,variables:{businessTripId:i}});function p(h){s.includes(h)?a(l=>l.filter(c=>c!==h)):a(l=>[...l,h])}const m=d;return x.useEffect(()=>{o?.businessTrip&&t(o.businessTrip)},[o?.businessTrip]),e.jsx(He,{shadow:"sm",radius:"md",withBorder:!0,children:r?e.jsxs(e.Fragment,{children:[e.jsx(Ys,{data:r,onChange:m}),e.jsxs(E,{className:"w-full",multiple:!0,value:s,chevron:e.jsx(G,{size:"1rem"}),styles:{chevron:{"&[data-rotate]":{transform:"rotate(45deg)"}}},children:[e.jsxs(E.Item,{value:"attendees",children:[e.jsx(E.Control,{onClick:()=>p("attendees"),children:"Attendees"}),e.jsx(E.Panel,{children:e.jsx(Yt,{data:r,onChange:m})})]}),n&&e.jsxs(E.Item,{value:"uncategorized-transactions",children:[e.jsx(E.Control,{onClick:()=>p("uncategorized-transactions"),disabled:!r.uncategorizedTransactions?.length,children:"Uncategorized Transactions"}),e.jsx(E.Panel,{children:e.jsx(Bn,{data:r,onChange:m})})]}),e.jsxs(E.Item,{value:"flights",children:[e.jsx(E.Control,{onClick:()=>p("flights"),children:"Flights"}),e.jsx(E.Panel,{children:e.jsx(sn,{data:r,onChange:m})})]}),e.jsxs(E.Item,{value:"accommodations",children:[e.jsx(E.Control,{onClick:()=>p("accommodations"),children:"Accommodations"}),e.jsx(E.Panel,{children:e.jsx(It,{data:r,onChange:m})})]}),e.jsxs(E.Item,{value:"travelAndSubsistence",children:[e.jsx(E.Control,{onClick:()=>p("travelAndSubsistence"),children:"Travel & Subsistence"}),e.jsx(E.Panel,{children:e.jsx(gn,{data:r,onChange:m})})]}),e.jsxs(E.Item,{value:"other",children:[e.jsx(E.Control,{onClick:()=>p("other"),children:"Other"}),e.jsx(E.Panel,{children:e.jsx(dn,{data:r,onChange:m})})]}),e.jsxs(E.Item,{value:"carRental",children:[e.jsx(E.Control,{onClick:()=>p("carRental"),children:"Car Rental"}),e.jsx(E.Panel,{children:e.jsx(en,{data:r,onChange:m})})]}),e.jsxs(E.Item,{value:"summary",children:[e.jsx(E.Control,{onClick:()=>p("summary"),children:"Summary"}),e.jsx(E.Panel,{children:e.jsx(Zs,{data:r})})]})]})]}):e.jsx(Se,{className:"h-10 w-10 animate-spin mr-2 self-center"})})}export{lt as C,kn as E,Rn as P};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{v as e}from"./index-
|
|
1
|
+
import{v as e}from"./index-BWAOW53d.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-BWAOW53d.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,4 +1,4 @@
|
|
|
1
|
-
import{r as h,bA as D,j as e,bB as N,B as y,z as $,bC as k,aC as R,V as O,bD as f,bE as S,bF as C,w as F,Y as A,Z as E,_ as z,$ as P,at as M,bH as _,bu as w,T as B,aP as j,ay as p,G as L,dF as V,d6 as v,F as G,u as q,dG as U,b_ as Z,L as H,dH as J}from"./index-
|
|
1
|
+
import{r as h,bA as D,j as e,bB as N,B as y,z as $,bC as k,aC as R,V as O,bD as f,bE as S,bF as C,w as F,Y as A,Z as E,_ as z,$ as P,at as M,bH as _,bu as w,T as B,aP as j,ay as p,G as L,dF as V,d6 as v,F as G,u as q,dG as U,b_ as Z,L as H,dH as J}from"./index-BWAOW53d.js";import{u as I}from"./use-url-query-DG-wQ19o.js";import{P as Q}from"./page-layout-Ck_xKyt0.js";import{P as K}from"./modal-DGBtDZun.js";import{F as W}from"./funnel-BFG62oJX.js";import{M as T}from"./MultiSelect-BLtBUfDG.js";import{D as X}from"./download-csv-button-C_FDbZVI.js";import{B as Y}from"./business-extended-info-C3BaFkvQ.js";import{P as ee,a as te}from"./panel-top-open-EMjzc-ww.js";import{T as se}from"./Table-LzLjpZeA.js";import"./data-table-column-header-RVA6DnfK.js";import"./eye-off-A1glr3Lh.js";function re({filter:t,setFilter:s,closeModal:i}){const n=$({defaultValues:{...t}}),{control:a,handleSubmit:o}=n,{selectableBusinesses:r,fetching:u}=k(),{userContext:m}=h.useContext(R),c=l=>{l.fromDate?.trim()===""&&(l.fromDate=void 0),l.toDate?.trim()===""&&(l.toDate=void 0),s(l),i()};function d(){s({}),i()}return e.jsxs(e.Fragment,{children:[u?e.jsx("div",{children:"Loading..."}):e.jsx("div",{}),e.jsx(O,{...n,children:e.jsxs("form",{onSubmit:o(c),className:"space-y-2",children:[e.jsx(f,{name:"ownerIds",control:a,defaultValue:void 0,render:({field:l,fieldState:b})=>e.jsx(T,{...l,data:r,value:l.value??(m?.context.adminBusinessId?[m?.context.adminBusinessId]:void 0),disabled:u,label:"Owners",placeholder:"Scroll to see all options",maxDropdownHeight:160,searchable:!0,error:b.error?.message})}),e.jsx(f,{name:"businessIDs",control:a,defaultValue:void 0,render:({field:l,fieldState:b})=>e.jsx(T,{...l,data:r,value:l.value??void 0,disabled:u,label:"Businesses",placeholder:"Scroll to see all options",maxDropdownHeight:160,searchable:!0,error:b.error?.message})}),e.jsx(f,{name:"fromDate",control:a,defaultValue:t.fromDate,rules:{required:"Required",pattern:{value:S,message:"Date must be im format yyyy-mm-dd"}},render:({field:l,fieldState:b})=>e.jsx(C,{...l,onChange:x=>{const g=x?typeof x=="string"?x:F(x,"yyyy-MM-dd"):void 0;g!==l.value&&l.onChange(g)},value:l.value?new Date(l.value):void 0,label:"From Date",error:b.error?.message,required:!0,popoverProps:{withinPortal:!0}})}),e.jsx(f,{name:"toDate",control:a,defaultValue:t.toDate,rules:{pattern:{value:S,message:"Date must be im format yyyy-mm-dd"}},render:({field:l,fieldState:b})=>e.jsx(C,{...l,onChange:x=>{const g=x?typeof x=="string"?x:F(x,"yyyy-MM-dd"):void 0;g!==l.value&&l.onChange(g)},value:l.value?new Date(l.value):void 0,label:"To Date",error:b.error?.message,required:!0,popoverProps:{withinPortal:!0}})}),e.jsx(A,{name:"isShowZeroedAccounts",control:a,render:({field:l})=>e.jsxs(E,{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(z,{children:"Show zeroed accounts"})}),e.jsxs("div",{className:"flex flex-row items-center gap-1",children:[e.jsx(P,{children:e.jsx(M,{defaultChecked:t.isShowZeroedAccounts??!1,onCheckedChange:l.onChange,checked:l.value===!0})}),e.jsx("span",{children:l.value?"show":"remove"})]})]})}),e.jsxs("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:"Filter"}),e.jsx("button",{type:"button",className:"text-white bg-orange-500 border-0 py-2 px-8 focus:outline-hidden hover:bg-orange-600 rounded-sm text-lg",onClick:d,children:"Clear"}),e.jsx("button",{type:"button",className:"text-white bg-rose-500 border-0 py-2 px-8 focus:outline-hidden hover:bg-rose-600 rounded-sm text-lg",onClick:i,children:"Cancel"})]})]})})]})}function ae({filter:t,setFilter:s}){const[i,n]=h.useState(!1),[a,o]=h.useState(!D(t)),{get:r,set:u}=I();function m(d){return Object.entries(d??{}).filter(([b,x])=>x!==void 0&&Array.isArray(x)&&x.length>0).length>0}function c(d){_(d,t)||(s(d),o(m(d)))}return h.useEffect(()=>{const d=D(t)?null:encodeURIComponent(JSON.stringify(t)),l=r("trialBalanceReportFilters");d!==l&&u("trialBalanceReportFilters",d)},[t,r,u]),e.jsxs(e.Fragment,{children:[e.jsx(K,{opened:i,onClose:()=>n(!1),content:e.jsx(re,{filter:t,setFilter:c,closeModal:()=>n(!1)})}),e.jsx(N,{inline:!0,size:16,disabled:!a,children:e.jsx(y,{variant:"outline",onClick:()=>n(!0),className:"p-2",children:e.jsx(W,{size:20})})})]})}const ne=({data:t,fromDate:s,toDate:i})=>{const n=h.useCallback(async()=>{const a=oe(t),o=`trial_balance_report${s?`_${s}`:""}${i?`_${i}`:""}`;return{fileContent:a,fileName:o}},[t,s,i]);return e.jsx(X,{createFileVariables:n})},oe=t=>{let s="";s+=`Sort Code,Account Name,Debit,Credit,Balance\r
|
|
2
2
|
`;for(const[i,n]of Object.entries(t)){const a=ie(i,n);s+=a}return s+=`Report total:,,${Object.values(t).reduce((i,n)=>i+n.totalDebit,0)},${Object.values(t).reduce((i,n)=>i+n.totalCredit,0)},${Object.values(t).reduce((i,n)=>i+n.sum,0)}\r
|
|
3
3
|
`,s};function ie(t,s){let i="";return Object.values(s.sortCodes).sort((n,a)=>n.key-a.key).map(n=>{const a=le(n);i+=a}),i+=`${t.replaceAll("0","*")},Group Total:,${s.totalDebit??""},${s.totalCredit??""},${s.sum}\r
|
|
4
4
|
`,i}function le(t){let s="";s+=`${t.name}\r
|