1import{I as xe,x as Z,a3 as ke,m as we,f as De,v as ee,T as Te,ag as Ce,g as Se}from"./vendor-primevue-BQjqeURy.js";import{d as Ee,a0 as Re,a4 as Ke,_ as Le,r as k,c as M,o as Ae,J as m,b as p,g as w,i as E,K as v,M as D,x as i,n as R,a as U,F as te,j as Ne,l as Fe}from"./vendor-vue-BKoTHMGq.js";import{a as Ve,k as $e,_ as Me}from"./index-DMKPnxma.js";import{S as Ue}from"./SectionCard-CFfL_ylS.js";import{_ as Pe}from"./index.vue_vue_type_script_setup_true_lang-DaSTe4Be.js";import{a as y,R as je,E as z}from"./expenses-FUshFdEA.js";import{b as Be}from"./api-query-BuJwE4A5.js";import{C as Ie}from"./CrmService-C9NTTIcy.js";import{S as Xe}from"./StatsService-CTPsSkYQ.js";import{t as se}from"./stats-Hp3_94IM.js";import"./vendor-BzNr_A4A.js";import"./vendor-charts-DvOr2HQZ.js";import"./vendor-utils-GMkmjiMT.js";const ze={class:"multi-expense-report-editor p-4"},Ge={key:0,class:"text-center p-8"},Je={key:1,class:"space-y-6"},qe={class:"bg-surface-50 dark:bg-surface-800 p-4 rounded-lg"},He={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},Oe={class:"text-sm text-surface-600 dark:text-surface-400 mb-1"},Qe={class:"font-semibold"},We={class:"text-sm text-surface-600 dark:text-surface-400 mb-1"},Ye={class:"text-sm"},Ze={key:0,class:"mr-2"},et={key:1,class:"mr-2"},tt={key:2,class:"mr-2"},st={key:3,class:"mr-2"},at={class:"flex items-center gap-2"},nt={key:0,class:"pi pi-globe text-blue-500"},ot={key:1,class:"pi pi-wallet text-green-500"},rt={key:2,class:"pi pi-megaphone text-orange-500"},lt={key:3,class:"pi pi-image text-pink-500"},it={key:4,class:"pi pi-map-marker text-cyan-500"},ct={class:"text-xs text-surface-400"},ut={class:"flex items-center gap-2"},pt={key:0,class:"pi pi-question-circle text-red-500 cursor-help"},dt={key:1},mt={key:2,class:"text-surface-400"},ft={key:1,class:"text-center py-8 text-surface-500"},vt={class:"flex justify-end gap-3 pt-4 border-t"},yt=Ee({__name:"MultiExpenseReportEditor",setup(gt){const ae=Re(),G=Ke(),{showToast:b}=Ve(),{t:c}=Le(),P=k(!0),L=k(!1),K=k([]),J=k(null),ne=k(new Map),x=k([]),F=k({}),d=k({}),q=k([]),j=M(()=>{const o=ae.query.date;return o?o.split("&").filter(n=>n.trim()!==""):[]}),B=M(()=>[...j.value].sort()),V=M(()=>{const o=new Map;for(const n of K.value)if(n.report&&typeof n.report=="object"){const r=n.report;o.set(n.date,{status:r.status,comment:r.comment})}else o.set(n.date,{status:null,comment:null});return o}
1);function H(o){if(o)switch(o){case y.DRAFT:return"info";case y.REJECTED:return"danger";default:return}}const $=M(()=>{var o;return((o=J.value)==null?void 0:o.breakdown)||{byAccount:!0,byCampaign:!1,byCreative:!1,byGeo:!1}}),oe={dates:{field:"date",op:"in",when:o=>o.length>0,serialize:o=>o}};function re(o,n){const r=[];return r.push({level:"source",getKey:t=>String(t.cmp_source||"unknown"),getLabel:(t,e)=>e,getLabelName:(t,e)=>String(t.cmp_source_name||e),getData:(t,e,s)=>({source:e,sourceName:s}),defaultExpanded:!0}),o.byAccount&&n.accountKey&&r.push({level:"account",getKey:(t,e)=>String(t[e.accountKey]||"unknown"),getLabel:(t,e)=>e,getLabelName:(t,e)=>e,getData:(t,e)=>({account:e})}),o.byCampaign&&n.campaignKey&&r.push({level:"campaign",getKey:(t,e)=>String(t[e.campaignKey]||"unknown"),getLabel:(t,e)=>e,getLabelName:(t,e)=>{const s=t.ext_sub4;return s?String(s):e&&e!=="unknown"?e:"unknown"},getData:(t,e,s)=>({campaign:e,campaignName:s})}),o.byCreative&&n.creativeKey&&r.push({level:"creative",getKey:(t,e)=>String(t[e.creativeKey]||"unknown"),getLabel:(t,e)=>e,getLabelName:(t,e)=>{const s=t.ext_sub6;return s?String(s):e&&e!=="unknown"?e:"unknown"},getData:(t,e)=>({creative:e})}),o.byGeo&&r.push({level:"geo",getKey:t=>String(t.user_country||"XX"),getLabel:(t,e)=>e,getLabelName:(t,e)=>{const s=t.ext_sub6;return s?String(s):e&&e!=="unknown"&&e!=="XX"?e:"unknown"},getData:(t,e,s)=>({geo:e,geoName:s})}),r}function le(o,n){const{breakdown:r,mapping:t}=n,e=[],s=new Map,a=re(r,t);if(a.length===0)return[];d.value={},F.value={};for(const[l,u]of o.entries())for(const g of u){let h="",T=null,f={};for(let _=0;_<a.length;_++){const C=a[_],ge=_===a.length-1,A=C.getKey(g,t),_e=C.getLabel(g,A),W=C.getLabelName(g,A),Y=h?`${h}-${A}`:A,N=`${C.level}-${Y}`,he=C.getData(g,A,W);f={...f,...he};let S=s.get(N);if(!S){S={key:N,data:{label:_e,labelName:W,level:C.level,isLeaf:ge,...f},children:[]},d.value[N]={};for(const be of B.value)d.value[N][be]={amount:0,currency:"USD"};s.set(N,S),T?T.children.push(S):e.push(S),C.defaultExpanded&&(F.value[S.key]=!0)}T=S,h=Y}}return e}async function ie(){if(j.value.length===0)return b({type:"warn",title:c("common.error.title"),message:"No dates provided in query parameters"}),[];const{params:o}=Be({pageFirst:0,pageRows:100,sortField:"date",sortOrder:1,filters:{dates:j.value},spec:oe}),n=await z.listTasks({params:o});return K.value=n.data,n.data}async function ce(){const{data:o}=await Ie.list({params:{"filter[active]":!0}}),n=o[0]||null;return J.value=n,n}function ue(o,n,r,t="UTC"){const e=["cmp_source"],{breakdown:s,mapping:a}=o;s.byAccount&&a.accountKey&&e.push(a.accountKey),s.byCampaign&&a.campaignKey&&(e.push(a.campaignKey),e.push("ext_sub4")),s.byCreative&&a.creativeKey&&e.push(a.creativeKey),s.byGeo&&e.push("user_country"),(s.byCreative||s.byGeo)&&e.push("ext_sub6");const l=["clicks","land_views","pwa_views","pwa_installs"];return{time:{from:se(n.from),to:se(n.to),timezone:t},groups:e,metrics:l,filters:[{field:"cmp_user",op:"in",value:r}],pagination:{page:1,limit:1e4}}}async function pe(o,n,r){const t=new Date(o),e=new Date(t);e.setHours(0,0,0,0);const s=new Date(t);s.setHours(23,59,59,999);const a=ue(n,{from:e,to:s},r);return(await Xe.query(a)).data}async function de(){var o,n,r;P.value=!0;try{const[t,e,s]=await Promise.all([ie(),ce(),$e.currencies()]);if(q.value=s,!e){b({type:"error",title:c("common.error.title"),message:"CRM configuration not found"});return}if(t.length===0){b({type:"warn",title:c("common.error.title"),message:"No tasks found for selected dates"});return}const a=t.filter(f=>{if(f.status===je.SKIPPED)return!1;if(!f.report)return!0;if(typeof f.report=="object"){const _=f.report;return _.status===y.DRAFT||_.status===y.REJECTED}return!1});if(a.length===0){b({type:"warn",title:c("common.error.title"),message:"No editable tasks found for selected dates"});return}K.value=a;const l=[...new Set(a.map(f=>f.user))],g=a.map(f=>f.date).map(f=>pe(f,e,l).then(_=>({date:f,rows:_}))),h=await Promise.all(g),T=new Map;for(const{date:f,rows:_}of h)T.set(f,_);ne.value=T,x.value=le(T,e),ve(a)}catch(t){const e=t,s=((r=(n=(o=e==null?void 0:e.response)==null?void 0:o.data)==null?void 0:n.error)==null?void 0:r.message)??c("common.error.load_failed");b({type:"error",title:c("common.error.title"),message:s})}finally{P.value=!1}}function I(o,n){var t,e;let r=0;for(const s of o){if(s.children&&s.children.length>0){const a=I(s.children,n);(t=d.value[s.key])!=null&&t[n]&&(d.value[s.key][n].amount=a)}(e=d.value[s.key])!=null&&e[n]&&(r+=d.value[s.key][n].amount)}return r}function me(o){I(x.value,o)}function fe(o,n,r){var s;const t=X(o),e=a=>!a||a==="unknown"||a==="XX"?null:a;for(const a of t){const l=n.find(u=>u.source===a.data.source&&e(u.account)===e(a.data.account)&&e(u.campaign)===e(a.data.campaign)&&e(u.creative)===e(a.data.creative)&&e(u.geo)===e(a.data.geo));l&&((s=d.value[a.key])!=null&&s[r])&&(d.value[a.key][r].amount=l.amount/100,d.value[a.key][r].currency=l.currency)}I(o,r)}function ve(o){for(const n of o){if(!n.report||typeof n.report!="object")continue;const r=n.report;r.lines&&r.lines.length>0&&(r.status===y.DRAFT||r.status===y.REJECTED)&&fe(x.value,r.lines,n.date)}}function X(o){const n=[];for(const r of o)r.data.isLeaf&&n.push(r),r.children&&n.push(...X(r.children));return n}function O(o,n){var s;const r=X(o),t=[],e=(a,l=["unknown"])=>{if(!(!a||l.includes(a)))return a};for(const a of r){const l=(s=d.value[a.key])==null?void 0:s[n],u=e(a.data.account),g=e(a.data.campaign),h={s
1ource:a.data.source||"",account:u===g?void 0:u,campaign:g,creative:e(a.data.creative),geo:e(a.data.geo,["unknown","XX"]),amount:(l==null?void 0:l.amount)||0,currency:(l==null?void 0:l.currency)||"USD"};t.push(h)}return t}async function Q(o){var r,t,e;if(K.value.length===0){b({type:"warn",title:c("common.validation.title"),message:c("expenses.editor.validation.no_tasks")});return}const n=[];for(const s of K.value)O(x.value,s.date).some(u=>u.amount>0)||n.push(s.date);if(n.length>0){b({type:"warn",title:c("common.validation.title"),message:c("expenses.editor.validation.dates_not_filled",{dates:n.join(", ")})});return}L.value=!0;try{const s=K.value.map(async u=>{const g=O(x.value,u.date),h=u.report&&typeof u.report=="object"?u.report:null;return h?await z.patchReport(h.id,{lines:g,status:o}):await z.createReport({reportTask:u.id,lines:g,status:o}),{task:u,skipped:!1}}),l=(await Promise.all(s)).filter(u=>!u.skipped).length;b({type:"success",title:c("common.success.title"),message:o===y.SUBMITTED?c("expenses.editor.messages.all_reports_submitted",{count:l}):c("expenses.editor.messages.all_drafts_saved",{count:l})}),await G.push({path:"/crm/expenses/my-reports"})}catch(s){const a=s,l=((e=(t=(r=a==null?void 0:a.response)==null?void 0:r.data)==null?void 0:t.error)==null?void 0:e.message)??c("common.error.save_failed");b({type:"error",title:c("common.error.title"),message:l})}finally{L.value=!1}}function ye(){G.push({name:"my-expense-reports"})}return Ae(()=>{de()}),(o,n)=>{const r=Te;return p(),m("div",ze,[w(Ue,null,{actions:E(()=>[w(i(Se),{label:i(c)("common.actions.back"),icon:"pi pi-arrow-left",severity:"secondary",outlined:"",onClick:ye},null,8,["label"])]),default:E(()=>[P.value?(p(),m("div",Ge,[w(Pe,{width:75,height:75,"stroke-width":"3"})])):(p(),m("div",Je,[v("div",qe,[v("div",He,[v("div",null,[v("div",Oe,D(i(c)("expenses.editor.task.dates")||"Dates"),1),v("div",Qe,D(B.value.join(", ")),1)]),v("div",null,[v("div",We,D(i(c)("expenses.editor.task.breakdown")),1),v("div",Ye,[$.value.byAccount?(p(),m("span",Ze,"Account")):R("",!0),$.value.byCampaign?(p(),m("span",et,"Campaign")):R("",!0),$.value.byCreative?(p(),m("span",tt,"Creative")):R("",!0),$.value.byGeo?(p(),m("span",st,"Geo")):R("",!0)])])])]),v("div",null,[x.value.length>0?(p(),U(i(xe),{key:0,expandedKeys:F.value,"onUpdate:expandedKeys":n[0]||(n[0]=t=>F.value=t),value:x.value,size:"small",stripedRows:""},{default:E(()=>[w(i(Z),{field:"labelName",header:i(c)("expenses.editor.columns.item"),expander:!0,style:{"min-width":"250px"}},{body:E(({node:t})=>[v("div",at,[t.data.level==="source"?(p(),m("i",nt)):t.data.level==="account"?(p(),m("i",ot)):t.data.level==="campaign"?(p(),m("i",rt)):t.data.level==="creative"?(p(),m("i",lt)):t.data.level==="geo"?(p(),m("i",it)):R("",!0),v("span",null,D(t.data.labelName||t.data.label),1),v("span",ct,"("+D(t.data.level)+")",1)])]),_:1},8,["header"]),(p(!0),m(te,null,Ne(B.value,t=>(p(),U(i(Z),{key:t,style:{"min-width":"200px"}},{header:E(()=>{var e,s,a,l;return[v("div",ut,[v("span",null,D(t),1),((e=V.value.get(t))==null?void 0:e.status)===i(y).DRAFT?(p(),U(i(ee),{key:0,value:i(c)("expenses.editor.status.draft"),severity:H(i(y).DRAFT),class:"text-xs"},null,8,["value","severity"])):((s=V.value.get(t))==null?void 0:s.status)===i(y).REJECTED?(p(),m(te,{key:1},[w(i(ee),{value:i(c)("expenses.editor.status.rejected"),severity:H(i(y).REJECTED),class:"text-xs"},null,8,["value","severity"]),(a=V.value.get(t))!=null&&a.comment?Fe((p(),m("i",pt,null,512)),[[r,(l=V.value.get(t))==null?void 0:l.comment,void 0,{top:!0}]]):R("",!0)],64)):R("",!0)])]}),body:E(({node:e})=>{var s,a;return[e.data.isLeaf&&((s=d.value[e.key])!=null&&s[t])?(p(),U(i(ke),{key:0,class:"w-full"},{default:E(()=>[w(i(we),{modelValue:d.value[e.key][t].amount,"onUpdate:modelValue":[l=>d.value[e.key][t].amount=l,l=>me(t)],mode:"currency",currency:d.value[e.key][t].currency,class:"w-24"},null,8,["modelValue","onUpdate:modelValue","currency"]),w(i(De),{modelValue:d.value[e.key][t].currency,"onUpdate:modelValue":l=>d.value[e.key][t].currency=l,options:q.value,filter:"",optionLabel:"label",optionValue:"value",class:"w-20"},null,8,["modelValue","onUpdate:modelValue","options"])]),_:2},1024)):(a=d.value[e.key])!=null&&a[t]?(p(),m("span",dt,D((d.value[e.key][t].amount||0).toFixed(2)),1)):(p(),m("span",mt,"-"))]}),_:2},1024))),128))]),_:1},8,["expandedKeys","value"])):(p(),m("div",ft,[n[2]||(n[2]=v("i",{class:"pi pi-inbox text-4xl mb-2"},null,-1)),v("p",null,D(i(c)("expenses.editor.messages.no_stats_data")),1)]))]),v("div",vt,[w(i(Ce),{label:i(c)("expenses.editor.actions.submit_all"),icon:"pi pi-send",loading:L.value,disabled:L.value||x.value.length===0,onClick:n[1]||(n[1]=t=>Q(i(y).SUBMITTED)),model:[{label:i(c)("expenses.editor.actions.save_all_drafts"),icon:"pi pi-save",command:()=>Q(i(y).DRAFT),disabled:L.value||x.value.length===0}]},null,8,["label","loading","disabled","model"])])]))]),_:1})])}}}),Lt=Me(yt,[["__scopeId","data-v-87c84cb2"]]);export{Lt 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.