UNPKG

@accounter/client

Version:
1 lines 60.1 kB
import{s as e}from"./dist-BbgEzppd.js";import{i as t,o as n}from"./utils-BUNz070n.js";import{Bt as r,Er as i,Et as a,Fn as o,J as s,Ja as c,Ji as l,Mn as u,Mt as d,Ot as f,Pn as p,Pt as m,Qi as h,St as ee,Tt as te,Xi as g,Ya as _,Yi as v,Zi as y,_t as ne,bt as re,ca as ie,d as ae,da as oe,f as se,fa as ce,gt as le,ht as ue,jt as de,kt as fe,la as pe,m as me,mr as he,mt as ge,na as _e,oa as ve,or as ye,p as be,qi as xe,r as b,t as x,ta as Se,u as Ce,ua as we,vt as Te,wt as Ee,xt as De,yt as Oe,zt as ke}from"./error-handling-AQOG1RNy.js";import{l as Ae,s as S,t as je}from"./routes-BXbESQBe.js";import{dt as Me,gt as Ne,ht as C}from"./select-6mBYg_R6.js";import{At as w,Bt as Pe,Ft as T,It as E,Kt as Fe,M as Ie,Mr as D,Nt as O,Ot as k,Pt as A,Tn as Le,Vr as Re,Vt as j,Wt as ze,Zn as M,bt as Be,dn as N,dr as Ve,ft as He,gt as Ue,hn as We,in as Ge,jr as Ke,jt as P,kt as qe,pn as F,pt as Je,rn as Ye,rt as Xe,sn as I,un as L,vn as R,vt as z,yn as B,zt as V}from"./common-Cy-x5Vhe.js";import{r as Ze,t as Qe}from"./similar-transactions-modal-B1dnTcQ8.js";import{_ as $e,p as H,y as U}from"./separator-EFzchRgs.js";import{t as W}from"./button-CBTN3XMQ.js";import{i as G,n as K,r as q,t as et}from"./accordion-c0LNDMTT.js";import{C as J,S as Y,at as X,g as Z,v as tt}from"./table-tK8pMUMS.js";import{t as nt}from"./Card-BD7-xWnk.js";import{t as rt}from"./MultiSelect-CaeZsH-J.js";import{L as it}from"./index-B8E5XsZe.js";var at=Ne(`car`,[[`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`}]]),ot=Ne(`fuel`,[[`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`}]]),Q=e(n(),1),st=`addBusinessTripAccommodationsExpense`,ct=()=>{let[{fetching:e},t]=c(Ce);return{fetching:e,addBusinessTripAccommodationsExpense:(0,Q.useCallback)(async e=>{let n=`Error adding business trip accommodations expense`,r=st;b.loading(`Adding Business Trip Accommodations Expense`,{id:r});try{let i=x(await t(e),n,r);if(i)return b.success(`Success`,{id:r,description:`Business trip accommodations expense added`}),i.addBusinessTripAccommodationsExpense}catch(e){console.error(`${n}: ${e}`),b.error(`Error`,{id:r,description:n,duration:1e5,closeButton:!0})}},[t])}},$=t();function lt({formManager:e,attendeesStayPath:t,attendeesData:n,fetchingAttendees:r=!1,businessTripId:i}){let{control:a,watch:o,trigger:c}=e,{fields:l,append:u,remove:d}=Pe({control:a,name:t}),[f,p]=(0,Q.useState)(r),[m,h]=(0,Q.useState)(n??[]),ee=o(t),te=l.map((e,t)=>({...e,...ee[t]}));(0,Q.useEffect)(()=>{n&&h(n)},[n]),(0,Q.useEffect)(()=>{p(r)},[r]);let[{data:g,fetching:v},y]=_({query:s,pause:!0,variables:{businessTripId:i??``}});return(0,Q.useEffect)(()=>{g?.businessTrip?.attendees.length&&h(g.businessTrip.attendees.map(e=>({value:e.id,label:e.name}))??[])},[g?.businessTrip?.attendees]),(0,Q.useEffect)(()=>{p(v)},[v]),(0,Q.useEffect)(()=>{!n&&!g&&!r&&!v&&y({businessTripId:i})},[n,r,v,y,i,g]),!i&&!n?(0,$.jsx)(`div`,{children:`Cannot edit attendees stay, lacking some mandatory information!`}):(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`span`,{className:`mantine-InputWrapper-label mantine-Select-label`,children:`Employees Stay`}),(0,$.jsxs)(`div`,{className:`h-full flex flex-col overflow-hidden`,children:[te?.map((e,n)=>(0,$.jsxs)(`div`,{className:`flex items-end gap-2 text-gray-600 mb-2`,children:[(0,$.jsx)(`div`,{className:`w-full mt-1 relative rounded-md shadow-xs`,children:(0,$.jsx)(V,{name:`${t}.${n}.attendeeId`,control:a,rules:{required:`Required`},render:({field:e,fieldState:t})=>(0,$.jsx)(L,{...e,disabled:f,data:m,value:e.value??void 0,label:`Attendee`,placeholder:`Scroll to see all options`,maxDropdownHeight:160,searchable:!0,error:t.error?.message,withinPortal:!0,required:!0})})}),(0,$.jsx)(`div`,{className:`w-full mt-1 relative rounded-md shadow-xs`,children:(0,$.jsx)(V,{control:a,name:`${t}.${n}.nightsCount`,render:({field:e,fieldState:t})=>(0,$.jsx)(N,{className:`w-full`,...e,min:0,label:`Nights Count`,value:e.value??void 0,hideControls:!0,precision:0,error:t.error?.message,required:!0,onChange:t=>e.onChange(t&&typeof t==`number`?t:void 0)})})}),(0,$.jsx)(W,{variant:`ghost`,size:`icon`,className:`mb-2 size-7.5`,onClick:()=>{d(n),c(t)},children:(0,$.jsx)($e,{className:`size-5`})})]},e.id)),(0,$.jsx)(W,{variant:`ghost`,size:`icon`,className:`size-7.5`,onClick:()=>{u({}),c(t)},children:(0,$.jsx)(Re,{className:`size-5`})})]})]})}function ut({businessTripId:e,control:t,setFetching:n}){let[r,i]=(0,Q.useState)([]),[{data:a,fetching:o,error:c}]=_({query:s,variables:{businessTripId:e}}),{userContext:l}=(0,Q.useContext)(tt);(0,Q.useEffect)(()=>{a?.businessTrip?.attendees.length&&i(a.businessTrip.attendees.map(e=>({value:e.id,label:e.name})).sort((e,t)=>e.label>t.label?1:-1))},[a,i]),(0,Q.useEffect)(()=>{n(o)},[n,o]),(0,Q.useEffect)(()=>{c&&b.error(`Error`,{description:`Oops, we have an error fetching attendees`})},[c]);let d=(0,Q.useMemo)(()=>l?.context.ledgerLock,[l]);return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(V,{name:`date`,control:t,rules:{min:d?{value:d,message:`Date must be after ${d}`}:void 0,pattern:{value:S,message:`Date must be im format yyyy-mm-dd`}},render:({field:e,fieldState:t})=>(0,$.jsx)(k,{"data-autofocus":!0,...e,onChange:t=>{let n=t?typeof t==`string`?t:X(t,`yyyy-MM-dd`):void 0;n!==e.value&&e.onChange(n)},value:e.value?new Date(e.value):void 0,error:t.error?.message,label:`Date`,popoverProps:{withinPortal:!0}})}),(0,$.jsx)(V,{name:`valueDate`,control:t,rules:{pattern:{value:S,message:`Date must be im format yyyy-mm-dd`},min:d?{value:d,message:`Date must be after ${d}`}:void 0},render:({field:e,fieldState:t})=>(0,$.jsx)(k,{...e,onChange:t=>{let n=t?typeof t==`string`?t:X(t,`yyyy-MM-dd`):void 0;n!==e.value&&e.onChange(n)},value:e.value?new Date(e.value):void 0,error:t.error?.message,label:`Value Date`,popoverProps:{withinPortal:!0}})}),(0,$.jsx)(V,{name:`amount`,control:t,render:({field:e,fieldState:n})=>(0,$.jsx)(V,{name:`currency`,control:t,defaultValue:u.Ils,render:({field:t,fieldState:r})=>(0,$.jsx)(Ue,{...e,value:e.value??void 0,error:n.error?.message||r.error?.message,label:`Amount`,currencyCodeProps:{...t,label:`Currency`}})})}),(0,$.jsx)(V,{name:`employeeBusinessId`,control:t,render:({field:e,fieldState:t})=>(0,$.jsx)(L,{...e,data:r,value:e.value,disabled:o,label:`Attendee`,placeholder:`Scroll to see all options`,maxDropdownHeight:160,searchable:!0,error:t.error?.message,withinPortal:!0})})]})}function dt(e){let{businessTripId:t,onAdd:n}=e,[r,{close:i,open:a}]=M(!1);return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(z,{content:`Add Accommodations Expense`,children:(0,$.jsx)(W,{variant:`outline`,size:`icon`,className:`size-7.5`,onClick:e=>{e.stopPropagation(),a()},children:(0,$.jsx)(U,{className:`size-5`})})}),r&&(0,$.jsx)(ft,{businessTripId:t,opened:r,close:i,onAdd:n})]})}function ft({businessTripId:e,opened:t,close:n,onAdd:r}){let i=j({defaultValues:{businessTripId:e}}),{control:a,handleSubmit:o}=i,[s,c]=(0,Q.useState)(!1),{addBusinessTripAccommodationsExpense:l,fetching:u}=ct(),d=e=>{l({fields:e}).then(()=>{r?.(),n()})};return(0,$.jsxs)(F,{opened:t,onClose:n,centered:!0,lockScroll:!0,children:[(0,$.jsx)(F.Title,{children:`Add Accommodation Expense`}),(0,$.jsx)(F.Body,{children:(0,$.jsx)(w,{...i,children:(0,$.jsxs)(`form`,{onSubmit:o(d),className:`space-y-3`,children:[(0,$.jsx)(ut,{businessTripId:e,control:a,setFetching:c}),(0,$.jsx)(O,{control:a,name:`country`,render:({field:e})=>(0,$.jsxs)(A,{children:[(0,$.jsx)(T,{children:`Country`}),(0,$.jsx)(P,{children:(0,$.jsx)(H,{...e,value:e.value??void 0})}),(0,$.jsx)(E,{})]})}),(0,$.jsx)(O,{name:`nightsCount`,control:a,render:({field:e})=>(0,$.jsxs)(A,{children:[(0,$.jsx)(T,{children:`Nights Count`}),(0,$.jsx)(P,{children:(0,$.jsx)(Je,{...e,value:e.value??void 0,hideControls:!0,decimalScale:0,thousandSeparator:`,`})}),(0,$.jsx)(E,{})]})}),(0,$.jsx)(lt,{formManager:i,attendeesStayPath:`attendeesStay`,businessTripId:e}),(0,$.jsx)(`div`,{className:`flex justify-center mt-5 gap-3`,children:(0,$.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`})})]})})}),(u||s)&&(0,$.jsx)(B,{blur:1,center:!0,children:(0,$.jsx)(J,{})})]})}var pt=`updateBusinessTripAccommodationsExpense`,mt=()=>{let[{fetching:e},t]=c(ve);return{fetching:e,updateBusinessTripAccommodationsExpense:(0,Q.useCallback)(async e=>{let n=`Error updating business trip accommodations expense`,r=pt;b.loading(`Updating trip accommodations expense`,{id:r});try{let i=x(await t(e),n,r);if(i)return b.success(`Success`,{id:r,description:`Business trip accommodations expense was updated`}),i.updateBusinessTripAccommodationsExpense}catch(e){console.error(`${n}: ${e}`),b.error(`Error`,{id:r,description:n,duration:1e5,closeButton:!0})}},[t])}},ht=`categorizeIntoExistingBusinessTripExpense`,gt=()=>{let[{fetching:e},t]=c(r);return{fetching:e,categorizeIntoExistingBusinessTripExpense:(0,Q.useCallback)(async e=>{let n=`Error updating business trip expense category`,r=ht;b.loading(`Updating business trip expense category`,{id:r});try{let i=x(await t(e),n,r);if(i)return b.success(`Success`,{id:r,description:`Business trip expense category was updated`}),i.categorizeIntoExistingBusinessTripExpense}catch(e){console.error(`${n}: ${e}`),b.error(`Error`,{id:r,description:n,duration:1e5,closeButton:!0})}},[t])}};function _t(e){let{businessTripExpenseId:t,businessTripId:n,onChange:r}=e,[i,{close:a,open:o}]=M(!1);return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(z,{content:`Attach Uncategorized Transaction`,children:(0,$.jsx)(W,{variant:`outline`,size:`icon`,className:`size-7.5`,onClick:e=>{e.stopPropagation(),o()},children:(0,$.jsx)(U,{className:`size-5`})})}),i&&(0,$.jsx)(vt,{businessTripExpenseId:t,businessTripId:n,opened:i,close:a,onChange:r})]})}function vt({businessTripExpenseId:e,businessTripId:t,opened:n,close:r,onChange:i}){let{control:a,handleSubmit:o,setValue:s}=j({defaultValues:{businessTripExpenseId:e}}),[c,l]=(0,Q.useState)([]),[{data:u,fetching:d,error:f}]=_({query:Se,variables:{businessTripId:t}}),{categorizeIntoExistingBusinessTripExpense:p,fetching:m}=gt();return(0,Q.useEffect)(()=>{u?.businessTrip?.uncategorizedTransactions.length&&l(u.businessTrip.uncategorizedTransactions.filter(e=>e?.transaction).map(({transaction:e})=>({eventDate:e.eventDate,sourceDescription:e.sourceDescription,referenceKey:e.referenceKey,counterparty:e.counterparty?.name,amount:e.amount.formatted,rawAmount:e.amount.raw,value:e.id,label:`${e.eventDate} | ${e.counterparty?.name} | ${e.amount.formatted}`})).sort((e,t)=>e.eventDate.localeCompare(t.eventDate)))},[u,l]),(0,Q.useEffect)(()=>{f&&b.error(`Error`,{description:`Oops, we have an error fetching transactions to categorize`})},[f]),(0,$.jsxs)(F,{opened:n,onClose:r,centered:!0,children:[(0,$.jsx)(F.Title,{children:`Set Transaction Category`}),(0,$.jsx)(F.Body,{children:(0,$.jsxs)(`form`,{onSubmit:o(e=>{p({fields:e}).then(()=>{i?.(),r()})}),className:`flex flex-col gap-3 mt-3`,children:[(0,$.jsx)(V,{name:`transactionId`,control:a,render:({field:e,fieldState:t})=>(0,$.jsx)(L,{...e,itemComponent:yt,data:c??[],disabled:d,label:`Transactions`,placeholder:`Scroll to see all options`,maxDropdownHeight:160,error:t.error?.message,withAsterisk:!0,withinPortal:!0,onChange:t=>{let n=c.find(e=>e.value===t);n?.rawAmount&&s(`amount`,n.rawAmount),e.onChange(t)}})}),(0,$.jsx)(V,{name:`amount`,control:a,render:({field:e,fieldState:t})=>(0,$.jsx)(N,{...e,value:e.value??void 0,hideControls:!0,precision:2,removeTrailingZeros:!0,error:t.error?.message,label:`Amount`})}),(0,$.jsx)(`div`,{className:`flex justify-center gap-3`,children:(0,$.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&&(0,$.jsx)(B,{blur:1,center:!0,children:(0,$.jsx)(J,{})})]})}var yt=(0,Q.forwardRef)(({eventDate:e,sourceDescription:t,referenceKey:n,counterparty:r,amount:i,...a},o)=>(0,$.jsx)(`div`,{ref:o,...a,children:(0,$.jsxs)(R,{children:[(0,$.jsx)(R.Col,{span:4,children:e}),(0,$.jsx)(R.Col,{span:4,children:(0,$.jsx)(Y,{size:`sm`,children:r})}),(0,$.jsx)(R.Col,{span:4,children:(0,$.jsx)(Y,{size:`sm`,children:i})}),(0,$.jsx)(R.Col,{span:8,children:(0,$.jsx)(Y,{size:`xs`,opacity:.65,children:t})}),(0,$.jsxs)(R.Col,{span:4,children:[`Reference: `,n]})]})})),bt=`deleteBusinessTripExpense`,xt=()=>{let[{fetching:e},t]=c(o);return{fetching:e,deleteBusinessTripExpense:(0,Q.useCallback)(async e=>{let n=`Error deleting business trip expense`,r=`${bt}-${e.businessTripExpenseId}`;b.loading(`Deleting trip expense`,{id:r});try{let i=x(await t(e),n,r);if(i)return b.success(`Success`,{id:r,description:`Business trip expense was deleted`}),i.deleteBusinessTripExpense}catch(e){console.error(`${n}: ${e}`),b.error(`Error`,{id:r,description:n,duration:1e5,closeButton:!0})}},[t])}};function St(e){let{fetching:t,deleteBusinessTripExpense:n}=xt();return(0,$.jsx)(z,{content:`Remove Expense`,children:(0,$.jsx)(Xe,{onConfirm:(0,Q.useCallback)(()=>{n({businessTripExpenseId:e.businessTripExpenseId}).then(()=>{e.onDelete?.()})},[e,n]),title:`Are you sure you want to remove expense?`,children:(0,$.jsx)(W,{variant:`outline`,size:`icon`,className:`size-7.5 text-red-500`,disabled:t,children:(0,$.jsx)(Ke,{className:`size-5`})})})})}var Ct=({data:e,isEditMode:t=!1,control:n,businessTripId:r})=>{let i=Z(ee,e),[a,o]=(0,Q.useState)([]),[{data:c,fetching:l,error:d}]=_({query:s,variables:{businessTripId:r}});(0,Q.useEffect)(()=>{c?.businessTrip?.attendees.length&&o(c.businessTrip.attendees.map(e=>({value:e.id,label:e.name})).sort((e,t)=>e.label>t.label?1:-1))},[c,o]),(0,Q.useEffect)(()=>{d&&b.error(`Error`,{description:`Oops, we have an error fetching attendees`})},[d]);let f=Array.from(new Set(i.charges?.map(e=>e.id)));return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`td`,{children:(0,$.jsx)(`div`,{className:`flex flex-col gap-2 justify-center`,children:t&&i.payedByEmployee?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(V,{name:`date`,control:n,defaultValue:i.date,rules:{pattern:{value:S,message:`Date must be im format yyyy-mm-dd`}},render:({field:e,fieldState:t})=>(0,$.jsx)(k,{...e,form:`form ${i.id}`,"data-autofocus":!0,onChange:t=>{let n=t?typeof t==`string`?t:X(t,`yyyy-MM-dd`):void 0;n!==e.value&&e.onChange(n)},value:e.value?new Date(e.value):void 0,label:`Date`,error:t.error?.message,popoverProps:{withinPortal:!0}})}),(0,$.jsx)(V,{name:`valueDate`,control:n,defaultValue:i.valueDate,rules:{pattern:{value:S,message:`Date must be im format yyyy-mm-dd`}},render:({field:e,fieldState:t})=>(0,$.jsx)(k,{...e,form:`form ${i.id}`,onChange:t=>{let n=t?typeof t==`string`?t:X(t,`yyyy-MM-dd`):void 0;n!==e.value&&e.onChange(n)},value:e.value?new Date(e.value):void 0,label:`Value Date`,error:t.error?.message,popoverProps:{withinPortal:!0}})})]}):(0,$.jsxs)($.Fragment,{children:[i.date&&X(new Date(i.date),`dd/MM/yy`),(0,$.jsx)(Y,{fz:`sm`,c:`dimmed`,children:i.valueDate&&X(new Date(i.valueDate),`dd/MM/yy`)})]})})}),(0,$.jsx)(`td`,{children:t&&i.payedByEmployee?(0,$.jsx)(V,{name:`amount`,control:n,defaultValue:i.amount?.raw??void 0,render:({field:e,fieldState:t})=>(0,$.jsx)(V,{name:`currency`,control:n,defaultValue:i.amount?.currency??u.Ils,render:({field:n,fieldState:r})=>(0,$.jsx)(Ue,{form:`form ${i.id}`,...e,value:e.value??void 0,error:t.error?.message||r.error?.message,label:`Amount`,currencyCodeProps:{...n,label:`Currency`,form:`form ${i.id}`}})})}):(0,$.jsx)(`div`,{children:i.amount?.formatted})}),(0,$.jsx)(`td`,{children:(0,$.jsx)(`div`,{className:`flex flex-col gap-2 justify-center`,children:t&&i.payedByEmployee?(0,$.jsx)(V,{name:`employeeBusinessId`,control:n,defaultValue:i.employee?.id,render:({field:e,fieldState:t})=>(0,$.jsx)(L,{form:`form ${i.id}`,...e,data:a,value:e.value,disabled:l,label:`Attendee`,placeholder:`Scroll to see all options`,maxDropdownHeight:160,searchable:!0,error:t.error?.message,withinPortal:!0})}):(0,$.jsx)(`div`,{className:`flex flex-row gap-2 items-center`,children:i.payedByEmployee&&(0,$.jsx)(Y,{c:i.employee?.name?void 0:`red`,children:i.employee?.name??`Missing`})})})}),(0,$.jsx)(`td`,{children:(0,$.jsx)(`div`,{className:`flex flex-col gap-2`,children:f.map(e=>(0,$.jsx)(Ae,{to:je.CHARGES.DETAIL(e),target:`_blank`,rel:`noreferrer`,onClick:e=>e.stopPropagation(),className:`inline-flex items-center font-semibold`,children:`To Charge`},e))})})]})},wt=()=>(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`th`,{children:`Date`}),(0,$.jsx)(`th`,{children:`Amount`}),(0,$.jsx)(`th`,{children:`Payed By Attendee`}),(0,$.jsx)(`th`,{children:`Charges`})]}),Tt=({data:e,businessTripId:t,onChange:n})=>{let r=Z(le,e),[i,a]=(0,Q.useState)(!1),o=j({defaultValues:{id:r.id,businessTripId:t,attendeesStay:r.attendeesStay.map(e=>({attendeeId:e.id,nightsCount:e.nightsCount}))}}),{control:s,handleSubmit:c}=o,{updateBusinessTripAccommodationsExpense:l,fetching:u}=mt(),d=e=>{l({fields:e}).then(()=>{n?.(),a(!1)})};return(0,$.jsxs)(`tr`,{children:[(0,$.jsx)(Ct,{data:r,isEditMode:i,control:s,businessTripId:t}),(0,$.jsx)(`td`,{children:(0,$.jsx)(w,{...o,children:(0,$.jsx)(`form`,{id:`form ${r.id}`,onSubmit:c(d),children:i?(0,$.jsx)(O,{name:`country`,control:s,defaultValue:r.country,render:({field:e})=>(0,$.jsxs)(A,{children:[(0,$.jsx)(P,{children:(0,$.jsx)(H,{form:`form ${r.id}`,...e,value:e.value??void 0})}),(0,$.jsx)(E,{})]})}):(0,$.jsx)(Y,{c:r.country?void 0:`red`,children:r.country?.name??`Missing`})})})}),(0,$.jsx)(`td`,{children:(0,$.jsx)(`div`,{className:`flex flex-col gap-2 justify-center`,children:i?(0,$.jsx)(w,{...o,children:(0,$.jsx)(O,{name:`nightsCount`,control:s,defaultValue:r.nightsCount,render:({field:e})=>(0,$.jsxs)(A,{children:[(0,$.jsx)(P,{children:(0,$.jsx)(Je,{...e,value:e.value??void 0,form:`form ${r.id}`,hideControls:!0,decimalScale:0,thousandSeparator:`,`})}),(0,$.jsx)(E,{})]})})}):(0,$.jsx)(Y,{c:r.nightsCount?void 0:`red`,children:r.nightsCount??`Missing`})})}),(0,$.jsx)(`td`,{children:i?(0,$.jsx)(w,{...o,children:(0,$.jsx)(lt,{formManager:o,attendeesStayPath:`attendeesStay`,businessTripId:t})}):(0,$.jsx)(We,{listStyleType:`disc`,children:r.attendeesStay?.length?r.attendeesStay.map(e=>(0,$.jsxs)(We.Item,{children:[e.attendee.name,` (`,e.nightsCount,`)`]},e.id)):(0,$.jsx)(Y,{c:`red`,fz:`sm`,children:`Missing`})})}),(0,$.jsx)(`td`,{children:n&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(z,{content:`Edit`,children:(0,$.jsx)(W,{disabled:u,variant:i?`default`:`outline`,size:`icon`,className:`size-7.5`,onClick:e=>{e.stopPropagation(),a(e=>!e)},children:(0,$.jsx)(D,{className:`size-5`})})}),i&&(0,$.jsx)(z,{content:`Confirm Changes`,children:(0,$.jsx)(W,{type:`submit`,form:`form ${r.id}`,variant:`outline`,size:`icon`,className:`size-7.5 text-green-500`,children:(0,$.jsx)(C,{className:`size-5`})})}),(0,$.jsx)(_t,{businessTripExpenseId:r.id,businessTripId:t,onChange:n}),(0,$.jsx)(St,{businessTripExpenseId:r.id,onDelete:n})]})})]},r.id)},Et=({businessTripId:e,expenses:t,onChange:n})=>{if(!t?.length)return n?(0,$.jsx)(dt,{businessTripId:e,onAdd:n}):(0,$.jsx)($.Fragment,{});let r=t.map(e=>Z(ne,e));return(0,$.jsx)(`div`,{className:`flex flex-col gap-2 mt-5`,children:(0,$.jsxs)(I,{highlightOnHover:!0,withBorder:!0,children:[(0,$.jsx)(`thead`,{children:(0,$.jsxs)(`tr`,{children:[(0,$.jsx)(wt,{}),(0,$.jsx)(`th`,{children:`Location`}),(0,$.jsx)(`th`,{children:`Nights`}),(0,$.jsx)(`th`,{children:`Attendees Stay`}),(0,$.jsx)(`th`,{})]})}),(0,$.jsxs)(`tbody`,{children:[r.sort((e,t)=>e.date&&t.date?e.date<t.date?1:-1:e.date?-1:t.date?1:0).map(t=>(0,$.jsx)(Tt,{data:t,businessTripId:e,onChange:n},t.id)),n&&(0,$.jsx)(`tr`,{children:(0,$.jsx)(`td`,{colSpan:6,children:(0,$.jsx)(dt,{businessTripId:e,onAdd:n})})})]})]})})},Dt=({data:e,onChange:t})=>{let{accommodationExpenses:n,id:r}=Z(ue,e);return(0,$.jsx)(Et,{businessTripId:r,expenses:n,onChange:t})},Ot=`insertBusinessTripAttendee`,kt=()=>{let[{fetching:e},t]=c(i);return{fetching:e,insertBusinessTripAttendee:(0,Q.useCallback)(async e=>{let n=`Error adding attendee to business trip`,r=Ot;b.loading(`Adding attendee`,{id:r});try{let i=x(await t(e),n,r);if(i)return b.success(`Success`,{id:r,description:`Attendee was added to the business trip`}),i.insertBusinessTripAttendee}catch(e){console.error(`${n}: ${e}`),b.error(`Error`,{id:r,description:n,duration:1e5,closeButton:!0})}},[t])}};function At(e){let{businessTripId:t,onAdd:n}=e,[r,{close:i,open:a}]=M(!1);return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(z,{content:`Add Attendee`,children:(0,$.jsx)(W,{variant:`outline`,size:`icon`,onClick:e=>{e.stopPropagation(),a()},className:`size-7.5`,children:(0,$.jsx)(U,{className:`size-5`})})}),r&&(0,$.jsx)(jt,{businessTripId:t,opened:r,close:i,onAdd:n})]})}function jt({businessTripId:e,opened:t,close:n,onAdd:r}){let{selectableBusinesses:i,fetching:a}=Be(),{control:o,handleSubmit:s}=j({defaultValues:{businessTripId:e}}),{insertBusinessTripAttendee:c,fetching:l}=kt();return(0,$.jsxs)(F,{opened:t,onClose:n,centered:!0,children:[(0,$.jsx)(F.Title,{children:`Add Attendee`}),(0,$.jsx)(F.Body,{children:(0,$.jsxs)(`form`,{onSubmit:s(e=>{c({fields:e}).then(()=>{r?.(),n()})}),children:[(0,$.jsx)(V,{name:`attendeeId`,control:o,render:({field:e,fieldState:t})=>(0,$.jsx)(L,{"data-autofocus":!0,...e,data:i,value:e.value,disabled:a,label:`Attendee`,placeholder:`Scroll to see all options`,maxDropdownHeight:160,searchable:!0,error:t.error?.message,withAsterisk:!0,withinPortal:!0})}),(0,$.jsx)(V,{name:`arrivalDate`,control:o,rules:{pattern:{value:S,message:`Date must be im format yyyy-mm-dd`}},render:({field:e,fieldState:t})=>(0,$.jsx)(k,{...e,onChange:t=>{let n=t?typeof t==`string`?t:X(t,`yyyy-MM-dd`):void 0;n!==e.value&&e.onChange(n)},value:e.value?new Date(e.value):void 0,error:t.error?.message,label:`Arrival`,popoverProps:{withinPortal:!0}})}),(0,$.jsx)(V,{name:`departureDate`,control:o,rules:{pattern:{value:S,message:`Date must be im format yyyy-mm-dd`}},render:({field:e,fieldState:t})=>(0,$.jsx)(k,{...e,onChange:t=>{let n=t?typeof t==`string`?t:X(t,`yyyy-MM-dd`):void 0;n!==e.value&&e.onChange(n)},value:e.value?new Date(e.value):void 0,error:t.error?.message,label:`Departure`,popoverProps:{withinPortal:!0}})}),(0,$.jsx)(`div`,{className:`flex justify-center mt-5 gap-3`,children:(0,$.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`})})]})}),(l||a)&&(0,$.jsx)(B,{blur:1,center:!0,children:(0,$.jsx)(J,{})})]})}var Mt=`updateBusinessTripAttendee`,Nt=()=>{let[{fetching:e},t]=c(ie);return{fetching:e,updateBusinessTripAttendee:(0,Q.useCallback)(async e=>{let n=`Error updating business trip attendee`,r=Mt;b.loading(`Updating trip attendee`,{id:r});try{let i=x(await t(e),n,r);if(i)return b.success(`Success`,{id:r,description:`Business trip attendee was updated`}),i.updateBusinessTripAttendee}catch(e){console.error(`${n}: ${e}`),b.error(`Error`,{id:r,description:n,duration:1e5,closeButton:!0})}},[t])}},Pt=`deleteBusinessTripAttendee`,Ft=()=>{let[{fetching:e},t]=c(p);return{fetching:e,deleteBusinessTripAttendee:(0,Q.useCallback)(async e=>{let n=`Error removing business trip attendee`,r=Pt;b.loading(`Removing business trip attendee`,{id:r});try{let i=x(await t(e),n,r);if(i)return b.success(`Success`,{id:r,description:`Business trip attendee was removed`}),i.deleteBusinessTripAttendee}catch(e){console.error(`${n}: ${e}`),b.error(`Error`,{id:r,description:n,duration:1e5,closeButton:!0})}},[t])}};function It(e){let{fetching:t,deleteBusinessTripAttendee:n}=Ft();return(0,$.jsx)(z,{content:`Remove Attendee`,children:(0,$.jsx)(Xe,{onConfirm:(0,Q.useCallback)(()=>{n({fields:{businessTripId:e.businessTripId,attendeeId:e.attendeeId}}).then(()=>{e.onDelete?.()})},[e,n]),title:`Are you sure you want to remove attendee?`,children:(0,$.jsx)(W,{variant:`outline`,size:`icon`,className:`size-7.5 text-red-500`,disabled:t,children:(0,$.jsx)(Ke,{className:`size-5`})})})})}var Lt=`addBusinessTripFlightsExpense`,Rt=()=>{let[{fetching:e},t]=c(se);return{fetching:e,addBusinessTripFlightsExpense:(0,Q.useCallback)(async e=>{let n=`Error adding business trip flight expense`,r=Lt;b.loading(`Adding business trip flight expense`,{id:r});try{let i=x(await t(e),n,r);if(i)return b.success(`Success`,{id:r,description:`Business trip flight expense added`}),i.addBusinessTripFlightsExpense}catch(e){console.error(`${n}: ${e}`),b.error(`Error`,{id:r,description:n,duration:1e5,closeButton:!0})}},[t])}};function zt({formManager:e,flightPathPath:t,flightPathData:n}){let{control:r,watch:i,trigger:a}=e,{fields:o,append:s,remove:c}=Pe({control:r,name:t}),l=i(t),u=o.map((e,t)=>({...e,...l[t]}));return n?(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`span`,{className:`mantine-InputWrapper-label mantine-Select-label`,children:`Flight Path`}),(0,$.jsxs)(`div`,{className:`h-full flex flex-col overflow-hidden`,children:[u?.map((e,n)=>(0,$.jsxs)(`div`,{className:`flex items-end gap-2 text-gray-600 mb-2`,children:[(0,$.jsx)(`div`,{className:`w-full mt-1 relative rounded-md shadow-xs`,children:(0,$.jsx)(O,{name:`${t}.${n}`,control:r,rules:{required:`Required`},render:({field:e})=>(0,$.jsxs)(A,{children:[(0,$.jsx)(P,{children:(0,$.jsx)(H,{...e,value:e.value??void 0,placeholder:`Destination`})}),(0,$.jsx)(E,{})]})})}),(0,$.jsx)(W,{variant:`ghost`,size:`icon`,className:`mb-2 size-7.5`,onClick:()=>{c(n),a(t)},children:(0,$.jsx)($e,{className:`size-5`})})]},e.id)),(0,$.jsx)(W,{variant:`ghost`,size:`icon`,className:`size-7.5`,onClick:()=>{s(``),a(t)},children:(0,$.jsx)(Re,{className:`size-5`})})]})]}):(0,$.jsx)(`div`,{children:`Cannot edit flight path stay, lacking some mandatory information!`})}function Bt(e){let{businessTripId:t,onAdd:n}=e,[r,{close:i,open:a}]=M(!1);return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(z,{content:`Add Flight Expense`,children:(0,$.jsx)(W,{variant:`outline`,size:`icon`,className:`size-7.5`,onClick:e=>{e.stopPropagation(),a()},children:(0,$.jsx)(U,{className:`size-5`})})}),r&&(0,$.jsx)(Ht,{businessTripId:t,opened:r,close:i,onAdd:n})]})}var Vt=Object.entries(he).map(([e,t])=>({value:t,label:e}));function Ht({businessTripId:e,opened:t,close:n,onAdd:r}){let i=j({defaultValues:{businessTripId:e}}),{control:a,handleSubmit:o}=i,[c,l]=(0,Q.useState)(!1),[{data:u,fetching:d}]=_({query:s,variables:{businessTripId:e}}),{addBusinessTripFlightsExpense:f,fetching:p}=Rt(),m=e=>{f({fields:e}).then(()=>{r?.(),n()})},h=u?.businessTrip?.attendees.map(e=>({value:e.id,label:e.name}))??[];return(0,$.jsxs)(F,{opened:t,onClose:n,centered:!0,lockScroll:!0,children:[(0,$.jsx)(F.Title,{children:`Add Flight Expense`}),(0,$.jsx)(F.Body,{children:(0,$.jsx)(w,{...i,children:(0,$.jsxs)(`form`,{onSubmit:o(m),children:[(0,$.jsx)(ut,{businessTripId:e,control:a,setFetching:l}),(0,$.jsx)(zt,{formManager:i,flightPathPath:`path`}),(0,$.jsx)(V,{name:`flightClass`,control:a,render:({field:e,fieldState:t})=>(0,$.jsx)(L,{...e,data:Vt,value:e.value,label:`Flight Class`,placeholder:`Scroll to see all options`,maxDropdownHeight:160,searchable:!0,error:t.error?.message,withinPortal:!0})}),(0,$.jsx)(V,{name:`attendeeIds`,control:a,render:({field:e,fieldState:t})=>(0,$.jsx)(rt,{...e,disabled:d,data:h,value:e.value??[],label:`Attendees`,placeholder:`Scroll to see all options`,maxDropdownHeight:160,searchable:!0,error:t.error?.message,withinPortal:!0})}),(0,$.jsx)(`div`,{className:`flex justify-center mt-5 gap-3`,children:(0,$.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`})})]})})}),(p||c)&&(0,$.jsx)(B,{blur:1,center:!0,children:(0,$.jsx)(J,{})})]})}var Ut=`updateBusinessTripFlightsExpense`,Wt=()=>{let[{fetching:e},t]=c(we);return{fetching:e,updateBusinessTripFlightsExpense:(0,Q.useCallback)(async e=>{let n=`Error updating business trip flights expense`,r=Ut;b.loading(`Updating trip flights expense`,{id:r});try{let i=x(await t(e),n,r);if(i)return b.success(`Success`,{id:r,description:`Business trip flights expense was updated`}),i.updateBusinessTripFlightsExpense}catch(e){console.error(`${n}: ${e}`),b.error(`Error`,{id:r,description:n,duration:1e5,closeButton:!0})}},[t])}},Gt=Object.entries(he).map(([e,t])=>({value:t,label:e})),Kt=({data:e,businessTripId:t,onChange:n,attendees:r})=>{let i=Z(te,e),[a,o]=(0,Q.useState)(!1),s=j({defaultValues:{id:i.id,businessTripId:t,attendeeIds:i.attendees?.map(e=>e.id)??[],path:i.path??[]}}),{control:c,handleSubmit:l}=s,{updateBusinessTripFlightsExpense:u,fetching:d}=Wt(),f=e=>{u({fields:e}).then(()=>{n?.(),o(!1)})},p=r.map(e=>({value:e.id,label:e.name}));return(0,$.jsxs)(`tr`,{children:[(0,$.jsx)(Ct,{data:i,isEditMode:a,control:c,businessTripId:t}),(0,$.jsx)(`td`,{children:(0,$.jsx)(w,{...s,children:(0,$.jsx)(`form`,{id:`form ${i.id}`,onSubmit:l(f),children:(0,$.jsxs)(`div`,{className:`flex flex-col gap-2 justify-center`,children:[a?(0,$.jsx)(zt,{formManager:s,flightPathPath:`path`,flightPathData:i.path??void 0}):(0,$.jsx)(`div`,{className:`flex gap-2 items-center`,children:i.path?.length?i.path.map((e,t)=>(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(Y,{fw:700,children:e},t),t<i.path.length-1&&(e===i.path[t+1]?` | `:` → `)]})):(0,$.jsx)(Y,{fw:700,className:`flex gap-2 items-center`,c:`red`,children:`Missing`})}),a?(0,$.jsx)(V,{name:`flightClass`,control:c,defaultValue:i.class??void 0,render:({field:e,fieldState:t})=>(0,$.jsx)(L,{form:`form ${i.id}`,"data-autofocus":!0,...e,data:Gt,value:e.value,label:`Flight Class`,placeholder:`Scroll to see all options`,maxDropdownHeight:160,searchable:!0,error:t.error?.message,withinPortal:!0})}):(0,$.jsx)(Y,{c:i.class?void 0:`red`,fz:`sm`,children:`Class: ${i.class??`Missing`}`})]})})})}),(0,$.jsx)(`td`,{children:a?(0,$.jsx)(V,{name:`attendeeIds`,control:c,defaultValue:i.attendees?.map(e=>e.id)??void 0,render:({field:e,fieldState:t})=>(0,$.jsx)(rt,{...e,form:`form ${i.id}`,data:p,value:e.value??[],label:`Attendees`,placeholder:`Scroll to see all options`,maxDropdownHeight:160,searchable:!0,error:t.error?.message,withinPortal:!0})}):(0,$.jsx)(We,{listStyleType:`disc`,children:i.attendees?.length?i.attendees.map(e=>(0,$.jsx)(We.Item,{children:e.name},e.id)):(0,$.jsx)(Y,{c:`red`,fz:`sm`,children:`Missing`})})}),(0,$.jsx)(`td`,{children:n&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(z,{content:`Edit`,children:(0,$.jsx)(W,{disabled:d,variant:a?`default`:`outline`,size:`icon`,className:`size-7.5`,onClick:e=>{e.stopPropagation(),o(e=>!e)},children:(0,$.jsx)(D,{className:`size-5`})})}),a&&(0,$.jsx)(z,{content:`Confirm Changes`,children:(0,$.jsx)(W,{type:`submit`,form:`form ${i.id}`,variant:`outline`,size:`icon`,className:`size-7.5 text-green-500`,children:(0,$.jsx)(C,{className:`size-5`})})}),(0,$.jsx)(_t,{businessTripExpenseId:i.id,businessTripId:t,onChange:n}),(0,$.jsx)(St,{businessTripExpenseId:i.id,onDelete:n})]})})]},i.id)},qt=({businessTripId:e,expenses:t,attendees:n,onChange:r})=>{if(!t?.length)return r?(0,$.jsx)(Bt,{businessTripId:e,onAdd:r}):(0,$.jsx)($.Fragment,{});let i=t.map(e=>Z(a,e));return(0,$.jsx)(`div`,{className:`flex flex-col gap-2 mt-5`,children:(0,$.jsxs)(I,{highlightOnHover:!0,withBorder:!0,children:[(0,$.jsx)(`thead`,{children:(0,$.jsxs)(`tr`,{children:[(0,$.jsx)(wt,{}),(0,$.jsx)(`th`,{children:`Flight`}),(0,$.jsx)(`th`,{children:`Attendees`}),(0,$.jsx)(`th`,{})]})}),(0,$.jsxs)(`tbody`,{children:[i.sort((e,t)=>e.date&&t.date?e.date<t.date?1:-1:e.date?-1:t.date?1:0).map(t=>(0,$.jsx)(Kt,{data:t,businessTripId:e,onChange:r,attendees:n},t.id)),r&&(0,$.jsx)(`tr`,{children:(0,$.jsx)(`td`,{colSpan:5,children:(0,$.jsx)(Bt,{businessTripId:e,onAdd:r})})})]})]})})},Jt=({data:e,businessTripId:t,onChange:n})=>{let r=Z(Te,e),[i,a]=(0,Q.useState)(!1),[o,s]=(0,Q.useState)(!1),{control:c,handleSubmit:l}=j({defaultValues:{businessTripId:t,attendeeId:r.id,arrivalDate:r.arrivalDate,departureDate:r.departureDate}}),{updateBusinessTripAttendee:u,fetching:d}=Nt();return(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`tr`,{children:[(0,$.jsx)(`td`,{children:r.name}),(0,$.jsx)(`td`,{children:i?(0,$.jsx)(`form`,{id:`form ${r.id}`,onSubmit:l(e=>{u({fields:e}).then(()=>{n?.(),a(!1)})}),children:(0,$.jsx)(V,{name:`arrivalDate`,control:c,defaultValue:r.arrivalDate,rules:{pattern:{value:S,message:`Date must be im format yyyy-mm-dd`}},render:({field:e,fieldState:t})=>(0,$.jsx)(k,{...e,onChange:t=>{let n=t?typeof t==`string`?t:X(t,`yyyy-MM-dd`):void 0;n!==e.value&&e.onChange(n)},"data-autofocus":!0,value:e.value?new Date(e.value):void 0,error:t.error?.message,label:`Arrival`,popoverProps:{withinPortal:!0}})})}):r.arrivalDate}),(0,$.jsx)(`td`,{children:i?(0,$.jsx)(V,{name:`departureDate`,control:c,defaultValue:r.departureDate,rules:{pattern:{value:S,message:`Date must be im format yyyy-mm-dd`}},render:({field:e,fieldState:t})=>(0,$.jsx)(k,{...e,onChange:t=>{let n=t?typeof t==`string`?t:X(t,`yyyy-MM-dd`):void 0;n!==e.value&&e.onChange(n)},value:e.value?new Date(e.value):void 0,error:t.error?.message,label:`Departure`,popoverProps:{withinPortal:!0}})}):r.departureDate}),(0,$.jsxs)(`td`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(z,{content:`Edit`,children:(0,$.jsx)(W,{disabled:d,variant:i?`default`:`outline`,size:`icon`,className:`size-7.5`,onClick:e=>{e.stopPropagation(),a(e=>!e)},children:(0,$.jsx)(D,{className:`size-5`})})}),i&&(0,$.jsx)(z,{content:`Confirm Changes`,children:(0,$.jsx)(W,{type:`submit`,form:`form ${r.id}`,variant:`outline`,size:`icon`,className:`size-7.5 text-green-500`,children:(0,$.jsx)(C,{className:`size-5`})})}),(0,$.jsx)(It,{businessTripId:t,attendeeId:r.id,onDelete:n}),(0,$.jsx)(Fe,{toggleExpansion:s,isExpanded:o})]})]},r.id),o&&(0,$.jsx)(`tr`,{children:(0,$.jsx)(`td`,{colSpan:4,children:(0,$.jsx)(nt,{shadow:`sm`,withBorder:!0,children:(0,$.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[r.flights&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`div`,{children:`Flights:`}),(0,$.jsx)(qt,{businessTripId:t,attendees:[],expenses:r.flights})]}),r.accommodations&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`div`,{children:`Accommodations:`}),(0,$.jsx)(Et,{businessTripId:t,expenses:r.accommodations})]})]})})})},`${r.id}-expension`)]})},Yt=({data:e,onChange:t})=>{let{attendees:n,id:r}=Z(Oe,e);return n?.length?(0,$.jsx)(`div`,{className:`flex flex-col gap-2 mt-5`,children:(0,$.jsxs)(I,{highlightOnHover:!0,withBorder:!0,children:[(0,$.jsx)(`thead`,{children:(0,$.jsxs)(`tr`,{children:[(0,$.jsx)(`th`,{children:`Name`}),(0,$.jsx)(`th`,{children:`Arrival Date`}),(0,$.jsx)(`th`,{children:`Departure Date`}),(0,$.jsx)(`th`,{})]})}),(0,$.jsxs)(`tbody`,{children:[n.sort((e,t)=>e.name.toLocaleLowerCase()>t.name.toLocaleLowerCase()?1:-1).map(e=>(0,$.jsx)(Jt,{data:e,businessTripId:r,onChange:t},e.id)),(0,$.jsx)(`tr`,{children:(0,$.jsx)(`td`,{colSpan:4,children:(0,$.jsx)(At,{businessTripId:r,onAdd:t})})})]})]})}):(0,$.jsx)(At,{businessTripId:r,onAdd:t})},Xt=`addBusinessTripCarRentalExpense`,Zt=()=>{let[{fetching:e},t]=c(ae);return{fetching:e,addBusinessTripCarRentalExpense:(0,Q.useCallback)(async e=>{let n=`Error adding business trip car rental expense`;b.loading(`Adding car rental expense...`,{id:Xt});try{let r=x(await t(e),n,Xt);if(r)return b.success(`Success`,{id:Xt,description:`Car rental expense added`}),r.addBusinessTripCarRentalExpense}catch(e){console.error(`${n}: ${e}`),b.error(`Error`,{id:Xt,description:n,duration:1e5,closeButton:!0})}},[t])}};function Qt(e){let{businessTripId:t,onAdd:n}=e,[r,{close:i,open:a}]=M(!1);return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(z,{content:`Add Car Rental Expense`,children:(0,$.jsx)(W,{variant:`outline`,size:`icon`,onClick:e=>{e.stopPropagation(),a()},className:`size-7.5`,children:(0,$.jsx)(U,{className:`size-5`})})}),r&&(0,$.jsx)($t,{businessTripId:t,opened:r,close:i,onAdd:n})]})}function $t({businessTripId:e,opened:t,close:n,onAdd:r}){let i=j({defaultValues:{businessTripId:e}}),{control:a,handleSubmit:o}=i,[s,c]=(0,Q.useState)(!1),{addBusinessTripCarRentalExpense:l,fetching:u}=Zt(),d=e=>{l({fields:e}).then(()=>{r?.(),n()})};return(0,$.jsxs)(F,{opened:t,onClose:n,centered:!0,lockScroll:!0,children:[(0,$.jsx)(F.Title,{children:`Add Car Rental Expense`}),(0,$.jsx)(F.Body,{children:(0,$.jsx)(w,{...i,children:(0,$.jsxs)(`form`,{onSubmit:o(d),children:[(0,$.jsx)(ut,{businessTripId:e,control:a,setFetching:c}),(0,$.jsx)(V,{name:`days`,control:a,render:({field:e,fieldState:t})=>(0,$.jsx)(N,{...e,value:e.value??void 0,hideControls:!0,precision:2,removeTrailingZeros:!0,error:t.error?.message,label:`Rent Days`})}),(0,$.jsx)(O,{name:`isFuelExpense`,control:a,render:({field:{value:e,...t}})=>(0,$.jsxs)(A,{className:`flex flex-row items-center justify-between rounded-lg border p-3 shadow-sm`,children:[(0,$.jsx)(`div`,{className:`space-y-0.5`,children:(0,$.jsx)(T,{children:`Is Fuel Expense`})}),(0,$.jsx)(P,{children:(0,$.jsx)(qe,{...t,checked:e===!0,onCheckedChange:t.onChange})}),(0,$.jsx)(E,{})]})}),(0,$.jsx)(`div`,{className:`flex justify-center mt-5 gap-3`,children:(0,$.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`})})]})})}),(u||s)&&(0,$.jsx)(B,{blur:1,center:!0,children:(0,$.jsx)(J,{})})]})}var en=`updateBusinessTripCarRentalExpense`,tn=()=>{let[{fetching:e},t]=c(pe);return{fetching:e,updateBusinessTripCarRentalExpense:(0,Q.useCallback)(async e=>{let n=`Error updating business trip car rental expense`,r=en;b.loading(`Updating trip car rental expense`,{id:r});try{let i=x(await t(e),n,r);if(i)return b.success(`Success`,{id:r,description:`Business trip car rental expense was updated`}),i.updateBusinessTripCarRentalExpense}catch(e){console.error(`${n}: ${e}`),b.error(`Error`,{id:r,description:n,duration:1e5,closeButton:!0})}},[t])}},nn=({data:e,businessTripId:t,onChange:n})=>{let r=Z(De,e),[i,a]=(0,Q.useState)(!1),o=j({defaultValues:{id:r.id,businessTripId:t}}),{control:s,handleSubmit:c}=o,{updateBusinessTripCarRentalExpense:l,fetching:u}=tn(),d=e=>{l({fields:e}).then(()=>{n?.(),a(!1)})};return(0,$.jsxs)(`tr`,{children:[(0,$.jsx)(Ct,{data:r,isEditMode:i,control:s,businessTripId:t}),(0,$.jsx)(`td`,{children:(0,$.jsx)(w,{...o,children:(0,$.jsx)(`form`,{id:`form ${r.id}`,onSubmit:c(d),children:(0,$.jsx)(`div`,{className:`flex flex-col gap-2 justify-center`,children:r.isFuelExpense!==!0&&(i?(0,$.jsx)(V,{name:`days`,control:s,defaultValue:r.days,render:({field:e,fieldState:t})=>(0,$.jsx)(N,{...e,value:e.value??void 0,form:`form ${r.id}`,hideControls:!0,precision:2,removeTrailingZeros:!0,error:t.error?.message,placeholder:`Rent Days`})}):(0,$.jsx)(Y,{c:r.days?void 0:`red`,children:r.days??`Missing`}))})})})}),(0,$.jsx)(`td`,{children:i?(0,$.jsx)(w,{...o,children:(0,$.jsx)(O,{name:`isFuelExpense`,control:s,defaultValue:r.isFuelExpense,render:({field:e})=>(0,$.jsxs)(A,{className:`flex flex-row items-center justify-between rounded-lg border p-3 shadow-sm`,children:[(0,$.jsx)(`div`,{className:`space-y-0.5`,children:(0,$.jsx)(T,{children:`Is Fuel Expense`})}),(0,$.jsx)(P,{children:(0,$.jsx)(qe,{form:`form ${r.id}`,checked:e.value===!0,onCheckedChange:e.onChange})})]})})}):r.isFuelExpense===!0?(0,$.jsx)(ot,{}):(0,$.jsx)(at,{})}),(0,$.jsxs)(`td`,{children:[(0,$.jsx)(z,{content:`Edit`,children:(0,$.jsx)(W,{disabled:u,variant:i?`default`:`outline`,size:`icon`,className:`size-7.5`,onClick:e=>{e.stopPropagation(),a(e=>!e)},children:(0,$.jsx)(D,{className:`size-5`})})}),i&&(0,$.jsx)(z,{content:`Confirm Changes`,children:(0,$.jsx)(W,{type:`submit`,form:`form ${r.id}`,variant:`outline`,size:`icon`,className:`size-7.5 text-green-500`,children:(0,$.jsx)(C,{className:`size-5`})})}),(0,$.jsx)(_t,{businessTripExpenseId:r.id,businessTripId:t,onChange:n}),(0,$.jsx)(St,{businessTripExpenseId:r.id,onDelete:n})]})]},r.id)},rn=({data:e,onChange:t})=>{let{carRentalExpenses:n,id:r}=Z(re,e);return n?.length?(0,$.jsx)(`div`,{className:`flex flex-col gap-2 mt-5`,children:(0,$.jsxs)(I,{highlightOnHover:!0,withBorder:!0,children:[(0,$.jsx)(`thead`,{children:(0,$.jsxs)(`tr`,{children:[(0,$.jsx)(wt,{}),(0,$.jsx)(`th`,{children:`Days`}),(0,$.jsx)(`th`,{children:`Type`}),(0,$.jsx)(`th`,{})]})}),(0,$.jsxs)(`tbody`,{children:[n.sort((e,t)=>e.date&&t.date?e.date<t.date?1:-1:e.date?-1:t.date?1:0).map(e=>(0,$.jsx)(nn,{data:e,businessTripId:r,onChange:t},e.id)),(0,$.jsx)(`tr`,{children:(0,$.jsx)(`td`,{colSpan:6,children:(0,$.jsx)(Qt,{businessTripId:r,onAdd:t})})})]})]})}):(0,$.jsx)(Qt,{businessTripId:r,onAdd:t})},an=({data:e,onChange:t})=>{let{flightExpenses:n,id:r,attendees:i}=Z(Ee,e);return(0,$.jsx)(qt,{businessTripId:r,attendees:i,expenses:n,onChange:t})},on=`addBusinessTripOtherExpense`,sn=()=>{let[{fetching:e},t]=c(be);return{fetching:e,addBusinessTripOtherExpense:(0,Q.useCallback)(async e=>{let n=`Error adding business trip "other" expense`,r=on;b.loading(`Adding trip "other" expense`,{id:r});try{let i=x(await t(e),n,r);if(i)return b.success(`Success`,{id:r,description:`Business trip "other" expense was added`}),i.addBusinessTripOtherExpense}catch(e){console.error(`${n}: ${e}`),b.error(`Error`,{id:r,description:n,duration:1e5,closeButton:!0})}},[t])}};function cn(e){let{businessTripId:t,onAdd:n}=e,[r,{close:i,open:a}]=M(!1);return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(z,{content:`Add Other Expense`,children:(0,$.jsx)(W,{variant:`outline`,size:`icon`,className:`size-7.5`,onClick:e=>{e.stopPropagation(),a()},children:(0,$.jsx)(U,{className:`size-5`})})}),r&&(0,$.jsx)(ln,{businessTripId:t,opened:r,close:i,onAdd:n})]})}function ln({businessTripId:e,opened:t,close:n,onAdd:r}){let i=j({defaultValues:{businessTripId:e}}),{control:a,handleSubmit:o}=i,[s,c]=(0,Q.useState)(!1),{addBusinessTripOtherExpense:l,fetching:u}=sn(),d=e=>{l({fields:e}).then(()=>{r?.(),n()})};return(0,$.jsxs)(F,{opened:t,onClose:n,centered:!0,lockScroll:!0,children:[(0,$.jsx)(F.Title,{children:`Add Other Expense`}),(0,$.jsx)(F.Body,{children:(0,$.jsx)(w,{...i,children:(0,$.jsxs)(`form`,{onSubmit:o(d),className:`space-y-3`,children:[(0,$.jsx)(ut,{businessTripId:e,control:a,setFetching:c}),(0,$.jsx)(O,{name:`description`,control:a,render:({field:e})=>(0,$.jsxs)(A,{children:[(0,$.jsx)(T,{children:`Description`}),(0,$.jsx)(P,{children:(0,$.jsx)(H,{...e,value:e.value??void 0})}),(0,$.jsx)(E,{})]})}),(0,$.jsx)(O,{control:i.control,name:`deductibleExpense`,render:({field:e})=>(0,$.jsxs)(A,{className:`flex flex-row items-center justify-between rounded-lg border p-3 shadow-sm`,children:[(0,$.jsx)(`div`,{className:`space-y-0.5`,children:(0,$.jsx)(T,{children:`Deductible Expense`})}),(0,$.jsx)(P,{children:(0,$.jsx)(qe,{checked:e.value===!0,onCheckedChange:e.onChange})})]})}),(0,$.jsx)(`div`,{className:`flex justify-center mt-5 gap-3`,children:(0,$.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`})})]})})}),(u||s)&&(0,$.jsx)(B,{blur:1,center:!0,children:(0,$.jsx)(J,{})})]})}var un=`updateBusinessTripOtherExpense`,dn=()=>{let[{fetching:e},t]=c(oe);return{fetching:e,updateBusinessTripOtherExpense:(0,Q.useCallback)(async e=>{let n=`Error updating business trip "other" expense`,r=un;b.loading(`Updating business trip "other" expense`,{id:r});try{let i=x(await t(e),n,r);if(i)return b.success(`Success`,{id:r,description:`Business trip "other" expense was updated`}),i.updateBusinessTripOtherExpense}catch(e){console.error(`${n}: ${e}`),b.error(`Error`,{id:r,description:n,duration:1e5,closeButton:!0})}},[t])}},fn=({data:e,businessTripId:t,onChange:n})=>{let r=Z(fe,e),[i,a]=(0,Q.useState)(!1),o=j({defaultValues:{id:r.id,businessTripId:t}}),{control:s,handleSubmit:c}=o,{updateBusinessTripOtherExpense:l,fetching:u}=dn(),d=e=>{l({fields:e}).then(()=>{n?.(),a(!1)})};return(0,$.jsxs)(`tr`,{children:[(0,$.jsx)(Ct,{data:r,isEditMode:i,control:s,businessTripId:t}),(0,$.jsx)(`td`,{children:(0,$.jsx)(w,{...o,children:(0,$.jsx)(`form`,{id:`form ${r.id}`,onSubmit:c(d),children:i?(0,$.jsx)(O,{name:`description`,control:s,defaultValue:r.description,render:({field:e})=>(0,$.jsxs)(A,{children:[(0,$.jsx)(P,{children:(0,$.jsx)(H,{form:`form ${r.id}`,...e,value:e.value??void 0})}),(0,$.jsx)(E,{})]})}):(0,$.jsx)(Y,{c:r.description?void 0:`red`,children:r.description??`Missing`})})})}),(0,$.jsx)(`td`,{children:(0,$.jsx)(`div`,{className:`flex flex-col gap-2 justify-center`,children:i?(0,$.jsx)(w,{...o,children:(0,$.jsx)(O,{name:`deductibleExpense`,control:o.control,defaultValue:r.deductibleExpense,render:({field:e})=>(0,$.jsx)(A,{children:(0,$.jsx)(P,{children:(0,$.jsx)(qe,{form:`form ${r.id}`,checked:e.value===!0,onCheckedChange:e.onChange})})})})}):(0,$.jsx)(Y,{c:r.deductibleExpense?void 0:`red`,children:r.deductibleExpense===!0?`Yes`:r.deductibleExpense===!1?`No`:`Missing`})})}),(0,$.jsxs)(`td`,{children:[(0,$.jsx)(z,{content:`Edit`,children:(0,$.jsx)(W,{disabled:u,variant:i?`default`:`outline`,size:`icon`,className:`size-7.5`,onClick:e=>{e.stopPropagation(),a(e=>!e)},children:(0,$.jsx)(D,{className:`size-5`})})}),i&&(0,$.jsx)(z,{content:`Confirm Changes`,children:(0,$.jsx)(W,{type:`submit`,form:`form ${r.id}`,variant:`outline`,size:`icon`,className:`size-7.5 text-green-500`,children:(0,$.jsx)(C,{className:`size-5`})})}),(0,$.jsx)(_t,{businessTripExpenseId:r.id,businessTripId:t,onChange:n}),(0,$.jsx)(St,{businessTripExpenseId:r.id,onDelete:n})]})]},r.id)},pn=({data:e,onChange:t})=>{let{otherExpenses:n,id:r}=Z(f,e);return n?.length?(0,$.jsx)(`div`,{className:`flex flex-col gap-2 mt-5`,children:(0,$.jsxs)(I,{highlightOnHover:!0,withBorder:!0,children:[(0,$.jsx)(`thead`,{children:(0,$.jsxs)(`tr`,{children:[(0,$.jsx)(wt,{}),(0,$.jsx)(`th`,{children:`Description`}),(0,$.jsx)(`th`,{children:`Deductible Expense`}),(0,$.jsx)(`th`,{})]})}),(0,$.jsxs)(`tbody`,{children:[n.sort((e,t)=>e.date&&t.date?e.date<t.date?1:-1:e.date?-1:t.date?1:0).map(e=>(0,$.jsx)(fn,{data:e,businessTripId:r,onChange:t},e.id)),(0,$.jsx)(`tr`,{children:(0,$.jsx)(`td`,{colSpan:6,children:(0,$.jsx)(cn,{businessTripId:r,onAdd:t})})})]})]})}):(0,$.jsx)(cn,{businessTripId:r,onAdd:t})},mn=`addBusinessTripTravelAndSubsistenceExpense`,hn=()=>{let[{fetching:e},t]=c(me);return{fetching:e,addBusinessTripTravelAndSubsistenceExpense:(0,Q.useCallback)(async e=>{let n=`Error adding business trip travel&subsistence expense`,r=mn;b.loading(`Adding trip travel&subsistence expense`,{id:r});try{let i=x(await t(e),n,r);if(i)return b.success(`Success`,{id:r,description:`Business trip travel&subsistence expense was added`}),i.addBusinessTripTravelAndSubsistenceExpense}catch(e){console.error(`${n}: ${e}`),b.error(`Error`,{id:r,description:n,duration:1e5,closeButton:!0})}},[t])}};function gn(e){let{businessTripId:t,onAdd:n}=e,[r,{close:i,open:a}]=M(!1);return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(z,{content:`Add T&S Expense`,children:(0,$.jsx)(W,{variant:`outline`,size:`icon`,className:`size-7.5`,onClick:e=>{e.stopPropagation(),a()},children:(0,$.jsx)(U,{className:`size-5`})})}),r&&(0,$.jsx)(_n,{businessTripId:t,opened:r,close:i,onAdd:n})]})}function _n({businessTripId:e,opened:t,close:n,onAdd:r}){let i=j({defaultValues:{businessTripId:e}}),{control:a,handleSubmit:o}=i,[s,c]=(0,Q.useState)(!1),{addBusinessTripTravelAndSubsistenceExpense:l,fetching:u}=hn(),d=e=>{l({fields:e}).then(()=>{r?.(),n()})};return(0,$.jsxs)(F,{opened:t,onClose:n,centered:!0,lockScroll:!0,children:[(0,$.jsx)(F.Title,{children:`Add Travel & Subsistence Expense`}),(0,$.jsx)(F.Body,{children:(0,$.jsx)(w,{...i,children:(0,$.jsxs)(`form`,{onSubmit:o(d),className:`space-y-3`,children:[(0,$.jsx)(ut,{businessTripId:e,control:a,setFetching:c}),(0,$.jsx)(O,{name:`expenseType`,control:a,render:({field:e})=>(0,$.jsxs)(A,{children:[(0,$.jsx)(T,{children:`Expense Type`}),(0,$.jsx)(P,{children:(0,$.jsx)(H,{...e,value:e.value??void 0})}),(0,$.jsx)(E,{})]})}),(0,$.jsx)(`div`,{className:`flex justify-center mt-5 gap-3`,children:(0,$.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`})})]})})}),(u||s)&&(0,$.jsx)(B,{blur:1,center:!0,children:(0,$.jsx)(J,{})})]})}var vn=`updateBusinessTripTravelAndSubsistenceExpense`,yn=()=>{let[{fetching:e},t]=c(ce);return{fetching:e,updateBusinessTripTravelAndSubsistenceExpense:(0,Q.useCallback)(async e=>{let n=`Error updating business trip travel&subsistence expense`,r=vn;b.loading(`Updating trip travel&subsistence expense`,{id:r});try{let i=x(await t(e),n,r);if(i)return b.success(`Success`,{id:r,description:`Business trip travel&subsistence expense was updated`}),i.updateBusinessTripTravelAndSubsistenceExpense}catch(e){console.error(`${n}: ${e}`),b.error(`Error`,{id:r,description:n,duration:1e5,closeButton:!0})}},[t])}},bn=({data:e,businessTripId:t,onChange:n})=>{let r=Z(d,e),[i,a]=(0,Q.useState)(!1),o=j({defaultValues:{id:r.id,businessTripId:t}}),{control:s,handleSubmit:c}=o,{updateBusinessTripTravelAndSubsistenceExpense:l,fetching:u}=yn(),f=e=>{l({fields:e}).then(()=>{n?.(),a(!1)})};return(0,$.jsxs)(`tr`,{children:[(0,$.jsx)(Ct,{data:r,isEditMode:i,control:s,businessTripId:t}),(0,$.jsx)(`td`,{children:(0,$.jsx)(w,{...o,children:(0,$.jsx)(`form`,{id:`form ${r.id}`,onSubmit:c(f),children:i?(0,$.jsx)(O,{name:`expenseType`,control:s,defaultValue:r.expenseType,render:({field:e})=>(0,$.jsxs)(A,{children:[(0,$.jsx)(P,{children:(0,$.jsx)(H,{form:`form ${r.id}`,...e,value:e.value??void 0})}),(0,$.jsx)(E,{})]})}):(0,$.jsx)(Y,{c:r.expenseType?void 0:`red`,children:r.expenseType??`Missing`})})})}),(0,$.jsxs)(`td`,{children:[(0,$.jsx)(z,{content:`Edit`,children:(0,$.jsx)(W,{disabled:u,variant:i?`default`:`outline`,size:`icon`,className:`size-7.5`,onClick:e=>{e.stopPropagation(),a(e=>!e)},children:(0,$.jsx)(D,{className:`size-5`})})}),i&&(0,$.jsx)(z,{content:`Confirm Changes`,children:(0,$.jsx)(W,{type:`submit`,form:`form ${r.id}`,variant:`outline`,size:`icon`,className:`size-7.5 text-green-500`,children:(0,$.jsx)(C,{className:`size-5`})})}),(0,$.jsx)(_t,{businessTripExpenseId:r.id,businessTripId:t,onChange:n}),(0,$.jsx)(St,{businessTripExpenseId:r.id,onDelete:n})]})]},r.id)},xn=({data:e,onChange:t})=>{let{travelAndSubsistenceExpenses:n,id:r}=Z(de,e);return n?.length?(0,$.jsx)(`div`,{className:`flex flex-col gap-2 mt-5`,children:(0,$.jsxs)(I,{highlightOnHover:!0,withBorder:!0,children:[(0,$.jsx)(`thead`,{children:(0,$.jsxs)(`tr`,{children:[(0,$.jsx)(wt,{}),(0,$.jsx)(`th`,{children:`Expense Type`}),(0,$.jsx)(`th`,{})]})}),(0,$.jsxs)(`tbody`,{children:[n.sort((e,t)=>e.date&&t.date?e.date<t.date?1:-1:e.date?-1:t.date?1:0).map(e=>(0,$.jsx)(bn,{data:e,businessTripId:r,onChange:t},e.id)),(0,$.jsx)(`tr`,{children:(0,$.jsx)(`td`,{colSpan:6,children:(0,$.jsx)(gn,{businessTripId:r,onAdd:t})})})]})]})}):(0,$.jsx)(gn,{businessTripId:r,onAdd:t})},Sn=({data:e})=>{let t=Z(l,e),n=`effectiveDate`in t?t.effectiveDate:void 0;return(0,$.jsx)(`td`,{children:(0,$.jsxs)(`div`,{className:`flex flex-col justify-center`,children:[(0,$.jsx)(`div`,{children:n&&X(new Date(n),`dd/MM/yy`)}),t.sourceEffectiveDate&&(0,$.jsxs)(`div`,{className:`text-xs text-gray-500`,children:[`(Originally `,X(new Date(t.sourceEffectiveDate),`dd/MM/yy`),`)`]})]})})},Cn=({data:e})=>{let t=Z(y,e),n=`eventDate`in t?t.eventDate:void 0;return(0,$.jsx)(`td`,{children:(0,$.jsx)(`div`,{className:`flex flex-col justify-center`,children:n&&X(new Date(n),`dd/MM/yy`)})})},wn=({data:e})=>{let{account:t}=Z(xe,e),n=Ze(t.type),r=t.name;return(0,$.jsx)(`td`,{children:(0,$.jsxs)(`div`,{className:`flex flex-col gap-2 items-center`,children:[(0,$.jsx)(`p`,{children:n}),(0,$.jsx)(`p`,{children:r})]})})},Tn=({data:e})=>{let t=Z(v,e);return(0,$.jsx)(`td`,{children:(0,$.jsx)(`div`,{className:`flex flex-wrap`,children:(0,$.jsx)(`div`,{className:`flex flex-col justify-center`,children:`sourceDescription`in t?t.sourceDescription:`Missing`})})})},En=({data:e})=>(0,$.jsx)(`td`,{children:(0,$.jsx)(`div`,{className:`flex flex-wrap`,children:(0,$.jsx)(`div`,{className:`flex flex-col justify-center`,children:Z(h,e).referenceKey})})});function Dn({data:e,onChange:t,enableEdit:n}){let{id:r,counterparty:i,missingInfoSuggestions:a,id:o,sourceDescription:s}=Z(g,e),c=!!a?.business&&n,l=c?a?.business?.name:`Missing`,u=c?a?.business?.id:null,d=i?.name??l,[f,p]=(0,Q.useState)(!1),{updateTransaction:m,fetching:h}=ze(),ee=(0,Q.useCallback)(async e=>{await m({transactionId:o,fields:{counterpartyId:e}}),p(!0)},[o,m]),te=(0,Q.useCallback)(async e=>{await ee(e),t?.()},[ee,t]),{selectableBusinesses:_,fetching:v}=Be(),[y,ne]=(0,Q.useState)(u??null),[re,ie]=(0,Q.useState)(s);return(0,$.jsxs)(`td`,{children:[(0,$.jsx)(`div`,{className:`flex flex-wrap gap-1 items-center justify-center`,children:i?.id?(0,$.jsx)(Ae,{to:je.BUSINESSES.DETAIL(i.id),target:`_blank`,rel:`noreferrer`,onClick:e=>e.stopPropagation(),className:`inline-flex items-center font-semibold`,children:d}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(He,{options:_,value:y,onChange:ne,search:re,onSearchChange:ie,placeholder:`Choose or create a business`,empty:re?(0,$.jsx)(Ie,{description:re,onAdd:te}):null}),(0,$.jsx)(z,{content:`Approve`,children:(0,$.jsx)(W,{variant:`outline`,size:`icon`,onClick:()=>y&&ee(y),disabled:h||v||!y,children:(0,$.jsx)(C,{className:`size-4`})})})]})}),(0,$.jsx)(Qe,{transactionId:r,counterpartyId:i?.id??y,open:f,onOpenChange:p,onClose:t})]})}var On=`categorizeBusinessTripExpense`,kn=()=>{let[{fetching:e},t]=c(ke);return{fetching:e,categorizeBusinessTripExpense:(0,Q.useCallback)(async e=>{let n=`Error updating business trip expense category`,r=On;b.loading(`Updating trip expense category`,{id:r});try{let i=x(await t(e),n,r);if(i)return b.success(`Success`,{id:r,description:`Business trip expense category was updated`}),i.categorizeBusinessTripExpense}catch(e){console.error(`${n}: ${e}`),b.error(`Error`,{id:r,description:n,duration:1e5,closeButton:!0})}},[t])}};function An(e){let{businessTripId:t,transactionId:n,onChange:r,defaultAmount:i}=e,[a,{close:o,open:s}]=M(!1);return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(z,{content:`Categorize`,children:(0,$.jsx)(W,{variant:`outline`,size:`icon`,className:`size-7.5`,onClick:e=>{e.stopPropagation(),s()},children:(0,$.jsx)(D,{className:`size-5`})})}),a&&(0,$.jsx)(Mn,{businessTripId:t,transactionId:n,opened:a,close:o,onChange:r,defaultAmount:i})]})}var jn=Object.entries(ge).map(([e,t])=>({value:t,label:e}));function Mn({businessTripId:e,transactionId:t,defaultAmount:n,opened:r,close:i,onChange:a}){let{control:o,handleSubmit:s}=j({defaultValues:{businessTripId:e,transactionId:t}}),{categorizeBusinessTripExpense:c,fetching:l}=kn();return(0,$.jsxs)(F,{opened:r,onClose:i,centered:!0,children:[(0,$.jsx)(F.Title,{children:`Set Expense Category`}),(0,$.jsx)(F.Body,{children:(0,$.jsxs)(`form`,{onSubmit:s(e=>{c({fields:e}).then(()=>{a?.(),i()})}),className:`flex flex-col gap-3 mt-3`,children:[(0,$.jsx)(V,{name:`category`,control:o,render:({field:e,fieldState:t})=>(0,$.jsx)(L,{"data-autofocus":!0,...e,data:jn,value:e.value,label:`Category`,placeholder:`Scroll to see all options`,maxDropdownHeight:160,searchable:!0,error:t.error?.message,withinPortal:!0})}),(0,$.jsx)(V,{name:`amount`,control:o,defaultValue:n,render:({field:e,fieldState:t})=>(0,$.jsx)(N,{...e,value:e.value??void 0,hideControls:!0,precision:2,removeTrailingZeros:!0,error:t.error?.message,label:`Amount`})}),(0,$.jsx)(`div`,{className:`flex justify-center gap-3`,children:(0,$.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`})})]})}),l&&(0,$.jsx)(B,{blur:1,center:!0,children:(0,$.jsx)(J,{})})]})}var Nn=({data:e,onChange:t})=>{let{uncategorizedTransactions:n,id:r}=Z(m,e);return n?.length?(0,$.jsx)(`div`,{className:`flex flex-col gap-2 mt-5`,children:(0,$.jsxs)(I,{highlightOnHover:!0,withBorder:!0,children:[(0,$.jsx)(`thead`,{children:(0,$.jsxs)(`tr`,{children:[(0,$.jsx)(`th`,{children:`Event Date`}),(0,$.jsx)(`th`,{children:`Debit Date`}),(0,$.jsx)(`th`,{children:`Amount`}),(0,$.jsx)(`th`,{}),(0,$.jsx)(`th`,{children:`Account`}),(0,$.jsx)(`th`,{children:`Description`}),(0,$.jsx)(`th`,{children:`Reference#`}),(0,$.jsx)(`th`,{children:`Counterparty`}),(0,$.jsx)(`th`,{})]})}),(0,$.jsx)(`tbody`,{children:n.sort((e,t)=>e.transaction.eventDate.localeCompare(t.transaction.eventDate)).map(e=>(0,$.jsxs)(`tr`,{children:[(0,$.jsx)(Cn,{data:e.transaction}),(0,$.jsx)(Sn,{data:e.transaction}),(0,$.jsx)(Pn,{data:e}),(0,$.jsx)(`td`,{children:(0,$.jsx)(Ae,{to:je.CHARGES.DETAIL(e.transaction.chargeId),target:`_blank`,rel:`noreferrer`,onClick:e=>e.stopPropagation(),className:`inline-flex items-center font-semibold`,children:`To Charge`})}),(0,$.jsx)(wn,{data:e.transaction}),(0,$.jsx)(Tn,{data:e.transaction}),(0,$.jsx)(En,{data:e.transaction}),(0,$.jsx)(Dn,{data:e.transaction}),(0,$.jsx)(`td`,{children:(0,$.jsx)(An,{businessTripId:r,transactionId:e.transaction.id,onChange:t,defaultAmount:e.transaction.amount.raw})})]},e.transaction.id))})]})}):(0,$.jsx)($.Fragment,{})},Pn=({data:e})=>{let{transaction:t,categorizedAmount:n,errors:r}=Z(_e,e),i=`amount`in t?t.amount:void 0,a=i?.raw!==n.raw&&n.raw!==0;return(0,$.jsx)(`td`,{children:(0,$.jsxs)(`div`,{className:`flex flex-col whitespace-nowrap`,style:{color:Number(i?.raw)>0?`green`:`red`},children:[(0,$.jsxs)(`div`,{className:`flex gap-1`,children:[i?.formatted,r.length>0&&(0,$.jsx)(Fn,{errors:r})]}),a&&(0,$.jsxs)(`div`,{className:`text-gray-500 ml-2`,children:[n.formatted,` categorized `]}),t.cryptoExchangeRate&&(0,$.jsxs)(`div`,{className:`text-gray-500 ml-2`,children:[`(Rate: ${t.cryptoExchangeRate.rate})`,(0,$.jsx)(`br`,{}),i?.raw?`${Ve(i.raw*t.cryptoExchangeRate.rate)}$`:null]})]})})},Fn=({errors:e})=>{let[t,{close:n,open:r}]=M(!1);return(0,$.jsxs)(Le,{width:200,position:`bottom`,shadow:`md`,opened:t,children:[(0,$.jsx)(Le.Target,{children:(0,$.jsx)(it,{onMouseEnter:r,onMouseLeave:n})}),(0,$.jsx)(Le.Dropdown,{sx:{pointerEvents:`none`},className:`whitespace-normal text-red-500`,children:e.map((e,t)=>(0,$.jsx)(Y,{size:`sm`,children:e},t))})]})};function In({tripId:e,isExtended:t=!1}){let[n,r]=(0,Q.useState)(),[{data:i},a]=_({query:ye,variables:{businessTripId:e}}),o=a;return(0,Q.useEffect)(()=>{i?.businessTrip&&r(i.businessTrip)},[i?.businessTrip]),(0,$.jsx)(nt,{shadow:`sm`,radius:`md`,withBorder:!0,children:n?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(Ge,{data:n,onChange:o}),(0,$.jsxs)(et,{className:`w-full`,type:`multiple`,children:[(0,$.jsxs)(q,{value:`attendees`,children:[(0,$.jsx)(G,{children:`Attendees`}),(0,$.jsx)(K,{children:(0,$.jsx)(Yt,{data:n,onChange:o})})]}),t&&(0,$.jsxs)(q,{value:`uncategorized-transactions`,children:[(0,$.jsx)(G,{disabled:!n.uncategorizedTransactions?.length,children:`Uncategorized Transactions`}),(0,$.jsx)(K,{children:(0,$.jsx)(Nn,{data:n,onChange:o})})]}),(0,$.jsxs)(q,{value:`flights`,children:[(0,$.jsx)(G,{children:`Flights`}),(0,$.jsx)(K,{children:(0,$.jsx)(an,{data:n,onChange:o})})]}),(0,$.jsxs)(q,{value:`accommodations`,children:[(0,$.jsx)(G,{children:`Accommodations`}),(0,$.jsx)(K,{children:(0,$.jsx)(Dt,{data:n,onChange:o})})]}),(0,$.jsxs)(q,{value:`travelAndSubsistence`,children:[(0,$.jsx)(G,{children:`Travel & Subsistence`}),(0,$.jsx)(K,{children:(0,$.jsx)(xn,{data:n,onChange:o})})]}),(0,$.jsxs)(q,{value:`other`,children:[(0,$.jsx)(G,{children:`Other`}),(0,$.jsx)(K,{children:(0,$.jsx)(pn,{data:n,onChange:o})})]}),(0,$.jsxs)(q,{value:`carRental`,children:[(0,$.jsx)(G,{children:`Car Rental`}),(0,$.jsx)(K,{children:(0,$.jsx)(rn,{data:n,onChange:o})})]}),(0,$.jsxs)(q,{value:`summary`,children:[(0,$.jsx)(G,{children:`Summary`}),(0,$.jsx)(K,{children:(0,$.jsx)(Ye,{data:n})})]})]})]}):(0,$.jsx)(Me,{className:`h-10 w-10 animate-spin mr-2 self-center`})})}export{In as t};