@accounter/client
Version:
Accounter client application
1 lines • 60.5 kB
JavaScript
import{s as e}from"./dist-C51EwTaa.js";import{i as t,o as n}from"./utils-DdVdMk8X.js";import{$ as r,Aa as i,At as a,Ba as o,Bn as s,Ca as c,Cr as l,Ct as u,Dt as d,Ea as f,Et as p,Fa as m,Gt as h,Io as g,It as ee,La as _,Lo as v,Lr as y,Lt as b,Nt as te,Pt as ne,Ra as re,Rn as ie,Sa as ae,St as oe,Ta as se,Tt as ce,Va as le,Vn as ue,Wt as de,bt as fe,d as pe,f as me,hr as he,jt as ge,ka as _e,kt as ve,m as ye,p as be,r as x,t as S,u as xe,wa as Se,wt as Ce,xa as we,xt as Te,yt as Ee,za as De,zt as Oe}from"./error-handling-Dpfd9svJ.js";import{s as ke,t as Ae}from"./routes-DUvpW9-n.js";import{_t as je,dt as C,ft as Me,gt as w,s as T}from"./select-CrsvQyhZ.js";import{r as Ne,t as Pe}from"./similar-transactions-modal-DD7YfdjJ.js";import{t as E}from"./button-Dzp2INW0.js";import{i as D,n as O,r as k,t as Fe}from"./accordion-D0VCW409.js";import{B as A,F as j,H as Ie,K as Le,L as M,Lt as N,P,R as F,U as I,V as L,W as R,X as z,Z as B,z as V}from"./table--bF0wbxq.js";import{t as Re}from"./Card-8DVboGSg.js";import{t as ze}from"./MultiSelect-HTEIN3wg.js";import{Ct as Be,Dn as Ve,Dt as He,Er as H,Ht as Ue,It as We,Jr as Ge,Tt as U,Wt as Ke,Xr as W,Yr as qe,Z as Je,_n as Ye,an as Xe,bi as Ze,bn as G,fn as K,hn as q,hr as Qe,ht as $e,in as et,ln as J,mt as tt,oi as nt,ot as rt,pn as it,xn as Y,yt as X}from"./index-CL8-JoMZ.js";var at=je(`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=je(`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`}]]),Z=e(n(),1),st=`addBusinessTripAccommodationsExpense`,ct=()=>{let[{fetching:e},t]=g(xe);return{fetching:e,addBusinessTripAccommodationsExpense:(0,Z.useCallback)(async e=>{let n=`Error adding business trip accommodations expense`,r=st;x.loading(`Adding Business Trip Accommodations Expense`,{id:r});try{let i=S(await t(e),n,r);if(i)return x.success(`Success`,{id:r,description:`Business trip accommodations expense added`}),i.addBusinessTripAccommodationsExpense}catch(e){console.error(`${n}: ${e}`),x.error(`Error`,{id:r,description:n,duration:1e5,closeButton:!0})}},[t])}},Q=t();function lt({formManager:e,attendeesStayPath:t,attendeesData:n,fetchingAttendees:i=!1,businessTripId:a}){let{control:o,watch:s,trigger:c}=e,{fields:l,append:u,remove:d}=Ie({control:o,name:t}),[f,p]=(0,Z.useState)(i),[m,h]=(0,Z.useState)(n??[]),g=s(t),ee=l.map((e,t)=>({...e,...g[t]}));(0,Z.useEffect)(()=>{n&&h(n)},[n]),(0,Z.useEffect)(()=>{p(i)},[i]);let[{data:_,fetching:y},b]=v({query:r,pause:!0,variables:{businessTripId:a??``}});return(0,Z.useEffect)(()=>{_?.businessTrip?.attendees.length&&h(_.businessTrip.attendees.map(e=>({value:e.id,label:e.name}))??[])},[_?.businessTrip?.attendees]),(0,Z.useEffect)(()=>{p(y)},[y]),(0,Z.useEffect)(()=>{!n&&!_&&!i&&!y&&b({businessTripId:a})},[n,i,y,b,a,_]),!a&&!n?(0,Q.jsx)(`div`,{children:`Cannot edit attendees stay, lacking some mandatory information!`}):(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`span`,{className:`mantine-InputWrapper-label mantine-Select-label`,children:`Employees Stay`}),(0,Q.jsxs)(`div`,{className:`h-full flex flex-col overflow-hidden`,children:[ee?.map((e,n)=>(0,Q.jsxs)(`div`,{className:`flex items-end gap-2 text-gray-600 mb-2`,children:[(0,Q.jsx)(`div`,{className:`w-full mt-1 relative rounded-md shadow-xs`,children:(0,Q.jsx)(L,{name:`${t}.${n}.attendeeId`,control:o,rules:{required:`Required`},render:({field:e,fieldState:t})=>(0,Q.jsx)(K,{...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,Q.jsx)(`div`,{className:`w-full mt-1 relative rounded-md shadow-xs`,children:(0,Q.jsx)(L,{control:o,name:`${t}.${n}.nightsCount`,render:({field:e,fieldState:t})=>(0,Q.jsx)(it,{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,Q.jsx)(E,{variant:`ghost`,size:`icon`,className:`mb-2 size-7.5`,onClick:()=>{d(n),c(t)},children:(0,Q.jsx)(qe,{className:`size-5`})})]},e.id)),(0,Q.jsx)(E,{variant:`ghost`,size:`icon`,className:`size-7.5`,onClick:()=>{u({}),c(t)},children:(0,Q.jsx)(nt,{className:`size-5`})})]})]})}function $({businessTripId:e,control:t,setFetching:n}){let[i,a]=(0,Z.useState)([]),[{data:o,fetching:s,error:c}]=v({query:r,variables:{businessTripId:e}}),{userContext:l}=(0,Z.useContext)(Le);(0,Z.useEffect)(()=>{o?.businessTrip?.attendees.length&&a(o.businessTrip.attendees.map(e=>({value:e.id,label:e.name})).sort((e,t)=>e.label>t.label?1:-1))},[o,a]),(0,Z.useEffect)(()=>{n(s)},[n,s]),(0,Z.useEffect)(()=>{c&&x.error(`Error`,{description:`Oops, we have an error fetching attendees`})},[c]);let u=(0,Z.useMemo)(()=>l?.context.ledgerLock,[l]);return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(M,{name:`date`,control:t,rules:{min:u?{value:u,message:`Date must be after ${u}`}:void 0,pattern:{value:H,message:`Date must be in format yyyy-mm-dd`}},render:({field:e,fieldState:t})=>(0,Q.jsxs)(F,{children:[(0,Q.jsx)(V,{htmlFor:`expense-date`,children:`Date`}),(0,Q.jsx)(j,{children:(0,Q.jsx)(X,{id:`expense-date`,"data-autofocus":!0,value:e.value??void 0,onChange:t=>{t!==e.value&&e.onChange(t)},"aria-invalid":!!t.error})}),(0,Q.jsx)(A,{})]})}),(0,Q.jsx)(M,{name:`valueDate`,control:t,rules:{pattern:{value:H,message:`Date must be in format yyyy-mm-dd`},min:u?{value:u,message:`Date must be after ${u}`}:void 0},render:({field:e,fieldState:t})=>(0,Q.jsxs)(F,{children:[(0,Q.jsx)(V,{htmlFor:`expense-value-date`,children:`Value Date`}),(0,Q.jsx)(j,{children:(0,Q.jsx)(X,{id:`expense-value-date`,value:e.value??void 0,onChange:t=>{t!==e.value&&e.onChange(t)},"aria-invalid":!!t.error})}),(0,Q.jsx)(A,{})]})}),(0,Q.jsx)(M,{name:`amount`,control:t,render:({field:e,fieldState:n})=>(0,Q.jsx)(M,{name:`currency`,control:t,defaultValue:ie.Ils,render:({field:t,fieldState:r})=>(0,Q.jsx)(Be,{...e,value:e.value??void 0,error:n.error?.message||r.error?.message,label:`Amount`,currencyCodeProps:{...t,label:`Currency`}})})}),(0,Q.jsx)(M,{name:`employeeBusinessId`,control:t,render:({field:e,fieldState:t})=>(0,Q.jsxs)(F,{children:[(0,Q.jsx)(V,{children:`Attendee`}),(0,Q.jsx)(j,{children:(0,Q.jsx)(K,{...e,data:i,value:e.value,disabled:s,placeholder:`Scroll to see all options`,maxDropdownHeight:160,searchable:!0,error:t.error?.message,withinPortal:!0})}),(0,Q.jsx)(A,{})]})})]})}function ut(e){let{businessTripId:t,onAdd:n}=e,[r,i]=(0,Z.useState)(!1);return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(U,{content:`Add Accommodations Expense`,children:(0,Q.jsx)(E,{variant:`outline`,size:`icon`,className:`size-7.5`,onClick:e=>{e.stopPropagation(),i(!0)},children:(0,Q.jsx)(C,{className:`size-5`})})}),r&&(0,Q.jsx)(dt,{businessTripId:t,opened:r,close:()=>i(!1),onAdd:n})]})}function dt({businessTripId:e,opened:t,close:n,onAdd:r}){let i=I({defaultValues:{businessTripId:e}}),{control:a,handleSubmit:o}=i,[s,c]=(0,Z.useState)(!1),{addBusinessTripAccommodationsExpense:l,fetching:u}=ct(),d=e=>{l({fields:e}).then(()=>{r?.(),n()})};return(0,Q.jsxs)(q,{opened:t,onClose:n,centered:!0,lockScroll:!0,children:[(0,Q.jsx)(q.Title,{children:`Add Accommodation Expense`}),(0,Q.jsx)(q.Body,{children:(0,Q.jsx)(P,{...i,children:(0,Q.jsxs)(`form`,{onSubmit:o(d),className:`space-y-3`,children:[(0,Q.jsx)($,{businessTripId:e,control:a,setFetching:c}),(0,Q.jsx)(M,{control:a,name:`country`,render:({field:e})=>(0,Q.jsxs)(F,{children:[(0,Q.jsx)(V,{children:`Country`}),(0,Q.jsx)(j,{children:(0,Q.jsx)(T,{...e,value:e.value??void 0})}),(0,Q.jsx)(A,{})]})}),(0,Q.jsx)(M,{name:`nightsCount`,control:a,render:({field:e})=>(0,Q.jsxs)(F,{children:[(0,Q.jsx)(V,{children:`Nights Count`}),(0,Q.jsx)(j,{children:(0,Q.jsx)($e,{...e,value:e.value??void 0,hideControls:!0,decimalScale:0,thousandSeparator:`,`})}),(0,Q.jsx)(A,{})]})}),(0,Q.jsx)(lt,{formManager:i,attendeesStayPath:`attendeesStay`,businessTripId:e}),(0,Q.jsx)(`div`,{className:`flex justify-center mt-5 gap-3`,children:(0,Q.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,Q.jsx)(Y,{blur:1,center:!0,children:(0,Q.jsx)(B,{})})]})}var ft=`updateBusinessTripAccommodationsExpense`,pt=()=>{let[{fetching:e},t]=g(m);return{fetching:e,updateBusinessTripAccommodationsExpense:(0,Z.useCallback)(async e=>{let n=`Error updating business trip accommodations expense`,r=ft;x.loading(`Updating trip accommodations expense`,{id:r});try{let i=S(await t(e),n,r);if(i)return x.success(`Success`,{id:r,description:`Business trip accommodations expense was updated`}),i.updateBusinessTripAccommodationsExpense}catch(e){console.error(`${n}: ${e}`),x.error(`Error`,{id:r,description:n,duration:1e5,closeButton:!0})}},[t])}},mt=`categorizeIntoExistingBusinessTripExpense`,ht=()=>{let[{fetching:e},t]=g(h);return{fetching:e,categorizeIntoExistingBusinessTripExpense:(0,Z.useCallback)(async e=>{let n=`Error updating business trip expense category`,r=mt;x.loading(`Updating business trip expense category`,{id:r});try{let i=S(await t(e),n,r);if(i)return x.success(`Success`,{id:r,description:`Business trip expense category was updated`}),i.categorizeIntoExistingBusinessTripExpense}catch(e){console.error(`${n}: ${e}`),x.error(`Error`,{id:r,description:n,duration:1e5,closeButton:!0})}},[t])}};function gt(e){let{businessTripExpenseId:t,businessTripId:n,onChange:r}=e,[i,a]=(0,Z.useState)(!1);return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(U,{content:`Attach Uncategorized Transaction`,children:(0,Q.jsx)(E,{variant:`outline`,size:`icon`,className:`size-7.5`,onClick:e=>{e.stopPropagation(),a(!0)},children:(0,Q.jsx)(C,{className:`size-5`})})}),i&&(0,Q.jsx)(_t,{businessTripExpenseId:t,businessTripId:n,opened:i,close:()=>a(!1),onChange:r})]})}function _t({businessTripExpenseId:e,businessTripId:t,opened:n,close:r,onChange:i}){let{control:a,handleSubmit:o,setValue:s}=I({defaultValues:{businessTripExpenseId:e}}),[c,l]=(0,Z.useState)([]),[{data:u,fetching:d,error:f}]=v({query:_e,variables:{businessTripId:t}}),{categorizeIntoExistingBusinessTripExpense:p,fetching:m}=ht();return(0,Z.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,Z.useEffect)(()=>{f&&x.error(`Error`,{description:`Oops, we have an error fetching transactions to categorize`})},[f]),(0,Q.jsxs)(q,{opened:n,onClose:r,centered:!0,children:[(0,Q.jsx)(q.Title,{children:`Set Transaction Category`}),(0,Q.jsx)(q.Body,{children:(0,Q.jsxs)(`form`,{onSubmit:o(e=>{p({fields:e}).then(()=>{i?.(),r()})}),className:`flex flex-col gap-3 mt-3`,children:[(0,Q.jsx)(L,{name:`transactionId`,control:a,render:({field:e,fieldState:t})=>(0,Q.jsx)(K,{...e,itemComponent:vt,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,Q.jsx)(L,{name:`amount`,control:a,render:({field:e,fieldState:t})=>(0,Q.jsx)(it,{...e,value:e.value??void 0,hideControls:!0,precision:2,removeTrailingZeros:!0,error:t.error?.message,label:`Amount`})}),(0,Q.jsx)(`div`,{className:`flex justify-center gap-3`,children:(0,Q.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,Q.jsx)(Y,{blur:1,center:!0,children:(0,Q.jsx)(B,{})})]})}var vt=(0,Z.forwardRef)(({eventDate:e,sourceDescription:t,referenceKey:n,counterparty:r,amount:i,...a},o)=>(0,Q.jsx)(`div`,{ref:o,...a,children:(0,Q.jsxs)(G,{children:[(0,Q.jsx)(G.Col,{span:4,children:e}),(0,Q.jsx)(G.Col,{span:4,children:(0,Q.jsx)(z,{size:`sm`,children:r})}),(0,Q.jsx)(G.Col,{span:4,children:(0,Q.jsx)(z,{size:`sm`,children:i})}),(0,Q.jsx)(G.Col,{span:8,children:(0,Q.jsx)(z,{size:`xs`,opacity:.65,children:t})}),(0,Q.jsxs)(G.Col,{span:4,children:[`Reference: `,n]})]})})),yt=`deleteBusinessTripExpense`,bt=()=>{let[{fetching:e},t]=g(ue);return{fetching:e,deleteBusinessTripExpense:(0,Z.useCallback)(async e=>{let n=`Error deleting business trip expense`,r=`${yt}-${e.businessTripExpenseId}`;x.loading(`Deleting trip expense`,{id:r});try{let i=S(await t(e),n,r);if(i)return x.success(`Success`,{id:r,description:`Business trip expense was deleted`}),i.deleteBusinessTripExpense}catch(e){console.error(`${n}: ${e}`),x.error(`Error`,{id:r,description:n,duration:1e5,closeButton:!0})}},[t])}};function xt(e){let{fetching:t,deleteBusinessTripExpense:n}=bt();return(0,Q.jsx)(U,{content:`Remove Expense`,children:(0,Q.jsx)(rt,{onConfirm:(0,Z.useCallback)(()=>{n({businessTripExpenseId:e.businessTripExpenseId}).then(()=>{e.onDelete?.()})},[e,n]),title:`Are you sure you want to remove expense?`,children:(0,Q.jsx)(E,{variant:`outline`,size:`icon`,className:`size-7.5 text-red-500`,disabled:t,children:(0,Q.jsx)(Ge,{className:`size-5`})})})})}var St=({data:e,isEditMode:t=!1,control:n,businessTripId:i})=>{let a=R(d,e),[o,s]=(0,Z.useState)([]),[{data:c,fetching:l,error:u}]=v({query:r,variables:{businessTripId:i}});(0,Z.useEffect)(()=>{c?.businessTrip?.attendees.length&&s(c.businessTrip.attendees.map(e=>({value:e.id,label:e.name})).sort((e,t)=>e.label>t.label?1:-1))},[c,s]),(0,Z.useEffect)(()=>{u&&x.error(`Error`,{description:`Oops, we have an error fetching attendees`})},[u]);let f=Array.from(new Set(a.charges?.map(e=>e.id)));return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`td`,{children:(0,Q.jsx)(`div`,{className:`flex flex-col gap-2 justify-center`,children:t&&a.payedByEmployee?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(M,{name:`date`,control:n,defaultValue:a.date,rules:{pattern:{value:H,message:`Date must be in format yyyy-mm-dd`}},render:({field:e,fieldState:t})=>(0,Q.jsxs)(F,{className:`h-min`,children:[(0,Q.jsx)(V,{htmlFor:`business-trip-expense-date-${a.id}`,children:`Date`}),(0,Q.jsx)(j,{children:(0,Q.jsx)(X,{id:`business-trip-expense-date-${a.id}`,form:`form ${a.id}`,"data-autofocus":!0,value:e.value??void 0,onChange:t=>{t!==e.value&&e.onChange(t)},"aria-invalid":!!t.error})}),(0,Q.jsx)(A,{})]})}),(0,Q.jsx)(M,{name:`valueDate`,control:n,defaultValue:a.valueDate,rules:{pattern:{value:H,message:`Date must be in format yyyy-mm-dd`}},render:({field:e,fieldState:t})=>(0,Q.jsxs)(F,{className:`h-min`,children:[(0,Q.jsx)(V,{children:`Value Date`}),(0,Q.jsx)(j,{children:(0,Q.jsx)(X,{form:`form ${a.id}`,value:e.value??void 0,onChange:t=>{t!==e.value&&e.onChange(t)},"aria-invalid":!!t.error})}),(0,Q.jsx)(A,{})]})})]}):(0,Q.jsxs)(Q.Fragment,{children:[a.date&&N(new Date(a.date),`dd/MM/yy`),(0,Q.jsx)(z,{fz:`sm`,c:`dimmed`,children:a.valueDate&&N(new Date(a.valueDate),`dd/MM/yy`)})]})})}),(0,Q.jsx)(`td`,{children:t&&a.payedByEmployee?(0,Q.jsx)(M,{name:`amount`,control:n,defaultValue:a.amount?.raw??void 0,render:({field:e,fieldState:t})=>(0,Q.jsx)(M,{name:`currency`,control:n,defaultValue:a.amount?.currency??ie.Ils,render:({field:n,fieldState:r})=>(0,Q.jsx)(Be,{form:`form ${a.id}`,...e,value:e.value??void 0,error:t.error?.message||r.error?.message,label:`Amount`,currencyCodeProps:{...n,label:`Currency`,form:`form ${a.id}`}})})}):(0,Q.jsx)(`div`,{children:a.amount?.formatted})}),(0,Q.jsx)(`td`,{children:(0,Q.jsx)(`div`,{className:`flex flex-col gap-2 justify-center`,children:t&&a.payedByEmployee?(0,Q.jsx)(M,{name:`employeeBusinessId`,control:n,defaultValue:a.employee?.id,render:({field:e,fieldState:t})=>(0,Q.jsx)(K,{form:`form ${a.id}`,...e,data:o,value:e.value,disabled:l,label:`Attendee`,placeholder:`Scroll to see all options`,maxDropdownHeight:160,searchable:!0,error:t.error?.message,withinPortal:!0})}):(0,Q.jsx)(`div`,{className:`flex flex-row gap-2 items-center`,children:a.payedByEmployee&&(0,Q.jsx)(z,{c:a.employee?.name?void 0:`red`,children:a.employee?.name??`Missing`})})})}),(0,Q.jsx)(`td`,{children:(0,Q.jsx)(`div`,{className:`flex flex-col gap-2`,children:f.map(e=>(0,Q.jsx)(ke,{to:Ae.CHARGES.DETAIL(e),target:`_blank`,rel:`noreferrer`,onClick:e=>e.stopPropagation(),className:`inline-flex items-center font-semibold`,children:`To Charge`},e))})})]})},Ct=()=>(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`th`,{children:`Date`}),(0,Q.jsx)(`th`,{children:`Amount`}),(0,Q.jsx)(`th`,{children:`Payed By Attendee`}),(0,Q.jsx)(`th`,{children:`Charges`})]}),wt=({data:e,businessTripId:t,onChange:n})=>{let r=R(Te,e),[i,a]=(0,Z.useState)(!1),o=I({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}=pt(),d=e=>{l({fields:e}).then(()=>{n?.(),a(!1)})};return(0,Q.jsxs)(`tr`,{children:[(0,Q.jsx)(St,{data:r,isEditMode:i,control:s,businessTripId:t}),(0,Q.jsx)(`td`,{children:(0,Q.jsx)(P,{...o,children:(0,Q.jsx)(`form`,{id:`form ${r.id}`,onSubmit:c(d),children:i?(0,Q.jsx)(M,{name:`country`,control:s,defaultValue:r.country?.id??void 0,render:({field:e})=>(0,Q.jsxs)(F,{children:[(0,Q.jsx)(j,{children:(0,Q.jsx)(T,{form:`form ${r.id}`,...e,value:e.value??void 0})}),(0,Q.jsx)(A,{})]})}):(0,Q.jsx)(z,{c:r.country?void 0:`red`,children:r.country?.name??`Missing`})})})}),(0,Q.jsx)(`td`,{children:(0,Q.jsx)(`div`,{className:`flex flex-col gap-2 justify-center`,children:i?(0,Q.jsx)(P,{...o,children:(0,Q.jsx)(M,{name:`nightsCount`,control:s,defaultValue:r.nightsCount,render:({field:e})=>(0,Q.jsxs)(F,{children:[(0,Q.jsx)(j,{children:(0,Q.jsx)($e,{...e,value:e.value??void 0,form:`form ${r.id}`,hideControls:!0,decimalScale:0,thousandSeparator:`,`})}),(0,Q.jsx)(A,{})]})})}):(0,Q.jsx)(z,{c:r.nightsCount?void 0:`red`,children:r.nightsCount??`Missing`})})}),(0,Q.jsx)(`td`,{children:i?(0,Q.jsx)(P,{...o,children:(0,Q.jsx)(lt,{formManager:o,attendeesStayPath:`attendeesStay`,businessTripId:t})}):(0,Q.jsx)(Ye,{listStyleType:`disc`,children:r.attendeesStay?.length?r.attendeesStay.map(e=>(0,Q.jsxs)(Ye.Item,{children:[e.attendee.name,` (`,e.nightsCount,`)`]},e.id)):(0,Q.jsx)(z,{c:`red`,fz:`sm`,children:`Missing`})})}),(0,Q.jsx)(`td`,{children:n&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(U,{content:`Edit`,children:(0,Q.jsx)(E,{disabled:u,variant:i?`default`:`outline`,size:`icon`,className:`size-7.5`,onClick:e=>{e.stopPropagation(),a(e=>!e)},children:(0,Q.jsx)(W,{className:`size-5`})})}),i&&(0,Q.jsx)(U,{content:`Confirm Changes`,children:(0,Q.jsx)(E,{type:`submit`,form:`form ${r.id}`,variant:`outline`,size:`icon`,className:`size-7.5 text-green-500`,children:(0,Q.jsx)(w,{className:`size-5`})})}),(0,Q.jsx)(gt,{businessTripExpenseId:r.id,businessTripId:t,onChange:n}),(0,Q.jsx)(xt,{businessTripExpenseId:r.id,onDelete:n})]})})]},r.id)},Tt=({businessTripId:e,expenses:t,onChange:n})=>{if(!t?.length)return n?(0,Q.jsx)(ut,{businessTripId:e,onAdd:n}):(0,Q.jsx)(Q.Fragment,{});let r=t.map(e=>R(oe,e));return(0,Q.jsx)(`div`,{className:`flex flex-col gap-2 mt-5`,children:(0,Q.jsxs)(J,{highlightOnHover:!0,withBorder:!0,children:[(0,Q.jsx)(`thead`,{children:(0,Q.jsxs)(`tr`,{children:[(0,Q.jsx)(Ct,{}),(0,Q.jsx)(`th`,{children:`Location`}),(0,Q.jsx)(`th`,{children:`Nights`}),(0,Q.jsx)(`th`,{children:`Attendees Stay`}),(0,Q.jsx)(`th`,{})]})}),(0,Q.jsxs)(`tbody`,{children:[r.sort((e,t)=>e.date&&t.date?e.date<t.date?1:-1:e.date?-1:+!!t.date).map(t=>(0,Q.jsx)(wt,{data:t,businessTripId:e,onChange:n},t.id)),n&&(0,Q.jsx)(`tr`,{children:(0,Q.jsx)(`td`,{colSpan:6,children:(0,Q.jsx)(ut,{businessTripId:e,onAdd:n})})})]})]})})},Et=({data:e,onChange:t})=>{let{accommodationExpenses:n,id:r}=R(fe,e);return(0,Q.jsx)(Tt,{businessTripId:r,expenses:n,onChange:t})},Dt=`insertBusinessTripAttendee`,Ot=()=>{let[{fetching:e},t]=g(y);return{fetching:e,insertBusinessTripAttendee:(0,Z.useCallback)(async e=>{let n=`Error adding attendee to business trip`,r=Dt;x.loading(`Adding attendee`,{id:r});try{let i=S(await t(e),n,r);if(i)return x.success(`Success`,{id:r,description:`Attendee was added to the business trip`}),i.insertBusinessTripAttendee}catch(e){console.error(`${n}: ${e}`),x.error(`Error`,{id:r,description:n,duration:1e5,closeButton:!0})}},[t])}};function kt(e){let{businessTripId:t,onAdd:n}=e,[r,i]=(0,Z.useState)(!1);return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(U,{content:`Add Attendee`,children:(0,Q.jsx)(E,{variant:`outline`,size:`icon`,onClick:e=>{e.stopPropagation(),i(!0)},className:`size-7.5`,children:(0,Q.jsx)(C,{className:`size-5`})})}),r&&(0,Q.jsx)(At,{businessTripId:t,opened:r,close:()=>i(!1),onAdd:n})]})}function At({businessTripId:e,opened:t,close:n,onAdd:r}){let{selectableBusinesses:i,fetching:a}=He(),o=I({defaultValues:{businessTripId:e}}),{control:s,handleSubmit:c}=o,{insertBusinessTripAttendee:l,fetching:u}=Ot(),d=e=>{l({fields:e}).then(()=>{r?.(),n()})};return(0,Q.jsxs)(q,{opened:t,onClose:n,centered:!0,children:[(0,Q.jsx)(q.Title,{children:`Add Attendee`}),(0,Q.jsx)(q.Body,{children:(0,Q.jsx)(P,{...o,children:(0,Q.jsxs)(`form`,{onSubmit:c(d),className:`space-y-4 pt-2`,children:[(0,Q.jsx)(L,{name:`attendeeId`,control:s,render:({field:e,fieldState:t})=>(0,Q.jsx)(K,{"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,Q.jsx)(M,{name:`arrivalDate`,control:s,rules:{pattern:{value:H,message:`Date must be in format yyyy-mm-dd`}},render:({field:e,fieldState:t})=>(0,Q.jsxs)(F,{className:`h-min`,children:[(0,Q.jsx)(V,{htmlFor:`arrival-date`,children:`Arrival`}),(0,Q.jsx)(j,{children:(0,Q.jsx)(X,{id:`arrival-date`,value:e.value??void 0,onChange:t=>{t!==e.value&&e.onChange(t)},"aria-invalid":!!t.error})}),(0,Q.jsx)(A,{})]})}),(0,Q.jsx)(M,{name:`departureDate`,control:s,rules:{pattern:{value:H,message:`Date must be in format yyyy-mm-dd`}},render:({field:e,fieldState:t})=>(0,Q.jsxs)(F,{className:`h-min`,children:[(0,Q.jsx)(V,{htmlFor:`departure-date`,children:`Departure`}),(0,Q.jsx)(j,{children:(0,Q.jsx)(X,{id:`departure-date`,value:e.value??void 0,onChange:t=>{t!==e.value&&e.onChange(t)},"aria-invalid":!!t.error})}),(0,Q.jsx)(A,{})]})}),(0,Q.jsx)(`div`,{className:`flex justify-center mt-5 gap-3`,children:(0,Q.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||a)&&(0,Q.jsx)(Y,{blur:1,center:!0,children:(0,Q.jsx)(B,{})})]})}var jt=`updateBusinessTripAttendee`,Mt=()=>{let[{fetching:e},t]=g(_);return{fetching:e,updateBusinessTripAttendee:(0,Z.useCallback)(async e=>{let n=`Error updating business trip attendee`,r=jt;x.loading(`Updating trip attendee`,{id:r});try{let i=S(await t(e),n,r);if(i)return x.success(`Success`,{id:r,description:`Business trip attendee was updated`}),i.updateBusinessTripAttendee}catch(e){console.error(`${n}: ${e}`),x.error(`Error`,{id:r,description:n,duration:1e5,closeButton:!0})}},[t])}},Nt=`deleteBusinessTripAttendee`,Pt=()=>{let[{fetching:e},t]=g(s);return{fetching:e,deleteBusinessTripAttendee:(0,Z.useCallback)(async e=>{let n=`Error removing business trip attendee`,r=Nt;x.loading(`Removing business trip attendee`,{id:r});try{let i=S(await t(e),n,r);if(i)return x.success(`Success`,{id:r,description:`Business trip attendee was removed`}),i.deleteBusinessTripAttendee}catch(e){console.error(`${n}: ${e}`),x.error(`Error`,{id:r,description:n,duration:1e5,closeButton:!0})}},[t])}};function Ft(e){let{fetching:t,deleteBusinessTripAttendee:n}=Pt();return(0,Q.jsx)(U,{content:`Remove Attendee`,children:(0,Q.jsx)(rt,{onConfirm:(0,Z.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,Q.jsx)(E,{variant:`outline`,size:`icon`,className:`size-7.5 text-red-500`,disabled:t,children:(0,Q.jsx)(Ge,{className:`size-5`})})})})}var It=`addBusinessTripFlightsExpense`,Lt=()=>{let[{fetching:e},t]=g(me);return{fetching:e,addBusinessTripFlightsExpense:(0,Z.useCallback)(async e=>{let n=`Error adding business trip flight expense`,r=It;x.loading(`Adding business trip flight expense`,{id:r});try{let i=S(await t(e),n,r);if(i)return x.success(`Success`,{id:r,description:`Business trip flight expense added`}),i.addBusinessTripFlightsExpense}catch(e){console.error(`${n}: ${e}`),x.error(`Error`,{id:r,description:n,duration:1e5,closeButton:!0})}},[t])}};function Rt({formManager:e,flightPathPath:t,flightPathData:n}){let{control:r,watch:i,trigger:a}=e,{fields:o,append:s,remove:c}=Ie({control:r,name:t}),l=i(t),u=o.map((e,t)=>({...e,...l[t]}));return n?(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`span`,{className:`mantine-InputWrapper-label mantine-Select-label`,children:`Flight Path`}),(0,Q.jsxs)(`div`,{className:`h-full flex flex-col overflow-hidden`,children:[u?.map((e,n)=>(0,Q.jsxs)(`div`,{className:`flex items-end gap-2 text-gray-600 mb-2`,children:[(0,Q.jsx)(`div`,{className:`w-full mt-1 relative rounded-md shadow-xs`,children:(0,Q.jsx)(M,{name:`${t}.${n}`,control:r,rules:{required:`Required`},render:({field:e})=>(0,Q.jsxs)(F,{children:[(0,Q.jsx)(j,{children:(0,Q.jsx)(T,{...e,value:e.value??void 0,placeholder:`Destination`})}),(0,Q.jsx)(A,{})]})})}),(0,Q.jsx)(E,{variant:`ghost`,size:`icon`,className:`mb-2 size-7.5`,onClick:()=>{c(n),a(t)},children:(0,Q.jsx)(qe,{className:`size-5`})})]},e.id)),(0,Q.jsx)(E,{variant:`ghost`,size:`icon`,className:`size-7.5`,onClick:()=>{s(``),a(t)},children:(0,Q.jsx)(nt,{className:`size-5`})})]})]}):(0,Q.jsx)(`div`,{children:`Cannot edit flight path stay, lacking some mandatory information!`})}function zt(e){let{businessTripId:t,onAdd:n}=e,[r,i]=(0,Z.useState)(!1);return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(U,{content:`Add Flight Expense`,children:(0,Q.jsx)(E,{variant:`outline`,size:`icon`,className:`size-7.5`,onClick:e=>{e.stopPropagation(),i(!0)},children:(0,Q.jsx)(C,{className:`size-5`})})}),r&&(0,Q.jsx)(Vt,{businessTripId:t,opened:r,close:()=>i(!1),onAdd:n})]})}var Bt=Object.entries(l).map(([e,t])=>({value:t,label:e}));function Vt({businessTripId:e,opened:t,close:n,onAdd:i}){let a=I({defaultValues:{businessTripId:e}}),{control:o,handleSubmit:s}=a,[c,l]=(0,Z.useState)(!1),[{data:u,fetching:d}]=v({query:r,variables:{businessTripId:e}}),{addBusinessTripFlightsExpense:f,fetching:p}=Lt(),m=e=>{f({fields:e}).then(()=>{i?.(),n()})},h=u?.businessTrip?.attendees.map(e=>({value:e.id,label:e.name}))??[];return(0,Q.jsxs)(q,{opened:t,onClose:n,centered:!0,lockScroll:!0,children:[(0,Q.jsx)(q.Title,{children:`Add Flight Expense`}),(0,Q.jsx)(q.Body,{children:(0,Q.jsx)(P,{...a,children:(0,Q.jsxs)(`form`,{onSubmit:s(m),children:[(0,Q.jsx)($,{businessTripId:e,control:o,setFetching:l}),(0,Q.jsx)(Rt,{formManager:a,flightPathPath:`path`}),(0,Q.jsx)(L,{name:`flightClass`,control:o,render:({field:e,fieldState:t})=>(0,Q.jsx)(K,{...e,data:Bt,value:e.value,label:`Flight Class`,placeholder:`Scroll to see all options`,maxDropdownHeight:160,searchable:!0,error:t.error?.message,withinPortal:!0})}),(0,Q.jsx)(L,{name:`attendeeIds`,control:o,render:({field:e,fieldState:t})=>(0,Q.jsx)(ze,{...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,Q.jsx)(`div`,{className:`flex justify-center mt-5 gap-3`,children:(0,Q.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,Q.jsx)(Y,{blur:1,center:!0,children:(0,Q.jsx)(B,{})})]})}var Ht=`updateBusinessTripFlightsExpense`,Ut=()=>{let[{fetching:e},t]=g(De);return{fetching:e,updateBusinessTripFlightsExpense:(0,Z.useCallback)(async e=>{let n=`Error updating business trip flights expense`,r=Ht;x.loading(`Updating trip flights expense`,{id:r});try{let i=S(await t(e),n,r);if(i)return x.success(`Success`,{id:r,description:`Business trip flights expense was updated`}),i.updateBusinessTripFlightsExpense}catch(e){console.error(`${n}: ${e}`),x.error(`Error`,{id:r,description:n,duration:1e5,closeButton:!0})}},[t])}},Wt=Object.entries(l).map(([e,t])=>({value:t,label:e})),Gt=({data:e,businessTripId:t,onChange:n,attendees:r})=>{let i=R(a,e),[o,s]=(0,Z.useState)(!1),c=I({defaultValues:{id:i.id,businessTripId:t,attendeeIds:i.attendees?.map(e=>e.id)??[],path:i.path??[]}}),{control:l,handleSubmit:u}=c,{updateBusinessTripFlightsExpense:d,fetching:f}=Ut(),p=e=>{d({fields:e}).then(()=>{n?.(),s(!1)})},m=r.map(e=>({value:e.id,label:e.name}));return(0,Q.jsxs)(`tr`,{children:[(0,Q.jsx)(St,{data:i,isEditMode:o,control:l,businessTripId:t}),(0,Q.jsx)(`td`,{children:(0,Q.jsx)(P,{...c,children:(0,Q.jsx)(`form`,{id:`form ${i.id}`,onSubmit:u(p),children:(0,Q.jsxs)(`div`,{className:`flex flex-col gap-2 justify-center`,children:[o?(0,Q.jsx)(Rt,{formManager:c,flightPathPath:`path`,flightPathData:i.path??void 0}):(0,Q.jsx)(`div`,{className:`flex gap-2 items-center`,children:i.path?.length?i.path.map((e,t)=>(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(z,{fw:700,children:e},t),t<i.path.length-1&&(e===i.path[t+1]?` | `:` → `)]})):(0,Q.jsx)(z,{fw:700,className:`flex gap-2 items-center`,c:`red`,children:`Missing`})}),o?(0,Q.jsx)(L,{name:`flightClass`,control:l,defaultValue:i.class??void 0,render:({field:e,fieldState:t})=>(0,Q.jsx)(K,{form:`form ${i.id}`,"data-autofocus":!0,...e,data:Wt,value:e.value,label:`Flight Class`,placeholder:`Scroll to see all options`,maxDropdownHeight:160,searchable:!0,error:t.error?.message,withinPortal:!0})}):(0,Q.jsx)(z,{c:i.class?void 0:`red`,fz:`sm`,children:`Class: ${i.class??`Missing`}`})]})})})}),(0,Q.jsx)(`td`,{children:o?(0,Q.jsx)(L,{name:`attendeeIds`,control:l,defaultValue:i.attendees?.map(e=>e.id)??void 0,render:({field:e,fieldState:t})=>(0,Q.jsx)(ze,{...e,form:`form ${i.id}`,data:m,value:e.value??[],label:`Attendees`,placeholder:`Scroll to see all options`,maxDropdownHeight:160,searchable:!0,error:t.error?.message,withinPortal:!0})}):(0,Q.jsx)(Ye,{listStyleType:`disc`,children:i.attendees?.length?i.attendees.map(e=>(0,Q.jsx)(Ye.Item,{children:e.name},e.id)):(0,Q.jsx)(z,{c:`red`,fz:`sm`,children:`Missing`})})}),(0,Q.jsx)(`td`,{children:n&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(U,{content:`Edit`,children:(0,Q.jsx)(E,{disabled:f,variant:o?`default`:`outline`,size:`icon`,className:`size-7.5`,onClick:e=>{e.stopPropagation(),s(e=>!e)},children:(0,Q.jsx)(W,{className:`size-5`})})}),o&&(0,Q.jsx)(U,{content:`Confirm Changes`,children:(0,Q.jsx)(E,{type:`submit`,form:`form ${i.id}`,variant:`outline`,size:`icon`,className:`size-7.5 text-green-500`,children:(0,Q.jsx)(w,{className:`size-5`})})}),(0,Q.jsx)(gt,{businessTripExpenseId:i.id,businessTripId:t,onChange:n}),(0,Q.jsx)(xt,{businessTripExpenseId:i.id,onDelete:n})]})})]},i.id)},Kt=({businessTripId:e,expenses:t,attendees:n,onChange:r})=>{if(!t?.length)return r?(0,Q.jsx)(zt,{businessTripId:e,onAdd:r}):(0,Q.jsx)(Q.Fragment,{});let i=t.map(e=>R(ge,e));return(0,Q.jsx)(`div`,{className:`flex flex-col gap-2 mt-5`,children:(0,Q.jsxs)(J,{highlightOnHover:!0,withBorder:!0,children:[(0,Q.jsx)(`thead`,{children:(0,Q.jsxs)(`tr`,{children:[(0,Q.jsx)(Ct,{}),(0,Q.jsx)(`th`,{children:`Flight`}),(0,Q.jsx)(`th`,{children:`Attendees`}),(0,Q.jsx)(`th`,{})]})}),(0,Q.jsxs)(`tbody`,{children:[i.sort((e,t)=>e.date&&t.date?e.date<t.date?1:-1:e.date?-1:+!!t.date).map(t=>(0,Q.jsx)(Gt,{data:t,businessTripId:e,onChange:r,attendees:n},t.id)),r&&(0,Q.jsx)(`tr`,{children:(0,Q.jsx)(`td`,{colSpan:5,children:(0,Q.jsx)(zt,{businessTripId:e,onAdd:r})})})]})]})})},qt=({data:e,businessTripId:t,onChange:n})=>{let r=R(u,e),[i,a]=(0,Z.useState)(!1),[o,s]=(0,Z.useState)(!1),c=I({defaultValues:{businessTripId:t,attendeeId:r.id,arrivalDate:r.arrivalDate,departureDate:r.departureDate}}),{control:l,handleSubmit:d}=c,{updateBusinessTripAttendee:f,fetching:p}=Mt(),m=e=>{f({fields:e}).then(()=>{n?.(),a(!1)})};return(0,Q.jsxs)(P,{...c,children:[(0,Q.jsxs)(`tr`,{children:[(0,Q.jsx)(`td`,{children:r.name}),(0,Q.jsx)(`td`,{children:i?(0,Q.jsx)(`form`,{id:`form ${r.id}`,onSubmit:d(m),children:(0,Q.jsx)(M,{name:`arrivalDate`,control:l,defaultValue:r.arrivalDate,rules:{pattern:{value:H,message:`Date must be in format yyyy-mm-dd`}},render:({field:e,fieldState:t})=>(0,Q.jsxs)(F,{className:`h-min`,children:[(0,Q.jsx)(V,{className:`sr-only`,htmlFor:`arrival-date-${r.id}`,children:`Arrival`}),(0,Q.jsx)(j,{children:(0,Q.jsx)(X,{id:`arrival-date-${r.id}`,"data-autofocus":!0,value:e.value??void 0,onChange:t=>{t!==e.value&&e.onChange(t)},"aria-invalid":!!t.error})}),(0,Q.jsx)(A,{})]})})}):r.arrivalDate}),(0,Q.jsx)(`td`,{children:i?(0,Q.jsx)(M,{name:`departureDate`,control:l,defaultValue:r.departureDate,rules:{pattern:{value:H,message:`Date must be in format yyyy-mm-dd`}},render:({field:e,fieldState:t})=>(0,Q.jsxs)(F,{className:`h-min`,children:[(0,Q.jsx)(V,{className:`sr-only`,htmlFor:`departure-date-${r.id}`,children:`Departure`}),(0,Q.jsx)(j,{children:(0,Q.jsx)(X,{id:`departure-date-${r.id}`,value:e.value??void 0,onChange:t=>{t!==e.value&&e.onChange(t)},"aria-invalid":!!t.error})}),(0,Q.jsx)(A,{})]})}):r.departureDate}),(0,Q.jsxs)(`td`,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(U,{content:`Edit`,children:(0,Q.jsx)(E,{disabled:p,variant:i?`default`:`outline`,size:`icon`,className:`size-7.5`,onClick:e=>{e.stopPropagation(),a(e=>!e)},children:(0,Q.jsx)(W,{className:`size-5`})})}),i&&(0,Q.jsx)(U,{content:`Confirm Changes`,children:(0,Q.jsx)(E,{type:`submit`,form:`form ${r.id}`,variant:`outline`,size:`icon`,className:`size-7.5 text-green-500`,children:(0,Q.jsx)(w,{className:`size-5`})})}),(0,Q.jsx)(Ft,{businessTripId:t,attendeeId:r.id,onDelete:n}),(0,Q.jsx)(Ke,{toggleExpansion:s,isExpanded:o})]})]},r.id),o&&(0,Q.jsx)(`tr`,{children:(0,Q.jsx)(`td`,{colSpan:4,children:(0,Q.jsx)(Re,{shadow:`sm`,withBorder:!0,children:(0,Q.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[r.flights&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{children:`Flights:`}),(0,Q.jsx)(Kt,{businessTripId:t,attendees:[],expenses:r.flights})]}),r.accommodations&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{children:`Accommodations:`}),(0,Q.jsx)(Tt,{businessTripId:t,expenses:r.accommodations})]})]})})})},`${r.id}-expension`)]})},Jt=({data:e,onChange:t})=>{let{attendees:n,id:r}=R(Ce,e);return n?.length?(0,Q.jsx)(`div`,{className:`flex flex-col gap-2 mt-5`,children:(0,Q.jsxs)(J,{highlightOnHover:!0,withBorder:!0,children:[(0,Q.jsx)(`thead`,{children:(0,Q.jsxs)(`tr`,{children:[(0,Q.jsx)(`th`,{children:`Name`}),(0,Q.jsx)(`th`,{children:`Arrival Date`}),(0,Q.jsx)(`th`,{children:`Departure Date`}),(0,Q.jsx)(`th`,{})]})}),(0,Q.jsxs)(`tbody`,{children:[n.sort((e,t)=>e.name.toLocaleLowerCase()>t.name.toLocaleLowerCase()?1:-1).map(e=>(0,Q.jsx)(qt,{data:e,businessTripId:r,onChange:t},e.id)),(0,Q.jsx)(`tr`,{children:(0,Q.jsx)(`td`,{colSpan:4,children:(0,Q.jsx)(kt,{businessTripId:r,onAdd:t})})})]})]})}):(0,Q.jsx)(kt,{businessTripId:r,onAdd:t})},Yt=`addBusinessTripCarRentalExpense`,Xt=()=>{let[{fetching:e},t]=g(pe);return{fetching:e,addBusinessTripCarRentalExpense:(0,Z.useCallback)(async e=>{let n=`Error adding business trip car rental expense`;x.loading(`Adding car rental expense...`,{id:Yt});try{let r=S(await t(e),n,Yt);if(r)return x.success(`Success`,{id:Yt,description:`Car rental expense added`}),r.addBusinessTripCarRentalExpense}catch(e){console.error(`${n}: ${e}`),x.error(`Error`,{id:Yt,description:n,duration:1e5,closeButton:!0})}},[t])}};function Zt(e){let{businessTripId:t,onAdd:n}=e,[r,i]=(0,Z.useState)(!1);return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(U,{content:`Add Car Rental Expense`,children:(0,Q.jsx)(E,{variant:`outline`,size:`icon`,onClick:e=>{e.stopPropagation(),i(!0)},className:`size-7.5`,children:(0,Q.jsx)(C,{className:`size-5`})})}),r&&(0,Q.jsx)(Qt,{businessTripId:t,opened:r,close:()=>i(!1),onAdd:n})]})}function Qt({businessTripId:e,opened:t,close:n,onAdd:r}){let i=I({defaultValues:{businessTripId:e}}),{control:a,handleSubmit:o}=i,[s,c]=(0,Z.useState)(!1),{addBusinessTripCarRentalExpense:l,fetching:u}=Xt(),d=e=>{l({fields:e}).then(()=>{r?.(),n()})};return(0,Q.jsxs)(q,{opened:t,onClose:n,centered:!0,lockScroll:!0,children:[(0,Q.jsx)(q.Title,{children:`Add Car Rental Expense`}),(0,Q.jsx)(q.Body,{children:(0,Q.jsx)(P,{...i,children:(0,Q.jsxs)(`form`,{onSubmit:o(d),children:[(0,Q.jsx)($,{businessTripId:e,control:a,setFetching:c}),(0,Q.jsx)(L,{name:`days`,control:a,render:({field:e,fieldState:t})=>(0,Q.jsx)(it,{...e,value:e.value??void 0,hideControls:!0,precision:2,removeTrailingZeros:!0,error:t.error?.message,label:`Rent Days`})}),(0,Q.jsx)(M,{name:`isFuelExpense`,control:a,render:({field:{value:e,...t}})=>(0,Q.jsxs)(F,{className:`flex flex-row items-center justify-between rounded-lg border p-3 shadow-sm`,children:[(0,Q.jsx)(`div`,{className:`space-y-0.5`,children:(0,Q.jsx)(V,{children:`Is Fuel Expense`})}),(0,Q.jsx)(j,{children:(0,Q.jsx)(We,{...t,checked:e===!0,onCheckedChange:t.onChange})}),(0,Q.jsx)(A,{})]})}),(0,Q.jsx)(`div`,{className:`flex justify-center mt-5 gap-3`,children:(0,Q.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,Q.jsx)(Y,{blur:1,center:!0,children:(0,Q.jsx)(B,{})})]})}var $t=`updateBusinessTripCarRentalExpense`,en=()=>{let[{fetching:e},t]=g(re);return{fetching:e,updateBusinessTripCarRentalExpense:(0,Z.useCallback)(async e=>{let n=`Error updating business trip car rental expense`,r=$t;x.loading(`Updating trip car rental expense`,{id:r});try{let i=S(await t(e),n,r);if(i)return x.success(`Success`,{id:r,description:`Business trip car rental expense was updated`}),i.updateBusinessTripCarRentalExpense}catch(e){console.error(`${n}: ${e}`),x.error(`Error`,{id:r,description:n,duration:1e5,closeButton:!0})}},[t])}},tn=({data:e,businessTripId:t,onChange:n})=>{let r=R(p,e),[i,a]=(0,Z.useState)(!1),o=I({defaultValues:{id:r.id,businessTripId:t}}),{control:s,handleSubmit:c}=o,{updateBusinessTripCarRentalExpense:l,fetching:u}=en(),d=e=>{l({fields:e}).then(()=>{n?.(),a(!1)})};return(0,Q.jsxs)(`tr`,{children:[(0,Q.jsx)(St,{data:r,isEditMode:i,control:s,businessTripId:t}),(0,Q.jsx)(`td`,{children:(0,Q.jsx)(P,{...o,children:(0,Q.jsx)(`form`,{id:`form ${r.id}`,onSubmit:c(d),children:(0,Q.jsx)(`div`,{className:`flex flex-col gap-2 justify-center`,children:r.isFuelExpense!==!0&&(i?(0,Q.jsx)(L,{name:`days`,control:s,defaultValue:r.days,render:({field:e,fieldState:t})=>(0,Q.jsx)(it,{...e,value:e.value??void 0,form:`form ${r.id}`,hideControls:!0,precision:2,removeTrailingZeros:!0,error:t.error?.message,placeholder:`Rent Days`})}):(0,Q.jsx)(z,{c:r.days?void 0:`red`,children:r.days??`Missing`}))})})})}),(0,Q.jsx)(`td`,{children:i?(0,Q.jsx)(P,{...o,children:(0,Q.jsx)(M,{name:`isFuelExpense`,control:s,defaultValue:r.isFuelExpense,render:({field:e})=>(0,Q.jsxs)(F,{className:`flex flex-row items-center justify-between rounded-lg border p-3 shadow-sm`,children:[(0,Q.jsx)(`div`,{className:`space-y-0.5`,children:(0,Q.jsx)(V,{children:`Is Fuel Expense`})}),(0,Q.jsx)(j,{children:(0,Q.jsx)(We,{form:`form ${r.id}`,checked:e.value===!0,onCheckedChange:e.onChange})})]})})}):r.isFuelExpense===!0?(0,Q.jsx)(ot,{}):(0,Q.jsx)(at,{})}),(0,Q.jsxs)(`td`,{children:[(0,Q.jsx)(U,{content:`Edit`,children:(0,Q.jsx)(E,{disabled:u,variant:i?`default`:`outline`,size:`icon`,className:`size-7.5`,onClick:e=>{e.stopPropagation(),a(e=>!e)},children:(0,Q.jsx)(W,{className:`size-5`})})}),i&&(0,Q.jsx)(U,{content:`Confirm Changes`,children:(0,Q.jsx)(E,{type:`submit`,form:`form ${r.id}`,variant:`outline`,size:`icon`,className:`size-7.5 text-green-500`,children:(0,Q.jsx)(w,{className:`size-5`})})}),(0,Q.jsx)(gt,{businessTripExpenseId:r.id,businessTripId:t,onChange:n}),(0,Q.jsx)(xt,{businessTripExpenseId:r.id,onDelete:n})]})]},r.id)},nn=({data:e,onChange:t})=>{let{carRentalExpenses:n,id:r}=R(ce,e);return n?.length?(0,Q.jsx)(`div`,{className:`flex flex-col gap-2 mt-5`,children:(0,Q.jsxs)(J,{highlightOnHover:!0,withBorder:!0,children:[(0,Q.jsx)(`thead`,{children:(0,Q.jsxs)(`tr`,{children:[(0,Q.jsx)(Ct,{}),(0,Q.jsx)(`th`,{children:`Days`}),(0,Q.jsx)(`th`,{children:`Type`}),(0,Q.jsx)(`th`,{})]})}),(0,Q.jsxs)(`tbody`,{children:[n.sort((e,t)=>e.date&&t.date?e.date<t.date?1:-1:e.date?-1:+!!t.date).map(e=>(0,Q.jsx)(tn,{data:e,businessTripId:r,onChange:t},e.id)),(0,Q.jsx)(`tr`,{children:(0,Q.jsx)(`td`,{colSpan:6,children:(0,Q.jsx)(Zt,{businessTripId:r,onAdd:t})})})]})]})}):(0,Q.jsx)(Zt,{businessTripId:r,onAdd:t})},rn=({data:e,onChange:t})=>{let{flightExpenses:n,id:r,attendees:i}=R(ve,e);return(0,Q.jsx)(Kt,{businessTripId:r,attendees:i,expenses:n,onChange:t})},an=`addBusinessTripOtherExpense`,on=()=>{let[{fetching:e},t]=g(be);return{fetching:e,addBusinessTripOtherExpense:(0,Z.useCallback)(async e=>{let n=`Error adding business trip "other" expense`,r=an;x.loading(`Adding trip "other" expense`,{id:r});try{let i=S(await t(e),n,r);if(i)return x.success(`Success`,{id:r,description:`Business trip "other" expense was added`}),i.addBusinessTripOtherExpense}catch(e){console.error(`${n}: ${e}`),x.error(`Error`,{id:r,description:n,duration:1e5,closeButton:!0})}},[t])}};function sn(e){let{businessTripId:t,onAdd:n}=e,[r,i]=(0,Z.useState)(!1);return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(U,{content:`Add Other Expense`,children:(0,Q.jsx)(E,{variant:`outline`,size:`icon`,className:`size-7.5`,onClick:e=>{e.stopPropagation(),i(!0)},children:(0,Q.jsx)(C,{className:`size-5`})})}),r&&(0,Q.jsx)(cn,{businessTripId:t,opened:r,close:()=>i(!1),onAdd:n})]})}function cn({businessTripId:e,opened:t,close:n,onAdd:r}){let i=I({defaultValues:{businessTripId:e}}),{control:a,handleSubmit:o}=i,[s,c]=(0,Z.useState)(!1),{addBusinessTripOtherExpense:l,fetching:u}=on(),d=e=>{l({fields:e}).then(()=>{r?.(),n()})};return(0,Q.jsxs)(q,{opened:t,onClose:n,centered:!0,lockScroll:!0,children:[(0,Q.jsx)(q.Title,{children:`Add Other Expense`}),(0,Q.jsx)(q.Body,{children:(0,Q.jsx)(P,{...i,children:(0,Q.jsxs)(`form`,{onSubmit:o(d),className:`space-y-3`,children:[(0,Q.jsx)($,{businessTripId:e,control:a,setFetching:c}),(0,Q.jsx)(M,{name:`description`,control:a,render:({field:e})=>(0,Q.jsxs)(F,{children:[(0,Q.jsx)(V,{children:`Description`}),(0,Q.jsx)(j,{children:(0,Q.jsx)(T,{...e,value:e.value??void 0})}),(0,Q.jsx)(A,{})]})}),(0,Q.jsx)(M,{control:i.control,name:`deductibleExpense`,render:({field:e})=>(0,Q.jsxs)(F,{className:`flex flex-row items-center justify-between rounded-lg border p-3 shadow-sm`,children:[(0,Q.jsx)(`div`,{className:`space-y-0.5`,children:(0,Q.jsx)(V,{children:`Deductible Expense`})}),(0,Q.jsx)(j,{children:(0,Q.jsx)(We,{checked:e.value===!0,onCheckedChange:e.onChange})})]})}),(0,Q.jsx)(`div`,{className:`flex justify-center mt-5 gap-3`,children:(0,Q.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,Q.jsx)(Y,{blur:1,center:!0,children:(0,Q.jsx)(B,{})})]})}var ln=`updateBusinessTripOtherExpense`,un=()=>{let[{fetching:e},t]=g(o);return{fetching:e,updateBusinessTripOtherExpense:(0,Z.useCallback)(async e=>{let n=`Error updating business trip "other" expense`,r=ln;x.loading(`Updating business trip "other" expense`,{id:r});try{let i=S(await t(e),n,r);if(i)return x.success(`Success`,{id:r,description:`Business trip "other" expense was updated`}),i.updateBusinessTripOtherExpense}catch(e){console.error(`${n}: ${e}`),x.error(`Error`,{id:r,description:n,duration:1e5,closeButton:!0})}},[t])}},dn=({data:e,businessTripId:t,onChange:n})=>{let r=R(ne,e),[i,a]=(0,Z.useState)(!1),o=I({defaultValues:{id:r.id,businessTripId:t}}),{control:s,handleSubmit:c}=o,{updateBusinessTripOtherExpense:l,fetching:u}=un(),d=e=>{l({fields:e}).then(()=>{n?.(),a(!1)})};return(0,Q.jsxs)(`tr`,{children:[(0,Q.jsx)(St,{data:r,isEditMode:i,control:s,businessTripId:t}),(0,Q.jsx)(`td`,{children:(0,Q.jsx)(P,{...o,children:(0,Q.jsx)(`form`,{id:`form ${r.id}`,onSubmit:c(d),children:i?(0,Q.jsx)(M,{name:`description`,control:s,defaultValue:r.description,render:({field:e})=>(0,Q.jsxs)(F,{children:[(0,Q.jsx)(j,{children:(0,Q.jsx)(T,{form:`form ${r.id}`,...e,value:e.value??void 0})}),(0,Q.jsx)(A,{})]})}):(0,Q.jsx)(z,{c:r.description?void 0:`red`,children:r.description??`Missing`})})})}),(0,Q.jsx)(`td`,{children:(0,Q.jsx)(`div`,{className:`flex flex-col gap-2 justify-center`,children:i?(0,Q.jsx)(P,{...o,children:(0,Q.jsx)(M,{name:`deductibleExpense`,control:o.control,defaultValue:r.deductibleExpense,render:({field:e})=>(0,Q.jsx)(F,{children:(0,Q.jsx)(j,{children:(0,Q.jsx)(We,{form:`form ${r.id}`,checked:e.value===!0,onCheckedChange:e.onChange})})})})}):(0,Q.jsx)(z,{c:r.deductibleExpense?void 0:`red`,children:r.deductibleExpense===!0?`Yes`:r.deductibleExpense===!1?`No`:`Missing`})})}),(0,Q.jsxs)(`td`,{children:[(0,Q.jsx)(U,{content:`Edit`,children:(0,Q.jsx)(E,{disabled:u,variant:i?`default`:`outline`,size:`icon`,className:`size-7.5`,onClick:e=>{e.stopPropagation(),a(e=>!e)},children:(0,Q.jsx)(W,{className:`size-5`})})}),i&&(0,Q.jsx)(U,{content:`Confirm Changes`,children:(0,Q.jsx)(E,{type:`submit`,form:`form ${r.id}`,variant:`outline`,size:`icon`,className:`size-7.5 text-green-500`,children:(0,Q.jsx)(w,{className:`size-5`})})}),(0,Q.jsx)(gt,{businessTripExpenseId:r.id,businessTripId:t,onChange:n}),(0,Q.jsx)(xt,{businessTripExpenseId:r.id,onDelete:n})]})]},r.id)},fn=({data:e,onChange:t})=>{let{otherExpenses:n,id:r}=R(te,e);return n?.length?(0,Q.jsx)(`div`,{className:`flex flex-col gap-2 mt-5`,children:(0,Q.jsxs)(J,{highlightOnHover:!0,withBorder:!0,children:[(0,Q.jsx)(`thead`,{children:(0,Q.jsxs)(`tr`,{children:[(0,Q.jsx)(Ct,{}),(0,Q.jsx)(`th`,{children:`Description`}),(0,Q.jsx)(`th`,{children:`Deductible Expense`}),(0,Q.jsx)(`th`,{})]})}),(0,Q.jsxs)(`tbody`,{children:[n.sort((e,t)=>e.date&&t.date?e.date<t.date?1:-1:e.date?-1:+!!t.date).map(e=>(0,Q.jsx)(dn,{data:e,businessTripId:r,onChange:t},e.id)),(0,Q.jsx)(`tr`,{children:(0,Q.jsx)(`td`,{colSpan:6,children:(0,Q.jsx)(sn,{businessTripId:r,onAdd:t})})})]})]})}):(0,Q.jsx)(sn,{businessTripId:r,onAdd:t})},pn=`addBusinessTripTravelAndSubsistenceExpense`,mn=()=>{let[{fetching:e},t]=g(ye);return{fetching:e,addBusinessTripTravelAndSubsistenceExpense:(0,Z.useCallback)(async e=>{let n=`Error adding business trip travel&subsistence expense`,r=pn;x.loading(`Adding trip travel&subsistence expense`,{id:r});try{let i=S(await t(e),n,r);if(i)return x.success(`Success`,{id:r,description:`Business trip travel&subsistence expense was added`}),i.addBusinessTripTravelAndSubsistenceExpense}catch(e){console.error(`${n}: ${e}`),x.error(`Error`,{id:r,description:n,duration:1e5,closeButton:!0})}},[t])}};function hn(e){let{businessTripId:t,onAdd:n}=e,[r,i]=(0,Z.useState)(!1);return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(U,{content:`Add T&S Expense`,children:(0,Q.jsx)(E,{variant:`outline`,size:`icon`,className:`size-7.5`,onClick:e=>{e.stopPropagation(),i(!0)},children:(0,Q.jsx)(C,{className:`size-5`})})}),r&&(0,Q.jsx)(gn,{businessTripId:t,opened:r,close:()=>i(!1),onAdd:n})]})}function gn({businessTripId:e,opened:t,close:n,onAdd:r}){let i=I({defaultValues:{businessTripId:e}}),{control:a,handleSubmit:o}=i,[s,c]=(0,Z.useState)(!1),{addBusinessTripTravelAndSubsistenceExpense:l,fetching:u}=mn(),d=e=>{l({fields:e}).then(()=>{r?.(),n()})};return(0,Q.jsxs)(q,{opened:t,onClose:n,centered:!0,lockScroll:!0,children:[(0,Q.jsx)(q.Title,{children:`Add Travel & Subsistence Expense`}),(0,Q.jsx)(q.Body,{children:(0,Q.jsx)(P,{...i,children:(0,Q.jsxs)(`form`,{onSubmit:o(d),className:`space-y-3`,children:[(0,Q.jsx)($,{businessTripId:e,control:a,setFetching:c}),(0,Q.jsx)(M,{name:`expenseType`,control:a,render:({field:e})=>(0,Q.jsxs)(F,{children:[(0,Q.jsx)(V,{children:`Expense Type`}),(0,Q.jsx)(j,{children:(0,Q.jsx)(T,{...e,value:e.value??void 0})}),(0,Q.jsx)(A,{})]})}),(0,Q.jsx)(`div`,{className:`flex justify-center mt-5 gap-3`,children:(0,Q.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,Q.jsx)(Y,{blur:1,center:!0,children:(0,Q.jsx)(B,{})})]})}var _n=`updateBusinessTripTravelAndSubsistenceExpense`,vn=()=>{let[{fetching:e},t]=g(le);return{fetching:e,updateBusinessTripTravelAndSubsistenceExpense:(0,Z.useCallback)(async e=>{let n=`Error updating business trip travel&subsistence expense`,r=_n;x.loading(`Updating trip travel&subsistence expense`,{id:r});try{let i=S(await t(e),n,r);if(i)return x.success(`Success`,{id:r,description:`Business trip travel&subsistence expense was updated`}),i.updateBusinessTripTravelAndSubsistenceExpense}catch(e){console.error(`${n}: ${e}`),x.error(`Error`,{id:r,description:n,duration:1e5,closeButton:!0})}},[t])}},yn=({data:e,businessTripId:t,onChange:n})=>{let r=R(b,e),[i,a]=(0,Z.useState)(!1),o=I({defaultValues:{id:r.id,businessTripId:t}}),{control:s,handleSubmit:c}=o,{updateBusinessTripTravelAndSubsistenceExpense:l,fetching:u}=vn(),d=e=>{l({fields:e}).then(()=>{n?.(),a(!1)})};return(0,Q.jsxs)(`tr`,{children:[(0,Q.jsx)(St,{data:r,isEditMode:i,control:s,businessTripId:t}),(0,Q.jsx)(`td`,{children:(0,Q.jsx)(P,{...o,children:(0,Q.jsx)(`form`,{i