1import{r as p,Y as h,G as ee,b,e as R,f as A,j as a,aI as Ae,w as t,F as me,m as ce,k as U,h as i,t as m,c1 as te,g as z,A as I,v as L,y as $,aw as X,av as Se,c as S,d as M,cN as ve,en as fe,a5 as we,eo as ue,aB as pe,ai as ye,V as B,an as Ne,p as ie,at as Ee,I as ge,a6 as he,a1 as be,M as Le,bY as _e,bZ as K,N as xe,u as Ve,ay as Re,Q as De,o as Ue,U as Ie,a$ as Ye,E as $e}from"./index-DUWew8AW.js";import{L as re}from"./LeadResource-DbbuwAFO.js";import{L as ze,i as de,S as Te,T as ke,j as Oe,C as P,g as Me,k as Be,l as Fe,m as Q,n as J,h as Pe,o as Ge}from"./LeadDetailPage-B2RZ0jqZ.js";import{_ as qe}from"./PageContent-_L2qDZ3g.js";import{P as je}from"./PageHeader-CuloWWA-.js";import{_ as He}from"./LeadsBoards-C3s5wU-N.js";import"./useClipboard-DFAVkIcF.js";import"./clients-B8Kd_D_A.js";import"./VTimePicker-DIIv4RmN.js";import"./LeadBlacklistResource-eBNeiB4l.js";import"./GroupResource-cbWfbKe0.js";import"./IndustryResource-YN3nbEC1.js";import"./PartnerResource-CkZM66x5.js";import"./DatePickerCell-BBZs8O_3.js";const We={class:"space-y-3"},Ze={class:"flex flex-col md:flex-row md:items-center gap-3"},Ke={class:"grid grid-cols-2 md:grid-cols-5 items-center gap-3"},Qe={key:1,class:"text-grey text-xs leading-5"},Je={key:1,class:"text-grey text-xs leading-5"},Xe={key:1,class:"text-grey text-xs leading-5"},et={__name:"SalesDashboardFilters",props:{users:{type:Array,required:!0},loading:{type:Boolean,default:!1}},emits:["change"],setup(x,{expose:O,emit:_}){const Y=x,D=_,E=["All",de.AUTO,de.AGENCY],C={status:["New","Discovery","Demo / Pitch","Decisioning","Contract"],assigneeId:[],source:[],temperature:null,dateRange:[],type:"All"},w=Te,N=ze,y=ke,n=p(h.cloneDeep(C)),g=S(()=>h.sortBy(Y.users.filter(T=>{var d;return(d=T.roles)==null?void 0:d.some(e=>e.name===Oe)}),"fullName"));function V(){n.value=h.cloneDeep(C)}return ee(n,()=>{D("change",h.cloneDeep(n.value))},{deep:!0,immediate:!0}),O({filter:n,salesReps:g,leadSources:N,resetFilters:V}),(T,d)=>(b(),R("div",We,[A("div",Ze,[a(Ae,{menu:"",range:"",value:n.value.dateRange,label:"Date Entered",placeholder:"Select Date Range","text-field-class":"min-w-[290px] grow-0",loading:x.loading,"prepend-inner-icon":"event",variant:"outlined",density:"compact","hide-details":"",onInput:d[0]||(d[0]=e=>n.value.dateRange=e)},null,8,["value","loading"]),a(te,{modelValue:n.value.type,"onUpdate:modelValue":d[1]||(d[1]=e=>n.value.type=e),mandatory:""},{default:t(()=>[(b(),R(me,null,ce(E,e=>a(U,{key:e,value:e},{default:t(()=>[i(m(e),1)]),_:2},1032,["value"])),64))]),_:1},8,["modelValue"])]),A("div",Ke,[a(X,{modelValue:n.value.status,"onUpdate:modelValue":d[2]||(d[2]=e=>n.value.status=e),items:$(w),label:"Sales Cycle",multiple:"",clearable:"",variant:"outlined",density:"compact","hide-details":"",disabled:x.loading},{selection:t(({item:e,index:r})=>[r<2?(b(),z(I,{key:0,size:"small"},{default:t(()=>[A("span",null,m(e),1)]),_:2},1024)):L("",!0),r===2?(b(),R("span",Qe," +"+m(n.value.status.length-2)+" other(s) ",1)):L("",!0)]),_:1},8,["modelValue","items","disabled"]),a(Se,{modelValue:n.value.assigneeId,"onUpdate:modelValue":d[3]||(d[3]=e=>n.value.assigneeId=e),items:g.value,"item-value":"id","item-title":"fullName",label:"Sales Rep",multiple:"",clearable:"",variant:"outlined",density:"compact","hide-details":"",disabled:x.loading},{selection:t(({item:e,index:r})=>[r<2?(b(),z(I,{key:0,size:"small"},{default:t(()=>[A("span",null,m(e.fullName),1)]),_:2},1024)):L("",!0),r===2?(b(),R("span",Je," +"+m(n.value.assigneeId.length-2)+" others ",1)):L("",!0)]),_:1},8,["modelValue","items","disabled"]),a(X,{modelValue:n.value.source,"onUpdate:modelValue":d[4]||(d[4]=e=>n.value.source=e),items:$(N),label:"Source",multiple:"",clearable:"",variant:"outlined",density:"compact","hide-details":"",disabled:x.loading},{selection:t(({item:e,index:r})=>[r<2?(b(),z(I,{key:0,size:"small"},{default:t(()=>[A("span",null,m(e),1)]),_:2},1024)):L("",!0),r===2?(b(),R("span",Xe," +"+m(n.value.source.length-2)+" other(s) ",1)):L("",!0)]),_:1},8,["modelValue","items","disabled"]),a(X,{modelValue:n.value.temperature,"onUpdate:modelValue":d[5]||(d[5]=e=>n.value.temperature=e),items:$(y),label:"Temperature",clearable:"",variant:"outlined",density:"compact","hide-details":"",disabled:x.loading},null,8,["modelValue","items","disabled"]),a(U,{variant:"outlined",color:"secondary",onClick:V},{default:t(()=>[...d[6]||(d[6]=[i("Reset Filters",-1)])]),_:1})])]))}},tt={class:"p-1"},at=["onClick"],lt={class:"flex items-center"}
1,st={__name:"SalesDashboardTable",props:{leads:{type:Array,required:!0},serviceGroups:{type:Array,default:()=>[]},loading:{type:Boolean,default:!1}},emits:["select"],setup(x,{expose:O,emit:_}){const Y=x,D=_;M.extend(ve),M.extend(fe);const E=we();function C(e){return(r,u)=>e.indexOf(r)-e.indexOf(u)}const w=S(()=>[{title:"Opportunity",key:"name",cellProps:{class:"cursor-pointer"}},{title:"Type",key:"type"},{title:"Sales Rep",key:"assigneeName"},{title:"Sales Cycle",key:"status",sort:C(Te)},{title:"Temperature",key:"temperature",sort:C(ke)},{title:"Expected Close",key:"expectedCloseDate"},{title:"Probability",key:"probability"},{title:"Services",key:"services",sortable:!1},{title:"Source",key:"source"},{title:"Last Activity",key:"lastActivity"},{title:"Date Entered",key:"sentAt"}]);function N(e){return Me(e.LeadOpportunities,Y.serviceGroups)}function y(e){return e==="Auto"?"primary-darken-1":"success-darken-2"}function n(e){return{Hot:"error",Warm:"warning",Cold:"info"}[e]||"grey-lighten-1"}function g(e){if(!e)return null;const r=M(e).tz(P).startOf("day");return M().tz(P).startOf("day").diff(r,"day")}function V(e){return e===null?"grey-lighten-1":e<3?"success":e<5?"warning":e<7?"warning-darken-2":"error"}function T(e){const r=g(e);return r===null?"No activity on record":r<=0?"Today":r===1?"1 day ago":`${r} days ago`}function d(e){window.open(E.resolve({name:"leads.detail",params:{leadId:e.id}}).href,"_blank")}return O({COMPANY_TIMEZONE:P,daysSinceActivity:g,headers:w,lastActivityColor:V,lastActivityLabel:T,openInNewTab:d,servicesFor:N,temperatureColor:n,typeColor:y}),(e,r)=>(b(),R("div",tt,[a(Ee,{headers:w.value,items:x.leads,loading:x.loading,"items-per-page":30,"items-per-page-options":[10,20,30,50,100],class:"elevation-1","sort-by":[{key:"sentAt",order:"desc"}],"fixed-header":"",height:"calc(100vh - 350px)"},{"item.name":t(({item:u})=>[A("div",{class:"cursor-pointer text-blue-600",onClick:[ie(f=>D("select",u),["exact"]),ie(f=>d(u),["meta"])]},m(u.name),9,at)]),"item.type":t(({item:u})=>[a(I,{size:"small",color:y(u.type)},{default:t(()=>[i(m(u.type),1)]),_:2},1032,["color"])]),"item.assigneeName":t(({item:u})=>{var f;return[i(m(((f=u.assignee)==null?void 0:f.fullName)||"Unassigned"),1)]}),"item.temperature":t(({item:u})=>[A("div",lt,[a(B,{size:"x-small",color:n(u.temperature),class:"mr-1"},{default:t(()=>[...r[0]||(r[0]=[i(" mdi-circle ",-1)])]),_:1},8,["color"]),A("span",null,m(u.temperature||"Not set"),1)])]),"item.expectedCloseDate":t(({item:u})=>[i(m($(Ne)(u.expectedCloseDate,"MM/DD/YYYY",!0,"Not set")),1)]),"item.probability":t(({item:u})=>[i(m(u.probability?`${u.probability}%`:"Not set"),1)]),"item.services":t(({item:u})=>[(b(!0),R(me,null,ce(N(u),f=>(b(),R("div",{key:f},m(f),1))),128))]),"item.lastActivity":t(({item:u})=>[a(pe,{location:"top",disabled:g(u.lastActivity)===null},{activator:t(({props:f})=>[A("div",ye({class:"flex items-center"},f),[a(B,{size:"x-small",color:V(g(u.lastActivity)),class:"mr-1"},{default:t(()=>[...r[1]||(r[1]=[i(" mdi-circle ",-1)])]),_:1},8,["color"]),A("span",null,m($(ue)(u.lastActivity,"MM/DD/YYYY",$(P),!0,"No activity")),1)],16)]),default:t(()=>[A("span",null,m(T(u.lastActivity)),1)]),_:2},1032,["disabled"])]),"item.sentAt":t(({item:u})=>[i(m($(ue)(u.sentAt,"MM/DD/YYYY",$(P))),1)]),_:1},8,["headers","items","loading"])]))}},ot={__name:"LeadTodosDialog",props:{value:{type:Boolean,default:!1},todos:{type:Array,default:()=>[]},leads:{type:Array,default:()=>[]},users:{type:Array,default:()=>[]}},emits:["input","changed"],setup(x,{expose:O,emit:_}){const Y=x,D=_,{can:E}=Re(),{showErrorNotificationFromError:C}=Ve(),w=S(()=>De.getters["authorization/currentUserId"]),N=S(()=>E("manageTodos","SalesDashboard")),y=p("mine"),n=p(0),g=p([]),V=p(!1),T=p(null);function d(v){return y.value==="all"||v.assigneeId===w.value}const e=S(()=>{const v=Y.todos.filter(d),s=(c,W)=>c.dueDate<W.dueDate?-1:1;return{overdue:v.filter(c=>J(c.dueDate)<0).sort(s),today:v.filter(c=>J(c.dueDate)===0).sort(s),upcoming:v.filter(c=>J(c.dueDate)>0).sort(s),completed:g.value.filter(d)}}),r=S(()=>[e.value.overdue,e.value.today,e.value.upcoming,e.value.completed][n.value]),u=S(()=>["Nothing overdue.","Nothing due today.","Nothing upcoming.","No completed to-dos yet."][n.value]);async function f(){try{const v=await Q.getTodos({completed:!0});g.value=v.data}catch(v){C(v,"Could not load completed to-dos")}}ee(()=>Y.value,v=>v&&f(),{immediate:!0});async function q(v,s){try{await Q.setTodoCompletion(v.id,s),await f(),D("changed")}catch(c){C(c,"Could not update the to-do")}}async function j(v){try{await Q.deleteTodo(v.id),await f(),D("changed")}catch(s){C(s,"Could not delete the to-do")}}function F(){T.value=null,V.value=!0}function G(v){T.value=v,V.value=!0}async function H(){await f(),D("changed")}return O({buckets:e,canManage:N,emptyText:u,formOpen:V,formTarget:T,onEdit:G,onNew:F,onRemove:j,onSaved:H,onToggle:q,scope:y,tab:n,visibleTodos:r}),(v,s)=>(b(),z(xe,{"model-value":x.value,"max-width":"900",scrollable:"","onUpdate:modelValue":s[4]||(s[4]=c=>D("input",c))},{default:t(()=>[a(ge,null,{default:t(()=>[a(he,{onClose:s[0]||(s[0]=c=>D("input",!1))},{actions:t(()=>[N.value?(b(),z(U,{key:0,variant:"outlined","data-test":"new-todo",onClick:F},{default:t(()=>[a(B,{size:"small",start:""},{default:t(()=>[...s[5]||(s[5]=[i("add",-1)])]),_:1}),s[6]||(s[6]=i(" New To-Do ",-1))]),_:1})):L("",!0)]),default:t(()=>[s[7]||(s[7]=i(" To-Dos ",-1))]),_:1}),a(be),a(Le,null,{default:t(()=>[a(te,{modelValue:y.value,"onUpdate:modelValue":s[1]||(s[1]=c=>y.value=c),mandatory:"",density:"compact"},{default:t(()=>[a(U,{value:"mine"},{default:t(()=>[...s[8]||(s[8]=[i("Mine",-1)])]),_:1}),a(U,{value:"all"},{default:t(()=>[...s[9]||(s[9]=[i("All",-1)])]),_:1})]),_:1},8,["modelValue"]),a(_e,{modelValue:n.value,"onUpdate:modelValue":s[2]||(s[2]=c=>n.value=c),class:"mt-2"},{default:t(()=>[a(K,{value:0},{default:t(()=>[s[10]||(s[10]=i(" Overdue ",-1)),a(I,{size:"x-small",class:"ml-2"},{default:t(()=>[i(m(e.value.overdue.length),1)]),_:1})]),_:1}),a(K,{value:1},{default:t(()=>[s[11]||(s[11]=i(" Today ",-1)),a(I,{size:"x-small",class:"ml-2"},{default:t(()=>[i(m(e.value.today.length),1)]),_:1})]),_:1}),a(K,{value:2},{default:t(()=>[s[12]||(s[12]=i(" Upcoming ",-1)),a(I,{size:"x-small",class:"ml-2"},{default:t(()=>[i(m(e.value.upcoming.length),1)]),_:1})]),_:1}),a(K,{value:3},{default:t(()=>[s[13]||(s[13]=i(" Completed ",-1)),a(I,{size:"x-small",class:"ml-2"},{default:t(()=>[i(m(e.value.completed.length),1)]),_:1})]),_:1})]),_:1},8,["modelValue"]),a(Be,{todos:r.value,"empty-text":u.value,onToggle:q,onEdit:G,onRemove:j},null,8,["todos","empty-text"]),a(Fe,{value:V.value,todo:T.value,leads:x.leads,users:x.users,onInput:s[3]||(s[3]=c=>V.value=c),onSaved:H},null,8,["value","todo","leads","users"])]),_:1})]),_:1})]),_:1},8,["model-value"]))}},nt={class:"space-y-3"}
1,Dt={__name:"SalesDashboardPage",setup(x,{expose:O}){M.extend(ve),M.extend(fe);const _=["status","assigneeId","source","temperature"],{showErrorNotificationFromError:Y}=Ve(),D=p(0),E=p(!1),C=p([]),w=p([]),N=p([]),y=p(null),n=p(null),g=p(!1),V=p([]),T=p([]),d=p(!1),e=p(!1),r=S(()=>{if(!y.value)return C.value;const{type:o,dateRange:l}=y.value,[k,se]=l||[];return C.value.filter(oe=>{if(o!=="All"&&oe.type!==o)return!1;if(!k||!se)return!0;const ne=M(oe.sentAt).tz(P).format("YYYY-MM-DD");return ne>=k&&ne<=se})});function u(o){var k;const l=h.maxBy(o.LeadActivities||[],"createdAt");return{...o,type:Ge(o),lastActivity:(l==null?void 0:l.createdAt)||null,assigneeName:((k=o.assignee)==null?void 0:k.fullName)||"Unassigned"}}async function f(){y.value&&(E.value=!0,await re.getLeads(h.pick(y.value,_)).then(o=>{C.value=o.data.map(u)}).finally(()=>{E.value=!1}))}function q(o){return!h.isEqual(h.pick(o,_),h.pick(y.value,_))}function j(o){const l=!y.value||q(o);y.value=o,l&&f()}function F(o){n.value=o.id,$e(()=>{g.value=!0})}function G(){n.value=null,g.value=!1}async function H(){await Ie.getUsersList({userTypeId:1}).then(o=>{w.value=o.data})}async function v(){await Ye.getServiceGroupList().then(o=>{N.value=o.data})}const s=S(()=>De.getters["authorization/currentUserId"]),c=S(()=>w.value.filter(o=>o.active)),W=S(()=>V.value.filter(o=>J(o.dueDate)<=0)),ae=S(()=>W.value.length),le=S(()=>W.value.filter(o=>o.assigneeId===s.value).length);async function Z(){await Q.getTodos().then(o=>{V.value=o.data}).catch(o=>{Y(o,"Could not load to-dos")})}async function Ce(){d.value||await re.getLeads({}).then(o=>{T.value=h.sortBy(o.data.map(l=>({id:l.id,name:l.name})),l=>(l.name||"").toLowerCase()),d.value=!0})}return ee(e,o=>o&&Ce()),Ue(async()=>{await Promise.allSettled([H(),v(),Z()])}),O({view:D,visibleLeads:r,openLead:F,closeLead:G,selectedLeadId:n,showLeadDetails:g,todos:V,showTodos:e,todoLeads:T,todoAssignees:c,myOpenCount:le,teamOpenCount:ae,fetchTodos:Z}),(o,l)=>(b(),R("div",null,[a(je,null,{right:t(()=>[a(U,{variant:"outlined","data-test":"todos-button",onClick:l[1]||(l[1]=k=>e.value=!0)},{default:t(()=>[a(B,{size:"small",start:""},{default:t(()=>[...l[8]||(l[8]=[i("check_circle_outline",-1)])]),_:1}),l[9]||(l[9]=i(" To-Dos ",-1)),a(I,{size:"x-small",class:"ml-2"},{default:t(()=>[i(m(le.value)+" of "+m(ae.value),1)]),_:1})]),_:1}),a(pe,{location:"bottom"},{activator:t(({props:k})=>[a(U,ye({density:"comfortable",variant:"text",icon:"",onClick:f},k),{default:t(()=>[a(B,null,{default:t(()=>[...l[10]||(l[10]=[i("refresh",-1)])]),_:1})]),_:1},16)]),default:t(()=>[l[11]||(l[11]=A("span",null,"Refresh Data",-1))]),_:1})]),default:t(()=>[l[12]||(l[12]=i(" Sales Dashboard ",-1)),a(te,{modelValue:D.value,"onUpdate:modelValue":l[0]||(l[0]=k=>D.value=k),class:"mx-2",mandatory:""},{default:t(()=>[a(U,{height:"38px"},{default:t(()=>[a(B,{start:""},{default:t(()=>[...l[4]||(l[4]=[i("list",-1)])]),_:1}),l[5]||(l[5]=i(" List View ",-1))]),_:1}),a(U,{height:"38px"},{default:t(()=>[a(B,{start:""},{default:t(()=>[...l[6]||(l[6]=[i("dashboard",-1)])]),_:1}),l[7]||(l[7]=i(" Board View ",-1))]),_:1})]),_:1},8,["modelValue"])]),_:1}),a(be),a(qe,null,{default:t(()=>[A("div",nt,[a(et,{users:w.value,loading:E.value,onChange:j},null,8,["users","loading"]),D.value===0?(b(),z(st,{key:0,leads:r.value,"service-groups":N.value,loading:E.value,onSelect:F},null,8,["leads","service-groups","loading"])):L("",!0),D.value===1?(b(),z(He,{key:1,leads:r.value,users:w.value,onSelect:F},null,8,["leads","users"])):L("",!0)]),a(xe,{fullscreen:"",modelValue:g.value,"onUpdate:modelValue":l[2]||(l[2]=k=>g.value=k),transition:"dialog-bottom-transition","retain-focus":"",persistent:""},{default:t(()=>[a(ge,null,{default:t(()=>[g.value&&n.value?(b(),z(Pe,{key:0,"lead-id":n.value,onFetch:f,onTodosChanged:Z,onCloseDialog:G},null,8,["lead-id"])):L("",!0)]),_:1})]),_:1},8,["modelValue"]),a(ot,{value:e.value,todos:V.value,leads:T.value,users:c.value,onInput:l[3]||(l[3]=k=>e.value=k),onChanged:Z},null,8,["value","todos","leads","users"])]),_: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.