1import{_ as ye}from"./AppTextarea-Cc2F3p3Q.js";import{B as _e,A as be,d as O,b2 as G,l as g,a8 as Y,eu as Q,bG as i,e as ge,O as ve,o as p,h as v,a as l,w as r,$ as xe,i as a,t as s,a1 as _,G as m,v as t,c as y,Y as k,V as E,aT as ke,aU as Ee,F as P,m as W,n as he,b as N,b6 as $e,aE as Z,a0 as we,b4 as Ve,a5 as $,a4 as U,aH as Re}from"./index-Cp6GWp1P.js";import{_ as Ce}from"./AppTable-2PzKMpmT.js";import{A as Te}from"./AppNoData-DZLyy28h.js";import{u as Ae}from"./useExpenseStore-DFalN58L.js";import{V as De}from"./VTable-Dcd6-3p0.js";import{V as J}from"./VChip-tB868ytN.js";import{V as L}from"./VDivider-BlBr-1N-.js";import{V as Se}from"./VList-CrwDJxXa.js";import{V as je,a as Pe}from"./VTimeline-B_BUWPBZ.js";import"./VTextarea-C75jhm1K.js";import"./VCheckbox-B4Z1WcZ6.js";import"./VCheckboxBtn-D09MKKGU.js";import"./VSelectionControl-BNgoNJSl.js";import"./VPagination-CI3_WxSc.js";import"./VSelect-DdhIEVpI.js";import"./VMenu-meouGIvb.js";import"./filter-wn57B43p.js";import"./ssrBoot-Co7EHpbI.js";const Ne={class:"d-flex gap-2 flex-wrap"},Ue={key:0},Le={key:1},Be={class:"text-h6 mb-2"},Me={class:"text-h6 mb-2"},Fe={key:1,class:"text-medium-emphasis"},ze={class:"text-h6 mb-2"},Ie={class:"text-body-2"},qe={class:"text-caption text-medium-emphasis"},He=["src"],Oe={__name:"index",setup(K){const T=_e(),x=be(),w=Ae(),V=O(!1),d=O(null),c=G({visible:!1,loading:!1,reason:""}),u=G({visible:!1,attachment:null,blobUrl:"",loading:!1}),B=g(()=>Y("expense.approvals","edit")&&Q("expense.approvals","edit")),X=g(()=>Y("expense.finance","edit")&&Q("expense.finance","edit")),M=g(()=>{var e;return["pending","pending_second_approval"].includes((e=d.value)==null?void 0:e.status)}),ee=g(()=>{var e;return["approved","partially_approved"].includes((e=d.value)==null?void 0:e.status)}),F=g(()=>{const e=x.query.scope;return e==="self"||e==="team"?{scope:e}:{}}),te=[{title:i("ExpenseCategory"),key:"category"},{title:i("ExpenseDate"),key:"expense_date"},{title:i("ExpensePaymentMethod"),key:"payment_method"},{title:i("ExpenseAmount"),key:"amount"},{title:i("ExpenseApprovedAmount"),key:"approved_amount"},{title:i("Status"),key:"status"}],A=g(()=>u.blobUrl||""),ae=g(()=>{var n;return String(((n=u.attachment)==null?void 0:n.mime_type)||"").startsWith("image/")}),ne=()=>T.push({name:"expense-management",query:F.value}),D=(e,n="TRY")=>`${Number(e||0).toLocaleString("tr-TR",{minimumFractionDigits:2,maximumFractionDigits:2})} ${n}`,z=e=>{const n=String(e||"").trim();if(!n)return null;const b=new Date(n);if(!Number.isNaN(b.getTime()))return b;const j=n.replace(/\.(\d{3})\d+(?=Z|[+-]\d{2}:\d{2}$)/,".$1"),h=new Date(j);return Number.isNaN(h.getTime())?null:h},re=e=>{if(!e)return"-";const n=z(e);return n?new Intl.DateTimeFormat("tr-TR",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}).format(n):String(e)},S=e=>{if(!e)return"-";const n=z(e);return n?new Intl.DateTimeFormat("tr-TR",{year:"numeric",month:"2-digit",day:"2-digit"}).format(n):String(e)},I=e=>{switch(e){case"draft":return"secondary";case"pending":return"warning";case"pending_second_approval":return"warning";case"approved":return"success";case"partially_approved":return"info";case"rejected":return"error";case"paid":return"primary";default:return"default"}},se=e=>{if(!e)return"-";const n=[e.destination_city,e.destination_country].filter(Boolean).join(" / "),b=e.start_date&&e.end_date?`${S(e.start_date)} - ${S(e.end_date)}`:"";return[n,b].filter(Boolean).join(" | ")||`#${e.id}`},oe=e=>{e&&T.push({path:`/travel-management/${e}`,query:F.value})},q=e=>{switch(e){case"draft":return i("ExpenseStatusDraft");case"pending":return i("ExpenseStatusPending");case"pending_second_approval":return i("ExpenseStatusPendingSecond");case"approved":return i("ExpenseStatusApproved");case"partially_approved":return i("ExpenseStatusPartiallyApproved");case"rejected":return i("ExpenseStatusRejected");case"paid":return i("ExpenseStatusPaid");case"cancelled":return i("ExpenseStatusCancelled");default:return e||"-"}},le=e=>{switch(e){case"cash":return i("ExpensePaymentMethodCash");case"personal_card":return i("ExpensePaymentMethodPersonalCard");case"company_card":return i("ExpensePaymentMethodCompanyCard");case"advance":return i("ExpensePaymentMethodAdvance");default:return e||"-"}},ie=e=>{switch(Number(e)){case 0:return i("ExpenseApprovalSubmitted");case 1:return i("ExpenseApprovalSecondStep");case 2:return i("ExpenseApprovalApproved");case 3:return i("ExpenseApprovalRejected");case 4:return i("ExpenseApprovalPaid");default:return"-"}},H=()=>{u.blobUrl&&(URL.revokeObjectURL(u.blobUrl),u.blobUrl="")},de=async e=>{if(!(!(e!=null&&e.id)||!(e!=null&&e.file_path))){H(),u.attachment=e,u.visible=!0,u.loading=!0;try{const n=await Re(`api/app/expense/attachments/${e.id}/file`,{responseType:"blob"});u.blobUrl=URL.createObjectURL(n)}catch(n){$(n)}finally{u.loading=!1}}};ge(()=>u.visible,e=>{e||H()});const R=async()=>{try{V.value=!0;const e=await w.getReport(x.params.id);d.value=e.data}catch(e){$(e)}finally{V.value=!1}},pe=async()=>{try{const e=await w.approveReport(x.params.id,{});U("success","ExpenseReportApproved"),await R()}catch(e){$(e)}},ue=()=>{c.reason="",c.visible=!0},ce=async()=>
1{if(String(c.reason||"").trim())try{c.loading=!0;const e=await w.rejectReport(x.params.id,{reason:c.reason});U("success","ExpenseReportRejected"),c.visible=!1,await R()}catch(e){$(e)}finally{c.loading=!1}},me=async()=>{try{const e=await w.markPaidReport(x.params.id,{});U("success","ExpenseReportPaid"),await R()}catch(e){$(e)}};return ve(R),(e,n)=>{const b=Te,j=Ce,h=$e,fe=ye;return p(),v(P,null,[l(N,null,{default:r(()=>[l(xe,{class:"d-flex justify-space-between align-center flex-wrap gap-2"},{default:r(()=>[a("span",null,s(e.$t("ExpenseDetailTitle")),1),a("div",Ne,[l(_,{variant:"outlined",color:"grey-800",onClick:ne},{default:r(()=>[m(s(e.$t("ExpenseBackToList")),1)]),_:1}),t(B)?(p(),y(_,{key:0,color:"success","prepend-icon":"tabler-check",disabled:!t(M),onClick:pe},{default:r(()=>[m(s(e.$t("ExpenseApprove")),1)]),_:1},8,["disabled"])):k("",!0),t(B)?(p(),y(_,{key:1,color:"error","prepend-icon":"tabler-x",disabled:!t(M),onClick:ue},{default:r(()=>[m(s(e.$t("ExpenseReject")),1)]),_:1},8,["disabled"])):k("",!0),t(X)?(p(),y(_,{key:2,color:"primary","prepend-icon":"tabler-cash",disabled:!t(ee),onClick:me},{default:r(()=>[m(s(e.$t("ExpenseMarkPaid")),1)]),_:1},8,["disabled"])):k("",!0)])]),_:1}),t(V)||!t(d)?(p(),y(E,{key:0},{default:r(()=>[l(b,{loading:t(V),title:e.$t("NoDataText"),icon:"tabler-search",description:e.$t("NoDataTextDescription")},null,8,["loading","title","description"])]),_:1})):(p(),y(E,{key:1},{default:r(()=>{var f;return[l(ke,null,{default:r(()=>[l(Ee,{cols:"12"},{default:r(()=>[l(De,{density:"compact"},{default:r(()=>{var o;return[a("tbody",null,[a("tr",null,[a("td",null,[a("b",null,s(e.$t("ExpenseReportNo")),1)]),a("td",null,s(t(d).report_no),1)]),a("tr",null,[a("td",null,[a("b",null,s(e.$t("ExpenseTitle")),1)]),a("td",null,s(t(d).title),1)]),a("tr",null,[a("td",null,[a("b",null,s(e.$t("Employee")),1)]),a("td",null,s(((o=t(d).employee)==null?void 0:o.full_name)||"-"),1)]),t(d).travel?(p(),v("tr",Ue,[a("td",null,[a("b",null,s(e.$t("ExpenseLinkedTravel")),1)]),a("td",null,[l(_,{size:"small",variant:"text",class:"px-0",onClick:n[0]||(n[0]=C=>oe(t(d).travel.id))},{default:r(()=>[m(s(se(t(d).travel)),1)]),_:1})])])):k("",!0),a("tr",null,[a("td",null,[a("b",null,s(e.$t("ExpenseCurrency")),1)]),a("td",null,s(t(d).currency||"-"),1)]),a("tr",null,[a("td",null,[a("b",null,s(e.$t("ExpenseTotalAmount")),1)]),a("td",null,s(D(t(d).total_amount,t(d).currency)),1)]),a("tr",null,[a("td",null,[a("b",null,s(e.$t("Status")),1)]),a("td",null,[l(J,{size:"small",color:I(t(d).status)},{default:r(()=>[m(s(q(t(d).status)),1)]),_:1},8,["color"])])]),t(d).rejected_reason?(p(),v("tr",Le,[a("td",null,[a("b",null,s(e.$t("ExpenseRejectReason")),1)]),a("td",null,s(t(d).rejected_reason),1)])):k("",!0)])]}),_:1})]),_:1})]),_:1}),l(L,{class:"my-4"}),a("h4",Be,s(e.$t("ExpenseItemsTitle")),1),l(j,{sticky:"",headers:te,items:t(d).items||[],"items-per-page":(t(d).items||[]).length,"hide-default-footer":""},{"item.category":r(({item:o})=>{var C;return[m(s(((C=o.category)==null?void 0:C.title)||"-"),1)]}),"item.expense_date":r(({item:o})=>[m(s(S(o.expense_date)),1)]),"item.payment_method":r(({item:o})=>[m(s(le(o.payment_method)),1)]),"item.amount":r(({item:o})=>[m(s(D(o.amount,o.transaction_currency)),1)]),"item.approved_amount":r(({item:o})=>[m(s(D(o.approved_amount??o.amount,o.transaction_currency)),1)]),"item.status":r(({item:o})=>[l(J,{size:"small",color:I(o.status)},{default:r(()=>[m(s(q(o.status)),1)]),_:2},1032,["color"])]),_:1},8,["items","items-per-page"]),l(L,{class:"my-4"}),a("h4",Me,s(e.$t("ExpenseAttachmentsTitle")),1),(f=t(d).attachments)!=null&&f.length?(p(),y(Se,{key:0,class:"border rounded"},{default:r(()=>[(p(!0),v(P,null,W(t(d).attachments,o=>(p(),y(he,{key:o.id,title:o.file_name,subtitle:`${o.file_ext||""} - ${o.file_size||0} bytes`},{append:r(()=>[l(_,{size:"small",variant:"text",icon:"tabler-eye",onClick:C=>de(o),"aria-label":e.$t("View")},null,8,["onClick","aria-label"])]),_:2},1032,["title","subtitle"]))),128))]),_:1})):(p(),v("div",Fe,"-")),l(L,{class:"my-4"}),a("h4",ze,s(e.$t("ExpenseApprovalHistoryTitle")),1),l(je,{density:"compact",side:"end"},{default:r(()=>[(p(!0),v(P,null,W(t(d).approval_records||[],o=>(p(),y(Pe,{key:o.id,"dot-color":"primary",size:"small"},{default:r(()=>[a("div",Ie,s(ie(o.approval_status)),1),a("div",qe,s(re(o.record_date)),1)]),_:2},1024))),128))]),_:1})]}),_:1}))]),_:1}),l(Z,{modelValue:t(c).visible,"onUpdate:modelValue":n[4]||(n[4]=f=>t(c).visible=f),width:"540"},{default:r(()=>[l(h,{onClick:n[1]||(n[1]=f=>
1t(c).visible=!1)}),l(N,{title:e.$t("ExpenseReject")},{default:r(()=>[l(E,null,{default:r(()=>[l(fe,{modelValue:t(c).reason,"onUpdate:modelValue":n[2]||(n[2]=f=>t(c).reason=f),label:e.$t("Reason"),rows:"4"},null,8,["modelValue","label"])]),_:1}),l(E,{class:"d-flex justify-end gap-2"},{default:r(()=>[l(_,{variant:"outlined",color:"grey-800",onClick:n[3]||(n[3]=f=>t(c).visible=!1)},{default:r(()=>[m(s(e.$t("Cancel")),1)]),_:1}),l(_,{color:"error",loading:t(c).loading,onClick:ce},{default:r(()=>[m(s(e.$t("ExpenseReject")),1)]),_:1},8,["loading"])]),_:1})]),_:1},8,["title"])]),_:1},8,["modelValue"]),l(Z,{modelValue:t(u).visible,"onUpdate:modelValue":n[6]||(n[6]=f=>t(u).visible=f),width:"960"},{default:r(()=>{var f;return[l(h,{onClick:n[5]||(n[5]=o=>t(u).visible=!1)}),l(N,{title:((f=t(u).attachment)==null?void 0:f.file_name)||""},{default:r(()=>[t(u).loading?(p(),y(E,{key:0,class:"d-flex align-center justify-center py-8"},{default:r(()=>[l(we,{indeterminate:"",color:"primary"})]),_:1})):t(A)?(p(),y(E,{key:1},{default:r(()=>[t(ae)?(p(),y(Ve,{key:0,src:t(A),"max-height":"680",contain:""},null,8,["src"])):(p(),v("iframe",{key:1,src:t(A),width:"100%",height:"680",frameborder:"0"},null,8,He))]),_:1})):k("",!0)]),_:1},8,["title"])]}),_:1},8,["modelValue"])],64)}}},ut={__name:"[id]",setup(K){return(T,x)=>(p(),y(Oe))}};export{ut as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.