1import{b as m,g as P,w as t,j as e,H as j,f as v,c1 as Q,k as V,h as p,M as q,at as X,t as g,e as M,F as Z,m as ve,I as L,c as h,az as A,aW as $,n as ee,bp as fe,v as C,y as k,an as ye,aw as he,av as S,r as b,d as B,o as be,a1 as Me,au as K,Y as xe,aY as Ie,u as we,aI as $e,aL as F,B as O,C as T,V as Ce}from"./index-DUWew8AW.js";import{T as Ae}from"./TagResource-CZNzqy7j.js";import{G as Ve}from"./GroupResource-cbWfbKe0.js";import{I as Te}from"./IndustryResource-YN3nbEC1.js";import{M as ke}from"./ManufacturerResource-BtMfIuT4.js";import{_ as Ye}from"./PageContent-_L2qDZ3g.js";import{P as Re}from"./PageHeader-CuloWWA-.js";import{u as Se}from"./useFilter-DGRV5EhG.js";import{_ as _e}from"./LineChart-D8Q0tbTY.js";const De={class:"fit"},Fe={class:"fit"},Pe={__name:"MarginDetailsCard",props:{months:{type:Array,required:!0},detailRows:{type:Array,required:!0},detailView:{type:String,required:!0}},emits:["update:detailView"],setup(s,{emit:f}){const d=s,u=f,n=h(()=>{const i=[{title:"Group",key:"groupName"},{title:"Client",key:"clientName"}];return d.months.forEach(r=>{i.push({title:r.label,key:`${r.key}${d.detailView}`})}),i});function o(i){return d.detailView==="_percentage"?A(i,2):$(i)}return(i,r)=>(m(),P(L,{variant:"flat",border:""},{default:t(()=>[e(j,{class:"flex items-center justify-between"},{default:t(()=>[r[3]||(r[3]=v("div",{class:"text-lg text-gray-600"},"Margin Details by Month",-1)),e(Q,{"model-value":s.detailView,mandatory:"",density:"compact","onUpdate:modelValue":r[0]||(r[0]=w=>u("update:detailView",w))},{default:t(()=>[e(V,{size:"small",value:""},{default:t(()=>[...r[1]||(r[1]=[p("$ Amount",-1)])]),_:1}),e(V,{size:"small",value:"_percentage"},{default:t(()=>[...r[2]||(r[2]=[p("% Percent",-1)])]),_:1})]),_:1},8,["model-value"])]),_:1}),e(q,{class:"pa-0"},{default:t(()=>[e(X,{headers:n.value,items:s.detailRows,"hide-default-footer":"","items-per-page":-1,"sort-by":[{key:"group",order:"asc"},{key:"client",order:"asc"}]},{item:t(({item:w})=>[v("tr",null,[v("td",De,g(w.groupName),1),v("td",Fe,g(w.clientName),1),(m(!0),M(Z,null,ve(s.months,Y=>(m(),M("td",{key:Y.label},g(o(w[`${Y.key}${s.detailView}`])),1))),128))])]),_:1},8,["headers","items"])]),_:1})]),_:1}))}},qe={class:"flex flex-col"},Le={class:"text-lg text-gray-600 tracking-tighter"},Ne={key:0},G={__name:"MarginMetricCard",props:{title:{type:String,required:!0},value:{type:String,required:!0},valueClass:{type:String,default:""}},setup(s){return(f,d)=>(m(),P(L,{variant:"flat",border:"",class:"h-full"},{default:t(()=>[e(q,null,{default:t(()=>[v("div",qe,[v("div",Le,g(s.title),1),v("div",{class:ee(["text-4xl font-semibold mt-2",s.valueClass])},g(s.value),3),f.$slots.default?(m(),M("div",Ne,[fe(f.$slots,"default")])):C("",!0)])]),_:3})]),_:3}))}},Ue={__name:"MarginMonthlySummaryCard",props:{monthlySummary:{type:Array,required:!0}},setup(s){const f=[{title:"Month",key:"month"},{title:"Margin $",key:"marginDollars"},{title:"Margin %",key:"marginPercentage"},{title:"% Change",key:"changePercentage"}];function d(u){return u>0?"text-green-600":u<0?"text-red-600":"text-gray-600"}return(u,n)=>(m(),P(L,{variant:"flat",border:""},{default:t(()=>[e(j,{class:"text-lg text-gray-600"},{default:t(()=>[...n[0]||(n[0]=[p("Monthly Summary",-1)])]),_:1}),e(q,{class:"pa-0"},{default:t(()=>[e(X,{headers:f,items:s.monthlySummary,"hide-default-footer":"","items-per-page":-1,"sort-by":[{key:"month",order:"desc"}]},{"item.month":t(({item:o})=>[p(g(k(ye)(o.month,"MMM YYYY")),1)]),"item.marginDollars":t(({item:o})=>[p(g(k($)(o.marginDollars)),1)]),"item.marginPercentage":t(({item:o})=>[p(g(k(A)(o.marginPercentage,2)),1)]),"item.changePercentage":t(({item:o})=>[v("span",{class:ee(d(o.changePercentage))},g(k(A)(o.changePercentage,2)),3)]),_:1},8,["items"])]),_:1})]),_:1}))}},Be={class:"pb-4"},Oe={class:"rounded-sm border border-gray-200 p-4"},Ge={class:"flex items-center gap-2"},je={key:0,class:"text-xs leading-5"},ze={key:0,class:"text-xs leading-5"},Ee={key:0,class:"text-xs leading-5"},He={key:0,class:"text-xs leading-5"},We={key:0,class:"text-xs leading-5"},Je={class:"flex justify-end gap-2 mt-6"},Ke={__name:"MarginReportFilters",props:{filters:{type:Object,required:!0},divisionOptions:{type:Array,required:!0},groups:{type:Array,required:!0},clients:{type:Array,required:!0},budgetTags:{type:Array,required:!0},clientTags:{type:Array,required:!0},manufacturers:{type:Array,required:!0},loading:{type:Boolean,default:!1}},emits:["update-filter","clear-filters","apply-filters"],setup(s,{emit:f}){const d=f;function u(o,i){d("update-filter",{field:o,value:i})}function n(o=[]){const i=(o==null?void 0:o.length)||0;return i===0?"":i>9?`+${i}`:`${i} selected`}return(o,i)=>(m(),M("div",Be,[v("div",Oe,[v("div",Ge,[e(he,{"model-value":s.filters.division,items:s.divisionOptions,"item-title":"name",label:"Division","return-object":"",variant:"outlined",density:"compact","onUpdate:modelValue":i[0]||(i[0]=r=>u("division",r))},null,8,["model-value","items"]),e(S,{"model-value":s.filters.groupIds,items:s.groups,"item-title":"name","
1item-value":"id",label:"Group(s)",variant:"outlined",density:"compact",clearable:"",multiple:"",chips:"","closable-chips":"","onUpdate:modelValue":i[1]||(i[1]=r=>u("groupIds",r||[]))},{chip:t(({index:r})=>[r===0?(m(),M("span",je,g(n(s.filters.groupIds)),1)):C("",!0)]),_:1},8,["model-value","items"]),e(S,{"model-value":s.filters.clientIds,items:s.clients,"item-title":"name","item-value":"id",label:"Client(s)",variant:"outlined",density:"compact",clearable:"",multiple:"",chips:"","closable-chips":"","onUpdate:modelValue":i[2]||(i[2]=r=>u("clientIds",r||[]))},{chip:t(({index:r})=>[r===0?(m(),M("span",ze,g(n(s.filters.clientIds)),1)):C("",!0)]),_:1},8,["model-value","items"]),e(S,{"model-value":s.filters.tags,items:s.budgetTags,"item-title":"name","item-value":"id",label:"Budget Tag(s)",variant:"outlined",density:"compact",clearable:"","persistent-hint":"",hint:"Apply filters to update",multiple:"",chips:"","closable-chips":"","onUpdate:modelValue":i[3]||(i[3]=r=>u("tags",r||[]))},{chip:t(({index:r})=>[r===0?(m(),M("span",Ee,g(n(s.filters.tags)),1)):C("",!0)]),_:1},8,["model-value","items"]),e(S,{"model-value":s.filters.clientTagIds,items:s.clientTags,"item-title":"name","item-value":"id",label:"Client Tag(s)",variant:"outlined",density:"compact",clearable:"","persistent-hint":"",hint:"Apply filters to update",multiple:"",chips:"","closable-chips":"","onUpdate:modelValue":i[4]||(i[4]=r=>u("clientTagIds",r||[]))},{chip:t(({index:r})=>[r===0?(m(),M("span",He,g(n(s.filters.clientTagIds)),1)):C("",!0)]),_:1},8,["model-value","items"]),e(S,{"model-value":s.filters.manufacturerIds,items:s.manufacturers,"item-title":"name","item-value":"id",label:"Manufacturer(s)",variant:"outlined",density:"compact",clearable:"","persistent-hint":"",hint:"Apply filters to update",multiple:"",chips:"","closable-chips":"","onUpdate:modelValue":i[5]||(i[5]=r=>u("manufacturerIds",r||[]))},{chip:t(({index:r})=>[r===0?(m(),M("span",We,g(n(s.filters.manufacturerIds)),1)):C("",!0)]),_:1},8,["model-value","items"])]),v("div",Je,[e(V,{variant:"outlined",color:"error",disabled:s.loading,onClick:i[6]||(i[6]=r=>d("clear-filters"))},{default:t(()=>[...i[8]||(i[8]=[p(" Clear Filters ",-1)])]),_:1},8,["disabled"]),e(V,{color:"primary",loading:s.loading,disabled:s.loading,onClick:i[7]||(i[7]=r=>d("apply-filters"))},{default:t(()=>[...i[9]||(i[9]=[p(" Apply Filters ",-1)])]),_:1},8,["loading","disabled"])])])]))}},Qe={__name:"MarginTrendCard",props:{trendSeries:{type:Array,required:!0},trendChartOptions:{type:Object,required:!0},chartMode:{type:String,default:"all"}},emits:["update:chartMode"],setup(s,{emit:f}){const d=f;return(u,n)=>(m(),P(L,{variant:"flat",border:""},{default:t(()=>[e(j,{class:"flex items-center justify-between gap-3"},{default:t(()=>[n[4]||(n[4]=v("div",{class:"text-lg text-gray-600"},"12-Month Trend",-1)),e(Q,{"model-value":s.chartMode,mandatory:"",density:"compact","onUpdate:modelValue":n[0]||(n[0]=o=>d("update:chartMode",o))},{default:t(()=>[e(V,{size:"small",value:"all"},{default:t(()=>[...n[1]||(n[1]=[p("Show All",-1)])]),_:1}),e(V,{size:"small",value:"percent"},{default:t(()=>[...n[2]||(n[2]=[p("%",-1)])]),_:1}),e(V,{size:"small",value:"amount"},{default:t(()=>[...n[3]||(n[3]=[p("$",-1)])]),_:1})]),_:1},8,["model-value"])]),_:1}),e(q,null,{default:t(()=>[e(_e,{data:s.trendSeries,"chart-options":s.trendChartOptions},null,8,["data","chart-options"])]),_:1})]),_:1}))}},Xe={class:"flex items-center gap-2"},Ze={key:0,class:"p-2"},et={class:"grid grid-cols-3 gap-3 mt-6"},dt={__name:"MarginReportIndex",setup(s){const{showErrorNotificationFromError:f}=we(),d=b(!0),u=b(null),n=b([]),o=b([]),i=b([]),r=b([]),w=b([]),Y=b([]),c=b(null),z=b(""),_=b("all"),{divisions:te}=Se(Y),y=b({division:null,reportDate:B().format("YYYY-MM"),groupIds:[],clientIds:[],tags:[],clientTagIds:[],manufacturerId:[]}),ae=h(()=>[{name:"All",value:null},...te.value]),D=h(()=>{var l;const a=(l=y.value.division)==null?void 0:l.value;return Array.isArray(a)?a:null}),E=h(()=>{if(D.value===null)return n.value;const a=new Set(o.value.filter(l=>D.value.includes(l.industryId)).map(l=>l.groupId));return n.value.filter(l=>a.has(l.id))}),H=h(()=>{let a=o.value;return D.value!==null&&(a=a.filter(l=>D.value.includes(l.industryId))),y.value.groupIds.length&&(a=a.filter(l=>y.value.groupIds.includes(l.groupId))),a}),N=h(()=>B(y.value.reportDate||B().format("YYYY-MM"),"YYYY-MM")),W=h(()=>N.value.format("MMMM YYYY")),le=h(()=>$(c.value.totalMarginFeeAmount)),re=h(()=>A(c.value.avgMarginPercentage,2)),se=h(()=>{var a;return A(((a=c.value.yoy)==null?void 0:a.growthPercentage)||0,2)}),ie=h(()=>{var l;const a=((l=c.value.yoy)==null?void 0:l.growthPercentage)||0;return a>0?"text-green-600":a<0?"text-red-600":""}),ne=h(()=>{var a,l;return[{name:"Margin %",data:((a=c.value.trend)==null?void 0:a.marginPercentage)||[],yAxis:0,visible:["all","percent"].includes(_.value)},{name:"Margin $",data:((l=c.value.trend)==null?void 0:l.marginDollars)||[],yAxis:1,visible:["all","amount"].includes(_.value)}]}),oe=h(()=>{var a;return{chart:{zoomType:"x"},xAxis:{categories:((a=c.value.trend)==null?void 0:a.categories)||[]},yAxis:[{title:{text:"Margin (%)"},labels:{formatter(){return A(this.value)}}},{title:{text:"Margin ($)"},opposite:!0,labels:{formatter(){return $(this.value)}}}],legend:{enabled:!1},tooltip:{shared:!0,useHTML:!0,formatter(){const l=`<b>${this.x}</b>`,I=this.points.map(x=>{const U=x.series.yAxis.opposite?$(x.y):A(x.y);return` 2 <br/>
3 <span style="color:${x.color}">â</span> 4 ${x.series.name}: <b>${U}</b> 5 `}).join("");return l+I}}}});async function ue(){try{const[a,l,I,x,U,pe]=await Promise.all([Ve.getGroupsList(),K.getNonProspectClientList({withFields:["id","name","industryId","groupId"]}),Ae.getTags(),K.getAllTags(),ke.getManufacturersList(),Te.getIndustriesList()]);n.value=a.data||[],o.value=l.data||[],i.value=xe.orderBy(I.data||[],"name"),r.value=x.data||[],w.value=U.data||[],Y.value=pe.data||[]}catch(a){f(a,"There was an error loading margin report filters.")}}async function R(){u.value&&u.value.abort();const a=new AbortController;u.value=a,d.value=!0;try{const l=await Ie.getMarginReport({...y.value,month:N.value.format("MMMM"),year:N.value.format("YYYY"),isExternal:!0},a.signal);c.value=l.data||null}catch(l){if(l.code==="ERR_CANCELED")return;f(l,"There was an error loading the margin report.")}finally{u.value===a&&(u.value=null,d.value=!1)}}function de(a){y.value.reportDate=a,R()}function ce(){y.value={...y.value,division:null,groupIds:[],clientIds:[],tags:[],clientTagIds:[],manufacturerId:[]},R()}const me=["division","groupIds","clientIds"];function J(a,l){const I=new Set(l.map(x=>x.id));y.value[a]=y.value[a].filter(x=>I.has(x))}function ge({field:a,value:l}){y.value[a]=l,(a==="division"||a==="groupIds")&&(J("groupIds",E.value),J("clientIds",H.value)),me.includes(a)&&R()}return be(async()=>{await ue(),await R()}),(a,l)=>(m(),M("section",null,[e(Re,null,{right:t(()=>[v("div",Xe,[e($e,{variant:"outlined",density:"compact",menu:"",value:y.value.reportDate,type:"month",label:"Select Month","prepend-inner-icon":"event","hide-details":"",onInput:de},null,8,["value"])])]),default:t(()=>[l[2]||(l[2]=p(" Margin Report ",-1))]),_:1}),e(Me,{theme:"dark"}),e(Ye,null,{default:t(()=>[e(Ke,{filters:y.value,"division-options":ae.value,groups:E.value,clients:H.value,"budget-tags":i.value,"client-tags":r.value,manufacturers:w.value,loading:d.value,onUpdateFilter:ge,onClearFilters:ce,onApplyFilters:R},null,8,["filters","division-options","groups","clients","budget-tags","client-tags","manufacturers","loading"]),d.value?(m(),M("div",Ze,[v("div",et,[e(F,{type:"card"}),e(F,{type:"card"}),e(F,{type:"card"})]),e(F,{type:"table-tbody"})])):c.value?(m(),M(Z,{key:1},[e(O,{class:"mt-2"},{default:t(()=>[e(T,{cols:"12",md:"4"},{default:t(()=>[e(G,{title:`Total Margin ($) - ${W.value}`,value:le.value},null,8,["title","value"])]),_:1}),e(T,{cols:"12",md:"4"},{default:t(()=>[e(G,{title:`Avg Margin (%) - ${W.value}`,value:re.value},null,8,["title","value"])]),_:1}),e(T,{cols:"12",md:"4"},{default:t(()=>[e(G,{title:`YoY Growth - ${c.value.yoy.currentLabel} vs. ${c.value.yoy.previousLabel}`,value:se.value,"value-class":ie.value},{default:t(()=>[p(g(k($)(c.value.totalPreviousMarginFeeAmount))+" ",1),e(Ce,{size:"small"},{default:t(()=>[...l[3]||(l[3]=[p("arrow_right",-1)])]),_:1}),p(" "+g(k($)(c.value.totalMarginFeeAmount)),1)]),_:1},8,["title","value","value-class"])]),_:1})]),_:1}),e(O,{class:"mt-4"},{default:t(()=>[e(T,{cols:"12",md:"4"},{default:t(()=>[e(Ue,{"monthly-summary":c.value.monthlySummary},null,8,["monthly-summary"])]),_:1}),e(T,{cols:"12",md:"8"},{default:t(()=>[e(Qe,{"trend-series":ne.value,"trend-chart-options":oe.value,"chart-mode":_.value,"onUpdate:chartMode":l[0]||(l[0]=I=>_.value=I)},null,8,["trend-series","trend-chart-options","chart-mode"])]),_:1})]),_:1}),e(O,{class:"mt-4"},{default:t(()=>[e(T,{cols:"12"},{default:t(()=>[e(Pe,{months:c.value.months,"detail-rows":c.value.detailRows,"detail-view":z.value,"onUpdate:detailView":l[1]||(l[1]=I=>z.value=I)},null,8,["months","detail-rows","detail-view"])]),_:1})]),_:1})],64)):C("",!0)]),_:1})]))}};export{dt 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.