1import{a as wt}from"./chunk-AFRQYQQQ.js";import{a as si,b as li}from"./chunk-AQ2FKTCJ.js";import{a as $e}from"./chunk-OJD2WZJ4.js";import{a as rr}from"./chunk-INGAVJT2.js";import{c as ai}from"./chunk-DK3VUX5E.js";import{$ as Ht,Cb as ri,Db as oi,H as qn,L as Un,M as at,N as Hn,_ as Ut,b as L,ba as Kt,ca as Qt,ea as Kn,g as Me,hb as ei,ib as ti,jb as ni,va as Yn,wb as ii,ya as $n}from"./chunk-LAN6LAL4.js";import{j as jn,l as Zn,u as Xn}from"./chunk-AGFO3ORX.js";import{e as jt,f as zn,h as Pe,i as Fe,j as Ae,k as De,l as Ve,m as Qn,p as Gn,q as Jn}from"./chunk-JTVOOMEQ.js";import"./chunk-VBJOJ4QA.js";import{m as Rn}from"./chunk-2JIXHQVY.js";import"./chunk-APMNTTKR.js";import{N as Dn,ga as Vn,sa as Ln}from"./chunk-ETVAUZGB.js";import"./chunk-CARY4E7O.js";import"./chunk-MHKUR5ZH.js";import"./chunk-JYPO2ME6.js";import{a as Oe}from"./chunk-U2X3MT2O.js";import{$c as qt,$d as ee,Ab as w,Ad as St,Cd as Qe,Dd as te,G as de,Ga as Cn,Gb as h,Ib as d,Ic as Ee,Id as U,J as Re,Kc as j,Lc as W,Mb as ve,Mc as N,Na as it,Nc as Nt,O as qe,Oa as me,Ob as bn,Oc as Bt,Pd as H,Qb as Sn,Rb as wn,Rc as Wt,Rd as ot,Sb as Tn,Ta as l,Tb as le,Ua as E,Ub as a,Vb as g,W as lt,Wb as A,Wc as En,X as ze,Xb as Ye,Yb as Le,Yc as Rt,Yd as Z,Z as Pt,Zd as X,ac as x,ad as Mn,ae as Nn,bc as y,be as zt,ca as Te,cc as v,da as Ft,dd as In,e as Ie,ed as rt,fa as je,g as tt,gb as f,gc as C,hb as pe,hc as He,hd as _t,ib as c,ic as ke,jb as ct,jc as Dt,jd as On,je as Bn,kb as D,ke as Wn,m as K,ma as V,mb as dt,n as Ot,na as At,nb as on,p as
1nt,pc as Ke,qc as Vt,rc as kn,s as we,sc as Lt,ua as vn,ub as i,uc as Ce,va as p,vb as r,vd as Y,wa as u,wb as b,wd as Pn,x as We,xb as P,xd as $,yb as F,yd as Fn,zb as Ue,zd as An}from"./chunk-2YIY45QY.js";import{a as z,b as se,g as ir,h as B}from"./chunk-BQWXLU4Q.js";var ue=(()=>{class o{constructor(){this.state$=new tt({open:!1,options:null,resolve:null}),this.dialog$=this.state$.asObservable()}confirm(e){return new Promise(n=>{this.state$.next({open:!0,options:e,resolve:n})})}resolve(e){let n=this.state$.value;n.resolve&&n.resolve(e),this.state$.next({open:!1,options:null,resolve:null})}static{this.\u0275fac=function(n){return new(n||o)}}static{this.\u0275prov=Te({token:o,factory:o.\u0275fac,providedIn:"root"})}}return o})();function or(o,m){if(o&1&&b(0,"i",14),o&2){let e=d(2);dt(e.icon)}}function ar(o,m){if(o&1){let e=w();P(0),i(1,"div",1),h("click",function(){p(e);let t=d();return u(t.onCancel())}),r(),i(2,"div",2)(3,"div",3),h("click",function(t){return p(e),u(t.stopPropagation())}),i(4,"div")(5,"div",4)(6,"h5",5),f(7,or,1,2,"i",6),a(8),r(),i(9,"button",7),h("click",function(){p(e);let t=d();return u(t.onCancel())}),i(10,"span",8),a(11,"\xD7"),r()()(),i(12,"div",9)(13,"p",10),a(14),r()(),i(15,"div",11)(16,"button",12),h("click",function(){p(e);let t=d();return u(t.onCancel())}),a(17),r(),i(18,"button",13),h("click",function(){p(e);let t=d();return u(t.onConfirm())}),a(19),r()()()()(),F()}if(o&2){let e=d();l(2),pe("aria-modal",!0),l(2),on("modal-content crm-modal-content crm-modal-tone-",e.confirmTone,""),l(3),c("ngIf",e.icon),l(),A(" ",e.title," "),l(6),g(e.body),l(3),A(" ",e.cancelLabel," "),l(),on("btn btn-sm crm-modal-confirm-btn crm-modal-confirm-",e.confirmTone,""),l(),A(" ",e.confirmLabel," ")}}var ci=(()=>{class o{constructor(e){this.modalService=e,this.open=!1,this.options=null}ngOnInit(){this.sub=this.modalService.dialog$.subscribe(e=>{this.open=e.open,this.options=e.options})}ngOnDestroy(){this.sub?.unsubscribe()}get confirmLabel(){return this.options?.confirmLabel??"Confirm"}get cancelLabel(){return this.options?.cancelLabel??"Cancel"}get confirmTone(){return this.options?.confirmTone??"primary"}get title(){return this.options?.title??""}get body(){return this.options?.body??""}get icon(){return this.options?.icon??null}onConfirm(){this.modalService.resolve(!0)}onCancel(){this.modalService.resolve(!1)}static{this.\u0275fac=function(n){return new(n||o)(E(ue))}}static{this.\u0275cmp=V({type:o,selectors:[["app-crm-confirm-modal"]],decls:1,vars:1,consts:[[4,"ngIf"],[1,"modal-backdrop","fade","show","crm-modal-backdrop",3,"click"],["tabindex","-1","role","dialog","aria-labelledby","crmConfirmModalTitle",1,"modal","fade","show","d-block","crm-modal"],["role","document",1,"modal-dialog","modal
1-dialog-centered",3,"click"],[1,"modal-header","crm-modal-header"],["id","crmConfirmModalTitle",1,"modal-title","crm-modal-title"],["class","mr-2",3,"class",4,"ngIf"],["type","button","aria-label","Close",1,"close","crm-modal-close",3,"click"],["aria-hidden","true"],[1,"modal-body","crm-modal-body"],[1,"mb-0"],[1,"modal-footer","crm-modal-footer"],["type","button",1,"btn","btn-sm","btn-outline-theme",3,"click"],["type","button",3,"click"],[1,"mr-2"]],template:function(n,t){n&1&&f(0,ar,20,12,"ng-container",0),n&2&&c("ngIf",t.open)},dependencies:[N],styles:["[_nghost-%COMP%]{display:contents}"]})}}return o})();var Ge=(()=>{class o{constructor(){this.state$=new tt({open:!1,ctx:null,resolve:null}),this.dialog$=this.state$.asObservable()}open(e){return new Promise(n=>{this.state$.next({open:!0,ctx:e,resolve:n})})}resolve(e){let n=this.state$.value;n.resolve&&n.resolve(e),this.state$.next({open:!1,ctx:null,resolve:null})}static{this.\u0275fac=function(n){return new(n||o)}}static{this.\u0275prov=Te({token:o,factory:o.\u0275fac,providedIn:"root"})}}return o})();var lr="You do not have permission to perform this action. Please contact your Admin.",di=2e3,q=(()=>{class o{constructor(e){this.snackBar=e,this.permissionShownAt=0}permissionDenied(){let e=Date.now();e-this.permissionShownAt<di||(this.permissionShownAt=e,this.show(lr,"Close","error",5e3))}success(e,n="Close",t=3e3){this.show(e,n,"success",t)}warning(e,n="Close",t=4e3){this.show(e,n,"warning",t)}error(e,n="Close",t=5e3){Date.now()-this.permissionShownAt<di||this.show(e,n,"error",t)}info(e,n="Close",t=3e3){this.show(e,n,"info",t)}show(e,n,t,s){let _={duration:s,horizontalPosition:"center",verticalPosition:"bottom",panelClass:["crm-snackbar",`crm-snackbar-${t}`]};this.snackBar.open(e,n,_)}static{this.\u0275fac=function(n){return new(n||o)(je(ti))}}static{this.\u0275prov=Te({token:o,factory:o.\u0275fac,providedIn:"root"})}}return o})();var dr="5",R=(()=>{class o{constructor(e,n,t){this.http=e,this.toast=t,this.base=Oe.apiUrl,this.PO_LOOKUP_PAGE_SIZE=100,this.PO_LOOKUP_MAX_PAGES=5,this.rfqStatusByStage={"Proposal Sent":3},this.rawHttp=new _t(n)}withPermissionCheck(e){return e.pipe(Pt(n=>{this.isPermissionDenied(n)&&this.toast.permissionDenied()}),de(n=>((n?.status===403||this.isPermissionDenied(n?.error))&&this.toast.permissionDenied(),Ot(()=>n))))}isPermissionDenied(e){return!e||typeof e!="object"||e instanceof Blob||Array.isArray(e)?!1:Number(e.responseCode)===403}headers(){let e=localStorage.getItem("api_token");return new rt({"Content-Type":"application/json",Authorization:"Bearer "+e})}post(e,n){return this.withPermissionCheck(this.http.post(this.base+e,n,{headers:this.headers()}))}get(e){return this.withPermissionCheck(this.http.get(this.base+e,{headers:this.headers()}))}postBlob(e,n){return this.withPermissionCheck(this.http.post(this.base+e,n,{headers:this.headers(),responseType:"blob"}))}saveBlob(e,n){let t=URL.createObjectURL(e),s=document.createElement("a");s.href=t,s.download=n,document.body.appendChild(s),s.click(),document.body.removeChild(s),URL.revokeObjectURL(t)}getAssigneeUsers(e){return this.post("crm/sales-team",e)}getStatusChoices(){return this.get("crm/status/choices")}getLeadList(e){return this.post("crm/leads/list",e)}getLeadView(e){return this.post("crm/leads/view",e)}createLead(e){return this.post("crm/leads/create",e)}updateLead(e){return this.post("crm/leads/update",e)}updateLeadStatus(e){return this.post("crm/leads/update_status",e)}assignLeads(e){return this.post("crm/leads/assigne",e)}getLeadDashboard(e={}){return this.post("crm/leads/dashboard",e)}deleteLead(e){return this.post("crm/leads/delete",e)}exportLeads(e){return this.postBlob("crm/leads/export",e)}addLeadActivity(e){return this.post("crm/leads/activities",e)}getLeadActivities(e){return this.post("crm/leads/get_activities",e)}getLeadAssignHistory(e){return this.post("crm/leads/assign_history",e)}getDealList(e){return this.post("crm/deals/list",e)}getDealView(e){return this.post("crm/deals/view",e)}createDeal(e){return this.post("crm/deals/create",e)}updateDeal(e){return this.post("crm/deals/update",e)}updateDealStatus(e){return this.post("crm/deals/update_status",e)}
1createCrmPo(e){return this.post("crm/po/createPo",e)}findPoForSource(e,n="PO"){let t=String(e??"").trim();return t?this.scanPoList(t,n):K(null)}scanPoList(e,n){let t=(s,_)=>this.post("po/list",{userType:"SELLER",perPage:this.PO_LOOKUP_PAGE_SIZE,pageNumber:s,status:"0",search:"",orderType:n}).pipe(lt(S=>{let T=S?.response?.data||[],M=T.find(_e=>this.poRowIsFrom(_e,e));if(M)return K(this.toPoRef(M));let I=_+T.length,k=Number(S?.response?.total_count)||0;return!T.length||I>=k||s>=this.PO_LOOKUP_MAX_PAGES?K(null):t(s+1,I)}),de(()=>K(null)));return t(1,0)}poRowIsFrom(e,n){return[e?.source_id,e?.dealroom_source_id,e?.source_main_id].some(t=>String(t??"").trim()===n)}toPoRef(e){let n=Number(e?.id??e?.po_id)||0,t=String(e?.po_number??e?.poNumber??"").trim()||(n?`PO-${n}`:"");return n||t?{id:n,number:t}:null}getPoOrderSummary(e){return this.post("po/order_summary",{po_id:e})}getPoDetails(e){return this.post("po/details",{po_id:e})}createManualInvoice(e){return this.post("invoice/manual/create",e)}getInvoiceDetails(e){return this.post("invoice/details",e)}createTaxInvoice(e){return this.post("tax_invoice/create",e)}getRFQDetails(e){return this.post("rfq/get/details",e)}quoteBulkCreate(e){return this.post("rfq/quote/bulk/create",e)}addProductsToRfq(e){return this.post("rfq/add/products",e)}updateRfqStatus(e){return this.post("rfq/update/status",e)}updateQuoteStatus(e){return this.post("rfq/quote/update/status",e)}awardRfqQuotes(e){if(!e.length)return K({count:0,failed:!1,supported:!1,message:"This opportunity has no quoted RFQ products to award."});let n=e.map(t=>se(z({},t),{status:dr}));return this.updateQuoteStatus({quote:n}).pipe(we(t=>t?.responseCode===200?{count:e.length,failed:!1,supported:!0,message:"Linked RFQ awarded."}:{count:0,failed:!0,supported:!0,message:this.rfqError(t,"Could not award the linked RFQ.")}),de(t=>K({count:0,failed:!0,supported:!0,message:this.rfqError(t?.error,"Could not award the linked RFQ.")})))}syncRfqStatus(e,n){let t=String(n||"").trim(),s=this.rfqStatusByStage[t];return e?s==null?K({count:0,failed:!1,supported:!1,message:`The linked RFQ has no "${t}" status \u2014 it can only be moved by the quote/award flow.`}):this.updateRfqStatus({rfq:{rfqId:e,status:s,comments:""}}).pipe(we(_=>_?.responseCode===200?{count:1,failed:!1,supported:!0,message:`Linked RFQ moved to ${t}.`}:{count:0,failed:!0,supported:!0,message:this.rfqError(_,`Could not move the linked RFQ to ${t}.`)}),de(_=>K({count:0,failed:!0,supported:!0,message:this.rfqError(_?.error,`Could not move the linked RFQ to ${t}.`)}))):K({count:0,failed:!1,supported:!0,message:"This opportunity has no linked RFQ."})}rfqError(e,n){let t=e?.response,s=typeof t=="string"?t:t?.message||t?.response;return s?`${n} (${s})`:n}syncRfqProducts(e,n){let t=s=>({count:0,failed:!1,supported:!0,message:s});return e?n?.length?this.getRFQDetails({rfqId:e,userType:"SELLER"}).pipe(lt(s=>{if(s?.responseCode!==200)return K({count:0,failed:!0,supported:!0,message:this.rfqError(s,"Could not read the linked RFQ.")});let _=s?.response||{},S=_.products||[],T=new Set(S.map(G=>String(G.id??G.productId??"")).filter(Boolean)),M=new Set(S.map(G=>String(G.name||"").trim().toLowerCase()).filter(Boolean)),I=n.filter(G=>!T.has(String(G.id??G.product_id??""))&&!M.has(String(G.productName||G.name||"").trim().toLowerCase()));if(!I.length)return K(t("The linked RFQ already has every product on this opportunity."));let k=S.find(G=>G.sellerId)?.sellerId??this.vendorId(),oe=_.expiryDate||"",_e=[];return I.forEach(G=>{let rn=Number(G.id??G.product_id)||0,gt=Number(G.parentId??G.parent_id)||0,he=Number(G.sellerId??G.seller_id??k)||0,Be={productName:G.productName||G.name||"",productType:G.productType||G.product_type||"catalog",qty:Number(G.qty)||0,requestedPrice:Number(G.requestedPrice)||0,description:G.description||"",dueDate:oe,status:2,category:G.category||G.categoryTree||"",documents:[],questions:[]};gt&&_e.push(se(z({},Be),{id:gt,parentId:0,sellerId:0})),_e.push(se(z({},Be),{id:rn,parentId:gt,sellerId:he}))}),this.addProductsToRfq({rfq:{rfqId:_.rfqId??e,createRfqType:"",status:2,products:_e}}).pipe(we(G=>G?.responseCode===200?{count:I.length,failed:!1,supported:!0,message:`${I.length} product(s) added to the linked RFQ.`}:{count:0,failed:!0,supported:!0,message:this.rfqError(G,"The linked RFQ rejected the new products.")}))}),de(s=>K({count:0,failed:!0,supported:!0,message:this.rfqError(s?.error,"Could not update the linked RFQ.")}))):K(t("No products to sync.")):K(t("This opportunity has no linked RFQ."))}vendorId(){try{return Number(JSON.parse(localStorage.getItem("userDetails")||"{}")?.vendorId)||0}catch{return 0}}getMyProducts(e){return this.post("products/my_products",e)}getSupplierProducts(e){return this.post("products/supplier_products",e)}addDealActivity(e){return this.post("crm/deal/activities",e)}deleteDeal(e){return this.post("crm/deals/delete",e)}
1exportDeals(e){return this.postBlob("crm/deals/export",e)}getDealActivities(e){return this.post("crm/deal/get_activities",e)}getDealAssignHistory(e){return this.post("crm/deals/assign_history",e)}getDealRoom(e){return this.post("crm/deals/deal_room",e)}getRenewalList(e){return this.post("crm/renewals/list",e)}getQuoteList(e){return this.post("crm/quotes/list",e)}getQuoteView(e){return this.post("crm/quotes/view",e)}getAnalyticsDashboard(e={}){return this.post("crm/analytics/v2/dashboard",e)}getCustomerList(e){return this.post("crm/customer/list",e)}searchCustomerList(e){return this.rawHttp.post(this.base+"crm/customer/list",e,{headers:this.headers()})}getCustomerView(e){return this.post("crm/customer/view",e)}createCustomer(e){return this.post("crm/customer/create",e)}updateCustomer(e){return this.post("crm/customer/update",e)}addCustomerAddress(e){return this.post("crm/customer/add_address",e)}updateCustomerStatus(e){return this.post("crm/customer/update_status",e)}addCustomerActivity(e){return this.post("crm/customer/activities",e)}getCustomerActivities(e){return this.post("crm/customer/get_activities",e)}deleteCustomer(e){return this.post("crm/customer/delete",e)}exportCustomers(e){return this.postBlob("crm/customer/export",e)}getTicketList(e){return this.post("crm/support/tickets/list",e)}getTicketView(e){return this.post("crm/support/tickets/view",e)}createTicket(e){return this.post("crm/support/tickets/create",e)}addTicketAttachments(e){let n=new FormData;n.append("ticket_id",String(e.ticket_id)),e.files.forEach(_=>n.append("files",_,_.name));let t=localStorage.getItem("api_token"),s=new rt({Authorization:"Bearer "+t});return this.http.post(this.base+"crm/support/tickets/attachments/add",n,{headers:s})}uploadFileToStore(e,n="crm",t){let s=new FormData;return s.append("file",e),s.append("source",n),t!=null&&t!==""&&s.append("source_id",String(t)),s.append("parent_id","0"),this.postFileUpload(s,this.authToken()).pipe(de(_=>_?.status!==401?Ot(()=>_):this.refreshApiToken().pipe(lt(S=>S?this.postFileUpload(s,S):Ot(()=>_)))))}postFileUpload(e,n){let t=new rt({Authorization:"Bearer "+n});return this.rawHttp.post(this.base+"drive/upload",e,{headers:t})}authToken(){let e=localStorage.getItem("api_token");return!e||e==="undefined"?o.FALLBACK_TOKEN:e}static{this.FALLBACK_TOKEN="7e1909c901b035112c48b98830cb7173"}refreshApiToken(){let e=localStorage.getItem("refresh-token");if(!e)return K("");let n=new rt({"Content-Type":"application/json"});return this.rawHttp.post(this.base+"user/token/refresh",{refresh_token:e},{headers:n}).pipe(we(t=>{let s=String(t?.response?.access_token||"");if(!s)return"";localStorage.setItem("api_token",s);let _=t?.response?.refresh_token;return _&&localStorage.setItem("refresh-token",_),s}),de(()=>K("")))}uploadAttachments(e,n="crm",t){let s=(e||[]).filter(_=>_ instanceof File);return s.length?We(s.map(_=>
1this.uploadFileToStore(_,n,t).pipe(we(S=>this.toAttachment(_,S)),de(()=>K({name:_.name,size:_.size,type:_.type,url:""}))))):K([])}toAttachment(e,n){let t=n?.response??n??{};return{name:t.file_name||e.name,size:e.size,type:e.type,url:t.fileViewPath||t.file_view_path||t.pathViewPath||t.viewUrl||"",driveId:t.driveId??t.drive_id,filepath:t.filepath,fileGenName:t.file_gen_name}}searchDriveFiles(e){return this.post("drive/search",z({fileType:"",source:"",timeframe:"",action:"",sortBy:"",currentPage:1,pageLength:50},e))}getBankDetailsList(){return this.post("organization/bank_details/list",{})}getAddressList(e={}){return this.post("user/address/list",z({perPage:100,pageNumber:1},e))}updateTicketStatus(e){return this.post("crm/support/tickets/update_status",e)}reassignTicket(e){return this.post("crm/support/tickets/reassign",e)}getTicketActivities(e){return this.post("crm/support/tickets/activity/list",e)}addTicketActivity(e){return this.post("crm/support/tickets/activity/add",e)}replyTicket(e){return this.post("crm/support/tickets/reply",e)}getTicketThread(e){return this.post("crm/support/tickets/thread",e)}getTicketRelated(e){return this.post("crm/support/tickets/related",e)}getTicketKbSuggestions(e){return this.post("crm/support/tickets/kb_suggestions",e)}submitTicketCsat(e){return this.post("crm/support/tickets/csat/submit",e)}getTicketDashboard(e={}){return this.post("crm/support/tickets/dashboard",e)}getAdvocacyDashboard(e={}){return this.post("crm/advocacy/dashboard",e)}getAdvocacyChoices(e={}){return this.post("crm/advocacy/choices",e)}getPromoterList(e){return this.post("crm/advocacy/promoters/list",e)}getPromoterView(e){return this.post("crm/advocacy/promoters/view",e)}createPromoter(e){return this.post("crm/advocacy/promoters/create",e)}updatePromoter(e){return this.post("crm/advocacy/promoters/update",e)}deletePromoter(e){return this.post("crm/advocacy/promoters/delete",e)}getReferralList(e){return this.post("crm/advocacy/referrals/list",e)}createReferral(e){return this.post("crm/advocacy/referrals/create",e)}getCaseStudyList(e){return this.post("crm/advocacy/case_studies/list",e)}createCaseStudy(e){return this.post("crm/advocacy/case_studies/create",e)}getActivityList(e){return this.post("crm/activities/list",e)}getActivityView(e){return this.post("crm/activities/view",e)}getActivityDashboard(e={}){return this.post("crm/activities/dashboard",e)}getActivityChoices(e={}){return this.post("crm/activities/choices",e)}createActivityNote(e){return this.post("crm/activities/notes/create",e)}createActivityTodo(e){return this.post("crm/activities/todos/create",e)}createActivityReminder(e){return this.post("crm/activities/reminders/create",e)}updateActivity(e){return this.post("crm/activities/update",e)}markActivityDone(e){return this.post("crm/activities/mark_done",e)}deleteActivity(e){return this.post("crm/activities/delete",e)}getHealthAccountList(e){return this.post("crm/health/accounts/list",e)}getHealthAccountView(e){return this.post("crm/health/accounts/view",e)}getHealthDashboard(e={}){return this.post("crm/health/dashboard",e)}getHealthChoices(e={}){return this.post("crm/health/choices",e)}recomputeHealth(e={}){return this.post("crm/health/recompute",e)}exportHealth(e={}){return this.postBlob("crm/health/export",e)}getKbArticleList(e){return this.post("crm/kb/articles/list",e)}getKbArticleView(e){return this.post("crm/kb/articles/view",e)}createKbArticle(e){let n=localStorage.getItem("api_token"),t=new rt({Authorization:"Bearer "+n});return this.http.post(this.base+"crm/kb/articles/create",e,{headers:t})}updateKbArticle(e){return this.post("crm/kb/articles/update",e)}deleteKbArticle(e){return this.post("crm/kb/articles/delete",e)}submitKbFeedback(e){return this.post("crm/kb/articles/feedback",e)}getKbCategoryList(e={}){return this.post("crm/kb/categories/list",e)}createKbCategory(e){return this.post("crm/kb/categories/create",e)}getKbDashboard(e={}){return this.post("crm/kb/dashboard",e)}getKbChoices(e={}){return this.post("crm/kb/choices",e)}getOnboardingList(e){return this.post("crm/onboarding/list",e)}getOnboardingView(e){return this.post("crm/onboarding/view",e)}createOnboarding(e){return this.post("crm/onboarding/create",e)}updateOnboarding(e){return this.post("crm/onboarding/update",e)}deleteOnboarding(e){return this.post("crm/onboarding/delete",e)}
1getOnboardingDashboard(e={}){return this.post("crm/onboarding/dashboard",e)}getOnboardingChoices(e={}){return this.post("crm/onboarding/choices",e)}getMilestoneList(e){return this.post("crm/onboarding/milestones/list",e)}createMilestone(e){return this.post("crm/onboarding/milestones/create",e)}updateMilestone(e){return this.post("crm/onboarding/milestones/update",e)}getOnboardingTemplateList(e={}){return this.post("crm/onboarding/templates/list",e)}createOnboardingTemplate(e){return this.post("crm/onboarding/templates/create",e)}getSalesDashboard(e={}){return this.post("crm/sales/dashboard",e)}getAeDashboard(e={}){return this.post("crm/dashboard/account-executive",e)}getCsmDashboard(e={}){return this.post("crm/dashboard/csm",e)}getSupportAgentDashboard(e={}){return this.post("crm/dashboard/support-agent",e)}static{this.\u0275fac=function(n){return new(n||o)(je(_t),je(In),je(q))}}static{this.\u0275prov=Te({token:o,factory:o.\u0275fac,providedIn:"root"})}}return o})();var J=()=>({standalone:!0});function mr(o,m){if(o&1&&(i(0,"div",16),a(1),r()),o&2){let e=d(2);l(),g(e.subtitle)}}function pr(o,m){if(o&1){let e=w();P(0),i(1,"div",17)(2,"div")(3,"label")(4,"span",18),a(5,"Attempted Date"),r(),i(6,"span",19),a(7,"*"),r()(),i(8,"input",20),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.attemptedDate,t)||(s.form.attemptedDate=t),u(t)}),r()(),i(9,"div")(10,"label")(11,"span",18),a(12,"Contact Mode"),r(),i(13,"span",19),a(14,"*"),r()(),i(15,"select",21),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.contactMode,t)||(s.form.contactMode=t),u(t)}),i(16,"option",18),a(17,"Call"),r(),i(18,"option",18),a(19,"Email"),r(),i(20,"option",18),a(21,"WhatsApp"),r(),i(22,"option",18),a(23,"In-person"),r(),i(24,"option",18),a(25,"LinkedIn"),r()()()(),i(26,"div",22)(27,"div")(28,"label",18),a(29,"Next Followup Date"),r(),i(30,"input",23),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.nextFollowup,t)||(s.form.nextFollowup=t),u(t)}),r()()(),i(31,"div",22)(32,"div")(33,"label",18),a(34,"Note"),r(),i(35,"textarea",24),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.note,t)||(s.form.note=t),u(t)}),r()()(),F()}if(o&2){let e=d(2);l(8),x("ngModel",e.form.attemptedDate),c("ngModelOptions",C(8,J)),l(7),x("ngModel",e.form.contactMode),c("ngModelOptions",C(9,J)),l(15),x("ngModel",e.form.nextFollowup),c("ngModelOptions",C(10,J)),l(5),x("ngModel",e.form.note),c("ngModelOptions",C(11,J))}}function ur(o,m){o&1&&Ue(0)}function gr(o,m){if(o&1){let e=w();P(0),f(1,ur,1,0,"ng-container",25),i(2,"div",17)(3,"div")(4,"label",18),a(5,"Discount"),r(),i(6,"div",26)(7,"span"),a(8,"\u20B9"),r(),i(9,"input",27),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.discount,t)||(s.form.discount=t),u(t)}),r()()(),i(10,"div")(11,"label",18),a(12,"Additional Charges"),r(),i(13,"div",26)(14,"span"),a(15,"\u20B9"),r(),i(16,"input",28),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.additionalCharges,t)||(s.form.additionalCharges=t),u(t)}),r()()()(),i(17,"div",29),a(18,"Logistic Timeline"),r(),i(19,"div",17)(20,"div")(21,"label",18),a(22,"Delivery Location"),r(),i(23,"input",30),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.deliveryLocation,t)||(s.form.deliveryLocation=t),u(t)}),r()(),i(24,"div")(25,"label",18),a(26,"Delivery Timeline"),r(),i(27,"input",31),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.deliveryTimeline,t)||(s.form.deliveryTimeline=t),u(t)}),r()()(),i(28,"div",22)(29,"div")(30,"label",18),a(31,"Budget"),r(),i(32,"select",32),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.budget,t)||(s.form.budget=t),u(t)}),i(33,"option",18),a(34,"< \u20B950K"),r(),i(35,"option",18),a(36,"\u20B950K \u2013 \u20B92L"),r(),i(37,"option",18),a(38,"\u20B92L \u2013 \u20B910L"),r(),i(39,"option",18),a(40,"> \u20B910L"),r()()()(),F()}if(o&2){let e=d(2),n=le(2);l(),c("ngTemplateOutlet",n),l(8),x("ngModel",e.form.discount),c("ngModelOptions",C(11,J)),l(7),x("ngModel",e.form.additionalCharges),c("ngModelOptions",C(12,J)),l(7),x("ngModel",e.form.deliveryLocation),c("ngModelOptions",C(13,J)),l(4),x("ngModel",e.form.deliveryTimeline),c("ngModelOptions",C(14,J)),l(5),x("ngModel",e.form.budget),c("ngModelOptions",C(15,J))}}function _r(o,m){o&1&&Ue(0)}function hr(o,m){if(o&1&&(i(0,"div",37),b(1,"i",38),i(2,"span"),a(3),r()()),o&2){let e=m.ngIf,n=d(3);c("id",n.fieldAnchorId("proposalSentDate")),l(3),g(e)}}function fr(o,m){if(o&1&&(i(0,"div",37),b(1,"i",38),i(2,"span"),a(3),r()()),o&2){let e=m.ngIf,n=d(3);c("id",n.fieldAnchorId("quoteExpiryDate")),l(3),g(e)}}function xr(o,m){if(o&1){let e=w();P(0),f(1,_r,1,0,"ng-container",25),i(2,"div",17)(3,"div")(4,"label")(5,"span",18),a(6,"Proposal Sent Date"),r(),i(7,"span",19),a(8,"*"),r()(),i(9,"input",33),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.proposalSentDate,t)||(s.form.proposalSentDate=t),u(t)}),r(),f(10,hr,4,2,"div",34),r(),i(11,"div")(12,"label")(13,"span",18),a(14,"Quote Expiry Date"),r(),i(15,"span",19),a(16,"*"),r()(),i(17,"input",35),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.quoteExpiryDate,t)||(s.form.quoteExpiryDate=t),u(t)}),r(),f(18,fr,4,2,"div",34),r()(),i(19,"div",22)(20,"div")(21,"label",18),a(22,"Note"),r(),i(23,"textarea",36),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.note,t)||(s.form.note=t),u(t)}),r()()(),F()}if(o&2){let e=d(2),n=le(4);l(),c("ngTemplateOutlet",n),l(8),x("ngModel",e.form.proposalSentDate),c("max",e.today)("ngModelOptions",C(11,J)),l(),c("ngIf",e.errorFor("proposalSentDate")),l(7),x("ngModel",e.form.quoteExpiryDate),c("min",e.today)("ngModelOptions",C(12,J)),l(),c("ngIf",e.errorFor("quoteExpiryDate")),l(5),x("ngModel",e.form.note),c("ngModelOptions",C(13,J))}}function yr(o,m){o&1&&Ue(0)}function vr(o,m){if(o&1&&(i(0,"div",37),b(1,"i",38),i(2,"span"),a(3),r()()),o&2){let e=m.ngIf,n=d(3);c("id",n.fieldAnchorId("quoteId")),l(3),g(e)}}function Cr(o,m){if(o&1&&(i(0,"div",37),b(1,"i",38),i(2,"span"),a(3),r()()),o&2){let e=m.ngIf,n=d(3);c("id",n.fieldAnchorId("proposalSentDate")),l(3),g(e)}}function br(o,m){if(o&1&&(i(0,"div",37),b(1,"i",38),i(2,"span"),a(3),r()()),o&2){let e=m.ngIf,n=d(3);c("id",n.fieldAnchorId("quoteExpiryDate")),l(3),g(e)}}function Sr(o,m){if(o&1){let e=w();P(0),f(1,yr,1,0,"ng-container",25),i(2,"div",17)(3,"div")(4,"label")(5,"span",18),a(6,"Quote ID"),r(),i(7,"span",19),a(8,"*"),r()(),i(9,"input",39),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.quoteId,t)||(s.form.quoteId=t),u(t)}),r(),f(10,vr,4,2,"div",34),r(),i(11,"div")(12,"label")(13,"span",18),a(14,"Proposal Sent Date"),r(),i(15,"span",19),a(16,"*"),r()(),i(17,"input",40),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.proposalSentDate,t)||(s.form.proposalSentDate=t),u(t)}),r(),f(18,Cr,4,2,"div",34),r()(),i(19,"div",17)(20,"div")(21,"label")(22,"span",18),a(23,"Quote Expiry Date"),r(),i(24,"span",19),a(25,"*"),r()(),i(26,"input",41),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.quoteExpiryDate,t)||(s.form.quoteExpiryDate=t),u(t)}),r(),f(27,br,4,2,"div",34),r()(),i(28,"div",22)(29,"div")(30,"label",18),a(31,"Note"),r(),i(32,"textarea",42),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.note,t)||(s.form.note=t),u(t)}),r()()(),F()}if(o&2){let e=d(2),n=le(4);l(),c("ngTemplateOutlet",n),l(8),x("ngModel",e.form.quoteId),c("ngModelOptions",C(14,J)),l(),c("ngIf",e.errorFor("quoteId")),l(7),x("ngModel",e.form.proposalSentDate),c("max",e.today)("ngModelOptions",C(15,J)),l(),c("ngIf",e.errorFor("proposalSentDate")),l(8),x("ngModel",e.form.quoteExpiryDate),c("min",e.today)("ngModelOptions",C(16,J)),l(),c("ngIf",e.errorFor("quoteExpiryDate")),l(5),x("ngModel",e.form.note),c("ngModelOptions",C(17,J))}}function wr(o,m){o&1&&Ue(0)}function Tr(o,m){if(o&1&&(i(0,"div",37),b(1,"i",38),i(2,"span"),a(3),r()()),o&2){let e=m.ngIf,n=d(3);c("id",n.fieldAnchorId("expectedDecisionDate")),l(3),g(e)}}function kr(o,m){if(o&1){let e=w();P(0),f(1,wr,1,0,"ng-container",25),i(2,"div",17)(3,"div")(4,"label",18),a(5,"Quote ID"),r(),i(6,"input",43),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.quoteId,t)||(s.form.quoteId=t),u(t)}),r()(),i(7,"div")(8,"label")(9,"span",18),a(10,"Expected Decision Date"),r(),i(11,"span",19),a(12,"*"),r()(),i(13,"input",44),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.expectedDecisionDate,t)||(s.form.expectedDecisionDate=t),u(t)}),r(),f(14,Tr,4,2,"div",34),r()(),i(15,"div",22)(16,"div")(17,"label",18),a(18,"Note"),r(),i(19,"textarea",45),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.note,t)||(s.form.note=t),u(t)}),r()()(),F()}if(o&2){let e=d(2),n=le(4);l(),c("ngTemplateOutlet",n),l(5),x("ngModel",e.form.quoteId),c("ngModelOptions",C(9,J)),l(7),x("ngModel",e.form.expectedDecisionDate),
1c("min",e.today)("ngModelOptions",C(10,J)),l(),c("ngIf",e.errorFor("expectedDecisionDate")),l(5),x("ngModel",e.form.note),c("ngModelOptions",C(11,J))}}function Er(o,m){if(o&1&&(i(0,"div",37),b(1,"i",38),i(2,"span"),a(3),r()()),o&2){let e=m.ngIf,n=d(4);c("id",n.fieldAnchorId("buyerName")),l(3),g(e)}}function Mr(o,m){if(o&1&&(i(0,"div",37),b(1,"i",38),i(2,"span"),a(3),r()()),o&2){let e=m.ngIf,n=d(4);c("id",n.fieldAnchorId("gst")),l(3),g(e)}}function Ir(o,m){if(o&1&&(i(0,"div",37),b(1,"i",38),i(2,"span"),a(3),r()()),o&2){let e=m.ngIf,n=d(4);c("id",n.fieldAnchorId("paymentMode")),l(3),g(e)}}function Or(o,m){if(o&1){let e=w();P(0),i(1,"div",17)(2,"div")(3,"label")(4,"span",18),a(5,"Buyer Name"),r(),i(6,"span",19),a(7,"*"),r()(),i(8,"input",51),v("ngModelChange",function(t){p(e);let s=d(3);return y(s.form.buyerName,t)||(s.form.buyerName=t),u(t)}),r(),f(9,Er,4,2,"div",34),r(),i(10,"div")(11,"label",18),a(12,"GST"),r(),i(13,"input",52),v("ngModelChange",function(t){p(e);let s=d(3);return y(s.form.gst,t)||(s.form.gst=t),u(t)}),r(),i(14,"span",53),a(15,"Optional \u2014 leave blank if not registered"),r(),f(16,Mr,4,2,"div",34),r()(),i(17,"div",22)(18,"div")(19,"label")(20,"span",18),a(21,"Payment Mode"),r(),i(22,"span",19),a(23,"*"),r()(),i(24,"select",54),v("ngModelChange",function(t){p(e);let s=d(3);return y(s.form.paymentMode,t)||(s.form.paymentMode=t),u(t)}),i(25,"option",18),a(26,"Bank Transfer"),r(),i(27,"option",18),a(28,"UPI"),r(),i(29,"option",18),a(30,"Cheque"),r(),i(31,"option",18),a(32,"Credit"),r()(),f(33,Ir,4,2,"div",34),r()(),F()}if(o&2){let e=d(3);l(8),D("crm-stage-form-readonly",!!e.form.buyerName),x("ngModel",e.form.buyerName),c("ngModelOptions",C(12,J))("readonly",!!e.form.buyerName),l(),c("ngIf",e.errorFor("buyerName")),l(4),x("ngModel",e.form.gst),c("ngModelOptions",C(13,J)),l(3),c("ngIf",e.errorFor("gst")),l(8),x("ngModel",e.form.paymentMode),c("ngModelOptions",C(14,J)),l(9),c("ngIf",e.errorFor("paymentMode"))}}function Pr(o,m){if(o&1&&(P(0),a(1),F()),o&2){let e=d().$implicit;l(),A(" \u2014 ",e.bankName,"")}}function Fr(o,m){if(o&1&&(i(0,"option",86),a(1),f(2,Pr,2,1,"ng-container",50),r()),o&2){let e=m.$implicit;c("value",e.accountHolder),l(),A(" ",e.accountHolder,""),l(),c("ngIf",e.bankName)}}function Ar(o,m){if(o&1){let e=w();i(0,"select",83),v("ngModelChange",function(t){p(e);let s=d(4);return y(s.form.accountHolder,t)||(s.form.accountHolder=t),u(t)}),h("ngModelChange",function(){p(e);let t=d(4);return u(t.onBankAccountPicked())}),i(1,"option",84),a(2,"Select a bank account"),r(),f(3,Fr,3,3,"option",85),r()}if(o&2){let e=d(4);x("ngModel",e.form.accountHolder),c("ngModelOptions",C(4,J)),l(3),c("ngForOf",e.bankAccounts)("ngForTrackBy",e.trackByIndex)}}function Dr(o,m){if(o&1){let e=w();i(0,"input",87),v("ngModelChange",function(t){p(e);let s=d(4);return y(s.form.accountHolder,t)||(s.form.accountHolder=t),u(t)}),r()}if(o&2){let e=d(4);x("ngModel",e.form.accountHolder),c("ngModelOptions",C(2,J))}}function Vr(o,m){if(o&1&&(i(0,"div",37),b(1,"i",38),i(2,"span"),a(3),r()()),o&2){let e=m.ngIf,n=d(4);c("id",n.fieldAnchorId("accountHolder")),l(3),g(e)}}function Lr(o,m){if(o&1&&(i(0,"div",88)(1,"div",89)(2,"span",90),a(3,"Bank Name"),r(),i(4,"span",91),a(5),r()(),i(6,"div",89)(7,"span",90),a(8,"Account number"),r(),i(9,"span",91),a(10),r()(),i(11,"div",89)(12,"span",90),a(13,"IFSC Code"),r(),i(14,"span",91),a(15),r()(),i(16,"div",89)(17,"span",90),a(18,"Branch"),r(),i(19,"span",91),a(20),r()()()),o&2){let e=d(4);l(5),g(e.form.bankName||"\u2014"),l(5),g(e.form.accountNumber||"\u2014"),l(5),g(e.form.ifsc||"\u2014"),l(5),g(e.form.branch||"\u2014")}}function Nr(o,m){if(o&1&&(i(0,"div",37),b(1,"i",38),i(2,"span"),a(3),r()()),o&2){let e=m.ngIf,n=d(4);c("id",n.fieldAnchorId("bankRow")),l(3),g(e)}}function Br(o,m){if(o&1&&(i(0,"div",37),b(1,"i",38),i(2,"span"),a(3),r()()),o&2){let e=m.ngIf,n=d(5);c("id",n.fieldAnchorId("bankName")),l(3),g(e)}}function Wr(o,m){if(o&1&&(i(0,"div",37),b(1,"i",38),i(2,"span"),a(3),r()()),o&2){let e=m.ngIf,n=d(5);c("id",n.fieldAnchorId("accountNumber")),l(3),g(e)}}function Rr(o,m){if(o&1&&(i(0,"div",37),b(1,"i",38),i(2,"span"),a(3),r()()),o&2){let e=m.ngIf,n=d(5);c("id",n.fieldAnchorId("ifsc")),l(3),g(e)}}function qr(o,m){if(o&1&&(i(0,"div",37),b(1,"i",38),i(2,"span"),a(3),r()()),o&2){let e=m.ngIf,n=d(5);c("id",n.fieldAnchorId("branch")),l(3),g(e)}}function zr(o,m){if(o&1){let e=w();P(0),i(1,"div",17)(2,"div")(3,"label")(4,"span",18),a(5,"Bank Name"),r(),i(6,"span",19),a(7,"*"),r()(),i(8,"input",92),v("ngModelChange",function(t){p(e);let s=d(4);return y(s.form.bankName,t)||(s.form.bankName=t),u(t)}),r(),f(9,Br,4,2,"div",34),r(),i(10,"div")(11,"label")(12,"span",18),a(13,"Account number"),r(),i(14,"span",19),a(15,"*"),r()(),i(16,"input",93),v("ngModelChange",function(t){p(e);let s=d(4);return y(s.form.accountNumber,t)||(s.form.accountNumber=t),u(t)}),r(),f(17,Wr,4,2,"div",34),r()(),i(18,"div",17)(19,"div")(20,"label")(21,"span",18),a(22,"IFSC Code"),r(),i(23,"span",19),a(24,"*"),r()(),i(25,"input",94),v("ngModelChange",function(t){p(e);let s=d(4);return y(s.form.ifsc,t)||(s.form.ifsc=t),u(t)}),r(),f(26,Rr,4,2,"div",34),r(),i(27,"div")(28,"label")(29,"span",18),a(30,"Branch"),r(),i(31,"span",19),a(32,"*"),r()(),i(33,"input",95),v("ngModelChange",function(t){p(e);let s=d(4);return y(s.form.branch,t)||(s.form.branch=t),u(t)}),r(),f(34,qr,4,2,"div",34),r()(),F()}if(o&2){let e=d(4);l(8),x("ngModel",e.form.bankName),c("ngModelOptions",C(12,J)),l(),c("ngIf",e.errorFor("bankName")),l(7),x("ngModel",e.form.accountNumber),c("ngModelOptions",C(13,J)),l(),c("ngIf",e.errorFor("accountNumber")),l(8),x("ngModel",e.form.ifsc),c("ngModelOptions",C(14,J)),l(),c("ngIf",e.errorFor("ifsc")),l(7),x("ngModel",e.form.branch),c("ngModelOptions",C(15,J)),l(),c("ngIf",e.errorFor("branch"))}}function jr(o,m){if(o&1&&(P(0),a(1),F()),o&2){let e=d().$implicit;l(),A(" \u2014 ",e.city,"")}}function Ur(o,m){if(o&1&&(i(0,"option",86),a(1),f(2,jr,2,1,"ng-container",50),r()),o&2){let e=m.$implicit;c("value",e.id),l(),A(" ",e.label,""),l(),c("ngIf",e.city)}}function Hr(o,m){if(o&1){let e=w();i(0,"select",96),v("ngModelChange",function(t){p(e);let s=d(4);return y(s.form.shipFrom,t)||(s.form.shipFrom=t),u(t)}),h("ngModelChange",function(){p(e);let t=d(4);return u(t.onShipFromPicked())}),i(1,"option",84),a(2,"Select a saved address"),r(),f(3,Ur,3,3,"option",85),r()}if(o&2){let e=d(4);x("ngModel",e.form.shipFrom),c("ngModelOptions",C(4,J)),l(3),c("ngForOf",e.addresses)("ngForTrackBy",e.trackByIndex)}}function Kr(o,m){if(o&1){let e=w();i(0,"input",97),v("ngModelChange",function(t){p(e);let s=d(4);return y(s.form.shipping,t)||(s.form.shipping=t),u(t)}),r()}if(o&2){let e=d(4);x("ngModel",e.form.shipping),c("ngModelOptions",C(2,J))}}function Qr(o,m){if(o&1&&(i(0,"div",37),b(1,"i",38),i(2,"span"),a(3),r()()),o&2){let e=m.ngIf,n=d(4);c("id",n.fieldAnchorId("shipFrom")),l(3),g(e)}}function Gr(o,m){if(o&1&&(i(0,"div",61),b(1,"i",62),i(2,"div")(3,"div",63),a(4),r(),i(5,"div",98),a(6),r()()()),o&2){let e=d(4);l(4),g(e.shipFromAddress.city||e.shipFromAddress.label),l(2),g(e.shipFromAddress.full)}}function Jr(o,m){if(o&1&&(i(0,"div",98),a(1),r()),o&2){let e=d(4);l(),g(e.shipToAddress)}}function Yr(o,m){o&1&&(i(0,"div",99),a(1,"No address on this opportunity."),r())}function $r(o,m){if(o&1&&(i(0,"div",107),a(1),r()),o&2){let e=d().$implicit;l(),A("SKU : ",e.sku,"")}}function Zr(o,m){if(o&1&&(i(0,"tr")(1,"td")(2,"div",103),a(3),r(),f(4,$r,2,1,"div",104),r(),i(5,"td"),a(6),r(),i(7,"td"),a(8),r(),i(9,"td")(10,"span",105),a(11),r(),b(12,"i",106),r()()),o&2){let e=m.$implicit,n=d(5);
1l(2),c("title",e.name),l(),g(e.name),l(),c("ngIf",e.sku),l(2),g(e.qty),l(2),A("",n.money(e.price)," /unit"),l(3),g(n.money(n.lineTotal(e))),l(),bn("title","",e.qty," \xD7 ",n.money(e.price),", less ",e.discount||0,"% discount, plus ",e.gst||0,"% GST")}}function Xr(o,m){if(o&1&&(i(0,"div",100)(1,"table",101)(2,"thead")(3,"tr")(4,"th",18),a(5,"Product Name"),r(),i(6,"th",18),a(7,"Quantity"),r(),i(8,"th",18),a(9,"Price per Unit"),r(),i(10,"th",18),a(11,"Total Payable"),r()()(),i(12,"tbody"),f(13,Zr,13,11,"tr",102),r()()()),o&2){let e=d(4);l(13),c("ngForOf",e.wonProducts)("ngForTrackBy",e.trackByIndex)}}function eo(o,m){o&1&&(i(0,"div",108),a(1,"No products on this opportunity."),r())}function to(o,m){if(o&1){let e=w();i(0,"div",111)(1,"span",112),a(2),r(),i(3,"button",113),h("click",function(){let t=p(e).index,s=d(5);return u(s.removeFile(t))}),a(4,"\u2715"),r()()}if(o&2){let e=m.$implicit;l(2),g(e.name)}}function no(o,m){if(o&1&&(i(0,"div",109),f(1,to,5,1,"div",110),r()),o&2){let e=d(4);l(),c("ngForOf",e.files)}}function io(o,m){if(o&1){let e=w();P(0),i(1,"div",29),a(2,"Bank Details"),r(),i(3,"div",22)(4,"div")(5,"label")(6,"span",18),a(7,"Account holder name"),r(),i(8,"span",19),a(9,"*"),r()(),f(10,Ar,4,5,"select",55)(11,Dr,1,3,"input",56)(12,Vr,4,2,"div",34),r()(),f(13,Lr,21,4,"div",57)(14,Nr,4,2,"div",34)(15,zr,35,16,"ng-container",50),i(16,"div",29),a(17,"Address Details"),r(),i(18,"div",22)(19,"div")(20,"label")(21,"span",18),a(22,"Shipping From"),r(),i(23,"span",19),a(24,"*"),r()(),f(25,Hr,4,5,"select",58)(26,Kr,1,3,"input",59)(27,Qr,4,2,"div",34),r()(),f(28,Gr,7,2,"div",60),i(29,"div",22)(30,"div")(31,"label",18),a(32,"Shipping To"),r(),i(33,"div",61),b(34,"i",62),i(35,"div")(36,"div",63),a(37),r(),f(38,Jr,2,1,"div",64)(39,Yr,2,0,"div",65),r()()()(),i(40,"div",29),a(41,"Products"),r(),f(42,Xr,14,2,"div",66)(43,eo,2,0,"div",67),i(44,"div",68)(45,"div")(46,"div",69)(47,"label",18),a(48,"Terms & Conditions"),r(),i(49,"textarea",70),v("ngModelChange",function(t){p(e);let s=d(3);return y(s.form.note,t)||(s.form.note=t),u(t)}),r()(),i(50,"div",69)(51,"label",18),a(52,"Attachments"),r(),i(53,"div",71),h("dragover",function(t){p(e);let s=d(3);return u(s.onDragOver(t))})("drop",function(t){p(e);let s=d(3);return u(s.onDrop(t))}),i(54,"input",72,3),h("change",function(t){p(e);let s=d(3);return u(s.onFileSelected1(t))}),r(),i(56,"span",73),a(57),r(),i(58,"button",74),h("click",function(){p(e);let t=le(55);return u(t.click())}),a(59,"Browse"),r()(),f(60,no,2,1,"div",75),r()(),i(61,"div")(62,"div",76)(63,"div",77)(64,"span",78),a(65,"Net Total"),r(),i(66,"span",79),a(67,":"),r(),i(68,"span",80),a(69),r()(),i(70,"div",77)(71,"span",81),a(72,"GST"),r(),i(73,"span",79),a(74,":"),r(),i(75,"span",80),a(76),r()(),i(77,"div",77)(78,"span",78),a(79,"Discount"),r(),i(80,"span",79),a(81,":"),r(),i(82,"span",80),a(83),r()(),i(84,"div",77)(85,"span",78),a(86,"Additional Charges"),r(),i(87,"span",79),a(88,":"),r(),i(89,"span",80),a(90),r()(),i(91,"div",82)(92,"span",78),a(93,"Total Amount"),r(),i(94,"span",79),a(95,":"),r(),i(96,"span",80),a(97),r()()()()(),F()}if(o&2){let e=d(3);l(10),c("ngIf",e.bankAccounts.length),l(),c("ngIf",!e.bankAccounts.length),l(),c("ngIf",e.errorFor("accountHolder")),l(),c("ngIf",e.hasPickedBankAccount),l(),c("ngIf",e.bankRowError),l(),c("ngIf",!e.bankFieldsLocked),l(10),c("ngIf",e.addresses.length),l(),c("ngIf",!e.addresses.length),l(),c("ngIf",e.errorFor("shipFrom")),l(),c("ngIf",e.shipFromAddress),l(9),g(e.shipToName),l(),c("ngIf",e.shipToAddress),l(),c("ngIf",!e.shipToAddress),l(3),c("ngIf",e.wonProducts.length),l(),c("ngIf",!e.wonProducts.length),l(6),x("ngModel",e.form.note),c("ngModelOptions",C(26,J)),l(7),D("is-empty",!e.files.length),l(),g(e.fileLabel),l(3),c("ngIf",e.files.length),l(9),g(e.money(e.wonGrossTotal)),l(7),g(e.money(e.wonTaxAmount)),l(7),g(e.money(e.wonDiscountTotal)),l(7),g(e.money(e.wonAdditionalCharges)),l(7),g(e.money(e.wonTotalAmount))}}function ro(o,m){if(o&1&&(P(0),i(1,"div",46)(2,"div",47)(3,"span",48),a(4,"1"),r(),i(5,"span",18),a(6,"Buyer & Payment"),r()(),b(7,"div",49),i(8,"div",47)(9,"span",48),a(10,"2"),r(),i(11,"span",18),a(12,"Bank, Shipping & Products"),r()()(),f(13,Or,34,15,"ng-container",50)(14,
1io,98,27,"ng-container",50),F()),o&2){let e=d(2);l(2),D("is-active",e.wonStep===1),l(6),D("is-active",e.wonStep===2),l(5),c("ngIf",e.wonStep===1),l(),c("ngIf",e.wonStep===2)}}function oo(o,m){if(o&1&&(P(0),i(1,"p",114),a(2,"Move "),i(3,"strong"),a(4),r(),a(5," back to "),i(6,"strong",18),a(7,"New"),r(),a(8,"?"),r(),F()),o&2){let e=d(2);l(4),g(e.ctx.cardName)}}function ao(o,m){if(o&1){let e=w();i(0,"button",14),h("click",function(){p(e);let t=d(3);return u(t.wonBack())}),a(1,"Back"),r()}}function so(o,m){if(o&1){let e=w();P(0),i(1,"div",115),f(2,ao,2,0,"button",116),i(3,"button",117),h("click",function(){p(e);let t=d(2);return u(t.wonNext())}),a(4),r()(),F()}if(o&2){let e=d(2);l(2),c("ngIf",e.wonStep===2),l(2),g(e.primaryLabel)}}function lo(o,m){if(o&1){let e=w();i(0,"button",117),h("click",function(){p(e);let t=d(2);return u(t.submit())}),a(1),r()}if(o&2){let e=d(2);l(),g(e.primaryLabel)}}function co(o,m){if(o&1){let e=w();i(0,"div",5),h("click",function(){p(e);let t=d();return u(t.cancel())}),i(1,"div",6),h("click",function(t){return p(e),u(t.stopPropagation())}),i(2,"div",7)(3,"div")(4,"div",8),a(5),r(),f(6,mr,2,1,"div",9),r(),i(7,"button",10),h("click",function(){p(e);let t=d();return u(t.cancel())}),a(8,"\xD7"),r()(),i(9,"div",11),f(10,pr,36,12,"ng-container",12)(11,gr,41,16,"ng-container",12)(12,xr,24,14,"ng-container",12)(13,Sr,33,18,"ng-container",12)(14,kr,20,12,"ng-container",12)(15,ro,15,6,"ng-container",12)(16,oo,9,1,"ng-container",12),r(),i(17,"div",13)(18,"button",14),h("click",function(){p(e);let t=d();return u(t.cancel())}),a(19,"Cancel"),r(),f(20,so,5,2,"ng-container",15)(21,lo,2,1,"ng-template",null,2,Ce),r()()()}if(o&2){let e=le(22),n=d();l(),D("is-lg",n.ctx.stage!=="Contacted"),l(4),g(n.title),l(),c("ngIf",n.subtitle),l(3),c("ngSwitch",n.ctx.stage),l(),c("ngSwitchCase","Contacted"),l(),c("ngSwitchCase","Qualified"),l(),c("ngSwitchCase","Proposal Sent"),l(),c("ngSwitchCase","Negotiation"),l(),c("ngSwitchCase","Decision Pending"),l(),c("ngSwitchCase","Won"),l(),c("ngSwitchCase","New"),l(4),c("ngIf",n.ctx.stage==="Won")("ngIfElse",e)}}function mo(o,m){if(o&1){let e=w();i(0,"div",121)(1,"div")(2,"label",18),a(3,"Product / Service"),r(),i(4,"input",122),v("ngModelChange",function(t){let s=p(e).$implicit;return y(s.product,t)||(s.product=t),u(t)}),r()(),i(5,"div")(6,"label",18),a(7,"Quantity"),r(),i(8,"input",123),v("ngModelChange",function(t){let s=p(e).$implicit;return y(s.quantity,t)||(s.quantity=t),u(t)}),r()(),i(9,"div")(10,"label",18),a(11,"Price / unit"),r(),i(12,"div",26)(13,"span"),a(14,"\u20B9"),r(),i(15,"input",124),v("ngModelChange",function(t){let s=p(e).$implicit;return y(s.price,t)||(s.price=t),u(t)}),r()()(),i(16,"div")(17,"label",18),a(18,"GST %"),r(),i(19,"input",125),v("ngModelChange",function(t){let s=p(e).$implicit;return y(s.gst,t)||(s.gst=t),u(t)}),r()(),i(20,"div")(21,"button",126),h("click",function(){let t=p(e).index,s=d(2);return u(s.removeProduct(t))}),a(22,"X"),r()()()}if(o&2){let e=m.$implicit,n=m.index;l(4),ve("name","prod-",n,""),x("ngModel",e.product),c("ngModelOptions",C(16,J)),l(4),ve("name","qty-",n,""),x("ngModel",e.quantity),c("ngModelOptions",C(17,J)),l(7),ve("name","price-",n,""),x("ngModel",e.price),c("ngModelOptions",C(18,J)),l(4),ve("name","gst-",n,""),x("ngModel",e.gst),c("ngModelOptions",C(19,J))}}function po(o,m){if(o&1){let e=w();i(0,"div",29),a(1,"Products / Services"),r(),i(2,"div",118),f(3,mo,23,20,"div",119),r(),i(4,"button",120),h("click",function(){p(e);let t=d();return u(t.addProduct())}),a(5,"+ Add Another Product"),r()}if(o&2){let e=d();l(3),c("ngForOf",e.products)("ngForTrackBy",e.trackByIndex)}}function uo(o,m){if(o&1){let e=w();i(0,"div",130)(1,"div")(2,"label",18),a(3,"Product/Service"),r(),i(4,"input",131),v("ngModelChange",function(t){let s=p(e).$implicit;return y(s.product,t)||(s.product=t),u(t)}),r()(),i(5,"div")(6,"label",18),a(7,"Offered Quantity"),r(),i(8,"input",132),v("ngModelChange",function(t){let s=p(e).$implicit;return y(s.quantity,t)||(s.quantity=t),u(t)}),r()(),i(9,"div")(10,"label",18),a(11,"Price Per Unit"),r(),i(12,"input",133),v("ngModelChange",function(t){let s=p(e).$implicit;return y(s.priceperunit,t)||(s.priceperunit=t),u(t)}),r()(),i(13,"div")(14,"label",18),a(15,"Discount"),r(),i(16,"input",134),v("ngModelChange",function(t){let s=p(e).$implicit;return y(s.discount,t)||(s.discount=t),u(t)}),r()(),i(17,"div")(18,"label",18),a(19,"GST %"),r(),i(20,"input",135),v("ngModelChange",function(t){let s=p(e).$implicit;return y(s.gst,t)||(s.gst=t),u(t)}),r()(),i(21,"div")(22,"label",18),a(23,"Additional Charges"),r(),i(24,"input",136),v("ngModelChange",function(t){let s=p(e).$implicit;return y(s.additionalcharges,t)||(s.additionalcharges=t),u(t)}),r()()()}if(o&2){let e=m.$implicit,n=m.index;l(4),ve("name","rfqProd-",n,""),x("ngModel",e.product),c("ngModelOptions",C(25,J))("title",e.product),l(4),ve("name","rfqQty-",n,""),x("ngModel",e.quantity),c("ngModelOptions",C(26,J)),l(4),ve("name","rfqPrice-",n,""),x("ngModel",e.priceperunit),c("ngModelOptions",C(27,J)),l(4),ve("name","rfqDiscount-",n,""),x("ngModel",e.discount),c("ngModelOptions",C(28,J)),l(4),ve("name","rfqGst-",n,""),x("ngModel",e.gst),c("ngModelOptions",C(29,J)),l(4),ve("name","rfqCharges-",n,""),x("ngModel",e.additionalcharges),c("ngModelOptions",C(30,J))}}function go(o,m){if(o&1&&(i(0,"div",127),a(1,"Products / Services"),r(),i(2,"div",128),f(3,uo,25,31,"div",129),r()),o&2){let e=d();l(3),c("ngForOf",e.rfqCards)("ngForTrackBy",e.trackByIndex)}}var _o=/^\d{2}[A-Z]{5}\d{4}[A-Z]{1}[A-Z\d]{1}Z[A-Z\d]{1}$/,ho=/^[A-Z]{4}0[A-Z0-9]{6}$/,fo=/^\d{9,18}$/,mi=(()=>{class o{get bankFieldsLocked(){return this.bankAccounts.length>0}get hasPickedBankAccount(){return this.bankFieldsLocked&&!!String(this.form.accountHolder||"").trim()}constructor(e,n){this.svc=e,this.api=n,this.open=!1,this.ctx=null,this.form={},this.products=[this.blankProduct()],this.rfqCards=[],this.wonProducts=[],this.files=[],this.bankAccounts=[],this.bankAccountsLoaded=!1,this.addresses=[],this.addressesLoaded=!1,this.defaultAddressId="",this.wonStep=1,this.error="",this.errorField="",this.sub=this.svc.dialog$.subscribe(t=>{this.open=t.open,this.ctx=t.ctx,t.open&&this.resetForm()})}ngOnDestroy(){this.sub.unsubscribe()}blankProduct(){return{product:"",quantity:null,price:null,gst:18}}resetForm(){if(this.form={},this.clearError(),this.products=[this.blankProduct()],this.wonStep=1,this.rfqCards=[],this.usesRfqCards()){let e=this.ctx?.data?.rfqCards||[];this.rfqCards=e.length?e.map(n=>z({},n)):[this.blankRfqCard()]}if(this.ctx?.stage==="Won"){this.loadBankAccounts(),this.loadAddresses(),this.form.paymentMode="Bank Transfer",this.form.country="India",this.form.buyerName=this.defaultBuyerName();let e=this.ctx?.data?.wonProducts||[];this.wonProducts=e.map(n=>z({},n)),this.files=[]}this.applyPrefill()}applyPrefill(){let e=this.ctx?.data?.prefill||{};for(let[n,t]of Object.entries(e))t!=null&&String(t).trim()!==""&&(this.form[n]=t)}loadBankAccounts(){this.bankAccountsLoaded||this.api.getBankDetail
1sList().subscribe({next:e=>{let n=e?.response?.list||e?.response?.data||[];this.bankAccounts=(Array.isArray(n)?n:[]).map(t=>({accountHolder:String(t?.account_name||t?.accountName||"").trim(),bankName:String(t?.bank_name||t?.bankName||"").trim(),accountNumber:String(t?.account_number||t?.accountNumber||"").trim(),ifsc:String(t?.ifsc||t?.ifsc_code||"").trim(),branch:String(t?.branch_name||t?.branch||"").trim()})).filter(t=>!!t.accountHolder),this.bankAccountsLoaded=!0},error:()=>{this.bankAccountsLoaded=!0}})}onBankAccountPicked(){let e=String(this.form.accountHolder||""),n=this.bankAccounts.find(t=>t.accountHolder===e);n&&(this.form.bankName=n.bankName,this.form.accountNumber=n.accountNumber,this.form.ifsc=n.ifsc,this.form.branch=n.branch)}loadAddresses(){if(this.addressesLoaded){this.applyDefaultAddress();return}this.api.getAddressList().subscribe({next:e=>{let n=Array.isArray(e?.response)?e.response:Array.isArray(e?.data)?e.data:[];this.addresses=n.map(s=>this.toAddressOption(s)).filter(s=>!!s.full);let t=n.find(s=>String(s?.shippingDefault||"").toLowerCase()==="default");this.defaultAddressId=t?this.toAddressOption(t).id:"",this.addressesLoaded=!0,this.applyDefaultAddress()},error:()=>{this.addressesLoaded=!0}})}applyDefaultAddress(){if(this.form.shipFrom)return;let e=this.addresses.find(n=>n.id===this.defaultAddressId)||this.addresses[0];e&&(this.form.shipFrom=e.id,this.onShipFromPicked())}toAddressOption(e){let n=S=>String(S??"").trim(),t=n(e?.city),s=n(e?.region)||n(e?.state),_=n(e?.full_address)||[e?.street,t,s,e?.postcode,e?.country_id].map(n).filter(Boolean).join(", ");return{id:n(e?.entity_id)||n(e?.id)||_,label:n(e?.firstname)||t||_,city:t,state:s,full:_}}get shipFromAddress(){let e=String(this.form.shipFrom||"");return this.addresses.find(n=>n.id===e)||null}onShipFromPicked(){let e=this.shipFromAddress;e&&(this.form.shipping=e.full,this.form.city=e.city,this.form.state=e.state)}get shipToName(){return String(this.form.shipToName||this.form.buyerName||"").trim()||"Buyer address"}get shipToAddress(){return String(this.form.shipToAddress||"").trim()}get isIntraState(){let e=String(this.shipFromAddress?.state||this.form.state||"").trim().toLowerCase(),n=String(this.form.shipToState||"").trim().toLowerCase();return!e||!n?!0:e===n}defaultBuyerName(){let e=n=>{let t=String(n??"").trim();return t&&t!=="\u2014"?t:""};return e(this.ctx?.data?.buyerName)||e(this.ctx?.cardAccount)||e(this.ctx?.data?.contactName)}usesRfqCards(){let e=this.ctx?.stage;return e==="Proposal Sent"||e==="Negotiation"||e==="Decision Pending"}blankRfqCard(){return{product:"",quantity:"",specs:"",priceperunit:"",discount:"",gst:"",additionalcharges:""}}get today(){return new Date().toISOString().slice(0,10)}addRfqCard(){this.rfqCards.push(this.blankRfqCard())}removeRfqCard(e){this.rfqCards.length>1&&this.rfqCards.splice(e,1)}addProduct(){this.products.push(this.blankProduct())}removeProduct(e){this.products.length>1&&this.products.splice(e,1)}get paymentMode(){return this.form.paymentMode||"Bank Transfer"}fail(e,n){return this.error=n,this.errorField=e,setTimeout(()=>{document.querySelector(".crm-stage-form-card .crm-field-error")?.scrollIntoView({behavior:"smooth",block:"center"})}),!1}errorFor(e){return this.errorField===e?this.error:""}get bankRowError(){return this.errorFor("bankName")||this.errorFor("accountNumber")||this.errorFor("ifsc")||this.errorFor("branch")}fieldAnchorId(e){return`crm-stage-field-${e}`}clearError(){this.error="",this.errorField=""}wonNext(){if(this.clearError(),this.wonStep===1){if(!this.validateWonStep1())return;this.wonStep=2}else{if(!this.validateWonStep2())return;this.submit()}}wonBack(){this.wonStep===2&&(this.wonStep=1,this.clearError())}validateWonStep1(){let e=this.form,n=String(e.gst||"").trim().toUpperCase(),t=[["buyerName",!!String(e.buyerName||"").trim(),"Buyer Name is required."],["gst",!n||_o.test(n),"Enter a valid 15-character GST number (e.g. 22AAAAA0000A1Z5)."],["paymentMode",!!String(e.paymentMode||"").trim(),"Payment Mode is required."]].find(([,s])=>!s);return t?this.fail(t[0],t[2]):(e.gst=n,!0)}validateWonStep2(){let e=this.form,n=String(e.accountNumber||"").trim(),t=String(e.ifsc||"").trim().toUpperCase(),s=[["accountHolder",!!String(e.accountHolder||"").trim(),"Select the account holder."],["bankName",!!String(e.bankName||"").trim(),"Bank Name is required."],["accountNumber",fo.test(n),"Enter a valid Account Number (9\u201318 digits)."],["ifsc",ho.test(t),"Enter a valid IFSC Code (e.g. HDFC0001234)."],["branch",!!String(e.branch||"").trim(),"Branch is required."],["shipFrom",!!String(e.shipping||"").trim(),"Select the Shipping From address."]].find(([,_])=>!_);return s?this.fail(s[0],s[2]):(e.ifsc=t,!0)}validateProposalSent(){let e=String(this.form.proposalSentDate||"").trim(),n=String(this.form.quoteExpiryDate||"").trim();return e?wt()({value:e})?.futureDate?this.fail("proposalSentDate","Proposal sent date cannot be in the future."):n?$e()({value:n})?.pastDate?this.fail("quoteExpiryDate","Quote expiry date must be in the future."):!0:this.fail("quoteExpiryDate","Quote expiry date is required."):this.fail("proposalSentDate","Proposal sent date is required.")}validateNegotiation(){let e=String(this.form.quoteId||"").trim(),n=String(this.form.proposalSentDate||"").trim(),t=String(this.form.quoteExpiryDate||"").trim();return e?n?wt()({value:n})?.futureDate?this.fail("proposalSentDate","Date cannot be in the future."):t?$e()({value:t})?.pastDate?this.fail("quoteExpiryDate","Expiry date must be in the future."):!0:this.fail("quoteExpiryDate","Quote expiry date is required."):this.fail("proposalSentDate","Proposal sent date is required."):this.fail("quoteId","Quote ID is required.")}validateDecisionPending(){let e=String(this.form.expectedDecisionDate||"").trim();return e?$e()({value:e})?.pastDate?this.fail("expectedDecisionDate","Decision date must be today or in the future."):!0:this.fail("expectedDecisionDate","Expected decision date is required.")}onFileSelected1(e){for(let n of e.target.files)this.files.push(n);e.target.value=""}removeFile(e){this.files.splice(e,1)}onDragOver(e){e.preventDefault()}onDrop(e){if(e.preventDefault(),e.dataTransfer?.files)for(let n of Array.from(e.dataTransfer.files))this.files.push(n)}get selectedWonProducts(){return this.wonProducts.filter(e=>e.selected)}lineValue(e){return(Number(e.qty)||0)*(Number(e.price)||0)}lineDiscount(e){return this.lineValue(e)*((Number(e.discount)||0)/100)}lineTotal(e){let n=this.lineValue(e)-this.lineDiscount(e);return n+n*((Number(e.gst)||0)/100)+(Number(e.additionalCharges)||0)}get wonGrossTotal(){return this.selectedWonProducts.reduce((e,n)=>e+this.lineValue(n),0)}get wonDiscountTotal(){return this.selectedWonProducts.reduce((e,n)=>e+this.lineDiscount(n),0)}get wonNetTotal(){return this.wonGrossTotal-this.wonDiscountTotal}get wonTaxAmount(){return this.selectedWonProducts.reduce((e,n)=>e+(this.lineValue(n)-this.lineDiscount(n))*((Number(n.gst)||0)/100),0)}get wonSgst(){return this.isIntraState?this.wonTaxAmount/2:0}get wonCgst(){return this.wonSgst}get wonIgst(){return this.isIntraState?0:this.wonTaxAmount}get wonAdditionalCharges(){return this.selectedWonProducts.reduce((e,n)=>e+(Number(n.additionalCharges)||0),0)}get wonTotalAmount(){return this.wonNetTotal+this.wonTaxAmount+this.wonAdditionalCharges}
1money(e){return"\u20B9"+(Number(e)||0).toLocaleString("en-IN",{minimumFractionDigits:2,maximumFractionDigits:2})}get fileLabel(){return this.files.length?this.files.length===1?this.files[0].name:this.files.length+" files selected":"Choose File"}cancel(){this.svc.resolve(null)}submit(){if(this.clearError(),this.ctx?.stage==="Proposal Sent"&&!this.validateProposalSent()||this.ctx?.stage==="Negotiation"&&!this.validateNegotiation()||this.ctx?.stage==="Decision Pending"&&!this.validateDecisionPending())return;let e=z({},this.form);this.usesRfqCards()?e.products=this.rfqCards:this.ctx?.stage==="Won"?(e.products=this.selectedWonProducts,e.attachments=this.files.map(n=>({name:n.name,size:n.size,type:n.type})),e.totals={gross:this.wonGrossTotal,discount:this.wonDiscountTotal,net:this.wonNetTotal,tax:this.wonTaxAmount,sgst:this.wonSgst,cgst:this.wonCgst,igst:this.wonIgst,additionalCharges:this.wonAdditionalCharges,total:this.wonTotalAmount}):this.needsProducts()&&(e.products=this.products),this.svc.resolve(e)}needsProducts(){return this.ctx?.stage==="Qualified"}hasAnyProduct(){return this.products.some(e=>!!e.product||!!e.quantity||!!e.price)}trackByIndex(e){return e}get title(){return this.ctx?this.ctx.stage:""}get subtitle(){return this.ctx?.stage==="Won"?"Please enter the information":""}get primaryLabel(){return this.ctx?this.ctx.stage==="Negotiation"||this.ctx.stage==="Decision Pending"?"Update":this.ctx.stage==="Won"?this.wonStep===2?"Submit":"Next":"Submit":"Submit"}static{this.\u0275fac=function(n){return new(n||o)(E(Ge),E(R))}}static{this.\u0275cmp=V({type:o,selectors:[["app-crm-stage-form-modal"]],decls:5,vars:1,consts:[["productsTpl",""],["rfqCardsTpl",""],["simpleFooter",""],["fileInput",""],["class","crm-stage-form-overlay",3,"click",4,"ngIf"],[1,"crm-stage-form-overlay",3,"click"],[1,"crm-stage-form-card",3,"click"],[1,"crm-stage-form-header"],[1,"crm-stage-form-title"],["class","crm-stage-form-subtitle","appTranslate","",4,"ngIf"],["type","button","aria-label","Close",1,"crm-stage-form-close",3,"click"],[1,"crm-stage-form-body",3,"ngSwitch"],[4,"ngSwitchCase"],[1,"crm-stage-form-footer"],["type","button","appTranslate","",1,"btn","btn-light","btn-sm",3,"click"],[4,"ngIf","ngIfElse"],["appTranslate","",1,"crm-stage-form-subtitle"],[1,"crm-stage-form-row"],["appTranslate",""],[1,"req"],["type","date","name","attemptedDate",3,"ngModelChange","ngModel","ngModelOptions"],["name","contactMode",3,"ngModelChange","ngModel","ngModelOptions"],[1,"crm-stage-form-row","single"],["type","date","name","nextFollowup",3,"ngModelChange","ngModel","ngModelOptions"],["placeholder","Notes from the conversation\u2026","name","note",3,"ngModelChange","ngModel","ngModelOptions"],[4,"ngTemplateOutlet"],[1,"crm-stage-form-input-group"],["type","number","placeholder","0","name","discount",3,"ngModelChange","ngModel","ngModelOptions"],["type","number","placeholder","0","name","additionalCharges",3,"ngModelChange","ngModel","ngModelOptions"],["appTranslate","",1,"crm-stage-form-section-title"],["type","text","placeholder","City, State","name","deliveryLocation",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","placeholder","e.g. 1\u20132 Weeks","name","deliveryTimeline",3,"ngModelChange","ngModel","ngModelOptions"],["name","budget",3,"ngModelChange","ngModel","ngModelOptions"],["type","date","name","proposalSentDate",3,"ngModelChange","ngModel","max","ngModelOptions"],["class","crm-field-error",3,"id",4,"ngIf"],["type","date","name","quoteExpiryDate",3,"ngModelChange","ngModel","min","ngModelOptions"],["name","note",3,"ngModelChange","ngModel","ngModelOptions"],[1,"crm-field-error",3,"id"],[1,"ri-error-warning-line"],["type","text","placeholder","Enter Quote ID","name","negQuoteId",3,"ngModelChange","ngModel","ngModelOptions"],["type","date","name","negProposalSentDate",3,"ngModelChange","ngModel","max","ngModelOptions"],["type","date","name","negQuoteExpiryDate",3,"ngModelChange","ngModel","min","ngModelOptions"],["placeholder","Enter Notes","name","negNote",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","placeholder","Enter Quote ID","name","dpQuoteId",3,"ngModelChange","ngModel","ngModelOptions"],["type","date","name","expectedDecisionDate",3,"ngModelChange","ngModel","min","ngModelOptions"],["placeholder","Enter Notes","name","dpNote",3,"ngModelChange","ngModel","ngModelOptions"],[1,"crm-stage-form-stepper"],[1,"ps-step"],[1,"ps-num"],[1,"ps-line"],[4,"ngIf"],["type","text","name","buyerName",3,"ngModelChange","ngModel","ngModelOptions","readonly"],["type","text","placeholder","22AAAAA0000A1Z5","name","gst",3,"ngModelChange","ngModel","ngModelOptions"],["appTranslate","",1,"crm-stage-form-help"],["name","paymentMode",3,"ngModelChange","ngModel","ngModelOptions"],["name","accountHolder",3,"ngModel","ngModelOptions","ngModelChange",4,"ngIf"],["type","text","placeholder","Enter account holder name","name","accountHolder",3,"ngModel","ngModelOptions","ngModelChange",4,"ngIf"],["class","crm-fact-card crm-fact-card--grid",4,"ngIf"],["name","shipFrom",3,"ngModel","ngModelOptions","ngModelChange",4,"ngIf"],["type","text","placeholder","Enter the address you ship from","name","shipping",3,"ngModel","ngModelOptions","ngModelChange",4,"ngIf"],["class","crm-fact-card crm-fact-card--pin",4,"ngIf"],[1,"crm-fact-card","crm-fact-card--pin"],[1,"ri-map-pin-line","crm-fact-card__pin"],[1,"crm-fact-card__title"],["class","crm-fact-card__text",4,"ngIf"],["class","crm-fact-card__text is-muted","appTranslate","",4,"ngIf"],["class","crm-won-products",4,"ngIf"],["class","crm-stage-form-readonly","appTranslate","",4,"ngIf"],[1,"crm-stage-form-row","crm-won-close"],[1,"crm-stage-form-field"],["placeholder","Notes","name","wonNote",3,"ngModelChange","ngModel","ngModelOptions"],[1,"crm-file-picker",3,"dragover","drop"],["type","file","multiple","","hidden","",3,"change"],[1,"crm-file-picker__name"],["type","button","appTranslate","",1,"crm-file-picker__browse",3,"click"],["class","attachment-files",4,"ngIf"],[1,"price-summary"],[1,"price-summary__row"],["appTranslate","",1,"price-summary__label"],[1,"price-summary__separator"],[1,"price-summary__value"],[1,"price-summary__label"],[1,"price-summary__total"],["name","accountHolder",3,"ngModelChange","ngModel","ngModelOptions"],["value","","disabled","","selected","","appTranslate",""],[3,"value",4,"ngFor","ngForOf","ngForTrackBy"],[3,"value"],["type","text","placeholder","Enter account holder name","name","accountHolder",3,"ngModelChange","ngModel","ngModelOptions"],[1,"crm-fact-card","crm-fact-card--grid"],[1,"crm-fact"],["appTranslate","",1,"crm-fact__label"],[1,"crm-fact__value"],["type","text","name","bankName",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","name","accountNumber",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","name","ifsc",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","name","branch",3,"ngModelChange","ngModel","ngModelOptions"],["name","shipFrom",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","placeholder","Enter the address you ship from","name","shipping",3,"ngModelChange","ngModel","ngModelOptions"],[1,"crm-fact-card__text"],["appTranslate","",1,"crm-fact-card__text","is-muted"],[1,"crm-won-products"],[1,"crm-won-table"],[4,"ngFor","ngForOf","ngForTrackBy"],[1,"crm-won-table__name",3,"title"],["class","crm-won-table__sku",4,"ngIf"],[1,"crm-won-table__total"],[1,"ri-information-line","crm-won-table__info",3,"title"],[1,"crm-won-table__sku"],["appTranslate","",1,"crm-stage-form-readonly"],[1,"attachment-files"],["class","attachment-files__item",4,"ngFor","ngForOf"],[1,"attachment-files__item"],[1,"attachment-files__name"],["type","button",1,"attachment-files__remove",3,"click"],["appTranslateText","",1,"text-muted","mb-0"],[1,"footer-actions"],["type","button","class","btn btn-light btn-sm","appTranslate","",3,"click",4,"ngIf"],["type","button",1,"btn","btn-theme","btn-sm",3,"click"],[1,"crm-stage-form-products"],["class","crm-stage-form-product-row",4,"ngFor","ngForOf","ngForTrackBy"],["type","button","appTranslate","",1,"btn","btn-outline-theme","btn-sm","crm-stage-form-add-btn",3,"click"],[1,"crm-stage-form-product-row"],["type","text","placeholder","e.g. Welding Machine",3,"ngModelChange","ngModel","name","ngModelOptions"],["type","number","placeholder","10",3,"ngModelChange","ngModel","name","ngModelOptions"],["type","number","placeholder","0",3,"ngModelChange","ngModel","name","ngModelOptions"],["type","number","placeholder","18",3,"ngModelChange","ngModel","name","ngModelOptions"],["type","button","aria-label","Remove product",1,"btn","btn-basic","btn-xs","hover-text-danger",3,"click"],["appTranslate","",1,"crm-stage-form-rfq-title"],[1,"crm-stage-form-rfq-cards"],["class","crm-stage-form-rfq-row",4,"ngFor","ngForOf","ngForTrackBy"],[1,"crm-stage-form-rfq-row"],["type","text","placeholder","Enter Product/Service","readonly","",1,"is-readonly",3,"ngModelChange","ngModel","name","ngModelOptions","title"],["type","text","placeholder","Enter Offered Quantity",3,"ngModelChange","ngModel","name","ngModelOptions"],["type","text","placeholder","Enter Price Per Unit",3,"ngModelChange","ngModel","name","ngModelOptions"],["type","text","placeholder","Enter Discount",3,"ngModelChange","ngModel","name","ngModelOptions"],["type","text","placeholder","Enter GST %",3,"ngModelChange","ngModel","name","ngModelOptions"],["type","text","placeholder","Enter Additional Charges",3,"ngModelChange","ngModel","name","ngModelOptions"]],template:function(n,t){n&1&&f(0,co,23,14,"div",4)(1,po,6,2,"ng-template",null,0,Ce)(3,go,4,2,"ng-template",null,1,Ce),n&2&&c("ngIf",t.open&&t.ctx)},dependencies:[W,N,Wt,Nt,Bt,X,ee,te,ot,Z,U,H,L,Me],styles:[".crm-stage-form-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;background:#0f172a73;z-index:1080;display:flex;align-items:center;justify-content:center;padding:24px}.hover-text-danger[_ngcontent-%COMP%]:hover{color:var(--color-error, #DC2626)}.crm-stage-form-card[_ngcontent-%COMP%]{background:#fff;border-radius:10px;width:100%;max-width:560px;max-height:calc(100vh - 48px);overflow:hidden;display:flex;flex-direction:column;box-shadow:0 25px 50px -12px #00000040}.crm-stage-form-card.is-lg[_ngcontent-%COMP%]{max-width:880px}.crm-stage-form-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid #e5e7eb}.crm-stage-form-title[_ngcontent-%COMP%]{font-size:16px;font-weight:600;color:#111827}.crm-stage-form-subtitle[_ngcontent-%COMP%]{font-size:12px;color:#6b7280;margin-top:2px}.crm-stage-form-close[_ngcontent-%COMP%]{border:0;background:transparent;font-size:22px;line-height:1;color:#6b7280;cursor:pointer;padding:0 6px}.crm-stage-form-close[_ngcontent-%COMP%]:hover, .crm-stage-form-close[_ngcontent-%COMP%]:focus{background:transparent;color:var(--color-error, #DC2626);outline:none}.crm-stage-form-body[_ngcontent-%COMP%]{padding:18px 20px;overflow-y:auto;flex:1 1 auto}.crm-stage-form-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:12px}.crm-stage-form-row.single[_ngcontent-%COMP%]{grid-template-columns:1fr}.crm-stage-form-row[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{display:block;font-size:12px;font-weight:500;color:#475569;margin-bottom:4px}.crm-stage-form-row[_ngcontent-%COMP%] input[_ngcontent-%COMP%], .crm-stage-form-row[_ngcontent-%COMP%] select[_ngcontent-%COMP%], .crm-stage-form-row[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{width:100%;border:1px solid #d1d5db;border-radius:6px;padding:7px 10px;font-size:13px;color:#111827;background:#fff;box-sizing:border-box}.crm-stage-form-row[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:focus, .crm-stage-form-row[_ngcontent-%COMP%] select[_ngcontent-%COMP%]:focus, .crm-stage-form-row[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--theme-sub-prime, #A45741);box-shadow:0 0 0 3px rgba(var(--theme-sub-prime-rgb, 164, 87, 65),.15)}.crm-stage-form-row[_ngcontent-%COMP%] input.is-readonly[_ngcontent-%COMP%], .crm-stage-form-row[_ngcontent-%COMP%] select.is-readonly[_ngcontent-%COMP%], .crm-stage-form-row[_ngcontent-%COMP%] textarea.is-readonly[_ngcontent-%COMP%]{background:var(--theme-bg
1-light, #f5f0e8);border-color:#ececec;color:#000}.crm-stage-form-row[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{min-height:70px;resize:vertical}.req[_ngcontent-%COMP%]{color:#ef4444;margin-left:2px}.crm-stage-form-section-title[_ngcontent-%COMP%]{font-size:12px;font-weight:600;letter-spacing:.5px;text-transform:uppercase;color:#6b7280;margin:16px 0 8px}.crm-stage-form-products[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:8px}.crm-stage-form-rfq-title[_ngcontent-%COMP%]{font-size:15px;font-weight:600;color:#111827;margin:18px 0 0}.crm-stage-form-rfq-cards[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:14px;margin-top:12px;margin-bottom:22px}.crm-stage-form-rfq-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px 14px;align-items:start;padding:18px;background:#fff;border:1px solid #e5e7eb;border-radius:12px}.crm-stage-form-rfq-row[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{display:block;font-size:12px;font-weight:500;color:#475569;margin-bottom:4px}.crm-stage-form-rfq-row[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{width:100%;border:1px solid #d1d5db;border-radius:8px;padding:8px 10px;font-size:13px;color:#111827;background:#fff;box-sizing:border-box}.crm-stage-form-rfq-row[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder{color:#9ca3af}.crm-stage-form-rfq-row[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--theme-sub-prime, #A45741);box-shadow:0 0 0 3px rgba(var(--theme-sub-prime-rgb, 164, 87, 65),.15)}.crm-stage-form-rfq-row[_ngcontent-%COMP%] input.is-readonly[_ngcontent-%COMP%], .crm-stage-form-rfq-row[_ngcontent-%COMP%] input[readonly][_ngcontent-%COMP%]{background:var(--theme-bg-light, #f5f0e8);border-color:#ececec;color:#000;text-overflow:ellipsis}@media (max-width: 640px){.crm-stage-form-rfq-row[_ngcontent-%COMP%]{grid-template-columns:minmax(0,1fr);gap:14px}}.crm-stage-form-product-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:2.2fr 1fr 1.2fr .8fr auto;gap:10px;align-items:end}.crm-stage-form-product-row[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{font-size:11px;font-weight:500;color:#6b7280;margin-bottom:3px;display:block}.crm-stage-form-product-row[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{width:100%;border:1px solid #d1d5db;border-radius:6px;padding:6px 8px;font-size:13px;box-sizing:border-box}.crm-stage-form-input-group[_ngcontent-%COMP%]{display:flex;align-items:center;border:1px solid #d1d5db;border-radius:6px;background:#fff;overflow:hidden}.crm-stage-form-input-group[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{padding:0 8px;color:#6b7280;font-size:13px;background:#f9fafb;border-right:1px solid #d1d5db;align-self:stretch;display:flex;align-items:center}.crm-stage-form-input-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{border:0;padding:6px 8px;flex:1}.crm-stage-form-add-btn[_ngcontent-%COMP%]{margin-top:12px;margin-bottom:16px}.crm-stage-form-stepper[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;margin-bottom:16px}.crm-stage-form-stepper[_ngcontent-%COMP%] .ps-step[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:8px;color:#9ca3af;font-size:13px;font-weight:500}.crm-stage-form-stepper[_ngcontent-%COMP%] .ps-step[_ngcontent-%COMP%] .ps-num[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:#e5e7eb;color:#6b7280;font-size:12px;font-weight:600}.crm-stage-form-stepper[_ngcontent-%COMP%] .ps-step.is-active[_ngcontent-%COMP%]{color:#111827}.crm-stage-form-stepper[_ngcontent-%COMP%] .ps-step.is-active[_ngcontent-%COMP%] .ps-num[_ngcontent-%COMP%]{background:var(--theme-sub-prime, #A45741);color:#fff}.crm-stage-form-stepper[_ngcontent-%COMP%] .ps-line[_ngcontent-%COMP%]{flex:1;height:1px;background:#e5e7eb}.crm-stage-form-help[_ngcontent-%COMP%]{display:block;font-size:11px;color:#9ca3af;margin-top:3px}.crm-stage-form-readonly[_ngcontent-%COMP%]{background:var(--theme-bg-light, #f5f0e8);border:1px solid #ececec;border-radius:6px;padding:10px 12px;font-size:13px;color:#000}.crm-field-error[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:6px;margin-top:6px;color:#b91c1c;font-size:12px;font-weight:600;line-height:1.4}.crm-field-error[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{flex-shrink:0;font-size:13px;line-height:1.4}.crm-stage-form-footer[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-top:1px solid #e5e7eb;background:#fafbfc}.crm-stage-form-footer[_ngcontent-%COMP%] .footer-actions[_ngcontent-%COMP%]{display:flex;gap:8px}.crm-stage-form-footer[_ngcontent-%COMP%] .btn-ghost[_ngcontent-%COMP%]{border:0;background:transparent;color:#4b5563;padding:7px 14px;border-radius:6px;font-size:13px;
1cursor:pointer}.crm-stage-form-footer[_ngcontent-%COMP%] .btn-ghost[_ngcontent-%COMP%]:hover{background:#f3f4f6;color:#111827}.crm-stage-form-footer[_ngcontent-%COMP%] .btn-primary[_ngcontent-%COMP%]{border:0;background:#2563eb;color:#fff;padding:7px 16px;border-radius:6px;font-size:13px;font-weight:500;cursor:pointer}.crm-stage-form-footer[_ngcontent-%COMP%] .btn-primary[_ngcontent-%COMP%]:hover{background:#1d4ed8}.crm-stage-form-field[_ngcontent-%COMP%]{margin-bottom:14px}.crm-stage-form-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{font-size:12px;font-weight:500;color:#6b7280;margin-bottom:4px;display:block}.crm-stage-form-field[_ngcontent-%COMP%] input[type=text][_ngcontent-%COMP%]{width:100%;border:1px solid #d1d5db;border-radius:6px;padding:7px 9px;font-size:13px;box-sizing:border-box}.price-summary[_ngcontent-%COMP%]{background:#fff;border:1px solid #ececec;border-radius:8px;overflow:hidden}.price-summary__row[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr auto 110px;align-items:center;padding:10px 16px;font-size:13px;font-weight:600;color:#000;border-bottom:1px solid #f2f2f2}
1.price-summary__separator[_ngcontent-%COMP%]{text-align:center;color:#888;font-weight:400}.price-summary__value[_ngcontent-%COMP%]{text-align:right}.price-summary__total[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr auto 110px;align-items:center;background:var(--theme-bg-light, #f5f0e8);padding:16px;font-size:15px;font-weight:700;color:#000}.attachment-files[_ngcontent-%COMP%]{margin-top:10px}.attachment-files__item[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;background:#f6f6f6;padding:6px 10px;border-radius:4px;margin-bottom:6px;font-size:13px}.attachment-files__name[_ngcontent-%COMP%]{color:#444}.attachment-files__remove[_ngcontent-%COMP%]{border:none;background:transparent;cursor:pointer;color:red;font-size:14px}input.crm-stage-form-readonly[_ngcontent-%COMP%], select.crm-stage-form-readonly[_ngcontent-%COMP%], textarea.crm-stage-form-readonly[_ngcontent-%COMP%], .crm-stage-form-readonly[_ngcontent-%COMP%], .crm-stage-form-card[_ngcontent-%COMP%] input[readonly][_ngcontent-%COMP%], .crm-stage-form-card[_ngcontent-%COMP%] textarea[readonly][_ngcontent-%COMP%], .crm-stage-form-card[_ngcontent-%COMP%] select[disabled][_ngcontent-%COMP%]{background:var(--theme-bg-light, #f5f0e8);border-color:#ececec;color:#000;cursor:default}.crm-fact-card[_ngcontent-%COMP%]{background:var(--theme-bg-light, #f5f0e8);border:1px solid #ececec;border-radius:6px;padding:14px 16px;margin-bottom:12px}.crm-fact-card--grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}.crm-fact-card--pin[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:10px}.crm-fact-card__pin[_ngcontent-%COMP%]{color:#000;font-size:16px;line-height:20px;flex:0 0 auto}.crm-fact-card__title[_ngcontent-%COMP%]{font-size:13px;font-weight:600;color:#000}.crm-fact-card__text[_ngcontent-%COMP%]{font-size:12px;color:#888;margin-top:2px}.crm-fact-card__text.is-muted[_ngcontent-%COMP%]{font-style:italic}.crm-fact[_ngcontent-%COMP%]{min-width:0}.crm-fact__label[_ngcontent-%COMP%]{display:block;font-size:11px;color:#888;margin-bottom:3px}.crm-fact__value[_ngcontent-%COMP%]{display:block;font-size:13px;font-weight:600;color:#000;overflow-wrap:anywhere}.crm-stage-form-row[_ngcontent-%COMP%] .crm-fact-card[_ngcontent-%COMP%]{margin-bottom:0}@media (max-width: 640px){.crm-fact-card--grid[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}}.crm-won-products[_ngcontent-%COMP%]{border:1px solid #ececec;border-radius:6px;overflow-x:auto;margin-bottom:6px}.crm-won-table[_ngcontent-%COMP%]{width:100%;min-width:520px;border-collapse:collapse;font-size:13px}.crm-won-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{text-align:left;font-weight:600;font-size:12px;color:#000;background:var(--theme-bg-light, #f5f0e8);padding:10px 14px;white-space:nowrap}.crm-won-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:12px 14px;color:#000;border-top:1px solid #f0f0f0;vertical-align:middle}.crm-won-table__name[_ngcontent-%COMP%]{font-weight:600;color:#000}.crm-won-table__sku[_ngcontent-%COMP%]{font-size:11px;color:#888;margin-top:2px}.crm-won-table__total[_ngcontent-%COMP%]{font-weight:600}.crm-won-table__info[_ngcontent-%COMP%]{color:#888;margin-left:6px;cursor:help;font-size:13px}.crm-won-close[_ngcontent-%COMP%]{margin-top:16px;align-items:start}.crm-won-close[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{width:100%;min-height:96px;resize:vertical;border:1px solid #d1d5db;border-radius:6px;padding:8px 10px;font-size:13px;color:#111827;box-sizing:border-box}.crm-won-close[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--theme-sub-prime, #A45741);box-shadow:0 0 0 3px rgba(var(--theme-sub-prime-rgb, 164, 87, 65),.15)}.crm-file-picker[_ngcontent-%COMP%]{display:flex;align-items:stretch;border:1px solid #d1d5db;border-radius:6px;overflow:hidden;background:#fff}.crm-file-picker__name[_ngcontent-%COMP%]{flex:1 1 auto;padding:8px 10px;font-size:13px;color:#111827;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.crm-file-picker__name.is-empty[_ngcontent-%COMP%]{color:#9ca3af}.crm-file-picker__browse[_ngcontent-%COMP%]{flex:0 0 auto;border:0;border-left:1px solid #d1d5db;
1background:var(--theme-bg-light, #f5f0e8);color:var(--theme-primary, #351C15);padding:8px 18px;font-size:13px;font-weight:600;cursor:pointer}.crm-file-picker__browse[_ngcontent-%COMP%]:hover{background:var(--theme-sub-prime, #A45741);color:#fff}"]})}}return o})();var ht=(()=>{class o{constructor(){this.state$=new tt({open:!1,resolve:null}),this.dialog$=this.state$.asObservable()}open(){return new Promise(e=>{this.state$.next({open:!0,resolve:e})})}resolve(e){let n=this.state$.value;n.resolve&&n.resolve(e),this.state$.next({open:!1,resolve:null})}static{this.\u0275fac=function(n){return new(n||o)}}static{this.\u0275prov=Te({token:o,factory:o.\u0275fac,providedIn:"root"})}}return o})();var Tt=()=>({standalone:!0});function vo(o,m){o&1&&(i(0,"small",23),a(1," No customers with a won opportunity yet. "),r())}function Co(o,m){if(o&1&&(i(0,"option",24),a(1),r()),o&2){let e=m.$implicit;c("ngValue",e.id),l(),g(e.name)}}function bo(o,m){if(o&1){let e=w();i(0,"div",1),h("click",function(){p(e);let t=d();return u(t.cancel())}),i(1,"div",2),h("click",function(t){return p(e),u(t.stopPropagation())}),i(2,"div",3)(3,"div",4),a(4,"Onboard New Customer"),r(),i(5,"button",5),h("click",function(){p(e);let t=d();return u(t.cancel())}),a(6,"\xD7"),r()(),i(7,"div",6)(8,"div",7)(9,"div")(10,"label")(11,"span",8),a(12,"Customer"),r(),i(13,"span",9),a(14,"*"),r()(),i(15,"ng-select",10),v("ngModelChange",function(t){p(e);let s=d();return y(s.form.customerId,t)||(s.form.customerId=t),u(t)}),h("ngModelChange",function(){p(e);let t=d();return u(t.onCustomerChange())}),r(),f(16,vo,2,0,"small",11),r(),i(17,"div")(18,"label")(19,"span",8),a(20,"CSM Owner"),r(),i(21,"span",9),a(22,"*"),r()(),i(23,"select",12),v("ngModelChange",function(t){p(e);let s=d();return y(s.form.csmOwnerId,t)||(s.form.csmOwnerId=t),u(t)}),i(24,"option",13),a(25,"Select a CSM owner\u2026"),r(),f(26,Co,2,2,"option",14),r()()(),i(27,"div",7)(28,"div")(29,"label")(30,"span",8),a(31,"Kick-off Date"),r(),i(32,"span",9),a(33,"*"),r()(),i(34,"input",15),v("ngModelChange",function(t){p(e);let s=d();return y(s.form.kickoffDate,t)||(s.form.kickoffDate=t),u(t)}),r()()(),i(35,"div",16)(36,"div")(37,"label",8),a(38,"Linked Project (Project Mgmt)"),r(),i(39,"input",17),v("ngModelChange",function(t){p(e);let s=d();return y(s.form.linkedProject,t)||(s.form.linkedProject=t),u(t)}),r()()(),i(40,"div",16)(41,"div")(42,"label",8),a(43,"Notes"),r(),i(44,"textarea",18),v("ngModelChange",function(t){p(e);let s=d();return y(s.form.notes,t)||(s.form.notes=t),u(t)}),r()()(),i(45,"div",19),a(46,"A milestone plan will be auto-generated from the template and linked to Project Mgmt."),r()(),i(47,"div",20)(48,"button",21),h("click",function(){p(e);let t=d();return u(t.cancel())}),a(49,"Cancel"),r(),i(50,"button",22),h("click",function(){p(e);let t=d();return u(t.submit())}),a(51,"Start Onboarding"),r()()()()}if(o&2){let e=d();l(15),c("items",e.customerOpts),x("ngModel",e.form.customerId),c("ngModelOptions",C(18,Tt))("loading",e.loadingCustomers)("virtualScroll",!0)("clearable",!0)("placeholder",e.loadingCustomers?"Loading customers\u2026":"Search customers\u2026"),l(),c("ngIf",!e.loadingCustomers&&!e.customerOpts.length),l(7),x("ngModel",e.form.csmOwnerId),c("ngModelOptions",C(19,Tt)),l(),c("ngValue",null),l(2),c("ngForOf",e.csmOpts),l(8),x("ngModel",e.form.kickoffDate),c("ngModelOptions",C(20,Tt)),l(5),x("ngModel",e.form.linkedProject),c("ngModelOptions",C(21,Tt)),l(5),x("ngModel",e.form.notes),c("ngModelOptions",C(22,Tt))}}var ui=(()=>{class o{constructor(e,n){this.svc=e,this.api=n,this.open=!1,this.customerOpts=[],this.loadingCustomers=!1,this.csmOpts=[],this.templateOpts=[],this.form=this.blank(),this.sub=this.svc.dialog$.subscribe(t=>{this.open=t.open,t.open&&(this.form=this.blank(),this.loadOptions())})}ngOnDestroy(){this.sub.unsubscribe()}static{this.WON_STATUSES=["won","closed-won","closed won"]}static{this.LOOKUP_PAGE_SIZE=100}loadOptions(){this.loadWonCustomers(),this.api.getAssigneeUsers({user_type:"SELLER",search:"",perPage:100,pageNumber:1}).subscribe({next:e=>{this.csmOpts=e?.response?.data?.users||[]},error:()=>{this.csmOpts=[]}})}loadWonCustomers(){this.loadingCustomers=!0;let e=o.LOOKUP_PAGE_SIZE;We({deals:this.api.getDealList({search_query:"",deal_status:"Won",page:1,page_size:e,order_by:"-created_date"}).pipe(de(()=>K(null))),customers:this.api.getCustomerList({page:1,page_size:e}).pipe(de(()=>K(null)))}).subscribe(n=>{let t=this.rowsOf(n?.deals).filter(s=>this.isWon(s));this.customerOpts=this.toCustomerOptions(t,this.rowsOf(n?.customers)),this.loadingCustomers=!1})}rowsOf(e){let n=e?.response?.data??e?.response?.results??[];return Array.isArray(n)?n:[]}isWon(e){let n=e?.dealStatus||e?.deal_status||e?.status||e?.dealStage||"";return o.WON_STATUSES.includes(String(n).trim().toLowerCase())}nameKey(e){return String(e??"").trim().toLowerCase().replace(/\s+/g," ")}dealCustomerId(e){let n=Number(e?.customer_id??e?.customerId??e?.customer);return Number.isFinite(n)&&n>0?n:null}toCustomerOptions(e,n){let t=new Set,s=new Set;for(let I of e){let k=this.dealCustomerId(I);k!=null&&t.add(k);let oe=`${I?.contactFirstName||""} ${I?.contactLastName||""}`;for(let _e of[I?.contactCompany,I?.customerName,oe]){let G=this.nameKey(_e);G&&s.add(G)}}let _=[],S=new Set,T=new Set,M=(I,k)=>{let oe=this.nameKey(k);S.has(I)||oe&&T.has(oe)||(S.add(I),oe&&T.add(oe),_.push({id:I,label:k}))};for(let I of n){let k=Number(I?.id);if(!Number.isFinite(k)||k<=0)continue;(t.has(k)||[I?.companyName,I?.contactName].some(_e=>{let G=this.nameKey(_e);return!!G&&s.has(G)}))&&M(k,I.companyName||I.contactName||"#"+k)}for(let I of e){let k=this.dealCustomerId(I);k!=null&&M(k,I.contactCompany||I.dealTitle||"#"+k)}return _.sort((I,k)=>I.label.localeCompare(k.label,void 0,{numeric:!0}))}blank(){return{customerId:null,customerName:"",csmOwnerId:null,templateId:null,kickoffDate:"",linkedProject:"",notes:""}}onCustomerChange(){let e=this.customerOpts.find(n=>n.id===this.form.customerId);this.form.customerName=e?.label||""}get isValid(){return this.form.customerId!=null&&this.form.csmOwnerId!=null&&!!this.form.kickoffDate}cancel(){this.svc.resolve(null)}submit(){this.isValid&&this.svc.resolve(z({},this.form))}static{this.\u0275fac=function(n){return new(n||o)(E(ht),E(R))}}static{this.\u0275cmp=V({type:o,selectors:[["app-crm-onboard-customer-modal"]],decls:1,vars:1,consts:[["class","crm-onboard-overlay",3,"click",4,"ngIf"],[1,"crm-onboard-overlay",3,"click"],[1,"crm-onboard-card",3,"click"],[1,"crm-onboard-header"],["appTranslate","",1,"crm-onboard-title"],["type","button","aria-label","Close",1,"crm-onboard-close",3,"click"],[1,"crm-onboard-body"],[1,"crm-onboard-row"],["appTranslate",""],[1,"req"],["bindValue","id","bindLabel","label","notFoundText","No matching customer",1,"crm-onboard-picker",3,"ngModelChange","items","ngModel","ngModelOptions","loading","virtualScroll","clearable","placeholder"],["class","crm-onboard-hint","appTranslate","",4,"ngIf"],["name","csmOwner",3,"ngModelChange","ngModel","ngModelOptions"],["disabled","","appTranslate","",3,"ngValue"],[3,"ngValue",4,"ngFor","ngForOf"],["type","date","name","kickoffDate",3,"ngModelChange","ngModel","ngModelOptions"],[1,"crm-onboard-row","single"],["type","text","placeholder","e.g. PM-FORGE-23 \u2014 leave blank to auto-create","name","linkedProject",3,"ngModelChange","ngModel","ngModelOptions"],["placeholder","Any special considerations for this onboarding\u2026","name","notes",3,"ngModelChange","ngModel","ngModelOptions"],["appTranslate","",1,"crm-onboard-help"],[1,"crm-onboard-footer"],["type","button","appTranslate","",1,"btn-ghost",3,"click"],["type","button","appTranslate","",1,"btn-primary",3,"click"],["appTranslate","",1,"crm-onboard-hint"],[3,"ngValue"]],template:function(n,t){n&1&&f(0,bo,52,23,"div",0),n&2&&c("ngIf",t.open)},dependencies:[W,N,X,ee,te,Z,U,H,jt,L],styles:[".crm-onboard-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;background:#0f172a73;z-index:1080;display:flex;align-items:center;justify-content:center;padding:24px}.crm-onboard-card[_ngcontent-%COMP%]{background:#fff;border-radius:10px;width:100%;max-width:760px;max-height:calc(100vh - 48px);overflow:hidden;display:flex;flex-direction:column;box-shadow:0 25px 50px -12px #00000040}.crm-onboard-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid #e5e7eb}.crm-onboard-title[_ngcontent-%COMP%]{font-size:16px;font-weight:600;color:#111827}.crm-onboard-close[_ngcontent-%COMP%]{border:0;background:transparent;font-size:22px;line-height:1;color:#6b7280;cursor:pointer;padding:0 6px}.crm-onboard-close[_ngcontent-%COMP%]:hover{color:#111827}.crm-onboard-body[_ngcontent-%COMP%]{padding:18px 20px;overflow-y:auto;flex:1 1 auto}.crm-onboard-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:12px}.crm-onboard-row.single[_ngcontent-%COMP%]{grid-template-columns:1fr}.crm-onboard-row[_ngcontent-%COMP%] .crm-onboard-hint[_ngcontent-%COMP%]{display:block;margin-top:5px;font-size:11px;color:#94a3b8}.crm-onboard-row[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{display:block;font-size:12px;font-weight:500;color:#475569;margin-bottom:4px}.crm-onboard-row[_ngcontent-%COMP%] input[_ngcontent-%COMP%], .crm-onboard-row[_ngcontent-%COMP%] select[_ngcontent-%COMP%], .crm-onboard-row[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{width:100%;border:1px solid #d1d5db;border-radius:6px;padding:7px 10px;font-size:13px;color:#111827;background:#fff;box-sizing:border-box}.crm-onboard-row[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:focus, .crm-onboard-row[_ngcontent-%COMP%] select[_ngcontent-%COMP%]:focus, .crm-onboard-row[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]:focus{outline:none;border-color:#6e3aed;box-shadow:0 0 0 3px #6e3aed26}.crm-onboard-row[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{min-height:80px;resize:vertical}.crm-onboard-row[_ngcontent-%COMP%] .crm-onboard-picker[_ngcontent-%COMP%]{display:block;width:100%;font-size:13px}.crm-onboard-row[_ngcontent-%COMP%] .crm-onboard-picker[_ngcontent-%COMP%] .ng-select-container{min-height:34px;border:1px solid #d1d5db;border-radius:6px;background:#fff;color:#111827;font-size:13px}.crm-onboard-row[_ngcontent-%COMP%] .crm-onboard-picker.ng-select-focused[_ngcontent-%COMP%] .ng-select-container{border-color:#6e3aed;box-shadow:0 0 0 3px #6e3aed26}.crm-onboard-row[_ngcontent-%COMP%] .crm-onboard-picker[_ngcontent-%COMP%] .ng-value-container{padding-left:10px}.crm-onboard-row[_ngcontent-%COMP%] .crm-onboard-picker[_ngcontent-%COMP%] .ng-placeholder{color:#9ca3af}.crm-onboard-row[_ngcontent-%COMP%] .crm-onboard-picker[_ngcontent-%COMP%] .ng-dropdown-panel{border:1px solid #e5e7eb;border-radius:6px;box-shadow:0 8px 20px #0f172a1f}.crm-onboard-row[_ngcontent-%COMP%] .crm-onboard-picker[_ngcontent-%COMP%] .ng-dropdown-panel .ng-dropdown-panel-items{max-height:180px}.crm-onboard-row[_ngcontent-%COMP%] .crm-onboard-picker[_ngcontent-%COMP%] .ng-dropdown-panel .ng-option{padding:5px 10px;font-size:13px;line-height:1.4;min-height:0}.crm-onboard-row[_ngcontent-%COMP%] .crm-onboard-picker[_ngcontent-%COMP%] .ng-dropdown-panel .ng-option-marked{background:#f5f3ff;color:#4c1d95}.crm-onboard-row[_ngcontent-%COMP%] .crm-onboard-picker[_ngcontent-%COMP%] .ng-dropdown-panel .ng-option-selected{background:#ede9fe;color:#4c1d95;font-weight:500}.req[_ngcontent-%COMP%]{color:#ef4444;margin-left:2px}.crm-onboard-help[_ngcontent-%COMP%]{font-size:12px;color:#6b7280;font-style:italic;margin-top:6px}.crm-onboard-footer[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:flex-end;
1gap:8px;padding:14px 20px;border-top:1px solid #e5e7eb;background:#fafbfc}.crm-onboard-footer[_ngcontent-%COMP%] .btn-ghost[_ngcontent-%COMP%]{border:0;background:transparent;color:#4b5563;padding:7px 14px;border-radius:6px;font-size:13px;cursor:pointer}.crm-onboard-footer[_ngcontent-%COMP%] .btn-ghost[_ngcontent-%COMP%]:hover{background:#f3f4f6;color:#111827}.crm-onboard-footer[_ngcontent-%COMP%] .btn-primary[_ngcontent-%COMP%]{border:0;background:#2563eb;color:#fff;padding:7px 16px;border-radius:6px;font-size:13px;font-weight:500;cursor:pointer}.crm-onboard-footer[_ngcontent-%COMP%] .btn-primary[_ngcontent-%COMP%]:hover{background:#1d4ed8}"]})}}return o})();var xe=(()=>{class o{constructor(){this.state$=new tt({open:!1,ctx:null,resolve:null}),this.dialog$=this.state$.asObservable()}open(e,n){return new Promise(t=>{this.state$.next({open:!0,ctx:{key:e,data:n},resolve:t})})}resolve(e){let n=this.state$.value;n.resolve&&n.resolve(e),this.state$.next({open:!1,ctx:null,resolve:null})}static{this.\u0275fac=function(n){return new(n||o)}}static{this.\u0275prov=Te({token:o,factory:o.\u0275fac,providedIn:"root"})}}return o})();var wo=["attachmentInput"],O=()=>({standalone:!0});function To(o,m){if(o&1&&(i(0,"div",32),a(1),r()),o&2){let e=d(3);l(),g(e.attemptedDateError)}}function ko(o,m){o&1&&Ue(0)}function Eo(o,m){if(o&1){let e=w();P(0),i(1,"div",16)(2,"div")(3,"label")(4,"span",17),a(5,"Attempted Date"),r(),i(6,"span",18),a(7,"*"),r()(),i(8,"input",19),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.attemptedDate,t)||(s.form.attemptedDate=t),u(t)}),r(),f(9,To,2,1,"div",20),r(),i(10,"div")(11,"label")(12,"span",17),a(13,"Contact Mode"),r(),i(14,"span",18),a(15,"*"),r()(),i(16,"select",21),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.contactMode,t)||(s.form.contactMode=t),u(t)}),i(17,"option",22),a(18,"Select Contact Mode"),r(),i(19,"option",23),a(20,"Phone"),r(),i(21,"option",24),a(22,"Email"),r(),i(23,"option",25),a(24,"In-Person Meeting"),r(),i(25,"option",26),a(26,"Video Call"),r(),i(27,"option",27),a(28,"LinkedIn"),r(),i(29,"option",28),a(30,"Other"),r()()()(),f(31,ko,1,0,"ng-container",29),i(32,"div",30)(33,"div")(34,"label",17),a(35,"Note"),r(),i(36,"textarea",31),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.note,t)||(s.form.note=t),u(t)}),r()()(),F()}if(o&2){let e=d(2),n=le(2);l(8),x("ngModel",e.form.attemptedDate),c("max",e.today)("ngModelOptions",C(9,O)),l(),c("ngIf",e.attemptedDateError),l(7),x("ngModel",e.form.contactMode),c("ngModelOptions",C(10,O)),l(15),c("ngTemplateOutlet",n),l(5),x("ngModel",e.form.note),c("ngModelOptions",C(11,O))}}function Mo(o,m){o&1&&Ue(0)}function Io(o,m){o&1&&Ue(0)}function Oo(o,m){if(o&1){let e=w();P(0),f(1,Mo,1,0,"ng-container",29),i(2,"div",33),a(3,"Logistic Timeline"),r(),i(4,"div",16)(5,"div")(6,"label",17),a(7,"Delivery Location"),r(),i(8,"input",34),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.deliveryLocation,t)||(s.form.deliveryLocation=t),u(t)}),r()(),i(9,"div")(10,"label",17),a(11,"Delivery Timeline"),r(),i(12,"input",35),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.deliveryTimeline,t)||(s.form.deliveryTimeline=t),u(t)}),r()()(),i(13,"div",30)(14,"div")(15,"label",17),a(16,"Budget"),r(),i(17,"select",36),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.budget,t)||(s.form.budget=t),u(t)}),i(18,"option"),a(19,"< \u20B950K"),r(),i(20,"option"),a(21,"\u20B950K \u2013 \u20B91L"),r(),i(22,"option"),a(23,"\u20B91L \u2013 \u20B95L"),r(),i(24,"option"),a(25,"\u20B95L \u2013 \u20B910L"),r(),i(26,"option"),a(27,"> \u20B910L"),r()()()(),f(28,Io,1,0,"ng-container",29),F()}if(o&2){let e=d(2),n=le(2),t=le(4);l(),c("ngTemplateOutlet",t),l(7),x("ngModel",e.form.deliveryLocation),c("ngModelOptions",C(8,O)),l(4),x("ngModel",e.form.deliveryTimeline),c("ngModelOptions",C(9,O)),l(5),x("ngModel",e.form.budget),c("ngModelOptions",C(10,O)),l(11),c("ngTemplateOutlet",n)}}function Po(o,m){o&1&&Ue(0)}function Fo(o,m){if(o&1){let e=w();i(0,"div",62)(1,"span",63),a(2),r(),i(3,"button",64),h("click",function(){let t=p(e).index,s=d(4);return u(s.removeAttachment(t))}),a(4,"\u2715"),r()()}if(o&2){let e=m.$implicit;l(2),g(e.name)}
1}function Ao(o,m){if(o&1&&(i(0,"div",60),f(1,Fo,5,1,"div",61),r()),o&2){let e=d(3);l(),c("ngForOf",e.attachmentFiles)}}function Do(o,m){if(o&1){let e=w();P(0),i(1,"div",16)(2,"div")(3,"label")(4,"span",17),a(5,"Deal Name"),r(),i(6,"span",18),a(7,"*"),r()(),i(8,"input",37),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.dealName,t)||(s.form.dealName=t),u(t)}),r()(),i(9,"div")(10,"label")(11,"span",17),a(12,"Delivery Location"),r(),i(13,"span",18),a(14,"*"),r()(),i(15,"input",38),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.deliveryLocation,t)||(s.form.deliveryLocation=t),u(t)}),r()()(),i(16,"div",16)(17,"div")(18,"label",17),a(19,"Expected Close Date"),r(),i(20,"input",39),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.expectedCloseDate,t)||(s.form.expectedCloseDate=t),u(t)}),r()(),i(21,"div")(22,"label",17),a(23,"Budget"),r(),i(24,"select",36),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.budget,t)||(s.form.budget=t),u(t)}),i(25,"option",22),a(26,"Select Budget"),r(),i(27,"option",40),a(28,"0 to 10 Lakhs"),r(),i(29,"option",41),a(30,"11 to 20 Lakhs"),r(),i(31,"option",42),a(32,"21 to 50 Lakhs"),r(),i(33,"option",43),a(34,"51 to 100 Lakhs"),r(),i(35,"option",44),a(36,"101 to 500 Lakhs"),r()()()(),i(37,"div",30)(38,"div")(39,"label")(40,"span",17),a(41,"Priority"),r(),i(42,"span",18),a(43,"*"),r()(),i(44,"select",45),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.priority,t)||(s.form.priority=t),u(t)}),i(45,"option",22),a(46,"Select Priority"),r(),i(47,"option",46),a(48,"Low"),r(),i(49,"option",47),a(50,"Medium"),r(),i(51,"option",48),a(52,"High"),r()()()(),f(53,Po,1,0,"ng-container",29),i(54,"div",30)(55,"div")(56,"label",17),a(57,"Attachments"),r(),i(58,"div",49),h("click",function(){p(e);let t=le(60);return u(t.click())}),i(59,"input",50,2),h("change",function(t){p(e);let s=d(2);return u(s.onAttachmentsSelected(t))}),r(),i(61,"div",51),b(62,"i",52),r(),i(63,"div",53),a(64,"Click to upload Attachments"),r()(),f(65,Ao,2,1,"div",54),r()(),i(66,"div",30)(67,"div")(68,"label",17),a(69,"Note"),r(),i(70,"textarea",55),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.note,t)||(s.form.note=t),u(t)}),r()()(),i(71,"div",56)(72,"div",57),a(73,"Deal Preview"),r(),i(74,"div",58)(75,"span",17),a(76,"Deal Name"),r(),i(77,"span"),a(78),r()(),i(79,"div",58)(80,"span",17),a(81,"Stage"),r(),i(82,"span",17),a(83,"New"),r()(),i(84,"div",58)(85,"span",17),a(86,"Owner"),r(),i(87,"span",17),a(88,"current user"),r()(),i(89,"div",59)(90,"span",17),a(91,"Estimated total: "),r(),i(92,"span"),a(93),Ke(94,"number"),r()()(),F()}if(o&2){let e=d(2),n=le(4);l(8),x("ngModel",e.form.dealName),c("ngModelOptions",C(18,O)),l(7),x("ngModel",e.form.deliveryLocation),c("ngModelOptions",C(19,O)),l(5),x("ngModel",e.form.expectedCloseDate),c("ngModelOptions",C(20,O)),l(4),x("ngModel",e.form.budget),c("ngModelOptions",C(21,O)),l(20),x("ngModel",e.form.priority),c("ngModelOptions",C(22,O)),l(9),c("ngTemplateOutlet",n),l(12),c("ngIf",e.attachmentFiles.length),l(5),x("ngModel",e.form.note),c("ngModelOptions",C(23,O)),l(8),g(e.previewDealName),l(15),A("\u20B9",Vt(94,16,e.previewTotal),"")}}function Vo(o,m){if(o&1){let e=w();P(0),i(1,"div",30)(2,"div")(3,"label")(4,"span",17),a(5,"Reason for Disqualification"),r(),i(6,"span",18),a(7,"*"),r()(),i(8,"select",65),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.reason,t)||(s.form.reason=t),u(t)}),i(9,"option",22),a(10,"Select Reason"),r(),i(11,"option",66),a(12,"Budget Constraints"),r(),i(13,"option",67),a(14,"Timeline Mismatch"),r(),i(15,"option",68),a(16,"Requirements Not Met"),r(),i(17,"option",69),a(18,"No Decision-Making Authority"),r(),i(19,"option",70),a(20,"No Genuine Need Identified"),r(),i(21,"option",71),a(22,"Chose Competitor"),r(),i(23,"option",28),a(24,"Other"),r()()()(),i(25,"div",30)(26,"div")(27,"label",17),a(28,"Note"),r(),i(29,"textarea",72),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.note,t)||(s.form.note=t),u(t)}),r()()(),F()}if(o&2){let e=d(2);l(8),x("ngModel",e.form.reason),c("ngModelOptions",C(4,O)),l(21),x("ngModel",e.form.note),c("ngModelOptions",C(5,O))}}function Lo(o,m){if(o&1&&(i(0,"div",32),a(1),r()),o&2){let e=d(4);l(),g(e.followUpDateError)}}function No(o,m){if(o&1){let e=w();i(0,"div",78)(1,"input",79),v("ngModelChange",function(t){p(e);let s=d(3);return y(s.form.followDate,t)||(s.form.followDate=t),u(t)}),r(),f(2,Lo,2,1,"div",20),r()}if(o&2){let e=d(3);l(),x("ngModel",e.form.followDate),c("min",e.today)("ngModelOptions",C(4,O)),l(),c("ngIf",e.followUpDateError)}}function Bo(o,m){if(o&1){let e=w();P(0),i(1,"div",30)(2,"div")(3,"label")(4,"span",17),a(5,"Lead Lost Reason"),r(),i(6,"span",18),a(7,"*"),r()(),i(8,"select",65),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.reason,t)||(s.form.reason=t),u(t)}),i(9,"option",22),a(10,"Select Reason"),r(),i(11,"option",66),a(12,"Budget Constraints"),r(),i(13,"option",71),a(14,"Chose Competitor"),r(),i(15,"option",67),a(16,"Timeline Mismatch"),r(),i(17,"option",73),a(18,"No Response from Lead"),r(),i(19,"option",74),a(20,"Not Interested"),r(),i(21,"option",75),a(22,"Requirements Not Met"),r(),i(23,"option",28),a(24,"Other"),r()()()(),i(25,"div",30)(26,"div")(27,"label")(28,"input",76),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.followLater,t)||(s.form.followLater=t),u(t)}),r(),i(29,"span",17),a(30,"Follow-up Later?"),r()(),f(31,No,3,5,"div",77),r()(),F()}if(o&2){let e=d(2);l(8),x("ngModel",e.form.reason),c("ngModelOptions",C(5,O)),l(20),x("ngModel",e.form.followLater),c("ngModelOptions",C(6,O)),l(3),c("ngIf",e.form.followLater)}}function Wo(o,m){if(o&1&&(i(0,"div",32),a(1),r()),o&2){let e=d(3);l(),A(" ",e.customerResponseError,"")}}function Ro(o,m){if(o&1&&(i(0,"div",32),a(1),r()),o&2){let e=d(3);l(),A(" ",e.followupDateError,"")}}function qo(o,m){if(o&1){let e=w();P(0),i(1,"div",30)(2,"div")(3,"label")(4,"span",17),a(5,"Customer Response"),r(),i(6,"span",18),a(7,"*"),r()(),i(8,"input",80),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.customerResponse,t)||(s.form.customerResponse=t),u(t)}),r(),f(9,Wo,2,1,"div",20),r()(),i(10,"div",30)(11,"div")(12,"label",17),a(13,"Objections Raised"),r(),i(14,"input",81),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.objections,t)||(s.form.objections=t),u(t)}),r()()(),i(15,"div",30)(16,"div")(17,"label")(18,"span",17),a(19,"Next Follow-up Date"),r(),i(20,"span",18),a(21,"*"),r()(),i(22,"input",82),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.nextFollowupDate,t)||(s.form.nextFollowupDate=t),u(t)}),r(),f(23,Ro,2,1,"div",20),r()(),F()}if(o&2){let e=d(2);l(8),x("ngModel",e.form.customerResponse),c("ngModelOptions",C(9,O)),l(),c("ngIf",e.followupSubmitted&&e.customerResponseError),l(5),x("ngModel",e.form.objections),c("ngModelOptions",C(10,O)),l(8),x("ngModel",e.form.nextFollowupDate),
1c("min",e.today)("ngModelOptions",C(11,O)),l(),c("ngIf",e.followupSubmitted&&e.followupDateError)}}function zo(o,m){if(o&1&&(i(0,"div",32),a(1),r()),o&2){let e=d(4);l(),g(e.followUpDateError)}}function jo(o,m){if(o&1){let e=w();i(0,"div",78)(1,"input",79),v("ngModelChange",function(t){p(e);let s=d(3);return y(s.form.followDate,t)||(s.form.followDate=t),u(t)}),r(),f(2,zo,2,1,"div",20),r()}if(o&2){let e=d(3);l(),x("ngModel",e.form.followDate),c("min",e.today)("ngModelOptions",C(4,O)),l(),c("ngIf",e.followUpDateError)}}function Uo(o,m){if(o&1){let e=w();P(0),i(1,"div",30)(2,"div")(3,"label")(4,"span",17),a(5,"Opportunity Lost Reason"),r(),i(6,"span",18),a(7,"*"),r()(),i(8,"select",65),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.reason,t)||(s.form.reason=t),u(t)}),i(9,"option",22),a(10,"Select Reason"),r(),i(11,"option",66),a(12,"Budget Constraints"),r(),i(13,"option",71),a(14,"Chose Competitor"),r(),i(15,"option",67),a(16,"Timeline Mismatch"),r(),i(17,"option",73),a(18,"No Response from Customer"),r(),i(19,"option",68),a(20,"Requirements Not Met"),r(),i(21,"option",83),a(22,"Pricing Too High"),r(),i(23,"option",28),a(24,"Other"),r()()()(),i(25,"div",30)(26,"div")(27,"label")(28,"input",76),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.followLater,t)||(s.form.followLater=t),u(t)}),r(),i(29,"span",17),a(30,"Follow-up Later?"),r()(),f(31,jo,3,5,"div",77),r()(),F()}if(o&2){let e=d(2);l(8),x("ngModel",e.form.reason),c("ngModelOptions",C(5,O)),l(20),x("ngModel",e.form.followLater),c("ngModelOptions",C(6,O)),l(3),c("ngIf",e.form.followLater)}}function Ho(o,m){if(o&1){let e=w();P(0),i(1,"div",30)(2,"div")(3,"label")(4,"span",17),a(5,"Reason for Disqualification"),r(),i(6,"span",18),a(7,"*"),r()(),i(8,"select",65),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.reason,t)||(s.form.reason=t),u(t)}),i(9,"option",22),a(10,"Select Reason"),r(),i(11,"option",66),a(12,"Insufficient Budget"),r(),i(13,"option",69),a(14,"No Decision-Making Authority"),r(),i(15,"option",84),a(16,"Not a Good Fit"),r(),i(17,"option",85),a(18,"Unreachable / No Response"),r(),i(19,"option",71),a(20,"Already Committed to Competitor"),r(),i(21,"option",74),a(22,"Not Interested"),r(),i(23,"option",68),a(24,"Requirements Not Met"),r(),i(25,"option",28),a(26,"Other"),r()()()(),i(27,"div",30)(28,"div")(29,"label",17),a(30,"Note"),r(),i(31,"textarea",72),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.note,t)||(s.form.note=t),u(t)}),r()()(),F()}if(o&2){let e=d(2);l(8),x("ngModel",e.form.reason),c("ngModelOptions",C(4,O)),l(23),x("ngModel",e.form.note),c("ngModelOptions",C(5,O))}}function Ko(o,m){if(o&1){let e=w();P(0),i(1,"div",30)(2,"div")(3,"label")(4,"span",17),a(5,"Reason"),r(),i(6,"span",18),a(7,"*"),r()(),i(8,"select",65),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.reason,t)||(s.form.reason=t),u(t)}),i(9,"option",86),a(10,"Select reason\u2026"),r(),i(11,"option",17),a(12,"Re-evaluation needed"),r(),i(13,"option",17),a(14,"Contract paused"),r(),i(15,"option",17),a(16,"Renewal at risk"),r()()()(),i(17,"div",30)(18,"div")(19,"label")(20,"span",17),a(21,"Notes"),r(),i(22,"span",18),a(23,"*"),r()(),i(24,"textarea",87),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.notes,t)||(s.form.notes=t),u(t)}),r()()(),F()}if(o&2){let e=d(2);l(8),x("ngModel",e.form.reason),c("ngModelOptions",C(5,O)),l(),c("ngValue",null),l(15),x("ngModel",e.form.notes),c("ngModelOptions",C(6,O))}}function Qo(o,m){if(o&1){let e=w();P(0),i(1,"div",30)(2,"div")(3,"label")(4,"span",17),a(5,"Inactivity Reason"),r(),i(6,"span",18),a(7,"*"),r()(),i(8,"select",65),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.reason,t)||(s.form.reason=t),u(t)}),i(9,"option",86),a(10,"Select reason\u2026"),r(),i(11,"option",17),a(12,"No engagement 90+ days"),r(),i(13,"option",17),a(14,"Champion left"),r(),i(15,"option",17),a(16,"Budget frozen"),r(),i(17,"option",17),a(18,"Project on hold"),r()()()(),i(19,"div",30)(20,"div")(21,"label",17),a(22,"Notes"),r(),i(23,"textarea",87),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.notes,t)||(s.form.notes=t),u(t)}),r()()(),i(24,"div",30)(25,"div")(26,"label")(27,"input",88),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.recontract,t)||(s.form.recontract=t),u(t)}),r(),i(28,"span",17),a(29,"Recontract in Future?"),r()()()(),F()}if(o&2){let e=d(2);l(8),x("ngModel",e.form.reason),c("ngModelOptions",C(7,O)),l(),c("ngValue",null),l(14),x("ngModel",e.form.notes),c("ngModelOptions",C(8,O)),l(4),x("ngModel",e.form.recontract),c("ngModelOptions",C(9,O))}}function Go(o,m){if(o&1){let e=w();P(0),i(1,"div",30)(2,"div")(3,"label")(4,"span",17),a(5,"Lost Reason"),r(),i(6,"span",18),a(7,"*"),r()(),i(8,"select",65),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.reason,t)||(s.form.reason=t),u(t)}),i(9,"option",86),a(10,"Select reason\u2026"),r(),i(11,"option",17),a(12,"Switched to competitor"),r(),i(13,"option",17),a(14,"Cost cutting"),r(),i(15,"option",17),a(16,"Acquired / merged"),r(),i(17,"option",17),a(18,"Product mismatch"),r()()()(),i(19,"div",30)(20,"div")(21,"label",17),a(22,"Notes"),r(),i(23,"textarea",87),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.notes,t)||(s.form.notes=t),u(t)}),r()()(),i(24,"div",30)(25,"div")(26,"label")(27,"input",88),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.recontract,t)||(s.form.recontract=t),u(t)}),r(),i(28,"span",17),a(29,"Recontract in Future?"),r()()()(),F()}if(o&2){let e=d(2);l(8),x("ngModel",e.form.reason),c("ngModelOptions",C(7,O)),l(),c("ngValue",null),l(14),x("ngModel",e.form.notes),c("ngModelOptions",C(8,O)),l(4),x("ngModel",e.form.recontract),c("ngModelOptions",C(9,O))}}function Jo(o,m){if(o&1&&(i(0,"option",92),a(1),r()),o&2){let e=m.$implicit;
1c("ngValue",e.id),l(),g(e.name)}}function Yo(o,m){if(o&1){let e=w();P(0),i(1,"div",16)(2,"div")(3,"label")(4,"span",17),a(5,"Reason for Activation"),r(),i(6,"span",18),a(7,"*"),r()(),i(8,"select",65),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.reason,t)||(s.form.reason=t),u(t)}),i(9,"option",86),a(10,"Select reason\u2026"),r(),i(11,"option",17),a(12,"New contract signed"),r(),i(13,"option",17),a(14,"Renewal completed"),r(),i(15,"option",17),a(16,"Expansion booked"),r()()(),i(17,"div")(18,"label",17),a(19,"Assigned"),r(),i(20,"select",89),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.assigned,t)||(s.form.assigned=t),u(t)}),i(21,"option",90),a(22,"Select assignee\u2026"),r(),f(23,Jo,2,2,"option",91),r()()(),i(24,"div",30)(25,"div")(26,"label")(27,"span",17),a(28,"Notes"),r(),i(29,"span",18),a(30,"*"),r()(),i(31,"textarea",87),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.notes,t)||(s.form.notes=t),u(t)}),r()()(),F()}if(o&2){let e=d(2);l(8),x("ngModel",e.form.reason),c("ngModelOptions",C(10,O)),l(),c("ngValue",null),l(11),x("ngModel",e.form.assigned),c("ngModelOptions",C(11,O)),l(),c("ngValue",null),l(2),c("ngForOf",e.activationAssignees)("ngForTrackBy",e.trackByIndex),l(8),x("ngModel",e.form.notes),c("ngModelOptions",C(12,O))}}function $o(o,m){if(o&1){let e=w();P(0),i(1,"div",33),a(2,"AI detected a likely duplicate"),r(),i(3,"div",16)(4,"div")(5,"label")(6,"span",17),a(7,"Keep as primary"),r(),i(8,"span",18),a(9,"*"),r()(),i(10,"select",93),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.primary,t)||(s.form.primary=t),u(t)}),i(11,"option"),a(12,"Tata Motors Ltd (this record)"),r(),i(13,"option"),a(14,"Tata Motors Limited (duplicate)"),r()()(),i(15,"div")(16,"label",17),a(17,"Match basis"),r(),i(18,"input",94),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.matchBasis,t)||(s.form.matchBasis=t),u(t)}),r()()(),i(19,"div",30)(20,"div")(21,"label")(22,"input",95),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.mergeChildren,t)||(s.form.mergeChildren=t),u(t)}),r(),i(23,"span",17),a(24,"Merge open opportunities, contacts, tickets, and timeline into the primary"),r()()()(),i(25,"div",30)(26,"div")(27,"label",17),a(28,"Reviewer notes"),r(),i(29,"textarea",87),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.notes,t)||(s.form.notes=t),u(t)}),r()()(),F()}if(o&2){let e=d(2);l(10),x("ngModel",e.form.primary),c("ngModelOptions",C(8,O)),l(8),x("ngModel",e.form.matchBasis),c("ngModelOptions",C(9,O)),l(4),x("ngModel",e.form.mergeChildren),c("ngModelOptions",C(10,O)),l(7),x("ngModel",e.form.notes),c("ngModelOptions",C(11,O))}}function Zo(o,m){if(o&1){let e=w();i(0,"div",62)(1,"span",63),a(2),r(),i(3,"button",64),h("click",function(){let t=p(e).index,s=d(4);return u(s.removeAttachment(t))}),a(4,"\u2715"),r()()}if(o&2){let e=m.$implicit;l(2),g(e.name),l(),pe("aria-label","Remove "+e.name)}}function Xo(o,m){if(o&1&&(i(0,"div",60),f(1,Zo,5,2,"div",61),r()),o&2){let e=d(3);l(),c("ngForOf",e.attachmentFiles)}}function ea(o,m){if(o&1){let e=w();P(0),i(1,"div",30)(2,"div")(3,"label")(4,"span",17),a(5,"Note Content"),r(),i(6,"span",18),a(7,"*"),r()(),i(8,"textarea",72),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.note,t)||(s.form.note=t),u(t)}),r()()(),i(9,"div",30)(10,"div")(11,"label",17),a(12,"Add Attachment"),r(),i(13,"input",96,3),h("change",function(t){p(e);let s=d(2);return u(s.onAttachmentsSelected(t))}),r(),f(15,Xo,2,1,"div",54),r()(),F()}if(o&2){let e=d(2);l(8),x("ngModel",e.form.note),c("ngModelOptions",C(3,O)),l(7),c("ngIf",e.attachmentFiles==null?null:e.attachmentFiles.length)}}function ta(o,m){if(o&1&&(i(0,"div",32),a(1),r()),o&2){let e=d(3);l(),g(e.todoStartDateError)}}function na(o,m){if(o&1&&(i(0,"div",32),a(1),r()),o&2){let e=d(3);l(),g(e.todoEndDateError)}}function ia(o,m){if(o&1){let e=w();P(0),i(1,"div",16)(2,"div")(3,"label")(4,"span",17),a(5,"Type"),r(),i(6,"span",18),a(7,"*"),r()(),i(8,"select",97),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.type,t)||(s.form.type=t),u(t)}),i(9,"option",86),a(10,"Select type\u2026"),r(),i(11,"option",17),a(12,"Call"),r(),i(13,"option",17),a(14,"Email"),r(),i(15,"option",17),a(16,"Meeting"),r(),i(17,"option",17),a(18,"Task"),r()()(),i(19,"div")(20,"label")(21,"span",17),a(22,"Follow"),r(),i(23,"span",18),a(24,"*"),r()(),i(25,"select",98),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.follow,t)||(s.form.follow=t),u(t)}),i(26,"option",86),a(27,"Select related to\u2026"),r(),i(28,"option",17),a(29,"Lead"),r(),i(30,"option",17),a(31,"Opportunity"),r(),i(32,"option",17),a(33,"Account"),r()()()(),i(34,"div",16)(35,"div")(36,"label")(37,"span",17),a(38,"Start Date"),r(),i(39,"span",18),a(40,"*"),r()(),i(41,"input",99),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.startDate,t)||(s.form.startDate=t),u(t)}),r(),f(42,ta,2,1,"div",20),r(),i(43,"div")(44,"label")(45,"span",17),a(46,"End Date"),r(),i(47,"span",18),a(48,"*"),r()(),i(49,"input",100),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.endDate,t)||(s.form.endDate=t),u(t)}),r(),f(50,na,2,1,"div",20),r()(),i(51,"div",30)(52,"div")(53,"label",17),a(54,"Note"),r(),i(55,"textarea",101),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.note,t)||(s.form.note=t),u(t)}),r()()(),F()}if(o&2){let e=d(2);l(8),x("ngModel",e.form.type),c("ngModelOptions",C(16,O)),l(),c("ngValue",null),l(16),x("ngModel",e.form.follow),c("ngModelOptions",C(17,O)),l(),c("ngValue",null),l(15),c("min",e.today),x("ngModel",e.form.startDate),c("ngModelOptions",C(18,O)),l(),c("ngIf",e.todoStartDateError),l(7),c("min",e.form.startDate||e.today),x("ngModel",e.form.endDate),c("ngModelOptions",C(19,O)),l(),c("ngIf",e.todoEndDateError),l(5),x("ngModel",e.form.note),c("ngModelOptions",C(20,O))}}function ra(o,m){if(o&1){let e=w();P(0),i(1,"div",30)(2,"div")(3,"label")(4,"span",17),a(5,"Reminder"),r(),i(6,"span",18),a(7,"*"),r()(),i(8,"textarea",102),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.reminder,t)||(s.form.reminder=t),u(t)}),r()()(),i(9,"div",30)(10,"div")(11,"label")(12,"span",17),a(13,"Date and Time"),r(),i(14,"span",18),a(15,"*"),r()(),i(16,"input",103),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.datetime,t)||(s.form.datetime=t),u(t)}),r()()(),F()}if(o&2){let e=d(2);l(8),x("ngModel",e.form.reminder),c("ngModelOptions",C(4,O)),l(8),x("ngModel",e.form.datetime),c("ngModelOptions",C(5,O))}}function oa(o,m){if(o&1){let e=w();P(0),i(1,"div",16)(2,"div")(3,"label")(4,"span",17),a(5,"Signer Name"),r(),i(6,"span",18),a(7,"*"),r()(),i(8,"input",104),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.signerName,t)||(s.form.signerName=t),u(t)}),r()(),i(9,"div")(10,"label")(11,"span",17),a(12,"Signer Email"),r(),i(13,"span",18),a(14,"*"),r()(),i(15,"input",105),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.signerEmail,t)||(s.form.signerEmail=t),u(t)}),r()()(),i(16,"div",16)(17,"div")(18,"label",17),a(19,"Signing Order"),r(),i(20,"select",106),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.signingOrder,t)||(s.form.signingOrder=t),u(t)}),i(21,"option",17),a(22,"Single signer"),r(),i(23,"option",17),a(24,"Sequential (multiple)"),r()()(),i(25,"div")(26,"label",17),a(27,"Expires In"),r(),i(28,"select",107),v("ngModelChange",function(t){p(e);let s=d(2);
1return y(s.form.expiresIn,t)||(s.form.expiresIn=t),u(t)}),i(29,"option",17),a(30,"7 days"),r(),i(31,"option",17),a(32,"14 days"),r(),i(33,"option",17),a(34,"30 days"),r()()()(),i(35,"div",30)(36,"div")(37,"label",17),a(38,"Message to signer"),r(),i(39,"textarea",108),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.message,t)||(s.form.message=t),u(t)}),r()()(),i(40,"div",109),a(41,"Customer signs without creating an account. The signed PDF is auto-stored in Vipani Drive under the account folder."),r(),F()}if(o&2){let e=d(2);l(8),x("ngModel",e.form.signerName),c("ngModelOptions",C(10,O)),l(7),x("ngModel",e.form.signerEmail),c("ngModelOptions",C(11,O)),l(5),x("ngModel",e.form.signingOrder),c("ngModelOptions",C(12,O)),l(8),x("ngModel",e.form.expiresIn),c("ngModelOptions",C(13,O)),l(11),x("ngModel",e.form.message),c("ngModelOptions",C(14,O))}}function aa(o,m){if(o&1){let e=w();P(0),i(1,"div",33),a(2,"This will trigger"),r(),i(3,"ul",110)(4,"li",111),a(5,"Draft a "),i(6,"strong",17),a(7,"Customer Contract"),r(),a(8," in Contract Mgmt"),r(),i(9,"li",111),a(10,"Generate an "),i(11,"strong",17),a(12,"AR Invoice"),r(),a(13," in Finance from the signed quote"),r(),i(14,"li",17),a(15,"Store the signed PDF in Vipani Drive under the account folder"),r()(),i(16,"div",30)(17,"div")(18,"label",17),a(19,"PO Reference (optional)"),r(),i(20,"input",112),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.poRef,t)||(s.form.poRef=t),u(t)}),r()()(),i(21,"div",30)(22,"div")(23,"label",17),a(24,"Notes"),r(),i(25,"textarea",113),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.notes,t)||(s.form.notes=t),u(t)}),r()()(),F()}if(o&2){let e=d(2);l(20),x("ngModel",e.form.poRef),c("ngModelOptions",C(4,O)),l(5),x("ngModel",e.form.notes),c("ngModelOptions",C(5,O))}}function sa(o,m){if(o&1){let e=w();P(0),i(1,"div",114)(2,"strong",17),a(3,"AI flagged:"),r(),i(4,"span",17),a(5,"Discount on this line exceeds the auto-approval threshold (15%). Manager approval required."),r()(),i(6,"div",16)(7,"div")(8,"label")(9,"span",17),a(10,"Discount %"),r(),i(11,"span",18),a(12,"*"),r()(),i(13,"input",115),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.discountPct,t)||(s.form.discountPct=t),u(t)}),r()(),i(14,"div")(15,"label")(16,"span",17),a(17,"Approver"),r(),i(18,"span",18),a(19,"*"),r()(),i(20,"select",116),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.approver,t)||(s.form.approver=t),u(t)}),i(21,"option"),a(22,"Sales Manager (Priya Menon)"),r(),i(23,"option",17),a(24,"VP Sales"),r()()()(),i(25,"div",30)(26,"div")(27,"label")(28,"span",17),a(29,"Justification"),r(),i(30,"span",18),a(31,"*"),r()(),i(32,"textarea",117),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.justification,t)||(s.form.justification=t),u(t)}),r()()(),F()}if(o&2){let e=d(2);l(13),x("ngModel",e.form.discountPct),c("ngModelOptions",C(6,O)),l(7),x("ngModel",e.form.approver),c("ngModelOptions",C(7,O)),l(12),x("ngModel",e.form.justification),c("ngModelOptions",C(8,O))}}function la(o,m){if(o&1&&(i(0,"li"),a(1),r()),o&2){let e=m.$implicit;l(),g(e.name)}}function ca(o,m){if(o&1&&(i(0,"div",125)(1,"small",126),a(2,"Selected attachments:"),r(),i(3,"ul",127),f(4,la,2,1,"li",128),r()()),o&2){let e=d(3);l(4),c("ngForOf",e.attachmentFiles)("ngForTrackBy",e.trackByIndex)}}function da(o,m){if(o&1){let e=w();P(0),i(1,"div",16)(2,"div")(3,"label")(4,"span",17),a(5,"Customer"),r(),i(6,"span",18),a(7,"*"),r()(),i(8,"ng-select",118),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.customerId,t)||(s.form.customerId=t),u(t)}),r()(),i(9,"div")(10,"label")(11,"span",17),a(12,"Priority"),r(),i(13,"span",18),a(14,"*"),r()(),i(15,"select",45),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.priority,t)||(s.form.priority=t),u(t)}),i(16,"option",119),a(17,"Select Priority\u2026"),r(),i(18,"option",17),a(19,"High"),r(),i(20,"option",17),a(21,"Medium"),r(),i(22,"option",17),a(23,"Low"),r()()()(),i(24,"div",16)(25,"div")(26,"label")(27,"span",17),a(28,"Category"),r(),i(29,"span",18),a(30,"*"),r()(),i(31,"select",120),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.category,t)||(s.form.category=t),u(t)}),i(32,"option",86),a(33,"Select category\u2026"),r(),i(34,"option",17),a(35,"Bug"),r(),i(36,"option",17),a(37,"Feature Request"),r(),i(38,"option",17),a(39,"Incident"),r(),i(40,"option",17),a(41,"Task"),r(),i(42,"option",17),a(43,"Other"),r()()(),i(44,"div")(45,"label",17),a(46,"Assign To"),r(),i(47,"ng-select",121),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.assignTo,t)||(s.form.assignTo=t),u(t)}),r()()(),i(48,"div",30)(49,"div")(50,"label")(51,"span",17),a(52,"Subject"),r(),i(53,"span",18),a(54,"*"),r()(),i(55,"input",122),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.subject,t)||(s.form.subject=t),u(t)}),r()()(),i(56,"div",30)(57,"div")(58,"label")(59,"span",17),a(60,"Description"),r(),i(61,"span",18),a(62,"*"),r()(),i(63,"textarea",123),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.description,t)||(s.form.description=t),u(t)}),r()()(),i(64,"div",30)(65,"div")(66,"label",17),a(67,"Attachments"),r(),i(68,"input",96,3),h("change",function(t){p(e);let s=d(2);return u(s.onAttachmentsSelected(t))}),r(),f(70,ca,5,2,"div",124),r()(),i(71,"div",109),a(72,"SLA timers start on creation per the customer's tier (Strategic 15min \xB7 Enterprise 30min \xB7 Mid-market 2hr \xB7 SMB 4hr)."),r(),F()}if(o&2){let e=d(2);l(8),c("items",e.customers),x("ngModel",e.form.customerId),c("ngModelOptions",C(20,O))("virtualScroll",!0)("clearable",!0),l(7),x("ngModel",e.form.priority),c("ngModelOptions",C(21,O)),l(16),x("ngModel",e.form.category),c("ngModelOptions",C(22,O)),l(),c("ngValue",null),l(15),c("items",e.assignees),x("ngModel",e.form.assignTo),c("ngModelOptions",C(23,O))("virtualScroll",!0)("clearable",!0),l(8),x("ngModel",e.form.subject),c("ngModelOptions",C(24,O)),l(8),x("ngModel",e.form.description),c("ngModelOptions",C(25,O)),l(7),c("ngIf",e.attachmentFiles==null?null:e.attachmentFiles.length)}}function ma(o,m){if(o&1&&(i(0,"option",92),a(1),r()),o&2){let e=m.$implicit;c("ngValue",e),l(),g(e)}}function pa(o,m){if(o&1){let e=w();P(0),i(1,"div",16)(2,"div")(3,"label")(4,"span",17),a(5,"Customer"),r()(),i(6,"select",129)(7,"option"),a(8),r()()(),i(9,"div")(10,"label")(11,"span",17),a(12,"Priority"),r()(),i(13,"select",130)(14,"option",48),a(15,"High"),r(),i(16,"option",47),a(17,"Medium"),r(),i(18,"option",46),a(19,"Low"),r()()()(),i(20,"div",16)(21,"div")(22,"label")(23,"span",17),a(24,"Category"),r()(),i(25,"select",131)(26,"option",132),a(27,"Bug"),r(),i(28,"option",133),a(29,"Feature Request"),r(),i(30,"option",134),a(31,"Incident"),r(),i(32,"option",135),a(33,"Task"),r(),i(34,"option",136),a(35,"Other"),r()()(),i(36,"div")(37,"label",17),a(38,"Assign To"),r(),i(39,"ng-select",137),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.assignTo,t)||(s.form.assignTo=t),u(t)}),r()()(),i(40,"div",30)(41,"div")(42,"label")(43,"span",17),a(44,"Subject"),r()(),b(45,"input",138),r()(),i(46,"div",30)(47,"div")(48,"label")(49,"span",17),a(50,"Description"),r()(),b(51,"textarea",139),r()(),i(52,"div",30)(53,"div")(54,"label")(55,"span",17),a(56,"Status"),r()(),i(57,"select",140),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.status,t)||(s.form.status=t),u(t)}),f(58,ma,2,2,"option",91),r()()(),i(59,"div",30)(60,"div")(61,"label",17),a(62,"Note"),r(),i(63,"textarea",141),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.note,t)||(s.form.note=t),u(t)}),r()()(),i(64,"div",109),a(65,"Subject, description, category and priority are fixed after creation. Update the assignee or status here \u2014 both are recorded on the ticket timeline."),r(),F()}if(o&2){let e=d(2);l(8),g(e.form.customerName),l(5),c("ngModel",e.form.priority)("ngModelOptions",C(20,O)),l(12),c("ngModel",e.form.category)("ngModelOptions",C(21,O)),l(14),c("items",e.assignees),x("ngModel",e.form.assignTo),c("ngModelOptions",C(22,O))("virtualScroll",!0)("clearable",!0),l(6),c("ngModel",e.form.subject)("ngModelOptions",C(23,O)),l(6),c("ngModel",e.form.description)("ngModelOptions",C(24,O)),l(6),x("ngModel",e.form.status),c("ngModelOptions",C(25,O)),l(),c("ngForOf",e.ticketStatusOptions)("ngForTrackBy",e.trackByIndex),l(5),x("ngModel",e.form.note),c("ngModelOptions",C(26,O))}}function ua(o,m){if(o&1){let e=w();P(0),i(1,"div",16)(2,"div")(3,"label")(4,"span",17),a(5,"Survey Type"),r(),i(6,"span",18),a(7,"*"),r()(),i(8,"select",142),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.surveyType,t)||(s.form.surveyType=t),u(t)}),i(9,"option",17),a(10,"CSAT (1\u20135)"),r(),i(11,"option",17),a(12,"NPS (0\u201310)"),r(),i(13,"option",17),a(14,"CES (effort score)"),r()()(),i(15,"div")(16,"label",17),a(17,"Trigger"),r(),i(18,"select",143),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.trigger,t)||(s.form.trigger=t),u(t)}),i(19,"option",17),a(20,"Send now"),r(),i(21,"option",17),a(22,"Auto on ticket close"),r()()()(),i(23,"div",30)(24,"div")(25,"label")(26,"span",17),a(27,"Recipient"),r(),i(28,"span",18),a(29,"*"),r()(),i(30,"input",144),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.recipient,t)||(s.form.recipient=t),u(t)}),r()()(),i(31,"div",30)(32,"div")(33,"label",17),a(34,"Message"),r(),i(35,"textarea",145),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.message,t)||(s.form.message=t),u(t)}),r()()(),i(36,"div",109),a(37,"Low CSAT / NPS responses alert the account manager automatically."),r(),F()}if(o&2){let e=d(2);l(8),x("ngModel",e.form.surveyType),c("ngModelOptions",C(8,O)),l(10),x("ngModel",e.form.trigger),c("ngModelOptions",C(9,O)),l(12),x("ngModel",e.form.recipient),c("ngModelOptions",C(10,O)),l(5),x("ngModel",e.form.message),c("ngModelOptions",C(11,O))}}function ga(o,m){if(o&1){let e=w();P(0),i(1,"div",16)(2,"div")(3,"label",17),a(4,"Assignee"),r(),i(5,"ng-select",146),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.assignee,t)||(s.form.assignee=t),u(t)}),r()(),i(6,"div")(7,"label",17),a(8,"Estimated effort"),r(),i(9,"select",147),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.effort,t)||(s.form.effort=t),u(t)}),i(10,"option",17),a(11,"< 30 min"),r(),i(12,"option",17),a(13,"30 min \u2013 2 hr"),r(),i(14,"option",17),a(15,"Half day"),r(),i(16,"option",17),a(17,"Multi-day"),r()()()(),i(18,"div",30)(19,"div")(20,"label",17),a(21,"Internal note (not visible to customer)"),r(),i(22,"textarea",148),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.internalNote,t)||(s.form.internalNote=t),u(t)}),r()()(),F()}if(o&2){let e=d(2);l(5),c("items",e.assignees),x("ngModel",e.form.assignee),c("ngModelOptions",C(9,O))("virtualScroll",!0)("clearable",!0),l(4),x("ngModel",e.form.effort),c("ngModelOptions",C(10,O)),l(13),x("ngModel",e.form.internalNote),c("ngModelOptions",C(11,O))}}function _a(o,m){if(o&1){let e=w();P(0),i(1,"div",16)(2,"div")(3,"label")(4,"span",17),a(5,"Reason"),r(),i(6,"span",18),a(7,"*"),r()(),i(8,"select",65),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.reason,t)||(s.form.reason=t),u(t)}),i(9,"option",17),a(10,"Awaiting more info"),r(),i(11,"option",17),a(12,"Awaiting approval"),r(),i(13,"option",17),a(14,"Awaiting access / credentials"),r(),i(15,"option",17),a(16,"Awaiting customer testing"),r(),i(17,"option",17),a(18,"Other"),r()()(),i(19,"div")(20,"label",17),a(21,"Follow-up in"),r(),i(22,"select",149),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.followUp,t)||(s.form.followUp=t),u(t)}),i(23,"option",17),a(24,"24 hours"),r(),i(25,"option",17),a(26,"3 business days"),r(),i(27,"option",17),a(28,"1 week"),r()()()(),i(29,"div",30)(30,"div")(31,"label")(32,"span",17),a(33,"Message to customer"),r(),i(34,"span",18),a(35,"*"),r()(),i(36,"textarea",150),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.message,t)||(s.form.message=t),u(t)}),r()()(),i(37,"div",30)(38,"div")(39,"label")(40,"input",151),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.pauseSla,t)||(s.form.pauseSla=t),u(t)}),r(),i(41,"span",17),a(42,"Pause SLA clock while waiting on customer"),r()()()(),i(43,"div",109),a(44,"The SLA clock pauses on customer-wait and resumes when the customer replies."),r(),F()}if(o&2){let e=d(2);l(8),x("ngModel",e.form.reason),c("ngModelOptions",C(8,O)),l(14),x("ngModel",e.form.followUp),c("ngModelOptions",C(9,O)),l(14),x("ngModel",e.form.message),c("ngModelOptions",C(10,O)),l(4),x("ngModel",e.form.pauseSla),c("ngModelOptions",C(11,O))}}function ha(o,m){if(o&1){let e=w();P(0),i(1,"div",16)(2,"div")(3,"label")(4,"span",17),a(5,"Resolution Category"),r(),i(6,"span",18),a(7,"*"),r()(),i(8,"select",120),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.category,t)||(s.form.category=t),u(t)}),i(9,"option",17),a(10,"Configuration fix"),r(),i(11,"option",17),a(12,"Bug fix shipped"),r(),i(13,"option",17),a(14,"How-to provided"),r(),i(15,"option",17),a(16,"Workaround"),r(),i(17,"option",17),a(18,"KB article shared"),r(),i(19,"option",17),a(20,"Cannot reproduce"),r()()(),i(21,"div")(22,"label",17),a(23,"Resolved by"),r(),i(24,"ng-select",152),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.resolvedBy,t)||(s.form.resolvedBy=t),u(t)}),r()()(),i(25,"div",30)(26,"div")(27,"label",17),a(28,"Root cause (optional, internal)"),r(),i(29,"textarea",153),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.rootCause,t)||(s.form.rootCause=t),u(t)}),r()()(),i(30,"div",30)(31,"div")(32,"label")(33,"span",17),a(34,"Resolution summary sent to customer"),r(),i(35,"span",18),a(36,"*"),r()(),i(37,"textarea",154),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.summary,t)||(s.form.summary=t),u(t)}),r()()(),i(38,"div",30)(39,"div")(40,"label",17),a(41,"Linked KB article (optional)"),r(),i(42,"input",155),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.linkedKb,t)||(s.form.linkedKb=t),u(t)}),r()()(),i(43,"div",30)(44,"div")(45,"label")(46,"input",156),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.autoCsat,t)||(s.form.autoCsat=t),u(t)}),r(),i(47,"span",17),a(48,"Auto-fire CSAT survey to the customer"),r()()()(),i(49,"div",109),a(50,"On submit, the resolution email goes out. If CSAT is enabled, the survey popup opens immediately for review."),r(),F()}if(o&2){let e=d(2);l(8),x("ngModel",e.form.category),c("ngModelOptions",C(15,O)),l(16),c("items",e.assignees),x("ngModel",e.form.resolvedBy),c("ngModelOptions",C(16,O))("virtualScroll",!0)("clearable",!0),l(5),x("ngModel",e.form.rootCause),c("ngModelOptions",C(17,O)),l(8),x("ngModel",e.form.summary),c("ngModelOptions",C(18,O)),l(5),x("ngModel",e.form.linkedKb),c("ngModelOptions",C(19,O)),l(4),x("ngModel",e.form.autoCsat),c("ngModelOptions",C(20,O))}}function fa(o,m){if(o&1){let e=w();P(0),i(1,"div",157),a(2,"Closing the ticket archives the conversation. The CSAT score (if returned) is attached to the customer's health score and the support-cost ledger."),r(),i(3,"div",30)(4,"div")(5,"label",17),a(6,"Final note (optional, internal)"),r(),i(7,"textarea",158),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.finalNote,t)||(s.form.finalNote=t),u(t)}),r()()(),F()}if(o&2){let e=d(2);l(7),x("ngModel",e.form.finalNote),c("ngModelOptions",C(2,O))}}function xa(o,m){if(o&1){let e=w();P(0),i(1,"div",16)(2,"div")(3,"label")(4,"span",17),a(5,"Reason for reopening"),r(),i(6,"span",18),a(7,"*"),r()(),i(8,"select",65),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.reason,t)||(s.form.reason=t),u(t)}),i(9,"option",17),a(10,"Customer reported issue again"),r(),i(11,"option",17),a(12,"Resolution did not work"),r(),i(13,"option",17),a(14,"New related issue"),r(),i(15,"option",17),a(16,"Internal QA failed"),r()()(),i(17,"div")(18,"label",17),a(19,"Reassign to"),r(),i(20,"select",159),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.reassign,t)||(s.form.reassign=t),u(t)}),i(21,"option"),a(22,"Arjun Verma (me)"),r(),i(23,"option",17),a(24,"Original L2 owner"),r(),i(25,"option",17),a(26,"Engineering team"),r()()()(),i(27,"div",30)(28,"div")(29,"label")(30,"span",17),a(31,"New context"),r(),i(32,"span",18),a(33,"*"),r()(),i(34,"textarea",160),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.newContext,t)||(s.form.newContext=t),u(t)}),r()()(),i(35,"div",109),a(36,"A fresh SLA clock starts
1from reopen-time per the customer's tier."),r(),F()}if(o&2){let e=d(2);l(8),x("ngModel",e.form.reason),c("ngModelOptions",C(6,O)),l(12),x("ngModel",e.form.reassign),c("ngModelOptions",C(7,O)),l(14),x("ngModel",e.form.newContext),c("ngModelOptions",C(8,O))}}function ya(o,m){if(o&1){let e=w();P(0),i(1,"div",30)(2,"div")(3,"label")(4,"span",17),a(5,"Referred Company"),r(),i(6,"span",18),a(7,"*"),r()(),i(8,"input",161),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.referredCompany,t)||(s.form.referredCompany=t),u(t)}),r()()(),i(9,"div",16)(10,"div")(11,"label",17),a(12,"Contact Name"),r(),i(13,"input",162),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.contactName,t)||(s.form.contactName=t),u(t)}),r()(),i(14,"div")(15,"label",17),a(16,"Status"),r(),i(17,"select",163),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.referralStatus,t)||(s.form.referralStatus=t),u(t)}),i(18,"option",17),a(19,"Active"),r(),i(20,"option",17),a(21,"In Discussion"),r(),i(22,"option",17),a(23,"Demo Scheduled"),r(),i(24,"option",17),a(25,"Proposal Sent"),r(),i(26,"option",17),a(27,"Qualified"),r(),i(28,"option",17),a(29,"Closed-Won"),r(),i(30,"option",17),a(31,"Closed-Lost"),r(),i(32,"option",17),a(33,"On Hold"),r()()()(),i(34,"div",30)(35,"div")(36,"label",17),a(37,"Pipeline Value"),r(),i(38,"div",164)(39,"span"),a(40,"\u20B9"),r(),i(41,"input",165),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.pipelineValue,t)||(s.form.pipelineValue=t),u(t)}),r()()()(),i(42,"div",30)(43,"div")(44,"label",17),a(45,"Notes"),r(),i(46,"textarea",87),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.notes,t)||(s.form.notes=t),u(t)}),r()()(),F()}if(o&2){let e=d(2);l(8),x("ngModel",e.form.referredCompany),c("ngModelOptions",C(10,O)),l(5),x("ngModel",e.form.contactName),c("ngModelOptions",C(11,O)),l(4),x("ngModel",e.form.referralStatus),c("ngModelOptions",C(12,O)),l(24),x("ngModel",e.form.pipelineValue),c("ngModelOptions",C(13,O)),l(5),x("ngModel",e.form.notes),c("ngModelOptions",C(14,O))}}function va(o,m){if(o&1&&(i(0,"option",92),a(1),r()),o&2){let e=m.$implicit;c("ngValue",e.value),l(),A(" ",e.label," ")}}function Ca(o,m){if(o&1){let e=w();P(0),i(1,"div",30)(2,"div")(3,"label")(4,"span",17),a(5,"Contact"),r(),i(6,"span",18),a(7,"*"),r()(),i(8,"ng-select",166),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.customerId,t)||(s.form.customerId=t),u(t)}),h("ngModelChange",function(){p(e);let t=d(2);return u(t.onPromoterContactPicked())}),r(),i(9,"div",109),a(10,"Pick the account contact who will vouch for us. Their account is filled in below."),r()()(),i(11,"div",16)(12,"div")(13,"label",17),a(14,"Account"),r(),b(15,"input",167),r(),i(16,"div")(17,"label",17),a(18,"Role"),r(),i(19,"input",168),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.role,t)||(s.form.role=t),u(t)}),r()()(),i(20,"div",16)(21,"div")(22,"label")(23,"span",17),a(24,"NPS Score"),r(),i(25,"span",18),a(26,"*"),r()(),i(27,"select",169),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.nps,t)||(s.form.nps=t),u(t)}),i(28,"option",17),a(29,"10 \u2014 Strong promoter"),r(),i(30,"option",17),a(31,"9 \u2014 Promoter"),r()(),i(32,"div",109),a(33,"Only NPS 9\u201310 responders can be promoters."),r()(),i(34,"div")(35,"label",17),a(36,"Last Survey"),r(),i(37,"input",170),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.lastSurvey,t)||(s.form.lastSurvey=t),u(t)}),r()()(),i(38,"div",30)(39,"div")(40,"label")(41,"span",17),a(42,"Reference-able?"),r(),i(43,"span",18),a(44,"*"),r()(),i(45,"select",171),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.referenceable,t)||(s.form.referenceable=t),u(t)}),i(46,"option",86),a(47,"Select\u2026"),r(),f(48,va,2,2,"option",91),r()()(),i(49,"div",30)(50,"div")(51,"label",17),a(52,"Notes"),r(),i(53,"textarea",172),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.notes,t)||(s.form.notes=t),u(t)}),r()()(),F()}if(o&2){let e=d(2);l(8),c("items",e.customers),x("ngModel",e.form.customerId),c("ngModelOptions",C(19,O))("virtualScroll",!0)("clearable",!0),l(7),c("value",e.pickedAccount),l(4),x("ngModel",e.form.role),c("ngModelOptions",C(20,O)),l(8),x("ngModel",e.form.nps),c("ngModelOptions",C(21,O)),l(10),x("ngModel",e.form.lastSurvey),c("ngModelOptions",C(22,O)),l(8),x("ngModel",e.form.referenceable),c("ngModelOptions",C(23,O)),l(),c("ngValue",null),l(2),c("ngForOf",e.referenceableChoices)("ngForTrackBy",e.trackByIndex),l(5),x("ngModel",e.form.notes),c("ngModelOptions",C(24,O))}}function ba(o,m){if(o&1&&(i(0,"option",92),a(1),r()),o&2){let e=m.$implicit;
1c("ngValue",e.id),l(),g(e.name)}}function Sa(o,m){if(o&1){let e=w();P(0),i(1,"div",16)(2,"div")(3,"label")(4,"span",17),a(5,"Title"),r(),i(6,"span",18),a(7,"*"),r()(),i(8,"input",173),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.title,t)||(s.form.title=t),u(t)}),r()(),i(9,"div")(10,"label")(11,"span",17),a(12,"Account"),r(),i(13,"span",18),a(14,"*"),r()(),i(15,"ng-select",174),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.customerId,t)||(s.form.customerId=t),u(t)}),r()()(),i(16,"div",16)(17,"div")(18,"label",17),a(19,"Owner"),r(),i(20,"select",175),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.ownerId,t)||(s.form.ownerId=t),u(t)}),i(21,"option",86),a(22,"Select owner\u2026"),r(),f(23,ba,2,2,"option",91),r()(),i(24,"div")(25,"label",17),a(26,"Target Publish Date"),r(),i(27,"input",176),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.publishDate,t)||(s.form.publishDate=t),u(t)}),r()()(),i(28,"div",16)(29,"div")(30,"label",17),a(31,"Industry Tag"),r(),i(32,"select",177),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.industryTag,t)||(s.form.industryTag=t),u(t)}),i(33,"option",17),a(34,"Auto OEM"),r(),i(35,"option",17),a(36,"Manufacturing"),r(),i(37,"option",17),a(38,"Logistics"),r(),i(39,"option",17),a(40,"BFSI"),r(),i(41,"option",17),a(42,"Energy"),r()()(),i(43,"div")(44,"label",17),a(45,"Stage"),r(),i(46,"select",178),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.stage,t)||(s.form.stage=t),u(t)}),i(47,"option",17),a(48,"Live"),r(),i(49,"option",17),a(50,"Draft"),r(),i(51,"option",17),a(52,"Archived"),r()()()(),i(53,"div",30)(54,"div")(55,"label",17),a(56,"Story Angle"),r(),i(57,"textarea",179),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.form.storyAngle,t)||(s.form.storyAngle=t),u(t)}),r()()(),i(58,"div",109),a(59,"Customer approval is required before going live. Approver auto-set to the named champion."),r(),F()}if(o&2){let e=d(2);l(8),x("ngModel",e.form.title),c("ngModelOptions",C(20,O)),l(7),c("items",e.customers),x("ngModel",e.form.customerId),c("ngModelOptions",C(21,O))("virtualScroll",!0)("clearable",!0),l(5),x("ngModel",e.form.ownerId),c("ngModelOptions",C(22,O)),l(),c("ngValue",null),l(2),c("ngForOf",e.owners)("ngForTrackBy",e.trackByIndex),l(4),x("ngModel",e.form.publishDate),c("ngModelOptions",C(23,O)),l(5),x("ngModel",e.form.industryTag),c("ngModelOptions",C(24,O)),l(14),x("ngModel",e.form.stage),c("ngModelOptions",C(25,O)),l(11),x("ngModel",e.form.storyAngle),c("ngModelOptions",C(26,O))}}function wa(o,m){if(o&1){let e=w();i(0,"div",6),h("click",function(){p(e);let t=d();return u(t.cancel())}),i(1,"div",7),h("click",function(t){return p(e),u(t.stopPropagation())}),i(2,"div",8)(3,"div",9),a(4),r(),i(5,"button",10),h("click",function(){p(e);let t=d();return u(t.cancel())}),a(6,"\xD7"),r()(),i(7,"div",11),f(8,Eo,37,12,"ng-container",12)(9,Oo,29,11,"ng-container",12)(10,Do,95,24,"ng-container",12)(11,Vo,30,6,"ng-container",12)(12,Bo,32,7,"ng-container",12)(13,qo,24,12,"ng-container",12)(14,Uo,32,7,"ng-container",12)(15,Ho,32,6,"ng-container",12)(16,Ko,25,7,"ng-container",12)(17,Qo,30,10,"ng-container",12)(18,Go,30,10,"ng-container",12)(19,Yo,32,13,"ng-container",12)(20,$o,30,12,"ng-container",12)(21,ea,16,4,"ng-container",12)(22,ia,56,21,"ng-container",12)(23,ra,17,6,"ng-container",12)(24,oa,42,15,"ng-container",12)(25,aa,26,6,"ng-container",12)(26,sa,33,9,"ng-container",12)(27,da,73,26,"ng-container",12)(28,pa,66,27,"ng-container",12)(29,ua,38,12,"ng-container",12)(30,ga,23,12,"ng-container",12)(31,_a,45,12,"ng-container",12)(32,ha,51,21,"ng-container",12)(33,fa,8,3,"ng-container",12)(34,xa,37,9,"ng-container",12)(35,ya,47,15,"ng-container",12)(36,Ca,54,25,"ng-container",12)(37,Sa,60,27,"ng-container",12),r(),i(38,"div",13)(39,"button",14),h("click",function(){p(e);let t=d();return u(t.cancel())}),a(40,"Cancel"),r(),i(41,"button",15),h("click",function(){p(e);let t=d();return u(t.submit())}),a(42),r()()()()}if(o&2){let e=d();l(),D("is-lg",e.size==="lg"),l(3),g(e.title),l(3),c("ngSwitch",e.key),l(),c("ngSwitchCase","lead-contacted"),l(),c("ngSwitchCase","lead-qualified"),l(
1),c("ngSwitchCase","lead-converted"),l(),c("ngSwitchCase","lead-disqualified"),l(),c("ngSwitchCase","lead-lost"),l(),c("ngSwitchCase","follow-up"),l(),c("ngSwitchCase","deal-lost"),l(),c("ngSwitchCase","deal-disqualified"),l(),c("ngSwitchCase","customer-prospect"),l(),c("ngSwitchCase","customer-inactive"),l(),c("ngSwitchCase","customer-lost"),l(),c("ngSwitchCase","customer-active"),l(),c("ngSwitchCase","duplicate-merge"),l(),c("ngSwitchCase","add-note"),l(),c("ngSwitchCase","to-do"),l(),c("ngSwitchCase","add-reminder"),l(),c("ngSwitchCase","esign-send"),l(),c("ngSwitchCase","quote-convert"),l(),c("ngSwitchCase","discount-approval"),l(),c("ngSwitchCase","new-ticket"),l(),c("ngSwitchCase","edit-ticket"),l(),c("ngSwitchCase","csat-survey-send"),l(),c("ngSwitchCase","ticket-in-progress"),l(),c("ngSwitchCase","ticket-waiting"),l(),c("ngSwitchCase","ticket-resolved"),l(),c("ngSwitchCase","ticket-closed"),l(),c("ngSwitchCase","ticket-reopen"),l(),c("ngSwitchCase","add-referral"),l(),c("ngSwitchCase","add-promoter"),l(),c("ngSwitchCase","start-case-study"),l(5),g(e.primaryLabel)}}function Ta(o,m){if(o&1&&(i(0,"div",32),a(1),r()),o&2){let e=d(2);l(),g(e.nextFollowupError)}}function ka(o,m){if(o&1){let e=w();i(0,"div",30)(1,"div")(2,"label",17),a(3,"Next Followup Date"),r(),i(4,"input",180),v("ngModelChange",function(t){p(e);let s=d();return y(s.form.nextFollowup,t)||(s.form.nextFollowup=t),u(t)}),r(),f(5,Ta,2,1,"div",20),r()()}if(o&2){let e=d();l(4),x("ngModel",e.form.nextFollowup),c("min",e.today)("ngModelOptions",C(4,O)),l(),c("ngIf",e.nextFollowupError)}}function Ea(o,m){if(o&1){let e=w();i(0,"div",194)(1,"button",195),h("click",function(){p(e);let t=d().index,s=d(2);return u(s.removeProduct(t))}),a(2,"\xD7"),r()()}}function Ma(o,m){if(o&1){let e=w();i(0,"button",201),h("click",function(){let t=p(e).$implicit,s=d(3).$implicit,_=d(2);return u(_.selectProduct(s,t))}),a(1),r()}if(o&2){let e=m.$implicit;l(),g(e.name)}}function Ia(o,m){if(o&1&&(i(0,"div",199),f(1,Ma,2,1,"button",200),r()),o&2){let e=d(2).$implicit;l(),c("ngForOf",e.suggestions)}}function Oa(o,m){if(o&1){let e=w();P(0),i(1,"div",196)(2,"input",197),h("input",function(t){p(e);let s=d().$implicit,_=d(2);return u(_.onProductSearch(s,t))}),r(),f(3,Ia,2,1,"div",198),r(),F()}if(o&2){let e=d().$implicit;l(2),c("value",e.product),l(),c("ngIf",e.suggestions==null?null:e.suggestions.length)}}function Pa(o,m){if(o&1){let e=w();i(0,"input",202),v("ngModelChange",function(t){p(e);let s=d().$implicit;return y(s.product,t)||(s.product=t),u(t)}),r()}if(o&2){let e=d(),n=e.$implicit,t=e.index;ve("name","prod-",t,""),x("ngModel",n.product),c("ngModelOptions",C(4,O))}}function Fa(o,m){if(o&1&&(i(0,"div",32),a(1),r()),o&2){let e=d().$implicit,n=d(2);l(),g(n.productRowError(e))}}function Aa(o,m){if(o&1){let e=w();i(0,"div",186),f(1,Ea,3,0,"div",187),i(2,"div",16)(3,"div")(4,"label")(5,"span",17),a(6,"Product/Service"),r(),i(7,"span",18),a(8,"*"),r()(),f(9,Oa,4,2,"ng-container",188)(10,Pa,1,5,"ng-template",null,4,Ce),r(),i(12,"div")(13,"label")(14,"span",17),a(15,"Quantity"),r(),i(16,"span",18),a(17,"*"),r()(),i(18,"input",189),v("ngModelChange",function(t){let s=p(e).$implicit;return y(s.quantity,t)||(s.quantity=t),u(t)}),r()()(),i(19,"div",16)(20,"div")(21,"label")(22,"span",17),a(23,"Price Per Unit"),r(),i(24,"span",18),a(25,"*"),r()(),i(26,"input",190),v("ngModelChange",function(t){let s=p(e).$implicit;return y(s.price,t)||(s.price=t),u(t)}),r()(),i(27,"div")(28,"label",17),a(29,"Discount"),r(),i(30,"input",191),v("ngModelChange",function(t){let s=p(e).$implicit;return y(s.discount,t)||(s.discount=t),u(t)}),r()()(),i(31,"div",16)(32,"div")(33,"label",17),a(34,"GST %"),r(),i(35,"input",192),v("ngModelChange",function(t){let s=p(e).$implicit;return y(s.gst,t)||(s.gst=t),u(t)}),r()(),i(36,"div")(37,"label",17),a(38,"Additional Charges"),r(),i(39,"input",193),v("ngModelChange",function(t){let s=p(e).$implicit;return y(s.additionalCharges,t)||(s.additionalCharges=t),u(t)}),r()()(),f(40,Fa,2,1,"div",20),r()}if(o&2){let e=m.$implicit,n=m.index,t=le(11),s=d(2);l(),c("ngIf",n>0),l(8),c("ngIf",s.needsProductSearch())("ngIfElse",t),l(9),ve("name","qty-",n,""),x("ngModel",e.quantity),c("ngModelOptions",C(24,O)),l(8),ve("name","price-",n,""),x("ngModel",e.price),c("ngModelOptions",C(25,O)),l(4),ve("name","discount-",n,""),x("ngModel",e.discount),c("ngModelOptions",C(26,O)),l(5),ve("name","gst-",n,""),x("ngModel",e.gst),c("ngModelOptions",C(27,O)),l(4),ve("name","charges-",n,""),x("ngModel",e.additionalCharges),c("ngModelOptions",C(28,O)),l(),c("ngIf",s.productRowError(e))}}function Da(o,m){if(o&1){let e=w();i(0,"div",181)(1,"div",182)(2,"span",17),a(3,"Products / Services"),r(),i(4,"span",18),a(5,"*"),r()(),i(6,"button",183),h("click",function(){p(e);let t=d();return u(t.addProduct())}),a(7,"Add Another Product"),r()(),i(8,"div",184),f(9,Aa,41,29,"div",185),r()}if(o&2){let e=d();l(9),c("ngForOf",e.products)("ngForTrackBy",e.trackByIndex)}}var Jt={"lead-contacted":{title:"Contacted",size:"sm",primaryLabel:"Submit"},"lead-qualified":{title:"Qualified",size:"lg",primaryLabel:"Submit"},"lead-converted":{title:"Converted to Deal",size:"lg",primaryLabel:"Submit"},"lead-disqualified":{title:"Disqualified",size:"sm",primaryLabel:"Submit"},"lead-lost":{title:"Lead Lost",size:"sm",primaryLabel:"Submit"},"follow-up":{title:"Follow Up",size:"sm",primaryLabel:"Submit"},"deal-lost":{title:"Opportunity Lost",size:"sm",primaryLabel:"Submit"},"deal-disqualified":{title:"Disqualified",size:"sm",primaryLabel:"Submit"},"customer-prospect":{title:"Move to Prospect \u2014 Reset Relationship Stage",size:"sm",primaryLabel:"Submit"},"customer-inactive":{title:"Mark as Inactive \u2014 Why Has the Customer Gone Quiet?",size:"sm",primaryLabel:"Submit"}
1,"customer-lost":{title:"Mark as Lost \u2014 What Happened?",size:"sm",primaryLabel:"Submit"},"customer-active":{title:"Mark as Active \u2014 Confirm Conversion Details",size:"sm",primaryLabel:"Submit"},"duplicate-merge":{title:"Merge Duplicate Accounts",size:"sm",primaryLabel:"Merge Accounts"},"add-note":{title:"Add Note",size:"sm",primaryLabel:"Save Note"},"to-do":{title:"Add To-Do",size:"sm",primaryLabel:"Save"},"add-reminder":{title:"Add Reminder",size:"sm",primaryLabel:"Save"},"esign-send":{title:"Send Quote for E-Signature",size:"sm",primaryLabel:"Send for Signature"},"quote-convert":{title:"Convert Quote to Order",size:"sm",primaryLabel:"Convert to Order"},"discount-approval":{title:"Request Discount Approval",size:"sm",primaryLabel:"Send for Approval"},"new-ticket":{title:"New Support Ticket",size:"lg",primaryLabel:"Create Ticket"},"edit-ticket":{title:"Edit Ticket",size:"lg",primaryLabel:"Save Changes"},"csat-survey-send":{title:"Send CSAT Survey",size:"sm",primaryLabel:"Send Survey"},"ticket-in-progress":{title:"Mark Ticket In Progress",size:"sm",primaryLabel:"Start Work"},"ticket-waiting":{title:"Waiting on Customer",size:"lg",primaryLabel:"Send & Mark Waiting"},"ticket-resolved":{title:"Mark Ticket Resolved",size:"lg",primaryLabel:"Mark Resolved"},"ticket-closed":{title:"Close Ticket",size:"sm",primaryLabel:"Close Ticket"},"ticket-reopen":{title:"Reopen Ticket",size:"lg",primaryLabel:"Reopen Ticket"},"add-promoter":{title:"Add Promoter",size:"lg",primaryLabel:"Save Promoter"},"add-referral":{title:"Add Referral",size:"sm",primaryLabel:"Save Referral"},"start-case-study":{title:"Start New Case Study",size:"lg",primaryLabel:"Start Case Study"}},gi=(()=>{class o{constructor(e,n){this.svc=e,this.api=n,this.open=!1,this.ctx=null,this.form={},this.products=[],this.attachmentFiles=[],this.activationAssignees=[],this.activationAssigneesLoaded=!1,this.customers=[],this.customersLoaded=!1,this.ticketStatusOptions=["New","In Progress","Waiting for Customer","Resolved","Reopened","Closed"],this.assignees=[],this.assigneesLoaded=!1,this.referenceableChoices=[],this.owners=[],this.ownersLoaded=!1,this.nextFollowupPopups=["lead-contacted","lead-qualified"],this.followupSubmitted=!1,this.convertedSubmitted=!1,this.sub=this.svc.dialog$.subscribe(t=>{this.open=t.open,this.ctx=t.ctx,t.open&&(this.resetForm(),this.needsCustomer()&&this.loadCustomers(),(this.key==="new-ticket"||this.key==="edit-ticket"||this.key==="ticket-in-progress"||this.key==="ticket-resolved")&&this.loadAssignees(),this.key==="add-promoter"&&this.loadAdvocacyChoices(),this.key==="start-case-study"&&this.loadOwners(),this.key==="customer-active"&&this.loadActivationAssignees())})}loadOwners(){this.ownersLoaded||this.api.getAssigneeUsers({user_type:"SELLER",search:"",perPage:100,pageNumber:1}).subscribe({next:e=>{let n=e?.response?.data?.users??[];this.owners=(Array.isArray(n)?n:[]).map(t=>({id:Number(t.id),name:t.name||t.full_name||t.username||t.email||"#"+t.id})).filter(t=>Number.isFinite(t.id)&&t.name),this.ownersLoaded=!0},error:()=>{}})}loadActivationAssignees(){this.activationAssigneesLoaded||this.api.getAssigneeUsers({user_type:"SELLER",search:"",perPage:100,pageNumber:1}).subscribe({next:e=>{let n=e?.response?.data?.users??[];this.activationAssignees=(Array.isArray(n)?n:[]).map(t=>({id:Number(t.id??t.user_id??t.userId??t.value),name:t.name||t.full_name||t.username||t.email||"#"+(t.id??"")})).filter(t=>Number.isFinite(t.id)&&t.name),this.activationAssigneesLoaded=!0},error:()=>{}})}loadAdvocacyChoices(){this.api.getAdvocacyChoices({}).subscribe({next:e=>{this.referenceableChoices=this.extractChoices(e,/referenceable/i),!this.form.referenceable&&this.referenceableChoices.length&&(this.form.referenceable=this.referenceableChoices[0].value)},error:()=>{this.referenceableChoices=[]}})}extractChoices(e,n){let t=[e?.response?.data,e?.response,e?.data,e].filter(Boolean);for(let s of t)if(!(!s||typeof s!="object")){for(let _ of Object.keys(s))if(n.test(_)&&Array.isArray(s[_]))return s[_].map(S=>this.normalizeChoice(S))}return[]}normalizeChoice(e){if(e&&typeof e=="object"){let n=e.value??e.key??e.code??e.id??e.name??"",t=e.label??e.display??e.display_name??e.name??e.text??String(n);return{value:String(n),label:String(t)}}return{value:String(e),label:String(e)}}needsCustomer(){return this.key==="add-promoter"||this.key==="start-case-study"||this.key==="new-ticket"}loadCustomers(){let e=this.ctx?.data?.accounts;if(Array.isArray(e)){this.customers=e;return}this.customersLoaded||this.api.getCustomerList({page:1,page_size:100}).subscribe({next:n=>{let t=n?.response?.data||[];this.customers=(Array.isArray(t)?t:[]).map(s=>this.toCustomerOption(s)),this.customersLoaded=!0},error:()=>{}})}toCustomerOption(e){let n=String(e?.contactName||"").trim(),t=String(e?.companyName||"").trim();
1return{id:e?.id,label:[n,t].filter(Boolean).join(" \u2014 ")||"#"+e?.id,contact:n,account:t}}get pickedAccount(){let e=this.form.customerId,n=this.customers.find(t=>t.id===e);return n?.account||n?.label||""}onPromoterContactPicked(){let e=this.customers.find(n=>n.id===this.form.customerId);e?.contact&&(this.form.contact=e.contact)}loadAssignees(){this.assigneesLoaded||this.api.getAssigneeUsers({user_type:"SELLER",search:"",perPage:100,pageNumber:1}).subscribe({next:e=>{let n=e?.response?.data?.users??[];this.assignees=(Array.isArray(n)?n:[]).map(t=>({id:Number(t.id??t.user_id??t.userId??t.value),name:t.name||t.full_name||t.username||t.email||"#"+(t.id??"")})).filter(t=>Number.isFinite(t.id)&&t.name),this.assigneesLoaded=!0},error:()=>{}})}ngOnDestroy(){this.sub.unsubscribe()}get key(){return this.ctx?.key??null}get title(){if(!this.key)return"";let e=this.ctx?.data?.titleSuffix;return e?`${Jt[this.key].title} \xB7 ${e}`:Jt[this.key].title}get size(){return this.key?Jt[this.key].size:"sm"}get primaryLabel(){return this.key?Jt[this.key].primaryLabel:"Submit"}resetForm(){switch(this.form=z({},this.ctx?.data||{}),delete this.form.accounts,this.products=[this.blankProduct()],this.followupSubmitted=!1,this.convertedSubmitted=!1,this.attachmentFiles=[],this.attachmentInput?.nativeElement&&(this.attachmentInput.nativeElement.value=""),this.key){case"to-do":this.form.type=null,this.form.follow=null;break;case"add-note":this.form.attachments=[];break;case"discount-approval":this.form.approver="Sales Manager (Priya Menon)";break;case"duplicate-merge":this.form.matchBasis="Domain + GST ID",this.form.mergeChildren=!0;break;case"csat-survey-send":this.form.trigger="Auto on ticket close";break;case"ticket-waiting":this.form.followUp="3 business days",this.form.pauseSla=!0;break;case"ticket-resolved":this.form.resolvedBy=null,this.form.autoCsat=!0;break;case"ticket-reopen":this.form.reassign="Arjun Verma (me)";break;case"ticket-in-progress":this.form.assignee=null;break;case"new-ticket":this.form.customerId=null,this.form.priority="",this.form.category="",this.form.assignTo=null,this.form.attachments=[];break;case"edit-ticket":this.form.note="";break;case"add-promoter":this.ctx?.data||(this.form.customerId=null),this.form.priority=null,this.form.category=null,this.form.assignTo=null;break;case"start-case-study":this.form.customerId=null,this.form.ownerId=null;break;case"lead-contacted":this.form.contactMode="";break;case"lead-disqualified":case"lead-lost":case"deal-lost":case"deal-disqualified":this.form.reason="";break;case"lead-converted":this.form.priority="",this.form.attachments=[];break;case"customer-active":this.form.assigned=null;break}}blankProduct(){return{product:"",quantity:null,price:null,gst:18,discount:"",additionalCharges:"",selected:null,suggestions:[]}}needsProductSearch(){return this.key==="lead-converted"}onProductSearch(e,n){if(e.product=n.target.value,e.selected=null,!e.product||e.product.length<2){e.suggestions=[];return}let t={sellerId:JSON.parse(localStorage.getItem("userDetails")||"{}")?.vendorId,pageLength:10,currentPage:1,searchName:e.product};this.api.getSupplierProducts(t).subscribe({next:s=>{s?.responseCode===200&&(e.suggestions=(s.response?.products||[]).map(_=>se(z({},_.product),{categoryTree:_.product?.product_type||""})))},error:()=>{e.suggestions=[]}})}selectProduct(e,n){e.selected=n,e.product=n.name,e.price=n.price??null,e.suggestions=[]}addProduct(){this.products.push(this.blankProduct())}removeProduct(e){this.products.length>1&&this.products.splice(e,1)}get today(){return new Date().toISOString().slice(0,10)}get todoStartDateError(){let e=this.form.startDate;return e&&$e()({value:e})?.pastDate?"Start date cannot be in the past.":null}get todoEndDateError(){let e=this.form.startDate,n=this.form.endDate;return!e||!n?null:n<e?"End date cannot be before the start date.":null}hasNextFollowup(){return!!this.key&&this.nextFollowupPopups.includes(this.key)}get nextFollowupError(){if(!this.hasNextFollowup())return null;let e=String(this.form.nextFollowup||"").trim();if(!e)return null;let n=$e()({value:e});return n?.invalidDate?"Enter a valid follow-up date.":n?.pastDate?"Follow-up date must be today or in the future.":null}get attemptedDateError(){if(this.key!=="lead-contacted")return null;let e=String(this.form.attemptedDate||"").trim();if(!e)return null;let n=wt()({value:e});return n?.invalidDate?"Enter a valid date.":n?.futureDate?"Attempted date cannot be in the future.":null}get customerResponseError(){return this.key!=="follow-up"||String(this.form.customerResponse||"").trim()?null:"Customer response is required."}get followupDateError(){if(this.key!=="follow-up")return null;let e=String(this.form.nextFollowupDate||"").trim();if(!e)return"Follow-up date is required.";let n=$e()({value:e});return n?.invalidDate?"Enter a valid follow-up date.":n?.pastDate?"Follow-up date must be today or in the future.":null}get followUpDateError(){if(this.key!=="lead-lost"&&this.key!=="deal-lost"||!this.form.followLater)return null;let e=String(this.form.followDate||"").trim();if(!e)return"Follow-up date is required when scheduling a follow-up.";let n=$e()({value:e});return n?.invalidDate?"Enter a valid follow-up date.":n?.pastDate?"Follow-up date must be today or in the future.":null}productRowError(e){return!this.needsProductSearch()||!this.convertedSubmitted?null:e.selected?e.quantity?e.price?e.gst?null:"GST % is required.":"Price Per Unit is required.":"Quantity is required.":"Please select a product."}cancel(){this.svc.resolve(null)}onAttachmentsSelected(e){let n=e.target,t=n?.files;if(!t)return;let s=S=>`${S.name}|${S.size}|${S.lastModified}`,_=new Set(this.attachmentFiles.map(s));for(let S of Array.from(t))_.has(s(S))||(_.add(s(S)),this.attachmentFiles.push(S));this.form.attachments=this.attachmentFiles.map(S=>({name:S.name,size:S.size,type:S.type})),n&&(n.value="")}removeAttachment(e){this.attachmentFiles.splice(e,1),this.form.attachments=this.attachmentFiles.map(n=>({name:n.name,size:n.size,type:n.type}))}submit(){if(this.key==="to-do"&&(this.todoStartDateError||this.todoEndDateError)||this.followUpDateError||this.nextFollowupError||this.attemptedDateError||this.key==="lead-converted"&&(this.convertedSubmitted=!0,this.products.some(n=>!!this.productRowError(n)))||this.key==="follow-up"&&(this.followupSubmitted=!0,this.customerResponseError||this.followupDateError))return;let e=z({},this.form);this.needsProducts()&&(e.products=this.products),(this.key==="new-ticket"||this.key==="add-note")&&(e.attachmentFiles=[...this.attachmentFiles]),this.svc.resolve(e)}needsProducts(){let e=this.key;return e==="lead-qualified"||e==="lead-converted"}get previewDealName(){let e=this.form.dealName;return typeof e=="string"&&e.length>0?e:"(unnamed)"}get previewTotal(){return this.products.reduce((e,n)=>e+(n.quantity||0)*(n.price||0),0)}trackByIndex(e){return e}static{this.\u0275fac=function(n){return new(n||o)(E(xe),E(R))}}static{this.\u0275cmp=V({type:o,selectors:[["app-crm-popup-modal"]],viewQuery:function(n,t){if(n&1&&Sn(wo,5),n&2){let s;wn(s=Tn())&&(t.attachmentInput=s.first)}},decls:5,vars:1,consts:[["nextFollowupTpl",""],["productsTpl",""],["convertAttachInput",""],["attachmentInput",""],["plainProductInput",""],["class","crm-popup-overlay",3,"click",4,"ngIf"],[1,"crm-popup-overlay",3,"click"],[1,"crm-popup-card",3,"click"],[1,"crm-popup-header"],[1,"crm-popup-title"],["type","button","aria-label","Close",1,"crm-popup-close",3,"click"],[1,"crm-popup-body",3,"ngSwitch"],[4,"ngSwitchCase"],[1,"crm-popup-footer"],["type","button","appTranslate","",1,"btn","btn-light","btn-sm",3,"click"],["type","button",1,"btn","btn-theme","btn-sm",3,"click"],[1,"crm-popup-row"],["appTranslate",""],[1,"req"],["type","date","name","attemptedDate",3,"ngModelChange","ngModel","max","ngModelOptions"],["class","crm-popup-help text-danger",4,"ngIf"],["name","contactMode",3,"ngModelChange","ngModel","ngModelOptions"],["value","","appTranslate",""],["value","phone","appTranslate",""],["value","email","appTranslate",""],["value","meeting","appTranslate",""],["value","video_call","appTranslate",""],["value","linkedin","appTranslate",""],["value","other","a
1ppTranslate",""],[4,"ngTemplateOutlet"],[1,"crm-popup-row","single"],["placeholder","Notes from the conversation\u2026","name","note",3,"ngModelChange","ngModel","ngModelOptions"],[1,"crm-popup-help","text-danger"],["appTranslate","",1,"crm-popup-section-title"],["type","text","placeholder","City, State","name","deliveryLocation",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","placeholder","e.g. 1-2 Weeks","name","deliveryTimeline",3,"ngModelChange","ngModel","ngModelOptions"],["name","budget",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","placeholder","Enter Deal Name","name","dealName",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","placeholder","Enter Delivery Location","name","deliveryLocation",3,"ngModelChange","ngModel","ngModelOptions"],["type","date","name","expectedCloseDate",3,"ngModelChange","ngModel","ngModelOptions"],["value","0-10","appTranslate",""],["value","11-20","appTranslate",""],["value","21-50","appTranslate",""],["value","51-100","appTranslate",""],["value","101-500","appTranslate",""],["name","priority",3,"ngModelChange","ngModel","ngModelOptions"],["value","Low","appTranslate",""],["value","Medium","appTranslate",""],["value","High","appTranslate",""],[1,"crm-popup-upload",3,"click"],["type","file","multiple","","hidden","",3,"change"],[1,"crm-popup-upload__icon"],[1,"ri-upload-2-line"],["appTranslate","",1,"crm-popup-upload__text"],["class","crm-popup-upload-files",4,"ngIf"],["placeholder","Enter Notes","name","note",3,"ngModelChange","ngModel","ngModelOptions"],[1,"crm-popup-preview"],["appTranslate","",1,"pv-head"],[1,"pv-row"],[1,"pv-total"],[1,"crm-popup-upload-files"],["class","crm-popup-upload-files__item",4,"ngFor","ngForOf"],[1,"crm-popup-upload-files__item"],[1,"crm-popup-upload-files__name"],["type","button",1,"crm-popup-upload-files__remove",3,"click"],["name","reason",3,"ngModelChange","ngModel","ngModelOptions"],["value","budget","appTranslate",""],["value","timeline","appTranslate",""],["value","requirements","appTranslate",""],["value","authority","appTranslate",""],["value","need","appTranslate",""],["value","competitor","appTranslate",""],["name","note",3,"ngModelChange","ngModel","ngModelOptions"],["value","no_response","appTranslate",""],["value","not_interested","appTranslate",""],["value","requirements_not_met","appTranslate",""],["type","checkbox","name","followLater",3,"ngModelChange","ngModel","ngModelOptions"],["class","crm-popup-mt-2",4,"ngIf"],[1,"crm-popup-mt-2"],["type","date","name","followDate",3,"ngModelChange","ngModel","min","ngModelOptions"],["type","text","placeholder","What did the customer say?","name","customerResponse",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","placeholder","Any objections from customer?","name","objections",3,"ngModelChange","ngModel","ngModelOptions"],["type","date","name","nextFollowupDate",3,"ngModelChange","ngModel","min","ngModelOptions"],["value","price","appTranslate",""],["value","fit","appTranslate",""],["value","unreachable","appTranslate",""],["disabled","","appTranslate","",3,"ngValue"],["name","notes",3,"ngModelChange","ngModel","ngModelOptions"],["type","checkbox","name","recontract",3,"ngModelChange","ngModel","ngModelOptions"],["name","assigned",3,"ngModelChange","ngModel","ngModelOptions"],["disabled","",3,"ngValue"],[3,"ngValue",4,"ngFor","ngForOf","ngForTrackBy"],[3,"ngValue"],["name","primary",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","name","matchBasis","readonly","",1,"is-readonly",3,"ngModelChange","ngModel","ngModelOptions"],["type","checkbox","name","mergeChildren",3,"ngModelChange","ngModel","ngModelOptions"],["type","file","multiple","",3,"change"],["name","type",3,"ngModelChange","ngModel","ngModelOptions"],["name","follow",3,"ngModelChange","ngModel","ngModelOptions"],["type","date","name","startDate",3,"ngModelChange","min","ngModel","ngModelOptions"],["type","date","name","endDate",3,"ngModelChange","min","ngModel","ngModelOptions"],["placeholder","Add any details for this to-do\u2026","name","note",3,"ngModelChange","ngModel","ngModelOptions"],["placeholder","What should we remind you about?","name","reminder",3,"ngModelChange","ngModel","ngModelOptions"],["type","datetime-local","name","datetime",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","placeholder","Customer authorised signatory","name","signerName",3,"ngModelChange","ngModel","ngModelOptions"],["type","email","placeholder","[email protected]","name","signerEmail",3,"ngModelChange","ngModel","ngModelOptions"],["name","signingOrder",3,"ngModelChange","ngModel","ngModelOptions"],["name","expires
1In",3,"ngModelChange","ngModel","ngModelOptions"],["name","message","placeholder","Please find the attached quote for your review and signature\u2026",3,"ngModelChange","ngModel","ngModelOptions"],["appTranslate","",1,"crm-popup-help"],[1,"crm-popup-callout"],["appTranslateText",""],["type","text","placeholder","Customer purchase order #","name","poRef",3,"ngModelChange","ngModel","ngModelOptions"],["placeholder","Any handoff notes for AR / Contracts\u2026","name","notes",3,"ngModelChange","ngModel","ngModelOptions"],[1,"crm-popup-callout-card"],["type","text","placeholder","e.g. 22","name","discountPct",3,"ngModelChange","ngModel","ngModelOptions"],["name","approver",3,"ngModelChange","ngModel","ngModelOptions"],["placeholder","Why this discount level is required\u2026","name","justification",3,"ngModelChange","ngModel","ngModelOptions"],["bindValue","id","bindLabel","label","placeholder","Search customers\u2026","notFoundText","No matching customer",1,"crm-popup-picker",3,"ngModelChange","items","ngModel","ngModelOptions","virtualScroll","clearable"],["value","","disabled","","hidden","","appTranslate",""],["name","category",3,"ngModelChange","ngModel","ngModelOptions"],["bindValue","id","bindLabel","name","placeholder","Search assignees\u2026","notFoundText","No matching user",1,"crm-popup-picker",3,"ngModelChange","items","ngModel","ngModelOptions","virtualScroll","clearable"],["type","text","placeholder","One-line summary","name","subject",3,"ngModelChange","ngModel","ngModelOptions"],["placeholder","What happened? What did you expect? Steps to reproduce\u2026","name","description",3,"ngModelChange","ngModel","ngModelOptions"],["class","crm-popup-attachments-preview",4,"ngIf"],[1,"crm-popup-attachments-preview"],["appTranslate","",1,"crm-text-muted"],[1,"crm-attachment-list"],[4,"ngFor","ngForOf","ngForTrackBy"],["name","customer","disabled","",1,"is-readonly"],["name","priority","disabled","",1,"is-readonly",3,"ngModel","ngModelOptions"],["name","category","disabled","",1,"is-readonly",3,"ngModel","ngModelOptions"],["value","Bug","appTranslate",""],["value","Feature Request","appTranslate",""],["value","Incident","appTranslate",""],["value","Task","appTranslate",""],["value","Other","appTranslate",""],["bindValue","id","bindLabel","name","placeholder","Unassigned \u2014 search to assign","notFoundText","No matching user",1,"crm-popup-picker",3,"ngModelChange","items","ngModel","ngModelOptions","virtualScroll","clearable"],["type","text","name","subject","disabled","",1,"is-readonly",3,"ngModel","ngModelOptions"],["name","description","disabled","",1,"is-readonly",3,"ngModel","ngModelOptions"],["name","status",3,"ngModelChange","ngModel","ngModelOptions"],["placeholder","Why is this changing? Recorded on the ticket timeline.","name","note",3,"ngModelChange","ngModel","ngModelOptions"],["name","surveyType",3,"ngModelChange","ngModel","ngModelOptions"],["name","trigger",3,"ngModelChange","ngModel","ngModelOptions"],["type","email","placeholder","[email protected]","name","recipient",3,"ngModelChange","ngModel","ngModelOptions"],["placeholder","Thanks for working with us \u2014 please rate the support you received.","name","message",3,"ngModelChange","ngModel","ngModelOptions"],["bindValue","id","bindLabel","name","placeholder","Keep current assignee","notFoundText","No matching user",1,"crm-popup-picker",3,"ngModelChange","items","ngModel","ngModelOptions","virtualScroll","clearable"],["name","effort",3,"ngModelChange","ngModel","ngModelOptions"],["placeholder","Plan of attack, hypothesis, who to consult\u2026","name","internalNote",3,"ngModelChange","ngModel","ngModelOptions"],["name","followUp",3,"ngModelChange","ngModel","ngModelOptions"],["placeholder","Hi, to move forward we need\u2026","name","message",3,"ngModelChange","ngModel","ngModelOptions"],["type","checkbox","name","pauseSla",3,"ngModelChange","ngModel","ngModelOptions"],["bindValue","id","bindLabel","name","placeholder","Search users\u2026","notFoundText","No matching user",1,"crm-popup-picker",3,"ngModelChange","items","ngModel","ngModelOptions","virtualScroll","clearable"],["placeholder","What was actually wrong? Surface this in trend anal
1ysis\u2026","name","rootCause",3,"ngModelChange","ngModel","ngModelOptions"],["placeholder","Summary the customer will see in the resolution email.","name","summary",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","placeholder","kb/api-orders-500-troubleshooting","name","linkedKb",3,"ngModelChange","ngModel","ngModelOptions"],["type","checkbox","name","autoCsat",3,"ngModelChange","ngModel","ngModelOptions"],["appTranslate","",1,"crm-popup-callout-card"],["placeholder","Anything future Arjun should know\u2026","name","finalNote",3,"ngModelChange","ngModel","ngModelOptions"],["name","reassign",3,"ngModelChange","ngModel","ngModelOptions"],["placeholder","What changed? What did the customer say?","name","newContext",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","placeholder","e.g. JBM Auto","name","referredCompany",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","placeholder","Who to reach","name","contactName",3,"ngModelChange","ngModel","ngModelOptions"],["name","referralStatus",3,"ngModelChange","ngModel","ngModelOptions"],[1,"crm-popup-input-group"],["type","text","placeholder","0","name","pipelineValue",3,"ngModelChange","ngModel","ngModelOptions"],["bindValue","id","bindLabel","label","placeholder","Search contacts\u2026","notFoundText","No matching contact",1,"crm-popup-picker",3,"ngModelChange","items","ngModel","ngModelOptions","virtualScroll","clearable"],["type","text","readonly","","placeholder","Pick a contact above",1,"is-readonly",3,"value"],["type","text","placeholder","e.g. VP Procurement","name","role",3,"ngModelChange","ngModel","ngModelOptions"],["name","nps",3,"ngModelChange","ngModel","ngModelOptions"],["type","date","name","lastSurvey",3,"ngModelChange","ngModel","ngModelOptions"],["name","referenceable",3,"ngModelChange","ngModel","ngModelOptions"],["placeholder","Why this contact is a promoter, what they champion\u2026","name","notes",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","placeholder","e.g. Mahindra Forging \u2014 40% throughput uplift","name","title",3,"ngModelChange","ngModel","ngModelOptions"],["bindValue","id","bindLabel","label","placeholder","Search accounts\u2026","notFoundText","No matching account",1,"crm-popup-picker",3,"ngModelChange","items","ngModel","ngModelOptions","virtualScroll","clearable"],["name","owner",3,"ngModelChange","ngModel","ngModelOptions"],["type","date","name","publishDate",3,"ngModelChange","ngModel","ngModelOptions"],["name","industryTag",3,"ngModelChange","ngModel","ngModelOptions"],["name","stage",3,"ngModelChange","ngModel","ngModelOptions"],["placeholder","Headline metric + transformation arc\u2026","name","storyAngle",3,"ngModelChange","ngModel","ngModelOptions"],["type","date","name","nextFollowup",3,"ngModelChange","ngModel","min","ngModelOptions"],[1,"crm-popup-products-head"],[1,"crm-popup-products-title"],["type","button","appTranslate","",1,"btn","btn-outline-theme","btn-sm",3,"click"],[1,"crm-popup-products"],["class","crm-popup-product-card",4,"ngFor","ngForOf","ngForTrackBy"],[1,"crm-popup-product-card"],["class","crm-popup-product-card__close",4,"ngIf"],[4,"ngIf","ngIfElse"],["type","number","placeholder","Enter Quantity",3,"ngModelChange","ngModel","name","ngModelOptions"],["type","number","placeholder","Enter Price Per Unit",3,"ngModelChange","ngModel","name","ngModelOptions"],["type","text","placeholder","Enter Discount",3,"ngModelChange","ngModel","name","ngModelOptions"],["type","number","placeholder","Enter GST %",3,"ngModelChange","ngModel","name","ngModelOptions"],["type","text","placeholder","Enter Additional Charges",3,"ngModelChange","ngModel","name","ngModelOptions"],[1,"crm-popup-product-card__close"],["type","button","aria-label","Remove product",3,"click"],[1,"crm-popup-product-search"],["type","text","placeholder","Search product...",3,"input","value"],["class","crm-popup-product-suggestions",4,"ngIf"],[1,"crm-popup-product-suggestions"],["type","button",3,"click",4,"ngFor","ngForOf"],["type","button",3,"click"],["type","text","placeholder","Enter Product/Service",3,"ngModelChange","ngModel","name","ngModelOptions"]],template:function(n,t){n&1&&f(0,wa,43,35,"div",5)(1,ka,6,5,"ng-template",null,0,Ce)(3,Da,10,2,"ng-template",null,1,Ce),n&2&&c("ngIf",t.open&&t.ctx)},dependencies:[W,N,Wt,Nt,Bt,X,ee,te,ot,Qe,Z,U,H,jt,L,Me,Rt],styles:[".crm-popup-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;background:#0f172a73;z-index:1080;display:flex;align-items:center;justify-content:center;padding:24px}.crm-popup-card[_ngcontent-%COMP%]{background:#fff;border-radius:10px;width:100%;max-width:560px;max-height:calc(100vh - 48px);overflow:hidden;display:flex;flex-direction:column;box-shadow:0 25px 50px -12px #00000040}.crm-popup-card.is-lg[_ngcontent-%COMP%]{max-width:880px}.crm-popup-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid #e5e7eb}.crm-popup-title[_ngcontent-%COMP%]{font-size:16px;font-weight:600;color:#111827}.crm-popup-close[_ngcontent-%COMP%]{border:0;background:transparent;font-size:22px;line-height:1;color:#6b7280;cursor:pointer;padding:0 6px}.crm-popup-close[_ngcontent-%COMP%]:hover, .crm-popup-close[_ngcontent-%COMP%]:focus{background:transparent;color:var(--color-error, #DC2626);outline:none}.crm-popup-remove-btn[_ngcontent-%COMP%]{border:0;background:transparent;font-size:16px;line-height:1;color:#6b7280;cursor:pointer;padding:2px 7px;border-radius:6px}.crm-popup-remove-btn[_ngcontent-%COMP%]:hover, .crm-popup-remove-btn[_ngcontent-%COMP%]:focus{background:transparent;color:var(--color-error, #DC2626);outline:none}.crm-popup-body[_ngcontent-%COMP%]{padding:18px 20px;overflow-y:auto;flex:1 1 auto}.crm-popup-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:18px}.crm-popup-row.single[_ngcontent-%COMP%]{grid-template-columns:1fr}.crm-popup-row[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{display:block;font-size:12px;font-weight:500;color:#475569;margin-bottom:6px}.crm-popup-row[_ngcontent-%COMP%] input[_ngcontent-%COMP%], .crm-popup-row[_ngcontent-%COMP%] select[_ngcontent-%COMP%], .crm-popup-row[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{width:100%;border:1px solid #d1d5db;border-radius:6px;padding:7px 10px;font-size:13px;color:#111827;background:#fff;box-sizing:border-box}.crm-popup-row[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:focus, .crm-popup-row[_ngcontent-%COMP%] select[_ngcontent-%COMP%]:focus, .crm-popup-row[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]:focus{outline:none;border-color:#6e3aed;box-shadow:0 0 0 3px #6e3aed26}.crm-popup-row[_ngcontent-%COMP%] input.is-readonly[_ngcontent-%COMP%], .crm-popup-row[_ngcontent-%COMP%] select.is-readonly[_ngcontent-%COMP%], .crm-popup-row[_ngcontent-%COMP%] textarea.is-readonly[_ngcontent-%COMP%]{background:#f3f4f6;color:#6b7280}.crm-popup-row[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%], .crm-popup-row[_ngcontent-%COMP%] select[type=checkbox][_ngcontent-%COMP%], .crm-popup-row[_ngcontent-%COMP%] textarea[type=c
1heckbox][_ngcontent-%COMP%]{width:auto;margin-right:6px}.crm-popup-row[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{min-height:70px;resize:vertical}.crm-popup-row[_ngcontent-%COMP%] .crm-popup-picker[_ngcontent-%COMP%]{display:block;width:100%;font-size:13px}.crm-popup-row[_ngcontent-%COMP%] .crm-popup-picker[_ngcontent-%COMP%] .ng-select-container{min-height:34px;border:1px solid #d1d5db;border-radius:6px;background:#fff;color:#111827;font-size:13px}.crm-popup-row[_ngcontent-%COMP%] .crm-popup-picker.ng-select-focused[_ngcontent-%COMP%] .ng-select-container{border-color:#6e3aed;box-shadow:0 0 0 3px #6e3aed26}.crm-popup-row[_ngcontent-%COMP%] .crm-popup-picker[_ngcontent-%COMP%] .ng-value-container{padding-left:10px}.crm-popup-row[_ngcontent-%COMP%] .crm-popup-picker[_ngcontent-%COMP%] .ng-placeholder{color:#9ca3af}.crm-popup-row[_ngcontent-%COMP%] .crm-popup-picker[_ngcontent-%COMP%] .ng-dropdown-panel{border:1px solid #e5e7eb;border-radius:6px;box-shadow:0 8px 20px #0f172a1f}.crm-popup-row[_ngcontent-%COMP%] .crm-popup-picker[_ngcontent-%COMP%] .ng-dropdown-panel .ng-dropdown-panel-items{max-height:180px}.crm-popup-row[_ngcontent-%COMP%] .crm-popup-picker[_ngcontent-%COMP%] .ng-dropdown-panel .ng-option{padding:5px 10px;font-size:13px;line-height:1.4;min-height:0}.crm-popup-row[_ngcontent-%COMP%] .crm-popup-picker[_ngcontent-%COMP%] .ng-dropdown-panel .ng-option-marked{background:#f5f3ff;color:#4c1d95}.crm-popup-row[_ngcontent-%COMP%] .crm-popup-picker[_ngcontent-%COMP%] .ng-dropdown-panel .ng-option-selected{background:#ede9fe;color:#4c1d95;font-weight:500}.req[_ngcontent-%COMP%]{color:#ef4444;margin-left:2px}.crm-popup-section-title[_ngcontent-%COMP%]{font-size:12px;font-weight:600;letter-spacing:.5px;text-transform:uppercase;color:#6b7280;margin:16px 0 8px}.crm-popup-products[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:14px;margin-bottom:18px}.crm-popup-products-head[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:18px 0 10px}.crm-popup-products-title[_ngcontent-%COMP%]{font-size:15px;font-weight:600;color:#111827}.crm-popup-product-card[_ngcontent-%COMP%]{position:relative;padding:16px 16px 0;background:#fff;border:1px solid #e5e7eb;border-radius:12px}.crm-popup-product-card[_ngcontent-%COMP%] > .crm-popup-row[_ngcontent-%COMP%]:last-of-type{margin-bottom:16px}.crm-popup-product-card__close[_ngcontent-%COMP%]{position:absolute;top:6px;right:8px}.crm-popup-product-card__close[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{border:0;background:none;color:#9ca3af;font-size:18px;line-height:1;cursor:pointer;padding:2px 4px}.crm-popup-product-card__close[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{color:#ef4444}.crm-popup-upload[_ngcontent-%COMP%]{border:1px dashed #cfcfcf;border-radius:8px;padding:20px;text-align:center;cursor:pointer;background:#fafafa}.crm-popup-upload[_ngcontent-%COMP%]:hover{background:#f3f4f6}.crm-popup-upload__icon[_ngcontent-%COMP%]{font-size:18px;color:#9ca3af}.crm-popup-upload__text[_ngcontent-%COMP%]{font-size:13px;font-weight:500;color:#6b7280;margin-top:4px}.crm-popup-upload-files[_ngcontent-%COMP%]{margin-top:10px}.crm-popup-upload-files__item[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:10px;background:#f6f6f6;padding:6px 10px;border-radius:6px;margin-bottom:6px;font-size:13px}.crm-popup-upload-files__name[_ngcontent-%COMP%]{color:#444;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.crm-popup-upload-files__remove[_ngcontent-%COMP%]{border:0;background:transparent;cursor:pointer;color:#ef4444;font-size:13px}.crm-popup-product-search[_ngcontent-%COMP%]{position:relative}.crm-popup-product-search[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{width:100%}.crm-popup-product-suggestions[_ngcontent-%COMP%]{position:absolute;z-index:1050;top:100%;left:0;right:0;max-height:200px;overflow-y:auto;background:#fff;border:1px solid #d1d5db;border-radius:6px;box-shadow:0 4px 12px #00000014}.crm-popup-product-suggestions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{display:block;width:100%;text-align:left;border:0;background:none;padding:6px 8px;font-size:13px}.crm-popup-product-suggestions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{background:#f3f4f6}.crm-popup-product-row[_ngcontent-%COMP%] > .crm-popup-help[_ngcontent-%COMP%]{grid-column:1 / -1}.crm-popup-input-group[_ngcontent-%COMP%]{display:flex;align-items:center;border:1px solid #d1d5db;border-radius:6px;background:#fff;overflow:hidden}.crm-popup-input-group[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{padding:0 8px;color:#6b7280;font-size:13px;background:#f9fafb;border-right:1px solid #d1d5db;align-self:stretch;display:flex;align-items:center}.crm-popup-input-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{border:0;padding:6px 8px;flex:1}.crm-popup-add-btn[_ngcontent-%COMP%]{margin-top:12px;margin-bottom:16px}.crm-popup-help[_ngcontent-%COMP%]{display:block;font-size:11px;color:#9ca3af;font-style:italic;margin-top:6px}
1.crm-popup-mt-2[_ngcontent-%COMP%]{margin-top:8px}.crm-popup-callout[_ngcontent-%COMP%]{margin:6px 0 12px;padding-left:18px;font-size:13px;color:#374151}.crm-popup-callout[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{margin-bottom:4px}.crm-popup-callout-card[_ngcontent-%COMP%]{background:#fef3c7;border:1px solid #fde68a;border-radius:6px;padding:10px 12px;font-size:13px;color:#92400e;margin-bottom:12px}.crm-popup-preview[_ngcontent-%COMP%]{background:#f9fafb;border:1px solid #e5e7eb;border-radius:8px;padding:12px 14px;margin-top:14px}.crm-popup-preview[_ngcontent-%COMP%] .pv-head[_ngcontent-%COMP%]{font-weight:600;font-size:13px;margin-bottom:8px;color:#111827}.crm-popup-preview[_ngcontent-%COMP%] .pv-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;font-size:12px;color:#4b5563;padding:3px 0}.crm-popup-preview[_ngcontent-%COMP%] .pv-total[_ngcontent-%COMP%]{display:flex;justify-content:space-between;font-weight:600;font-size:13px;color:#111827;margin-top:6px;padding-top:6px;border-top:1px solid #e5e7eb}.crm-popup-footer[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:flex-end;gap:8px;padding:14px 20px;border-top:1px solid #e5e7eb;background:#fafbfc}.crm-popup-footer[_ngcontent-%COMP%] .btn-ghost[_ngcontent-%COMP%]{border:0;background:transparent;color:#4b5563;padding:7px 14px;border-radius:6px;font-size:13px;cursor:pointer}.crm-popup-footer[_ngcontent-%COMP%] .btn-ghost[_ngcontent-%COMP%]:hover{background:#f3f4f6;color:#111827}.crm-popup-footer[_ngcontent-%COMP%] .btn-ghost.btn-xs[_ngcontent-%COMP%]{padding:2px 7px;font-size:16px;line-height:1}.crm-popup-footer[_ngcontent-%COMP%] .btn-primary[_ngcontent-%COMP%]{border:0;background:#2563eb;color:#fff;padding:7px 16px;border-radius:6px;font-size:13px;font-weight:500;cursor:pointer}.crm-popup-footer[_ngcontent-%COMP%] .btn-primary[_ngcontent-%COMP%]:hover{background:#1d4ed8}"]})}}return o})();var La=o=>({sidebarCompactMode:o}),_i=(()=>{class o{constructor(e){this.breakpointObserver=e,this.isSidebarCompact=!1}ngOnInit(){this.breakpointObserver.observe(["(max-width: 1400px)"]).subscribe(e=>{this.isSidebarCompact=e.matches})}static{this.\u0275fac=function(n){return new(n||o)(E(Dn))}}static{this.\u0275cmp=V({type:o,selectors:[["app-crm-layout"]],decls:93,vars:16,consts:[[1,"crm-module","commonModuleLayout-container",3,"ngClass"],[1,"commonModuleLayout-sidebar"],[1,"nav-menu"],["routerLink","./dashboard/sales-manager","routerLinkActive","active","placement","right","triggers","mouseenter:mouseleave","popoverClass","sidebarPopover","container","body",3,"ngbPopover"],[1,"ri-dashboard-line"],["appTranslate",""],["appTranslate","",1,"commonModuleLayout-sidebar-title"],["routerLink","./leads","routerLinkActive","active","placement","right","triggers","mouseenter:mouseleave","popoverClass","sidebarPopover","container","body",3,"ngbPopover"],[1,"ri-user-add-line"],["routerLink","./opportunities","routerLinkActive","active","placement","right","triggers","mouseenter:mouseleave","popoverClass","sidebarPopover","container","body",3,"ngbPopover"],[1,"ri-line-chart-line"],["routerLink","./pipeline","routerLinkActive","active","placement","right","triggers","mouseenter:mouseleave","popoverClass","sidebarPopover","container","body",3,"ngbPopover"],[1,"ri-kanban-view"],["routerLink","./forecast","routerLinkActive","active","placement","right","triggers","mouseenter:mouseleave","popoverClass","sidebarPopover","container","body",3,"ngbPopover"],[1,"ri-bar-chart-grouped-line"],["routerLink","./accounts","routerLinkActive","active","placement","right","triggers","mouseenter:mouseleave","popoverClass","sidebarPopover","container","body",3,"ngbPopover"],[1,"ri-building-line"],["routerLink","./renewals","routerLinkActive","active","placement","right","triggers","mouseenter:mouseleave","popoverClass","sidebarPopover","container","body",3,"ngbPopover"],[1,"ri-refresh-line"],["routerLink","./onboarding","routerLinkActive","active","placement","right","triggers","mouseenter:mouseleave","popoverClass","sidebarPopover","container","body",3,"ngbPopover"],[1,"ri-flag-line"],["routerLink","./dashboard/health","routerLinkActive","active","placement","right","triggers","mouseenter:mouseleave","popoverClass","sidebarPopover","container","body",3,"ngbPopover"],[1,"ri-heart-pulse-line"],["routerLink","./advocacy","routerLinkActive","active","placement","right","triggers","mouseenter:mouseleave","popoverClass","sidebarPopover","container","body",3,"ngbPopover"],[1,"ri-medal-line"],["routerLink","./knowledge-base","routerLinkActive","active","placement","right","triggers","mouseenter:mouseleave","popoverClass","sidebarPopover","container","body",3,"ngbPopover"],[1,"ri-book-open-line"],["routerLink","./analytics","routerLinkActive","active","placement","right","triggers","mouseenter:mouseleave","popoverClass","sidebarPopover","container","body",3,"ngbPopover"],[1,"ri-bar-chart-line"],["routerLink","./tickets","routerLinkActive","active","placement","right","triggers","mouseenter:mouseleave","popoverClass","sidebarPopover","container","body",3,"ngbPopover"],[1,"ri-ticket-line"],["type","button",1,"btn","commonModuleLayout-sidebar-btn",3,"click"],[1,"ri-arrow-left-double-line"],["data-copilot","closed",1,"commonModuleLayout-content","crm-copilot-shell","app-shell"],["module","crm","name","CRM Copilot","greeting","Hi! I'm Vipani's CRM Copilot. Ask me about your accounts, deals and activities.","placeholder","Ask about accounts, deals\u2026","shellSelector",".crm-copilot-shell.app-shell"]],template:function(n,t){n&1&&(i(0,"div",0)(1,"div",1)(2,"nav",2)(3,"ul")(4,"li")(5,"a",3),b(6,"i",4),i(7,"span",5),a(8,"Dashboard"),r()()(),i(9,"li")(10,"h4",6),a(11,"SALES"),r()(),i(12,"li")(13,"a",7),b(14,"i",8),i(1
15,"span",5),a(16,"Leads"),r()()(),i(17,"li")(18,"a",9),b(19,"i",10),i(20,"span",5),a(21,"Opportunities"),r()()(),i(22,"li")(23,"a",11),b(24,"i",12),i(25,"span",5),a(26,"Pipeline"),r()()(),i(27,"li")(28,"a",13),b(29,"i",14),i(30,"span",5),a(31,"Forecast"),r()()(),i(32,"li")(33,"h4",6),a(34,"ACCOUNTS"),r()(),i(35,"li")(36,"a",15),b(37,"i",16),i(38,"span",5),a(39,"Accounts"),r()()(),i(40,"li")(41,"a",17),b(42,"i",18),i(43,"span",5),a(44,"Renewals"),r()()(),i(45,"li")(46,"h4",6),a(47,"CUSTOMER SUCCESS"),r()(),i(48,"li")(49,"a",19),b(50,"i",20),i(51,"span",5),a(52,"Onboarding"),r()()(),i(53,"li")(54,"a",21),b(55,"i",22),i(56,"span",5),a(57,"Health"),r()()(),i(58,"li")(59,"a",23),b(60,"i",24),i(61,"span",5),a(62,"Advocacy"),r()()(),i(63,"li")(64,"a",25),b(65,"i",26),i(66,"span",5),a(67,"Knowledge Base"),r()()(),i(68,"li")(69,"h4",6),a(70,"INSIGHTS"),r()(),i(71,"li")(72,"a",27),b(73,"i",28),i(74,"span",5),a(75,"Analytics"),r()()(),i(76,"li")(77,"h4",6),a(78,"FOR OTHER ROLES"),r()(),i(79,"li")(80,"a",29),b(81,"i",30),i(82,"span",5),a(83,"Tickets "),r()()()()(),i(84,"button",31),h("click",function(){return t.isSidebarCompact=!t.isSidebarCompact}),b(85,"i",32),r()(),i(86,"div",33),b(87,"router-outlet")(88,"app-common-ai-chat",34),r(),b(89,"app-crm-confirm-modal")(90,"app-crm-stage-form-modal")(91,"app-crm-onboard-customer-modal")(92,"app-crm-popup-modal"),r()),n&2&&(c("ngClass",He(14,La,t.isSidebarCompact)),l(5),c("ngbPopover",t.isSidebarCompact?"Dashboard":null),l(8),c("ngbPopover",t.isSidebarCompact?"Leads":null),l(5),c("ngbPopover",t.isSidebarCompact?"Opportunities":null),l(5),c("ngbPopover",t.isSidebarCompact?"Pipeline":null),l(5),c("ngbPopover",t.isSidebarCompact?"Forecast":null),l(8),c("ngbPopover",t.isSidebarCompact?"Accounts":null),l(5),c("ngbPopover",t.isSidebarCompact?"Renewals":null),l(8),c("ngbPopover",t.isSidebarCompact?"Onboarding":null),l(5),c("ngbPopover",t.isSidebarCompact?"Health":null),l(5),c("ngbPopover",t.isSidebarCompact?"Advocacy":null),l(5),c("ngbPopover",t.isSidebarCompact?"Knowledge Base":null),l(8),c("ngbPopover",t.isSidebarCompact?"Analytics":null),l(8),c("ngbPopover",t.isSidebarCompact?"Tickets":null))},dependencies:[j,Pn,Fn,An,Gn,ri,L,ei,ci,mi,ui,gi],styles:[`.commonModuleLayout-content{background-color:#eef2f6}@keyframes module-chart-spin{to{transform:rotate(360deg)}}.ai-activity-strip{display:flex;align-items:center;gap:12px;padding:10px 16px;background:var(--theme-bg-light);border:1px solid rgba(var(--theme-primary-rgb),.08);border-radius:12px;margin-bottom:16px;flex-wrap:wrap}.ai-activity-strip-left{display:flex;align-items:center;gap:8px;flex-shrink:0}.ai-activity-pulse{width:8px;height:8px;border-radius:50%;background:#059669;box-shadow:0 0 #05966999;animation:ai-activity-pulse 2s infinite}@keyframes ai-activity-pulse{0%{box-shadow:0 0 #05966999}70%{box-shadow:0 0 0 8px #05966900}to{box-shadow:0 0 #05966900}}.ai-activity-label{font-size:12px;font-weight:700;color:var(--theme-primary)}.ai-activity-pills{display:flex;gap:6px;flex-wrap:wrap}.ai-agent-pill{font-size:11px;font-weight:500;padding:3px 8px;border-radius:9999px;white-space:nowrap}.ai-agent-pill-blue{background:#0369a1;color:#fff}.ai-agent-pill-amber{background:#d97706;color:#fff}.ai-agent-pill-green{background:#059669;color:#fff}.ai-agent-pill-red{background:#dc2626;color:#fff}.ai-agent-pill-purple{background:#7c3aed;color:#fff}.ai-activity-log-link{font-size:12px;color:var(--theme-primary);text-decoration:none;margin-left:auto}.ai-activity-log-link:hover{color:var(--theme-logo-dark)}.ai-briefing-card{background:var(--theme-bg-light);color:var(--theme-primary);border:1px solid rgba(var(--theme-primary-rgb),.07);border-radius:8px;padding:18px 20px;margin-bottom:18px;box-shadow:0 2px 6px #0f172a0d}.ai-briefing-card__header{display:flex;align-items:center;gap:12px;margin-bottom:4px}.ai-briefing-card__avatar{width:40px;height:40px;border-radius:8px;background:rgba(var(--theme-primary-rgb),.1);border:1px solid rgba(var(--theme-primary-rgb),.2);display:inline-flex;align-items:center;justify-content:center;color:var(--theme-primary);font-size:18px;flex-shrink:0}.ai-briefing-card__title{font-size:15px;font-weight:700;color:var(--theme-primary)}.ai-briefing-card__sub{font-size:12px;color:rgba(var(--theme-primary-rgb),.6);margin-top:2px}.ai-briefing-card__body{display:flex;flex-direction:column;gap:10px;margin-top:14px}
1.ai-briefing-action{display:flex;align-items:center;gap:12px;padding:11px 14px;border-radius:8px;background:rgba(var(--theme-primary-rgb),.05);border:1px solid rgba(var(--theme-primary-rgb),.1)}.ai-briefing-action__bullet{width:10px;height:10px;border-radius:50%;flex-shrink:0}.ai-briefing-action__bullet--red{background:#ef4444;box-shadow:0 0 0 4px #ef44442e}.ai-briefing-action__bullet--amber{background:#f59e0b;box-shadow:0 0 0 4px #f59e0b2e}.ai-briefing-action__bullet--blue{background:#38bdf8;box-shadow:0 0 0 4px #38bdf82e}.ai-briefing-action__bullet--green{background:#10b981;box-shadow:0 0 0 4px #10b9812e}.ai-briefing-action__text{flex:1;min-width:0}.ai-briefing-action__title{font-size:13px;font-weight:600;color:var(--theme-primary);line-height:1.4}.ai-briefing-action__meta{font-size:11.5px;color:rgba(var(--theme-primary-rgb),.6);margin-top:2px}.ai-briefing-action__cta{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;gap:4px;padding:6px 12px;font-size:12px;font-weight:600;border-radius:5px;text-decoration:none;transition:background-color .15s ease,color .15s ease,border-color .15s ease}.ai-briefing-action__cta--primary{background:var(--theme-primary);color:#fff;border:1px solid var(--theme-primary)}.ai-briefing-action__cta--primary:hover{background:var(--theme-logo-dark);border-color:var(--theme-logo-dark);color:#fff}.ai-briefing-action__cta--outline{background:transparent;color:var(--theme-primary);border:1px solid rgba(var(--theme-primary-rgb),.3)}.ai-briefing-action__cta--outline:hover{background:rgba(var(--theme-primary-rgb),.1);color:var(--theme-primary)}.crm-module .crm-tone-red{color:var(--crm-red);background-color:var(--crm-red-soft)}.crm-module .crm-tone-amber{color:var(--crm-amber);background-color:var(--crm-amber-soft)}.crm-module .crm-tone-blue{color:var(--crm-blue);background-color:var(--crm-blue-soft)}.crm-module .crm-tone-green{color:var(--crm-green);background-color:var(--crm-green-soft)}.crm-module .crm-tone-purple{color:var(--crm-purple);background-color:var(--crm-purple-soft)}.crm-module .crm-tone-teal{color:var(--crm-teal);background-color:var(--crm-teal-soft)}.crm-module .crm-tone-rose{color:var(--crm-rose);background-color:var(--crm-rose-soft)}.crm-module .crm-tone-gray{color:var(--crm-gray);background-color:var(--crm-gray-soft)}.crm-module .gap-1{gap:.25rem}.crm-module .gap-2{gap:.5rem}.crm-module .gap-3{gap:1rem}.crm-module .crm-modal-backdrop{position:fixed;inset:0;background-color:#0f172a73;z-index:1050}.crm-module .crm-modal{position:fixed;inset:0;z-index:1055;overflow-y:auto}.crm-module .crm-modal-content{border:none;border-radius:10px;box-shadow:0 24px 48px -16px #0f172a52;overflow:hidden}.crm-module .crm-modal-header{background:var(--crm-surface-alt);border-bottom:1px solid var(--crm-border);padding:.85rem 1.1rem}.crm-module .crm-modal-title{font-size:1rem;font-weight:600;color:var(--crm-text);display:flex;align-items:center;margin:0}.crm-module .crm-modal-close{background:transparent;border:0;font-size:1.5rem;line-height:1;color:var(--crm-text-muted);opacity:.7;cursor:pointer}.crm-module .crm-modal-close:hover{opacity:1}.crm-module .crm-modal-body{padding:1.1rem;font-size:.95rem;color:var(--crm-text);line-height:1.5}.crm-module .crm-modal-footer{background:var(--crm-surface-alt);border-top:1px solid var(--crm-border);padding:.7rem 1.1rem;display:flex;justify-content:flex-end;gap:.5rem}.crm-module .crm-modal-confirm-btn{color:#fff;border:1px solid transparent;font-weight:500}.crm-module .crm-modal-confirm-btn:hover{filter:brightness(.95)}.crm-module .crm-modal-confirm-primary{background-color:var(--crm-blue);border-color:var(--crm-blue)}.crm-module .crm-modal-confirm-danger{background-color:var(--crm-red);border-color:var(--crm-red)}.crm-module .crm-modal-confirm-warning{background-color:var(--crm-amber);border-color:var(--crm-amber);color:#1f2937}.crm-module .crm-modal-confirm-success{background-color:var(--crm-green);border-color:var(--crm-green)}.crm-module .crm-modal-tone-danger .crm-modal-title i{color:var(--crm-red)}.crm-module .crm-modal-tone-warning .crm-modal-title i{color:var(--crm-amber)}.crm-module .crm-modal-tone-primary .crm-modal-title i{color:var(--crm-blue)}.crm-module .crm-modal-tone-success .crm-modal-title i{color:var(--crm-green)}.crm-module .crm-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:2rem 1rem;color:var(--crm-text-muted)}.crm-module .crm-empty-state-icon{width:48px;height:48px;border-radius:50%;background:var(--crm-blue-soft);color:var(--crm-blue);display:flex;align-items:center;justify-content:center;font-size:1.5rem;margin-bottom:.75rem}.crm-module .crm-empty-state-title{font-size:1.05rem;font-weight:600;color:var(--crm-text);margin-bottom:.25rem}.crm-module .crm-empty-state-subtitle{font-size:.9rem;color:var(--crm-text-muted);max-width:360px;margin-bottom:.75rem}.crm-module .crm-empty-state-cta i{margin-right:4px}.crm-module .crm-empty-state-compact{padding:1rem}
1.crm-module .crm-empty-state-compact .crm-empty-state-icon{width:36px;height:36px;font-size:1.2rem;margin-bottom:.4rem}.crm-module .crm-empty-state-compact .crm-empty-state-title{font-size:1rem}.crm-module .crm-empty-state-compact .crm-empty-state-subtitle{font-size:.85rem}.crm-module .crm-chart-host{position:relative;width:100%;background:var(--crm-surface);border:1px dashed var(--crm-border);border-radius:6px;padding:6px;display:flex;align-items:stretch;justify-content:stretch}.crm-module .crm-chart-host>highcharts-chart{display:block;width:100%}.crm-module .crm-chart-skeleton,.crm-module .crm-chart-empty{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;color:var(--crm-text-muted);font-size:.95rem}.crm-module .crm-chart-empty-icon{font-size:1.8rem;color:var(--crm-gray);opacity:.6}.crm-module .crm-chart-skeleton-spinner{width:18px;height:18px;border:2px solid var(--crm-border);border-top-color:var(--crm-blue);border-radius:50%;animation:module-chart-spin .8s linear infinite}.crm-module .table-dashboard .table thead :is(td,th){font-size:.85rem;white-space:nowrap}.crm-module .table-dashboard .table tbody td{font-size:.9rem;vertical-align:middle}.crm-module .table-dashboard .table .commonBadge.commonBadge-sm{min-width:auto;padding:.25rem .5rem;font-size:.75rem}.crm-module .table-dashboard .actionsTH{text-align:right}.crm-module .table-dashboard .actionsTD{text-align:right;white-space:nowrap}.crm-module .card-body>.table-dashboard.table-x-negativeMargin:first-child{margin-top:-1.25rem}.crm-module .card-body>.table-dashboard.table-x-negativeMargin:last-child{margin-bottom:-1.25rem}.crm-module .card-body.p-3>.table-dashboard.table-x-negativeMargin:first-child{margin-top:-1rem}.crm-module .card-body.p-3>.table-dashboard.table-x-negativeMargin:last-child{margin-bottom:-1rem}.crm-snackbar{font-size:.95rem;border-radius:6px}.crm-snackbar-success .mdc-snackbar__surface,.crm-snackbar-success .mat-mdc-snack-bar-container{background-color:var(--crm-green)!important;color:#fff!important}.crm-snackbar-warning .mdc-snackbar__surface,.crm-snackbar-warning .mat-mdc-snack-bar-container{background-color:var(--crm-amber)!important;color:#fff!important}.crm-snackbar-error .mdc-snackbar__surface,.crm-snackbar-error .mat-mdc-snack-bar-container{background-color:var(--crm-red)!important;color:#fff!important}.crm-snackbar-info .mdc-snackbar__surface,.crm-snackbar-info .mat-mdc-snack-bar-container{background-color:var(--crm-blue)!important;color:#fff!important}.crm-snackbar-success .mdc-button__label,.crm-snackbar-warning .mdc-button__label,.crm-snackbar-error .mdc-button__label,.crm-snackbar-info .mdc-button__label{color:#fff!important}.crm-module{--color-primary: #0F172A;--color-primary-700: #1E293B;--color-primary-600: #334155;--color-primary-500: #475569;--color-primary-400: #64748B;--color-primary-300: #94A3B8;--color-primary-200: #CBD5E1;--color-primary-100: #E2E8F0;--color-primary-50: #F1F5F9;--color-accent: var(--theme-blue, #0369A1);--color-accent-hover: var(--theme-blue, #0284C7);--color-accent-light: #E0F2FE;--color-accent-50: #F0F9FF;--color-bg: #F8FAFC;--color-surface: #FFFFFF;--color-text: #020617;--color-text-secondary: #334155;--color-text-muted: #64748B;--color-border: #E2E8F0;--color-border-light: #F1F5F9;--color-success: #059669;--color-success-light: #D1FAE5;--color-success-bg: #ECFDF5;--color-warning: #D97706;--color-warning-light: #FEF3C7;--color-warning-bg: #FFFBEB;--color-error: #DC2626;--color-error-light: #FEE2E2;--color-error-bg: #FEF2F2;--color-info: var(--theme-blue, #0369A1);--color-info-light: #DBEAFE;--color-info-bg: #EFF6FF;--color-purple: #7C3AED;--color-purple-light: #EDE9FE;--color-orange: #EA580C;--color-orange-light: #FED7AA;--color-teal: #0D9488;--color-teal-light: #CCFBF1;--radius-sm: 4px;--radius-md: 8px;--radius-lg: 12px;--radius-xl: 16px;--radius-full: 9999px;--shadow-sm: 0 1px 2px 0 rgba(15, 23, 42, .05);--shadow-md: 0 4px 6px -1px rgba(15, 23, 42, .07), 0 2px 4px -2px rgba(15, 23, 42, .05);--shadow-lg: 0 10px 15px -3px rgba(15, 23, 42, .08), 0 4px 6px -4px rgba(15, 23, 42, .05);
1--shadow-xl: 0 20px 25px -5px rgba(15, 23, 42, .1), 0 8px 10px -6px rgba(15, 23, 42, .05);--transition-fast: .15s ease;--transition-base: .2s ease;--transition-slow: .3s ease;--crm-red: #dc2626;--crm-amber: #d97706;--crm-blue: var(--theme-blue, #0369A1);--crm-green: #059669;--crm-purple: #7c3aed;--crm-teal: #0d9488;--crm-rose: #e11d48;--crm-gray: #6b7280;--crm-red-soft: rgba(220, 38, 38, .1);--crm-amber-soft: rgba(217, 119, 6, .12);--crm-blue-soft: rgba(3, 105, 161, .1);--crm-green-soft: rgba(5, 150, 105, .1);--crm-purple-soft: rgba(124, 58, 237, .1);--crm-teal-soft: rgba(13, 148, 136, .1);--crm-rose-soft: rgba(225, 29, 72, .1);--crm-gray-soft: rgba(107, 114, 128, .1);--crm-text: #1f2937;--crm-text-muted: #6b7280;--crm-border: #e5e7eb;--crm-border-soft: #f1f5f9;--crm-surface: #ffffff;--crm-surface-alt: #f9fafb}.crm-module .crm-modal-body{font-size:1rem}.crm-module .crm-empty-state-subtitle{font-size:.95rem}.crm-module .crm-page-body{padding:0;min-width:0}.crm-module .crm-page-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:24px}.crm-module .crm-page-title{font-size:1.5rem;font-weight:700;color:var(--color-primary);letter-spacing:-.5px;line-height:1.2;margin:0}.crm-module .crm-page-subtitle{font-size:.875rem;color:var(--color-text-muted);margin:4px 0 0}.crm-module .crm-page-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.crm-module .crm-section-header{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px;flex-wrap:wrap}.crm-module .crm-section-title{font-size:.9375rem;font-weight:700;color:var(--color-primary)}.crm-module .crm-section-sub{font-size:.8125rem;color:var(--color-text-muted)}.crm-module .crm-section-action{font-size:.8125rem;font-weight:600;color:var(--color-accent);cursor:pointer;text-decoration:none}.crm-module .crm-section-action:hover{color:var(--color-accent-hover)}.crm-module .card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);min-width:0}.crm-module .card-header{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid var(--color-border);background:var(--color-surface);flex-wrap:wrap;gap:10px;min-width:0}.crm-module .card-title{font-size:.9375rem;font-weight:700;color:var(--color-primary);letter-spacing:-.2px;margin:0}.crm-module .card-subtitle{font-size:.75rem;color:var(--color-text-muted);margin-top:2px}.crm-module .card-body{padding:20px}.crm-module .card-footer{padding:14px 20px;border-top:1px solid var(--color-border-light);background:var(--color-primary-50);border-radius:0 0 var(--radius-lg) var(--radius-lg)}.crm-module .btn:not(.commonModuleLayout-sidebar-btn){border-radius:var(--radius-md);font-weight:600}.crm-module .btn-xs{padding:3px 8px;font-size:.6875rem;border-radius:var(--radius-sm)}.crm-module .crm-btn-icon{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:var(--radius-md);border:1px solid transparent;background:transparent;color:var(--color-text-muted);cursor:pointer;transition:all var(--transition-fast)}.crm-module .crm-btn-icon:hover{background:var(--color-primary-50);color:var(--color-primary)}.crm-module .crm-btn-icon i{font-size:1.05rem}.crm-module .crm-stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px;margin-bottom:24px;min-width:0}.crm-module .crm-stat-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:20px;box-shadow:var(--shadow-sm);transition:box-shadow var(--transition-base),transform var(--transition-base)}.crm-module .crm-stat-card:hover{box-shadow:var(--shadow-md);transform:translateY(-1px)}.crm-module .crm-stat-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.crm-module .crm-stat-label{font-size:.75rem;font-weight:600;color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.5px}.crm-module .crm-stat-icon{width:38px;height:38px;border-radius:var(--radius-md);display:flex;align-items:center;justify-content:center;flex-shrink:0}.crm-module .crm-stat-icon i{font-size:1.15rem}.crm-module .crm-stat-icon-blue{background:var(--color-info-light);color:var(--color-accent)}.crm-module .crm-stat-icon-green{background:var(--color-success-light);color:var(--color-success)}.crm-module .crm-stat-icon-amber{background:var(--color-warning-light);color:var(--color-warning)}.crm-module .crm-stat-icon-red{background:var(--color-error-light);color:var(--color-error)}.crm-module .crm-stat-icon-purple{background:var(--color-purple-light);color:var(--color-purple)}.crm-module .crm-stat-icon-teal{background:var(--color-teal-light);color:var(--color-teal)}.crm-module .crm-stat-value{font-size:1.875rem;font-weight:600;color:var(--color-primary);letter-spacing:-1px;line-height:1.1}.crm-module .crm-stat-trend{display:flex;align-items:center;gap:4px;margin-top:6px;font-size:.75rem;font-weight:500}.crm-module .crm-stat-trend i{font-size:.95rem}.crm-module .crm-stat-trend-up{color:var(--color-success)}.crm-module .crm-stat-trend-down{color:var(--color-error)}.crm-module .crm-stat-trend-label{color:var(--color-text-muted);font-weight:400}.crm-module .crm-table-wrapper{overflow-x:auto;-webkit-overflow-scrolling:touch;border-radius:var(--radius-lg);border:1px solid var(--color-border);box-shadow:var(--shadow-sm)}.crm-module .crm-table-wrapper.crm-table-wrapper-flush{border:none;border-radius:0;box-shadow:none}.crm-module .crm-data-table{width:100%;min-width:480px;border-collapse:collapse;background:var(--color-surface)}.crm-module .crm-data-table thead{background:var(--color-primary-50);border-bottom:1px solid var(--color-border)}.crm-module .crm-data-table th{padding:11px 16px;font-size:.6875rem;font-weight:700;color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.5px;text-align:left;white-space:nowrap}.crm-module .crm-data-table td{padding:13px 16px;font-size:.8125rem;color:var(--color-text-secondary);border-bottom:1px solid var(--color-border-light);vertical-align:middle}.crm-module .crm-data-table tbody tr{transition:background var(--transition-fast)}.crm-module .crm-data-table tbody tr:hover{background:var(--color-primary-50)}.crm-module .crm-data-table tbody tr:last-child td{border-bottom:none}.crm-module .crm-data-table .crm-cell-primary{font-weight:600;color:var(--color-primary)}.crm-module a.crm-cell-primary,.crm-module .crm-cell-link{font-weight:600;color:var(--color-primary);cursor:pointer}.crm-module a.crm-cell-primary:hover,.crm-module .crm-cell-link:hover{color:var(--color-accent);text-decoration:underline}.crm-module .crm-row-risk{background:var(--color-error-bg)!important}.crm-module .crm-data-table th.crm-sort,.crm-module .crm-data-table th.crm-sort-asc,.crm-module .crm-data-table th.crm-sort-desc{curs
1or:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap}.crm-module .crm-data-table th.crm-sort:after,.crm-module .crm-data-table th.crm-sort-asc:after,.crm-module .crm-data-table th.crm-sort-desc:after{margin-left:6px;font-size:10px;display:inline-block}.crm-module .crm-data-table th.crm-sort:hover,.crm-module .crm-data-table th.crm-sort-asc:hover,.crm-module .crm-data-table th.crm-sort-desc:hover{color:var(--color-text-secondary)}.crm-module .crm-data-table th.crm-sort:after{content:"\\21c5";color:var(--color-text-muted);opacity:.45}.crm-module .crm-data-table th.crm-sort-asc:after{content:"\\25b2";color:var(--color-accent)}.crm-module .crm-data-table th.crm-sort-desc:after{content:"\\25bc";color:var(--color-accent)}.crm-module .crm-badge{display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border-radius:var(--radius-full);font-size:.6875rem;font-weight:600;line-height:1.4;white-space:nowrap}.crm-module .crm-badge-green{background:var(--color-success-light);color:var(--color-success)}.crm-module .crm-badge-red{background:var(--color-error-light);color:var(--color-error)}.crm-module .crm-badge-amber{background:var(--color-warning-light);color:var(--color-warning)}.crm-module .crm-badge-blue{background:var(--color-info-light);color:var(--color-info)}.crm-module .crm-badge-purple{background:var(--color-purple-light);color:var(--color-purple)}.crm-module .crm-badge-gray{background:var(--color-primary-100);color:var(--color-primary-500)}.crm-module .crm-badge-teal{background:var(--color-teal-light);color:var(--color-teal)}.crm-module .crm-badge-navy{background:var(--color-primary-700);color:#fff}.crm-module .crm-badge-orange{background:var(--color-orange-light);color:var(--color-orange)}.crm-module .crm-badge-dot:before{content:"";display:inline-block;width:5px;height:5px;border-radius:50%;background:currentColor}.crm-module .crm-form-group{margin-bottom:16px;display:flex;flex-direction:column}.crm-module .crm-form-label{display:block;font-size:.8125rem;font-weight:500;color:#374151;margin-bottom:5px;line-height:1.4}.crm-module .crm-form-label-required:after{content:" *";color:var(--color-error)}.crm-module .crm-tag-field{display:flex;flex-wrap:wrap;align-items:center;gap:6px;min-height:40px;padding:5px 8px;border:1.5px solid #D1D5DB;border-radius:8px;background:#fff;cursor:text;transition:border-color .15s ease,box-shadow .15s ease}.crm-module .crm-tag-field.is-focused{border-color:var(--color-accent);box-shadow:0 0 0 3px #0369a124}.crm-module .crm-tag-chip{display:inline-flex;align-items:center;gap:6px;max-width:100%;padding:3px 8px 3px 12px;border-radius:999px;background:#e5e7eb;color:#374151;font-size:.8125rem;line-height:1.4}.crm-module .crm-tag-chip>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.crm-module .crm-tag-chip-remove{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:16px;height:16px;padding:0;border:none;border-radius:50%;background:#6b7280;color:#fff;font-size:11px;line-height:1;cursor:pointer;transition:background .15s ease}.crm-module .crm-tag-chip-remove:hover{background:#374151}.crm-module .crm-tag-input{flex:1 1 140px;min-width:140px;height:28px;padding:0 2px;border:none;outline:none;background:transparent;font-size:.875rem;font-family:inherit;color:#111827}.crm-module .crm-tag-input::placeholder{color:#9ca3af}.crm-module .crm-form-input,.crm-module .crm-form-select,.crm-module .crm-form-textarea{width:100%;height:40px;padding:0 12px;border:1.5px solid #D1D5DB;border-radius:8px;font-size:.875rem;font-family:inherit;font-weight:400;color:#111827;background:#fff;outline:none;transition:border-color .15s ease,box-shadow .15s ease,background .15s ease;-webkit-appearance:none;appearance:none;line-height:1.5}.crm-module .crm-form-input::placeholder,.crm-module .crm-form-select::placeholder,.crm-module .crm-form-textarea::placeholder{color:#9ca3af}.crm-module .crm-form-input:focus,.crm-module .crm-form-select:focus,.crm-module .crm-form-textarea:focus{border-color:var(--color-accent);box-shadow:0 0 0 3px #0369a124}.crm-module .crm-form-input:disabled,.crm-module .crm-form-select:disabled,.crm-module .crm-form-textarea:disabled{background:#f9fafb;color:#9ca3af;border-color:#e5e7eb;cursor:not-allowed}.crm-module .crm-form-textarea{height:auto;min-height:88px;padding:10px 12px;resize:vertical;line-height:1.6}.crm-module .crm-form-select{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewB
1ox='0 0 24 24' fill='none' stroke='%2364748B' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center;padding-right:34px;cursor:pointer}.crm-module .crm-form-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px}.crm-module .crm-form-row-2{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.crm-module .crm-form-row-3{grid-template-columns:minmax(0,1fr) minmax(0,1fr) minmax(0,1fr)}@media (max-width: 640px){.crm-module .crm-form-row-2,.crm-module .crm-form-row-3{grid-template-columns:minmax(0,1fr)}}.crm-module .crm-form-help{font-size:.75rem;color:#6b7280;margin-top:5px;line-height:1.4}.crm-module .crm-form-error{font-size:.75rem;color:#dc2626;margin-top:5px;line-height:1.4}.crm-module .crm-search-filter-bar{display:flex;align-items:center;gap:8px;margin-bottom:16px;flex-wrap:wrap}.crm-module .crm-search-wrap{position:relative;flex:1;min-width:220px;max-width:360px}.crm-module .crm-search-wrap i{position:absolute;left:11px;top:50%;transform:translateY(-50%);color:#9ca3af;pointer-events:none;font-size:1rem}.crm-module .crm-search-input{width:100%;height:36px;padding:0 12px 0 35px;border:1.5px solid #D1D5DB;border-radius:8px;font-size:.8125rem;font-family:inherit;color:#111827;background:#fff;outline:none;transition:border-color .15s,box-shadow .15s}.crm-module .crm-search-input::placeholder{color:#9ca3af}.crm-module .crm-search-input:focus{border-color:var(--color-accent);box-shadow:0 0 0 3px #0369a11f}.crm-module .crm-filter-select{height:36px;padding:0 30px 0 10px;border:1.5px solid #D1D5DB;border-radius:8px;font-size:.8125rem;font-family:inherit;color:#374151;background:#fff;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%2364748B' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 8px center;outline:none;cursor:pointer;-webkit-appearance:none;appearance:none;min-width:110px;max-width:220px}.crm-module .crm-filter-select:focus{border-color:var(--color-accent);box-shadow:0 0 0 3px #0369a11f}.crm-module .crm-tabs-bar{display:flex;border-bottom:2px solid var(--color-border);gap:0;margin-bottom:20px;overflow-x:auto;scrollbar-width:none}.crm-module .crm-tabs-bar::-webkit-scrollbar{display:none}.crm-module .crm-tab-item{display:flex;align-items:center;gap:6px;padding:10px 18px;font-size:.875rem;font-weight:600;color:var(--color-text-muted);cursor:pointer;background:transparent;border:none;border-bottom:2px solid transparent;margin-bottom:-2px;transition:all var(--transition-fast);white-space:nowrap}.crm-module .crm-tab-item:hover{color:var(--color-primary);background:var(--color-primary-50)}.crm-module .crm-tab-item:focus,.crm-module .crm-tab-item:focus-visible{outline:none}.crm-module .crm-tab-item.active{color:var(--color-accent);border-bottom-color:var(--color-accent);background:var(--color-accent-50)}.crm-module .crm-tab-count{background:var(--color-primary-100);color:var(--color-primary-500);font-size:.6875rem;font-weight:700;padding:1px 6px;border-radius:var(--radius-full)}.crm-module .crm-tab-item.active .crm-tab-count{background:var(--color-info-light);color:var(--color-accent)}.crm-module .crm-tabs-pills{display:flex;gap:.4rem;flex-wrap:wrap;margin-bottom:16px}.crm-module .crm-tab-pill{font-size:.8125rem;font-weight:600;color:var(--color-text-muted);padding:6px 14px;border-radius:999px;background:var(--color-surface);border:1px solid var(--color-border);cursor:pointer}.crm-module .crm-tab-pill:hover{color:var(--color-primary);background:var(--color-primary-50)}.crm-module .crm-tab-pill:focus,.crm-module .crm-tab-pill:focus-visible{outline:none}.crm-module .crm-tab-pill.active{color:#fff;background:var(--color-accent);border-color:var(--color-accent)}.crm-module .crm-step-progress{display:flex;align-items:center;gap:0;margin-bottom:32px}.crm-module .crm-step-item{display:flex;align-items:center;flex:0 1 auto}.crm-module .crm-step-wrapper{display:flex;flex-direction:column;align-items:center}.crm-module .crm-step-circle{width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.875rem;font-weight:700;flex-shrink:0;transition:all var(--transition-base);background:var(--color-surface);border:2px solid var(--color-border);color:var(--color-text-muted)}.crm-module .crm-step-circle-active{background:var(--color-accent);border-color:var(--color-accent);color:#fff;box-shadow:0 0 0 4px var(--color-info-light)}.crm-module .crm-step-circle-done{background:var(--color-success);border-color:var(--color-success);color:#fff}.crm-module .crm-step-connector{flex:1;height:2px;background:var(--color-border);margin:-10px 8px 0}.crm-module .crm-step-connector-done{background:var(--color-success)}.crm-module .crm-step-label{margin-top:6px;font-size:.75rem;font-weight:600;color:var(--color-text-muted);text-align:center;white-space:nowrap}.crm-module .crm-step-label-active{color:var(--color-accent)}.crm-module .crm-step-label-done{color:var(--color-success)}.crm-module .crm-progress-wrap{background:var(--color-primary-100);border-radius:var(--radius-full);height:6px;overflow:hidden}.crm-module .crm-progress-bar{height:100%;border-radius:var(--radius-full);transition:width var(--transition-slow);background:var(--color-accent)}.crm-module .crm-progress-bar-blue{background:var(--color-accent)}.crm-module .crm-progress-bar-green{background:var(--color-success)}.crm-module .crm-progress-bar-amber{background:var(--color-warning)}.crm-module .crm-progress-bar-red{background:var(--color-error)}.crm-module .crm-progress-bar-purple{background:var(--color-purple)}.crm-module .crm-alert{display:flex;align-items:flex-start;gap:12px;padding:14px 16px;border-radius:var(--radius-md);border:1px solid;font-size:.8125rem}.crm-module .crm-alert-info{background:var(--color-info-bg);border-color:var(--color-info-light);color:var(--color-info)}.crm-module .crm-alert-success{background:var(--color-success-bg);border-color:var(--color-success-light);color:var(--color-success)}.crm-module .crm-alert-warning{background:var(--color-warning-bg);border-color:var(--color-warning-light);color:var(--color-warning)}.crm-module .crm-alert-error{background:var(--color-error-bg);border-color:var(--color-error-light);color:var(--color-error)}.crm-module .crm-alert-title{font-weight:700}.crm-module .crm-alert-text{color:var(--color-text-secondary);margin-top:2px}.crm-module .crm-timeline{position:relative;padding-left:24px}.crm-module .crm-timeline:before{content:"";position:absolute;
1left:7px;top:4px;bottom:4px;width:2px;background:var(--color-border)}.crm-module .crm-timeline-item{position:relative;margin-bottom:20px}.crm-module .crm-timeline-item:last-child{margin-bottom:0}.crm-module .crm-timeline-dot{position:absolute;left:-22px;top:4px;width:14px;height:14px;border-radius:50%;border:2px solid var(--color-surface);background:var(--color-accent)}.crm-module .crm-timeline-dot-blue{background:var(--color-accent)}.crm-module .crm-timeline-dot-green{background:var(--color-success)}.crm-module .crm-timeline-dot-amber{background:var(--color-warning)}.crm-module .crm-timeline-dot-gray{background:var(--color-primary-300)}.crm-module .crm-timeline-dot-red{background:var(--color-error)}.crm-module .crm-timeline-time{font-size:.6875rem;color:var(--color-text-muted);margin-bottom:3px}.crm-module .crm-timeline-text{font-size:.8125rem;color:var(--color-text-secondary);font-weight:500}.crm-module .crm-timeline-card{border:1px solid var(--color-border);border-radius:8px;overflow:hidden;background:var(--color-surface)}.crm-module .crm-timeline-card__head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding:10px 14px;background:var(--color-bg);border-bottom:1px solid var(--color-border)}.crm-module .crm-timeline-card__title{font-size:.8125rem;font-weight:700;color:var(--color-text)}.crm-module .crm-timeline-card__time{font-size:.6875rem;color:var(--color-text-muted);white-space:nowrap;flex:0 0 auto}.crm-module .crm-timeline-card__body{padding:12px 14px}.crm-module .crm-timeline-field{display:grid;grid-template-columns:120px minmax(0,1fr);gap:10px;font-size:.8125rem;margin-bottom:7px}.crm-module .crm-timeline-field:last-child{margin-bottom:0}.crm-module .crm-timeline-field__label{color:var(--color-text-muted);text-transform:uppercase;font-size:.6875rem;letter-spacing:.4px;line-height:1.5}.crm-module .crm-timeline-field__value{color:var(--color-text);font-weight:500;overflow-wrap:anywhere}.crm-module .crm-timeline-item--card>.crm-timeline-dot{top:13px}@media (max-width: 640px){.crm-module .crm-timeline-field{grid-template-columns:minmax(0,1fr);gap:1px}}.crm-module .crm-avatar{border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-weight:700;flex-shrink:0;width:40px;height:40px;font-size:.875rem;text-transform:uppercase}.crm-module .crm-avatar-xs{width:24px;height:24px;font-size:.625rem}.crm-module .crm-avatar-sm{width:32px;height:32px;font-size:.75rem}.crm-module .crm-avatar-md{width:40px;height:40px;font-size:.875rem}.crm-module .crm-avatar-lg{width:48px;height:48px;font-size:1rem}.crm-module .crm-avatar-xl{width:64px;height:64px;font-size:1.25rem}.crm-module .crm-avatar-blue{background:var(--color-info-light);color:var(--color-accent)}.crm-module .crm-avatar-green{background:var(--color-success-light);color:var(--color-success)}.crm-module .crm-avatar-purple{background:var(--color-purple-light);color:var(--color-purple)}.crm-module .crm-avatar-amber{background:var(--color-warning-light);color:var(--color-warning)}.crm-module .crm-avatar-teal{background:var(--color-teal-light);color:var(--color-teal)}.crm-module .crm-avatar-rose{background:#ffe4e6;color:#e11d48}.crm-module .crm-avatar-indigo{background:#e0e7ff;color:#4338ca}.crm-module .crm-avatar-navy{background:var(--color-primary-100);color:var(--color-primary)}.crm-module .crm-people-cell{display:flex;align-items:center;gap:10px}.crm-module .crm-people-name{font-size:.8125rem;font-weight:600;color:var(--color-primary);line-height:1.3}.crm-module .crm-people-sub{font-size:.75rem;color:var(--color-text-muted)}.crm-module .crm-toggle{position:relative;display:inline-block;width:40px;height:22px;flex-shrink:0}.crm-module .crm-toggle input{opacity:0;width:0;height:0;position:absolute}.crm-module .crm-toggle-slider{position:absolute;inset:0;background:var(--color-primary-200);border-radius:var(--radius-full);transition:background var(--transition-fast);cursor:pointer}.crm-module .crm-toggle-slider:before{content:"";position:absolute;height:16px;width:16px;left:3px;bottom:3px;background:#fff;border-radius:50%;transition:transform var(--transition-fast);box-shadow:var(--shadow-sm)}.crm-module .crm-toggle input:checked+.crm-toggle-slider{background:var(--color-accent)}.crm-module .crm-toggle input:checked+.crm-toggle-slider:before{transform:translate(18px)}.crm-module .crm-checklist-item{display:flex;align-items:flex-start;gap:12px;padding:12px 0;border-bottom:1px solid var(--color-border-light)}.crm-module .crm-checklist-item:last-child{border-bottom:none}.crm-module .crm-checklist-box{width:18px;height:18px;border-radius:var(--radius-sm);border:2px solid var(--color-border);background:var(--color-surface);flex-shrink:0;margin-top:1px;display:flex;align-items:center;justify-content:center;cursor:pointer}.crm-module .crm-checklist-box.checked{background:var(--color-success);border-color:var(--color-success);color:#fff}.crm-module .crm-checklist-text{font-size:.875rem;color:var(--color-text-secondary);flex:1}.crm-module .crm-checklist-text.done{text-decoration:line-through;color:var(--color-text-muted)}.crm-module .crm-accordion-item{border:1px solid var(--color-border);border-radius:var(--radius-lg);overflow:hidden;margin-bottom:8px;
1transition:box-shadow var(--transition-fast)}.crm-module .crm-accordion-item:hover{box-shadow:var(--shadow-md)}.crm-module .crm-accordion-header{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;cursor:pointer;background:var(--color-surface);-webkit-user-select:none;user-select:none}.crm-module .crm-accordion-chevron{transition:transform var(--transition-fast);color:var(--color-text-muted)}.crm-module .crm-accordion-item.open .crm-accordion-chevron{transform:rotate(180deg)}.crm-module .crm-accordion-body{display:none;padding:16px 18px 18px;background:var(--color-surface);border-top:1px solid var(--color-border-light)}.crm-module .crm-accordion-item.open .crm-accordion-body{display:block}.crm-module .crm-grid{display:grid;gap:16px;min-width:0}.crm-module .crm-grid>*{min-width:0}.crm-module .crm-grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}.crm-module .crm-grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}.crm-module .crm-grid-4{grid-template-columns:repeat(4,minmax(0,1fr))}.crm-module .crm-grid-2-1{grid-template-columns:minmax(0,2fr) minmax(0,1fr)}.crm-module .crm-grid-1-2{grid-template-columns:minmax(0,1fr) minmax(0,2fr)}.crm-module .crm-grid-3-1{grid-template-columns:minmax(0,3fr) minmax(0,1fr)}@media (max-width: 992px){.crm-module .crm-grid-2,.crm-module .crm-grid-3,.crm-module .crm-grid-4,.crm-module .crm-grid-2-1,.crm-module .crm-grid-1-2,.crm-module .crm-grid-3-1{grid-template-columns:minmax(0,1fr)}}.crm-module .crm-divider{height:1px;background:var(--color-border);margin:16px 0}.crm-module .crm-text-muted{color:var(--color-text-muted)}.crm-module .crm-text-sm{font-size:.8125rem}.crm-module .crm-text-xs{font-size:.6875rem}.crm-module .crm-fw-600{font-weight:600}.crm-module .crm-fw-700{font-weight:700}.crm-module .crm-score-circle{width:42px;height:42px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-weight:700;font-size:1rem;color:#fff;background:var(--color-accent);flex-shrink:0}.crm-module .crm-score-circle.crm-tone-red{background:var(--crm-red)}.crm-module .crm-score-circle.crm-tone-amber{background:var(--crm-amber)}.crm-module .crm-score-circle.crm-tone-green{background:var(--crm-green)}.crm-module .crm-score-circle.crm-tone-purple{background:var(--crm-purple)}.crm-module .crm-score-circle.crm-tone-gray{background:var(--crm-gray)}.crm-module .crm-health-bar{height:6px;background:var(--color-primary-100);border-radius:999px;overflow:hidden}.crm-module .crm-health-fill{height:100%;border-radius:999px;background:var(--color-success);transition:width .3s ease}.crm-module .crm-health-fill.crm-tone-red{background:var(--crm-red)}.crm-module .crm-health-fill.crm-tone-amber{background:var(--crm-amber)}.crm-module .crm-health-fill.crm-tone-blue{background:var(--crm-blue)}.crm-module .crm-health-fill.crm-tone-green{background:var(--crm-green)}.crm-module .crm-pipeline-grid{display:flex;align-items:flex-start;gap:12px;overflow-x:auto;padding:4px 4px 8px;-webkit-overflow-scrolling:touch}.crm-module .crm-pipeline-col{flex:0 0 280px;width:280px;display:flex;flex-direction:column;background:#f4f6f9;border:1px solid transparent;border-radius:8px;padding:10px;transition:background var(--transition-fast),outline var(--transition-fast)}.crm-module .crm-pipeline-col.is-drag-target{outline:2px dashed var(--color-accent);outline-offset:-4px;background:#eef2ff}.crm-module .crm-pipeline-col.is-drag-source{opacity:.92}.crm-module .crm-pipeline-col-header{display:flex;align-items:center;justify-content:space-between;gap:6px;padding:4px 4px 10px;font-size:.6875rem;font-weight:700;color:#475569;text-transform:uppercase;letter-spacing:.04em}.crm-module .crm-pipeline-card{background:#fff;border:1px solid var(--color-border);border-radius:6px;padding:10px;margin-bottom:8px;box-shadow:0 1px 2px #0f172a0a;cursor:grab;transition:box-shadow .12s ease,transform .12s ease}.crm-module .crm-pipeline-card:last-child{margin-bottom:0}.crm-module .crm-pipeline-card:hover{box-shadow:0 4px 12px #0f172a1a}.crm-module .crm-pipeline-card-title{font-size:.8125rem;font-weight:600;color:#0f172a;margin-bottom:4px}.crm-module .crm-pipeline-card-meta{font-size:.6875rem;color:var(--color-text-muted);display:flex;justify-content:space-between;gap:6px}.crm-module .crm-meta-list{display:grid;grid-template-columns:minmax(140px,auto) 1fr;gap:.45rem 1rem;font-size:.8125rem}.crm-module .crm-meta-list dt{color:var(--color-text-muted);font-weight:500;margin:0}.crm-module .crm-meta-list dd{color:var(--color-primary);margin:0;font-weight:500}.crm-module .crm-line-items{width:100%;font-size:.8125rem;border-collapse:collapse}.crm-module .crm-line-items thead th{font-size:.6875rem;font-weight:700;color:var(--color-text-muted);text-transform:uppercase;background:var(--color-primary-50);border-bottom:1px solid var(--color-border);padding:.5rem .65rem;text-align:left}.crm-module .crm-line-items tbody td,.crm-module .crm-line-items tfoot td{padding:.55rem .65rem;vertical-align:middle;border-bottom:1px solid var(--color-border-light)}.crm-module .crm-line-items tfoot td{background:var(--color-primary-50);font-weight:700;color:var(--color-primary)}.crm-module .crm-detail-panel{position:fixed;top:0;right:0;height:100vh;width:420px;max-width:90vw;background:var(--color-surface);box-shadow:var(--shadow-xl);transform:translate(100%);transition:transform var(--transition-base);z-index:1100;display:flex;flex-direction:column}.crm-module .crm-detail-panel.open{transform:translate(0)}.crm-module .crm-detail-panel-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--color-border)}.crm-module .crm-detail-panel-body{padding:20px;overflow-y:auto;flex:1}.cdk-drag-preview.crm-pipeline-card{box-sizing:border-box;width:260px;background:#fff;border:1px solid #e2e8f0;border-radius:6px;padding:10px;box-shadow:0 10px 28px #0f172a33;list-style:none}.cdk-drag-preview.crm-pipeline-card .crm-pipeline-card-title{font-size:.8125rem;font-weight:600;color:#0f172a;margin-bottom:4px}.cdk-drag-preview.crm-pipeline-card .crm-pipeline-card-meta{font-size:.6875rem;color:#64748b;display:flex;justify-content:space-between;gap:6px}.cdk-drag-placeholder{opacity:.35}.cdk-drag-animating{transition:transform .2s cubic-bezier(0,0,.2,1)}.crm-snackbar{font-size:.95rem}.crm-snackbar.mat-mdc-snack-bar-container .mdc-snackbar__surface,.crm-snackbar .mdc-snackbar__surface{background-color:#323232!important;color:#fff!important}.crm-snackbar .mdc-snackbar__label,.crm-snackbar .mat-mdc-snack-bar-label,.crm-snackbar .mat-mdc-snack-bar-action,.crm-snackbar .mat-mdc-button,.crm-snackbar .mdc-button__label{color:#fff!important}.commonModuleLayout-content.app-shell[data-copilot=open]{padding-right:calc(var(--copilot-width) + var(--CRManagement-inside-gap, 20px));transition:padding-right var(--transition-base, .2s ease)}.commonModuleLayout-content.app-shell[data-copilot=closed]{padding-right:calc(var(--copilot-rail-width) + var(--CRManagement-inside-gap, 20px));transition:padding-right var(--transition-base, .2s ease)}.commonModuleLayout-content.app-shell[data-copilot=fullscreen]{padding-right:var(--CRManagement-inside-gap, 20px)}@media (max-width: 900px){.commonModuleLayout-content.app-shell[data-copilot=open],.commonModuleLayout-content.app-shell[data-copilot=closed]{padding-right:var(--CRManagement-inside-gap, 20px)}} 2`],encapsulation:2})}}return o}
2)();var Na=ir(rr());function Ba(o,m){o&1&&(P(0),i(1,"div",4),b(2,"span",5),i(3,"span",6),a(4,"Loading chart\u2026"),r()(),F())}function Wa(o,m){if(o&1){let e=w();P(0),i(1,"highcharts-chart",7),v("updateChange",function(t){p(e);let s=d(2);return y(s.updateFlag,t)||(s.updateFlag=t),u(t)}),r(),F()}if(o&2){let e=d(2);l(),ct("display","block")("width","100%")("height",e.height,"px"),c("Highcharts",e.Highcharts)("options",e.chartOptions),x("update",e.updateFlag),c("oneToOne",!0)}}function Ra(o,m){if(o&1&&(i(0,"div",8),b(1,"i",9),i(2,"span",10),a(3),r()()),o&2){let e=d(2);l(3),g(e.emptyMessage)}}function qa(o,m){if(o&1&&f(0,Wa,2,10,"ng-container",3)(1,Ra,4,1,"ng-template",null,1,Ce),o&2){let e=le(2),n=d();c("ngIf",n.hasData)("ngIfElse",e)}}var ft=(()=>{class o{constructor(){this.type="line",this.options=null,this.height=280,this.loading=!1,this.emptyMessage="No data to display",this.Highcharts=Na,this.chartOptions={},this.updateFlag=!1}ngOnChanges(e){(e.options||e.type)&&(this.chartOptions=this.buildOptions(),this.updateFlag=!0)}get hasData(){let e=this.options?.series;return!e||e.length===0?!1:e.some(n=>{let t=n.data;return Array.isArray(t)&&t.length>0})}buildOptions(){let n={chart:{type:this.resolveBaseType(this.type),height:this.height,backgroundColor:"transparent",spacing:[8,8,8,8],style:{fontFamily:"inherit"}},credits:{enabled:!1},title:{text:""},legend:{itemStyle:{fontSize:"11px"}},xAxis:{labels:{style:{fontSize:"11px"}}},yAxis:{title:{text:""},labels:{style:{fontSize:"11px"}}},tooltip:{backgroundColor:"#fff",borderColor:"#e5e7eb"},plotOptions:this.plotOptionsFor(this.type),colors:["#0d6efd","#7c3aed","#198754","#f59e0b","#dc3545","#0d9488","#e11d48","#6b7280"],series:[]};return this.mergeDeep(n,this.options??{})}resolveBaseType(e){switch(e){case"stacked-bar":return"bar";case"stacked-column":return"column";case"pareto":return"column";default:return e}}plotOptionsFor(e){switch(e){case"stacked-bar":return{bar:{stacking:"normal"}};case"stacked-column":return{column:{stacking:"normal"}};case"pie":return{pie:{allowPointSelect:!0,cursor:"pointer",dataLabels:{enabled:!1}}};default:return{}}}mergeDeep(e,n){let t=z({},e);for(let s of Object.keys(n)){let _=n[s],S=t[s];_&&typeof _=="object"&&!Array.isArray(_)&&S&&typeof S=="object"&&!Array.isArray(S)?t[s]=this.mergeDeep(S,_):_!==void 0&&(t[s]=_)}return t}static{this.\u0275fac=function(n){return new(n||o)}}static{this.\u0275cmp=V({type:o,selectors:[["app-crm-chart"]],inputs:{type:"type",options:"options",height:"height",loading:"loading",emptyMessage:"emptyMessage"},features:[vn],decls:4,vars:4,consts:[["maybeChart",""],["emptyState",""],[1,"crm-chart-host"],[4,"ngIf","ngIfElse"],[1,"crm-chart-skeleton"],[1,"crm-chart-skeleton-spinner"],["appTranslate","",1,"crm-chart-skeleton-text"],[3,"updateChange","Highcharts","options","update","oneToOne"],[1,"crm-chart-empty"],[1,"ri-bar-chart-2-line","crm-chart-empty-icon"],[1,"crm-chart-empty-text"]],template:function(n,t){if(n&1&&(i(0,"div",2),f(1,Ba,5,0,"ng-container",3)(2,qa,3,2,"ng-template",null,0,Ce),r()),n&2){let s=le(3);ct("min-height",t.height,"px"),l(),c("ngIf",t.loading)("ngIfElse",s)}},dependencies:[N,si,L],styles:["[_nghost-%COMP%]{display:block;width:100%}"]})}}return o})();function za(o,m){if(o&1&&(i(0,"div",5),a(1),r()),o&2){let e=d();l(),g(e.subtitle)}}function ja(o,m){if(o&1&&b(0,"i"),o&2){let e=d(2);dt(e.ctaIcon)}}function Ua(o,m){if(o&1){let e=w();i(0,"button",6),h("click",function(){p(e);let t=d();return u(t.onCta())}),f(1,ja,1,2,"i",7),a(2),r()}if(o&2){let e=d();l(),c("ngIf",e.ctaIcon),l(),A(" ",e.ctaLabel," ")}}var st=(()=>{class o{constructor(){this.icon="ri-inbox-line",this.title="Nothing to show yet",this.subtitle="",this.ctaLabel="",this.ctaIcon="",this.compact=!1,this.ctaClick=new Cn}onCta(){this.ctaClick.emit()}static{this.\u0275fac=function(n){return new(n||o)}}static{this.\u0275cmp=V({type:o,selectors:[["app-crm-empty-state"]],inputs:{icon:"icon",title:"title",subtitle:"subtitle",ctaLabel:"ctaLabel",ctaIcon:"ctaIcon",compact:"compact"},outputs:{ctaClick:"ctaClick"},decls:7,vars:7,consts:[[1,"crm-empty-state"],[1,"crm-empty-state-icon"],[1,"crm-empty-state-title"],["class","crm-empty-state-subtitle",4,"ngIf"],["type","button","class","btn btn-sm btn-outline-theme crm-empty-state-cta",3,"click",4,"ngIf"],[1,"crm-empty-state-subtitle"],["type","button",1,"btn","btn-sm","btn-outline-theme","crm-empty-state-cta",3,"click"],[3,"class",4,"ngIf"]],template:function(n,t){n&1&&(i(0,"div",0)(1,"div",1),b(2,"i"),r(),i(3,"div",2),a(4),r(),f(5,za,2,1,"div",3)(6,Ua,3,2,"button",4),r()),n&2&&(D("crm-empty-state-compact",t.compact),l(2),dt(t.icon),l(2),g(t.title),l(
2),c("ngIf",t.subtitle),l(),c("ngIf",t.ctaLabel))},dependencies:[N],styles:["[_nghost-%COMP%]{display:block;width:100%}"]})}}return o})();var Ha={CREATED:"Created",ASSIGNED:"Assigned",STATUS_UPDATED:"Status changed",COMMENT:"Comment",CSAT_SUBMITTED:"CSAT submitted",STATUS_UPDATE:"Status changed",LEAD_CREATED:"Lead created",DEAL_CREATED:"Opportunity created",CUSTOMER_CREATED:"Account created",EDITED:"Edited",REASSIGNED:"Reassigned",NOTE_ADDED:"Note added",FOLLOW_UP:"Follow-up",TODO_CREATED:"To-do created",REMINDER_ADDED:"Reminder added",NOTE:"Note",TODO:"To-do",REMINDER:"Reminder"};function et(o){let m=String(o||"").trim();if(!m)return"Activity";let e=Ha[m.toUpperCase()];if(e)return e;let n=m.replace(/[_-]+/g," ").toLowerCase().trim();return n.charAt(0).toUpperCase()+n.slice(1)}var Ka=new Set(["new","contacted","qualified","disqualified","won","lost","followup","interested","proposalsent","negotiation","decisionpending","active","inactive","prospect","converted"]),Qa=new Set(["data","payload","details","fields","values","activityjson","activitydata","statusjson"]);function Et(o){return!!o&&typeof o=="object"&&!Array.isArray(o)}function Ga(o){let m=o;if(typeof m=="string"){let e=m.trim();if(e.charAt(0)!=="{"&&e.charAt(0)!=="[")return{};try{m=JSON.parse(e)}catch{return{}}}return Array.isArray(m)?Object.assign({},...m.filter(Et)):Et(m)?m:{}}function Mt(o){let m=Ga(o?.activityJson??o?.activity_json??o?.meta),e=z({},m),n="";for(let[t,s]of Object.entries(m)){if(!Et(s))continue;let _=Ka.has(Xe(t));if(!(!_&&!Qa.has(Xe(t)))){_&&(n=n||t);for(let[S,T]of Object.entries(s))S in e||(e[S]=T)}}return n&&!e.updated_status&&!e.status&&(e.updated_status=n),e}function ye(o,...m){for(let e of[Mt(o),o])if(!(!e||typeof e!="object"))for(let n of m){let t=e[n];if(t!=null&&String(t).trim()!=="")return t}return""}function xt(o){let m=ye(o,"todo_type","todoType","type"),e=String(m||"").trim();return e?e.charAt(0).toUpperCase()+e.slice(1).toLowerCase():""}function hi(o){let m=ye(o,"follow_up_later","followLater","followUpLater");if(m===!1||m==="false")return"";let e=ye(o,"follow_up_date","followDate","followUpDate","followup_date");return String(e||ye(o,"next_follow_up_date","nextFollowup","nextFollowUpDate","next_followup_date")).trim()}function cn(o){return $t(hi(o))}function $t(o){let m=String(o??"").trim();if(!m)return"";let e=fi(m);return e?Ee(e,"MMM dd, yyyy","en-US"):m}function fi(o){let m=/^(\d{4})-(\d{2})-(\d{2})/.exec(o),e=m?new Date(+m[1],+m[2]-1,+m[3]):new Date(o);return Number.isNaN(e.getTime())?null:e}function Zt(o){return yi(o)}function Ja(o){let m=String(o?.activityType||o?.activity_type||"").toUpperCase();if(m==="FOLLOW_UP")return!0;if(m!=="STATUS_UPDATE"&&m!=="STATUS_UPDATED")return!1;let e=o?.activityJson||{};return String(e.updated_status??e.status??e.new_status??o?.updated_status??o?.new_status??"").replace(/[\s_-]/g,"").toLowerCase()==="followup"}function xi(o){return yi((o||[]).filter(Ja))}function yi(o){let m=new Date;m.setHours(0,0,0,0);let e=null;for(let n of o||[]){let t=hi(n);if(!t)continue;let s=fi(t);
2s&&(s.setHours(0,0,0,0),!(s.getTime()<m.getTime())&&(!e||s.getTime()>e.time)&&(e={date:t,label:Ee(s,"MMM dd, yyyy","en-US"),time:s.getTime()}))}return e?{date:e.date,label:e.label}:null}var Ya={budget:"Budget Constraints",timeline:"Timeline Mismatch",requirements:"Requirements Not Met",requirements_not_met:"Requirements Not Met",authority:"No Decision-Making Authority",need:"No Genuine Need Identified",competitor:"Chose Competitor",no_response:"No Response",not_interested:"Not Interested",price:"Pricing Too High",fit:"Not a Good Fit",unreachable:"Unreachable / No Response",other:"Other",phone:"Phone",email:"Email",meeting:"In-Person Meeting",video_call:"Video Call",linkedin:"LinkedIn"},$a={"lead-lost":{no_response:"No Response from Lead"},"deal-lost":{no_response:"No Response from Customer"},"customer-lost":{no_response:"No Response from Customer"},"deal-disqualified":{budget:"Insufficient Budget",competitor:"Already Committed to Competitor"}};function vi(o,m){if(!m)return"";let e=Xe(String(ye(o,"updated_status","status","new_status")||""));return e?`${m}-${e}`:""}function Ci(o){let m=o.replace(/[_-]+/g," ").trim();return m.charAt(0).toUpperCase()+m.slice(1)}function It(o,m=""){let e=Et(o)?o.label??o.display??o.name??o.text??o.value??o.code??"":o,n=String(e??"").trim();if(!n||n==="[object Object]")return"";let t=n.toLowerCase(),s=m&&$a[m]?.[t]||Ya[t];return s||(/^[a-z][a-z0-9]*(?:[_-][a-z0-9]+)*$/.test(n)?Ci(n):n)}function Za(o,m=""){let e=[],n=[],t=(_,S,...T)=>{let M=String(S??"").trim();if(!M)return;let I=[M,...T.map(k=>String(k??"").trim())].filter(Boolean).map(k=>k.toLowerCase());I.some(k=>n.indexOf(k)>=0)||(n.push(...I),e.push({label:_,value:M}))},s=ye(o,"reason","disqualification_reason","disqualify_reason","lost_reason");return t("Reason",It(s,m),s),t("Response",ye(o,"customer_response","customerResponse")),t("Note",ye(o,"note","notes","message","body","description")),e.length===0?"":e.length===1&&e[0].label==="Note"?e[0].value:e.map(_=>`${_.label}: ${_.value}`).join(" \xB7 ")}function Xa(o){let m=Mt(o),e=[],n=(_,S)=>{let T=$t(S);T&&e.push(`${_} ${T}`)},t=String(ye(o,"quote_id","quoteId")).trim();t&&e.push(`Quote ${t}`),n("Sent",ye(o,"proposal_sent_date","proposalSentDate")),n("Valid till",ye(o,"quote_expiry_date","quoteExpiryDate")),n("Decision by",ye(o,"expected_decision_date","expectedDecisionDate"));let s=Array.isArray(m.products)?m.products:[];return s.length&&e.push(`${s.length} product${s.length===1?"":"s"}`),e}function es(o,m=""){let e=[],n=It(ye(o,"contact_method","contactMethod","contact_mode","contactMode","contacted_by","contactedBy","communication_mode","communicationMode"),m);n&&e.push("Contacted by "+n);let t=$t(ye(o,"contacted_on","contactedOn","attempted_date","attemptedDate"));return t&&e.push("Attempted "+t),e}function Xe(o){return String(o||"").toLowerCase().replace(/[\s_-]/g,"")}var bi=["updated_status","status","new_status"],sn=["reason","disqualification_reason","disqualify_reason","lost_reason","customer_response","note","notes","message","body"],ts=["contact_method","contact_mode","contacted_on","attempted_date"],ns=["quote_id","proposal_sent_date","quote_expiry_date","expected_decision_date","products"],dn=["follow_up_later","follow_up_date","follow_date","next_follow_up_date","next_followup","followup_date"],is=["todo_type","type","follow"],rs=["remainder","reminder_text"],os=["csat_score","score"],Si=["id","lead","lead_id","deal","deal_id","customer_id","ticket_id","activity_id","activity_type","user_id","org_id","created_by","created_date","created_at","updated_at","performed_by","performed_by_name"],as={dealname:"Deal Name",productservice:"Products",deliverylocation:"Delivery Location",deliverytimeline:"Delivery Timeline",expectedclosedate:"Expected Close",reminderdate:"Reminder date",remindertime:"Reminder time",startdate:"Start",enddate:"Due",assignedto:"Assigned to",previousstatus:"Previous status",csatscore:"CSAT"};function wi(o){return as[Xe(o)]||Ci(String(o))}function mn(o){if(o==null)return"";if(Array.isArray(o)){if(!o.length)return"";let n=o.map(t=>t&&typeof t=="object"?String(t.name??t.productName??t.product_name??t.label??"").trim():String(t??"").trim()).filter(
2Boolean);return n.length===o.length?n.join(", "):`${o.length} item${o.length===1?"":"s"}`}if(typeof o=="object")return"";if(typeof o=="boolean")return o?"Yes":"";let m=String(o).trim();if(!m)return"";if(/^\d{4}-\d{2}-\d{2}/.test(m))return $t(m);let e=/^(\d{2}:\d{2}):\d{2}$/.exec(m);return e?e[1]:It(m)}var ln=10;function kt(o,m){let e=Mt(o),n=new Set(m.concat(Si).map(Xe)),t=[];for(let _ of Object.keys(e)){if(n.has(Xe(_)))continue;let S=mn(e[_]);S&&t.push(`${wi(_)}: ${S}`)}if(t.length<=ln)return t;let s=t.slice(0,ln);return s.push(`+${t.length-ln} more`),s}function yt(o,m){let e=o?.activityType||o?.activity_type||"",n=Mt(o),t=String(e).toUpperCase(),s=vi(o,m),_=Za(o,s);if(t==="STATUS_UPDATE"||t==="STATUS_UPDATED"){let I=n.updated_status??n.status??n.new_status??o?.updated_status??o?.new_status??"",k=es(o,s).concat(Xa(o)),oe=cn(o);return oe&&k.push("Follow-up on "+oe),k.push(...kt(o,bi.concat(sn,ts,ns,dn))),"Status changed"+(I?" to "+I:"")+(_?" \u2014 "+_:"")+(k.length?" \xB7 "+k.join(" \xB7 "):"")}if(t==="FOLLOW_UP"){let I=cn(o),k=String(ye(o,"objections")).trim(),oe=kt(o,sn.concat(dn,["objections"]));return"Follow-up"+(_?" \u2014 "+_:"")+(k?" (Objections: "+k+")":"")+(I?" \xB7 Follow-up on "+I:"")+(oe.length?" \xB7 "+oe.join(" \xB7 "):"")}let S=et(e),T=sn.slice();if(t==="TODO_CREATED"||t==="TODO"){let I=xt(o);I&&(S=`To-do created \u2014 ${I}`);let k=String(n.follow||"").trim();k&&(S+=` (${k})`),T=T.concat(is)}if(t==="REMINDER_ADDED"||t==="REMINDER"){let I=String(ye(o,"remainder","reminder_text","reminderText")||_||"").trim(),k=kt(o,T.concat(rs));return(I?`${S} \u2014 ${I}`:S)+(k.length?" \xB7 "+k.join(" \xB7 "):"")}if(t==="CSAT_SUBMITTED"){let I=ye(o,"csat_score","csatScore","score"),k=kt(o,T.concat(os));return(I?`CSAT submitted \u2014 ${I}/5`:S)+(k.length?" \xB7 "+k.join(" \xB7 "):"")}let M=kt(o,T);return(_?`${S} \u2014 ${_}`:S)+(M.length?" \xB7 "+M.join(" \xB7 "):"")}function ss(o){let m=o?.performed_by_name??o?.performedByName??o?.actor??o?.created_by_name??o?.createdByName??o?.user_name??o?.userName??o?.user;return Et(m)?String(m.name??m.full_name??m.username??m.email??"").trim():String(m??"").trim()}function ls(o,m){let e=o?.activityType||o?.activity_type||"",n=String(e).toUpperCase();if(n==="STATUS_UPDATE"||n==="STATUS_UPDATED"){let t=It(ye(o,"updated_status","status","new_status"),m);return t?`Status changed to ${t}`:"Status changed"}if(n==="TODO_CREATED"||n==="TODO"){let t=xt(o);return t?`To-do created \u2014 ${t}`:et(e)}return et(e)}function Ti(o){let m=String(o?.activityType||o?.activity_type||"").toUpperCase();return m!=="STATUS_UPDATE"&&m!=="STATUS_UPDATED"?"":String(ye(o,"updated_status","status","new_status")??"").trim()}function Je(o,m){let e=vi(o,m),n=[],t=new Set,s=(T,M)=>{let I=String(M??"").trim();if(!I)return;let k=Xe(T);t.has(k)||(t.add(k),n.push({label:T,value:I}))};s("User",ss(o)),s("Follow-up",cn(o));let _=Mt(o),S=new Set(bi.concat(dn,Si).map(Xe));for(let T of Object.keys(_)){if(S.has(Xe(T)))continue;let M=_[T],I=mn(typeof M=="string"?It(M,e):M);s(wi(T),I)}return{title:ls(o,e),fields:n}}function cs(o,m){if(o&1&&(i(0,"div",21)(1,"div",22)(2,"span",23),a(3),r(),i(4,"span",24),b(5,"i",25),r()(),i(6,"div",26),a(7),r()()),o&2){let e=m.$implicit;l(3),g(e.label),l(4),g(e.value)}}function ds(o,m){o&1&&(i(0,"div",27),a(1,"No dashboard metrics returned."),r())}function ms(o,m){if(o&1){let e=w();i(0,"tr")(1,"td")(2,"a",28),h("click",function(){let t=p(e).$implicit,s=d();return u(s.openOpportunity(t))}),a(3),r()(),i(4,"td"),a(5),r(),i(6,"td")(7,"span",29),a(8),r()(),i(9,"td"),a(10),r(),i(11,"td"),a(12),r()()}if(o&2){let e=m.$implicit;l(3),g(e.opportunity),l(2),g(e.account),l(2),c("ngClass","crm-badge-"+e.stageTone),l(),g(e.stage),l(2),g(e.amount),l(2),g(e.closeDate)}}function ps(o,m){o&1&&(i(0,"tr")(1,"td",30),a(2,"No opportunities in your pipeline."),r()())}function us(o,m){if(o&1&&(i(0,"div",31),b(1,"span",32),i(2,"div",33),a(3),r(),i(4,"div",34),a(5),r()()),o&2){let e=m.$implicit;l(),c("ngClass","crm-timeline-dot-"+e.tone),l(2),g(e.time),l(2),g(e.text)}}function gs(o,m){o&1&&(i(0,"div",35),a(1,"No tasks today."),r())}var ki=(()=>{class o{constructor(e,n,t){this.api=e,this.router=n,this.route=t,this.loading=!1,this.kpis=[],this.pipeline=[],this.tasks=[]}ngOnInit(){this.load()}trackByIndex(e){return e}load(){this.loading=!0,this.api.getAeDashboard({}).subscribe({next:e=>{this.loading=!1;let n=e?.response?.data;n&&(this.kpis=(n.count_info||[]).map(t=>({label:t?.title||"\u2014",value:t?.value_display??(t?.value!=null?String(t.value):"\u2014")}
2)),this.pipeline=(n.my_pipeline||[]).map(t=>({id:t?.id??null,opportunity:t?.opportunity||"\u2014",account:t?.account||"\u2014",stage:t?.stage||"\u2014",stageTone:"blue",amount:t?.amount_display??(t?.amount!=null?String(t.amount):"\u2014"),closeDate:t?.close_date||"\u2014"})),this.tasks=(n.tasks_today||[]).map(t=>({id:t?.id??null,time:t?.time||"\u2014",text:t?.description||t?.activity_type||"\u2014",tone:this.toneFromColor(t?.indicator_color)})))},error:()=>{this.loading=!1}})}toneFromColor(e){let n=String(e||"").toLowerCase();return/red|danger|critical|high|overdue/.test(n)?"red":/amber|orange|warn|yellow|medium/.test(n)?"amber":/green|success|ok|low|done/.test(n)?"green":/blue|info|primary/.test(n)?"blue":"gray"}openOpportunity(e){e?.id!=null&&this.router.navigate(["opportunities",e.id],{relativeTo:this.route.parent})}static{this.\u0275fac=function(n){return new(n||o)(E(R),E($),E(Y))}}static{this.\u0275cmp=V({type:o,selectors:[["app-dashboard-ae"]],decls:41,vars:9,consts:[[1,"crm-page-body"],[1,"crm-page-header"],["appTranslate","",1,"crm-page-title"],["appTranslate","",1,"crm-page-subtitle"],[1,"crm-stat-grid"],["class","crm-stat-card",4,"ngFor","ngForOf","ngForTrackBy"],["class","crm-text-muted py-3","appTranslate","",4,"ngIf"],[1,"crm-grid","crm-grid-3-1"],[1,"card"],[1,"card-header"],["appTranslate","",1,"card-title"],[1,"card-body","p-0"],[1,"crm-table-wrapper","crm-table-wrapper-flush"],[1,"crm-data-table"],["appTranslate",""],[4,"ngFor","ngForOf","ngForTrackBy"],[4,"ngIf"],[1,"card-body"],[1,"crm-timeline"],["class","crm-timeline-item",4,"ngFor","ngForOf","ngForTrackBy"],["class","crm-text-muted text-center py-3","appTranslate","",4,"ngIf"],[1,"crm-stat-card"],[1,"crm-stat-header"],[1,"crm-stat-label"],[1,"crm-stat-icon","crm-stat-icon-blue"],[1,"ri-bar-chart-2-line"],[1,"crm-stat-value"],["appTranslate","",1,"crm-text-muted","py-3"],[1,"crm-cell-primary",3,"click"],[1,"crm-badge",3,"ngClass"],["colspan","5","appTranslate","",1,"text-center"],[1,"crm-timeline-item"],[1,"crm-timeline-dot",3,"ngClass"],[1,"crm-timeline-time"],[1,"crm-timeline-text"],["appTranslate","",1,"crm-text-muted","text-center","py-3"]],template:function(n,t){n&1&&(i(0,"div",0)(1,"div",1)(2,"div")(3,"h1",2),a(4,"Account Executive Dashboard"),r(),i(5,"p",3),a(6,"Your open work, today."),r()()(),i(7,"div",4),f(8,cs,8,2,"div",5)(9,ds,2,0,"div",6),r(),i(10,"div",7)(11,"div",8)(12,"div",9)(13,"div",10),a(14,"My Pipeline"),r()(),i(15,"div",11)(16,"div",12)(17,"table",13)(18,"thead")(19,"tr")(20,"th",14),a(21,"Opportunity"),r(),i(22,"th",14),a(23,"Account"),r(),i(24,"th",14),a(25,"Stage"),r(),i(26,"th",14),a(27,"Amount"),r(),i(28,"th",14),a(29,"Close"),r()()(),i(30,"tbody"),f(31,ms,13,6,"tr",15)(32,ps,3,0,"tr",16),r()()()()(),i(33,"div",8)(34,"div",9)(35,"div",10),a(36,"Today's Tasks"),r()(),i(37,"div",17)(38,"div",18),f(39,us,6,3,"div",19)(40,gs,2,0,"div",20),r()()()()()),n&2&&(l(8),c("ngForOf",t.kpis)("ngForTrackBy",t.trackByIndex),l(),c("ngIf",!t.kpis.length&&!t.loading),l(22),c("ngForOf",t.pipeline)("ngForTrackBy",t.trackByIndex),l(),c("ngIf",!t.pipeline.length),l(7),c("ngForOf",t.tasks)("ngForTrackBy",t.trackByIndex),l(),c("ngIf",!t.tasks.length))},dependencies:[j,W,N,L],styles:["[_nghost-%COMP%]{display:block}"]})}}return o})();var _s=(o,m)=>({"crm-stat-trend-down":o,"crm-stat-trend-up":m});function hs(o,m){if(o&1&&(i(0,"div",26),a(1),r()),o&2){let e=d().$implicit;c("ngClass",ke(2,_s,e.trendDir==="down",e.trendDir==="up")),l(),A(" ",e.footnote," ")}}function fs(o,m){if(o&1&&(i(0,"div",21)(1,"div",22)(2,"span",23),a(3),r()(),i(4,"div",24),a(5),r(),f(6,hs,2,5,"div",25),r()),o&2){let e=m.$implicit;l(3),g(e.label),l(2),g(e.value),l(),c("ngIf",e.footnote)}}function xs(o,m){o&1&&(i(0,"div",27),a(1,"No dashboard metrics returned."),r())}function ys(o,m){if(o&1&&(i(0,"span"),a(1),r()),o&2){let e=d();l(),A(" \xB7 ",e.renewalsTotal," total")}}function vs(o,m){if(o&1){let e=w();i(0,"tr")(1,"td")(2,"a",28),h("click",function(){let t=p(e).$implicit,s=d();return u(s.openAccount(t))}),a(3),r()(),i(4,"td"),a(5),r(),i(6,"td"),a(7),r(),i(8,"td"),a(9),r(),i(10,"td"),a(11),r(),i(12,"td"),a(13),r()()}if(o&2){let e=m.$implicit;l(3),g(e.account),l(2),g(e.renewalDate),l(2),g(e.daysToRenewal!==null?e.daysToRenewal:"\u2014"),l(2),g(e.value),l(2),g(e.status),l(2),g(e.owner)}}function Cs(o,m){o&1&&(i(0,"tr")(1,"td",29),a(2,"No renewals in the next 60 days."),r()())}function bs(o,m){if(o&1&&(i(0,"div",36),a(1),i(2,"span",13),a(3,"accounts scored"),r()()),o&2){let e=d(2);l(),A(" ",e.healthTotalAccounts," ")}}function Ss(o,m){if(o&1&&(i(0,"span",37),b(1,"i",38),a(2),r()),o&2){let e=m.$implicit;c("ngClass","crm-badge-"+e.tone),l(2),Le(" ",e.label," ",e.percent,"% (",e.count,") ")}}function ws(o,m){if(o&1&&(P(0),i(1,"div",30)(2,"div",31),a(3),r(),i(4,"div",32),a(5,"Healthy"),r()(),f(6,bs,4,1,"div",33),i(7,"div",34),f(8,Ss,3,4,"span",35),r(),F()),o&2){let e=d();l(3),g(e.healthHeadlinePercent!==null?e.healthHeadlinePercent+"%":"\u2014"),l(3),c("ngIf",e.healthTotalAccounts!==null),l(2),c("ngForOf",e.healthBands)("ngForTrackBy",e.trackByIndex)}}function Ts(o,m){o&1&&(i(0,"div",40),a(1,"No account health scores available yet."),r())}function ks(o,m){if(o&1&&f(0,Ts,2,0,"div",39),o&2){let e=d();c("ngIf",!e.loadingHealth)}}var Ei=(()=>{class o{constructor(e,n,t){this.api=e,this.router=n,this.route=t,this.daysAhead=60,this.loadingKpis=!1,this.loadingRenewals=!1,this.loadingHealth=!1,this.kpis=[],this.renewals=[],this.renewalsTotal=null,this.healthBands=[],this.healthHeadlinePercent=null,this.healthTotalAccounts=null}ngOnInit(){this.loadKpis(),this.loadRenewals(),this.loadHealth()}trackByIndex(e){return e}loadKpis(){this.loadingKpis=!0,this.api.getCsmDashboard({}).subscribe({next:e=>{this.loadingKpis=!1;let n=e?.response?.data;n&&(this.kpis=(n.count_info||[]).map(t=>({label:t?.title||"\u2014",value:t?.value_display??(t?.value!=null?String(t.value):"\u2014")}
2)))},error:()=>{this.loadingKpis=!1}})}loadRenewals(){this.loadingRenewals=!0,this.api.getRenewalList({page:1,page_size:20,days_ahead:this.daysAhead}).subscribe({next:e=>{this.loadingRenewals=!1;let n=e?.response;n&&(this.renewalsTotal=typeof n.total_count=="number"?n.total_count:null,this.renewals=(n.data||[]).map(t=>({id:t?.id??null,customerId:t?.customer_id??null,account:t?.account_name||"\u2014",renewalDate:t?.renewal_date||"\u2014",value:t?.contract_value??"\u2014",status:t?.status||"\u2014",owner:t?.owner||"\u2014",daysToRenewal:typeof t?.days_to_renewal=="number"?t.days_to_renewal:null})))},error:()=>{this.loadingRenewals=!1}})}loadHealth(){this.loadingHealth=!0,this.api.getHealthDashboard({}).subscribe({next:e=>{this.loadingHealth=!1;let n=e?.response?.data;if(!n)return;let t=(s,_,S)=>s?{label:_,tone:S,percent:typeof s.percent=="number"?s.percent:0,count:typeof s.count=="number"?s.count:0}:null;this.healthBands=[t(n.healthy,"Healthy","green"),t(n.at_risk,"At Risk","amber"),t(n.critical,"Critical","red")].filter(s=>s!==null),this.healthHeadlinePercent=typeof n.healthy?.percent=="number"?n.healthy.percent:null,this.healthTotalAccounts=typeof n.total_accounts=="number"?n.total_accounts:null},error:()=>{this.loadingHealth=!1}})}openAccount(e){e?.customerId!=null&&this.router.navigate(["accounts",e.customerId],{relativeTo:this.route.parent})}static{this.\u0275fac=function(n){return new(n||o)(E(R),E($),E(Y))}}static{this.\u0275cmp=V({type:o,selectors:[["app-dashboard-csm"]],decls:48,vars:9,consts:[["noHealth",""],[1,"crm-page-body"],[1,"crm-page-header"],["appTranslate","",1,"crm-page-title"],["appTranslate","",1,"crm-page-subtitle"],[1,"crm-stat-grid"],["class","crm-stat-card",4,"ngFor","ngForOf","ngForTrackBy"],["class","crm-text-muted py-3","appTranslate","",4,"ngIf"],[1,"crm-grid","crm-grid-3-1"],[1,"card"],[1,"card-header"],["appTranslate","",1,"card-title"],[1,"card-subtitle"],["appTranslate",""],[4,"ngIf"],[1,"card-body","p-0"],[1,"crm-table-wrapper","crm-table-wrapper-flush"],[1,"crm-data-table"],[4,"ngFor","ngForOf","ngForTrackBy"],[1,"card-body","text-center"],[4,"ngIf","ngIfElse"],[1,"crm-stat-card"],[1,"crm-stat-header"],[1,"crm-stat-label"],[1,"crm-stat-value"],["class","crm-stat-trend",3,"ngClass",4,"ngIf"],[1,"crm-stat-trend",3,"ngClass"],["appTranslate","",1,"crm-text-muted","py-3"],[1,"crm-cell-primary",3,"click"],["colspan","6","appTranslate","",1,"text-center","crm-text-muted","py-4"],[1,"ae-donut-wrap"],[1,"ae-donut-value"],["appTranslate","",1,"ae-donut-label"],["class","crm-text-xs crm-text-muted",4,"ngIf"],[1,"d-flex","flex-wrap","justify-content-center","gap-2","mt-3"],["class","crm-badge",3,"ngClass",4,"ngFor","ngForOf","ngForTrackBy"],[1,"crm-text-xs","crm-text-muted"],[1,"crm-badge",3,"ngClass"],[1,"ri-checkbox-blank-circle-fill","crm-text-xs"],["class","crm-text-muted py-4","appTranslate","",4,"ngIf"],["appTranslate","",1,"crm-text-muted","py-4"]],template:function(n,t){if(n&1&&(i(0,"div",1)(1,"div",2)(2,"div")(3,"h1",3),a(4,"Customer Success Manager Dashboard"),r(),i(5,"p",4),a(6,"Renewals, health, and expansion at a glance."),r()()(),i(7,"div",5),f(8,fs,7,3,"div",6)(9,xs,2,0,"div",7),r(),i(10,"div",8)(11,"div",9)(12,"div",10)(13,"div")(14,"div",11),a(15,"Upcoming Renewals"),r(),i(16,"div",12)(17,"span",13),a(18,"Next 60 days"),r(),f(19,ys,2,1,"span",14),r()()(),i(20,"div",15)(21,"div",16)(22,"table",17)(23,"thead")(24,"tr")(25,"th",13),a(26,"Account"),r(),i(27,"th",13),a(28,"Renewal Date"),r(),i(29,"th",13),a(30,"Days"),r(),i(31,"th",13),a(32,"Value"),r(),i(33,"th",13),a(34,"Status"),r(),i(35,"th",13),a(36,"Owner"),r()()(),i(37,"tbody"),f(38,vs,14,6,"tr",18)(39,Cs,3,0,"tr",14),r()()()()(),i(40,"div",9)(41,"div",10)(42,"div",11),a(43,"Health Distribution"),r()(),i(44,"div",19),f(45,ws,9,4,"ng-container",20)(46,ks,1,1,"ng-template",null,0,Ce),r()()()()),n&2){let s=le(47);l(8),c("ngForOf",t.kpis)("ngForTrackBy",t.trackByIndex),l(),c("ngIf",!t.kpis.length&&!t.loadingKpis),l(10),c("ngIf",t.renewalsTotal!==null),l(19),c("ngForOf",t.renewals)("ngForTrackBy",t.trackByIndex),l(),c("ngIf",!t.renewals.length&&!t.loadingRenewals),l(6),c("ngIf",t.healthBands.length)("ngIfElse",s)}},dependencies:[j,W,N,L],styles:["[_nghost-%COMP%]{display:block}.ae-donut-wrap[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;width:120px;height:120px;border-radius:50%;border:10px solid var(--color-accent);margin:0 auto 8px}.ae-donut-value[_ngcontent-%COMP%]{font-size:1.5rem;font-weight:800;color:var(--color-primary);line-height:1}.ae-donut-label[_ngcontent-%COMP%]{font-size:.6875rem;color:var(--color-text-muted);margin-top:2px}"]})}}return o}
2)();var Es=()=>({standalone:!0}),Ms=(o,m)=>({"crm-stat-trend-up":o,"crm-stat-trend-down":m});function Is(o,m){if(o&1&&(i(0,"option",31),a(1),r()),o&2){let e=m.$implicit;c("value",e.key),l(),g(e.label)}}function Os(o,m){if(o&1){let e=w();i(0,"div",27),b(1,"div"),i(2,"div",28)(3,"select",29),v("ngModelChange",function(t){p(e);let s=d();return y(s.period,t)||(s.period=t),u(t)}),h("ngModelChange",function(){p(e);let t=d();return u(t.onPeriodChange())}),f(4,Is,2,2,"option",30),r()()()}if(o&2){let e=d();l(3),x("ngModel",e.period),c("ngModelOptions",C(4,Es)),l(),c("ngForOf",e.rangeOptions)("ngForTrackBy",e.trackByIndex)}}function Ps(o,m){if(o&1&&(i(0,"div",37),b(1,"i"),a(2),r()),o&2){let e=d().$implicit;c("ngClass",ke(4,Ms,e.trendDir==="up",e.trendDir==="down")),l(),dt(e.trendDir==="up"?"ri-arrow-up-line":e.trendDir==="down"?"ri-arrow-down-line":""),l(),A(" ",e.footnote," ")}}function Fs(o,m){if(o&1&&(i(0,"div",32)(1,"div",33)(2,"span",34),a(3),r()(),i(4,"div",35),a(5),r(),f(6,Ps,3,7,"div",36),r()),o&2){let e=m.$implicit;l(3),g(e.label),l(2),g(e.value),l(),c("ngIf",e.footnote)}}function As(o,m){o&1&&(i(0,"div",38),a(1,"No dashboard metrics returned."),r())}function Ds(o,m){if(o&1&&(i(0,"tr")(1,"td"),a(2),r(),i(3,"td"),a(4),r(),i(5,"td"),a(6),r(),i(7,"td")(8,"span",39),a(9),r()()()),o&2){let e=m.$implicit;l(2),g(e.rep),l(2),g(e.quota),l(2),g(e.forecast),l(2),c("ngClass","crm-badge-"+e.gapTone),l(),g(e.gap)}}function Vs(o,m){o&1&&(i(0,"tr")(1,"td",40),a(2," Quota targets aren\u2019t available yet \u2014 no quota/forecast series is exposed by the API. "),r()())}function Ls(o,m){if(o&1&&(i(0,"div",41)(1,"div",42)(2,"span",43),a(3),r(),i(4,"span",44),a(5),r()(),i(6,"div",45),b(7,"div",46),r()()),o&2){let e=m.$implicit;l(3),g(e.name),l(2),g(e.total),l(2),ct("width",e.percent,"%"),c("ngClass","crm-progress-bar-"+e.tone)}}function Ns(o,m){o&1&&(i(0,"div",47),a(1,"No reps yet."),r())}var Mi=(()=>{class o{constructor(e){this.api=e,this.greeting="",this.greetingSub="",this.loading=!1,this.period="",this.rangeOptions=[],this.rangeAdopted=!1,this.kpis=[],this.pipelineChart=null,this.forecast=[],this.topReps=[]}ngOnInit(){this.setGreeting(),this.load()}trackByIndex(e){return e}setGreeting(){let e=new Date,n=e.getHours();this.greeting=n<12?"Good morning":n<17?"Good afternoon":"Good evening",this.greetingSub=e.toLocaleDateString(void 0,{weekday:"long",year:"numeric",month:"long",day:"numeric"})}onPeriodChange(){this.load()}load(){this.loading=!0;let e=this.period?{range_type:this.period}:{};this.api.getSalesDashboard(e).subscribe({next:n=>{this.loading=!1;let t=n?.response?.data;if(t){if(this.rangeOptions=t.range_options||[],!this.rangeAdopted&&this.rangeOptions.length&&this.rangeOptions[0].key){this.rangeAdopted=!0,this.period=this.rangeOptions[0].key,this.load();return}this.rangeAdopted=!0,this.applyKpis(t.count_info),this.applyPipelineByStage(t.pipeline_by_stage),this.applyTopReps(t.top_reps)}},error:()=>{this.loading=!1}})}applyKpis(e){this.kpis=(e||[]).map(n=>{let t=typeof n?.percentage=="number"?n.percentage:null,s=n?.subtitle||void 0;return!s&&t!=null&&(s=`${t>=0?"+":""}${t}%`),{label:n?.title||"\u2014",value:n?.value_display??(n?.value!=null?String(n.value):"\u2014"),footnote:s,trendDir:t==null?void 0:t>=0?"up":"down"}})}applyPipelineByStage(e){let n=e||[];if(!n.length){this.pipelineChart=null;return}this.pipelineChart={xAxis:{categories:n.map(t=>t?.stage||"\u2014")},series:[{type:"column",name:"Open opportunities",data:n.map(t=>t?.count??0)}],tooltip:{formatter(){let t=n[this.point.index]||{},s=t.value_display?`<br/>Value: ${t.value_display}`:"";return`<b>${this.x}</b><br/>Opportunities: ${this.y}${s}`}}}}applyTopReps(e){this.topReps=(e||[]).map(n=>{let t=typeof n?.progress_percent=="number"?n.progress_percent:0;return{id:n?.id,name:n?.name||"\u2014",total:n?.value_display??(n?.value!=null?String(n.value):"\u2014"),percent:Math.max(0,Math.min(100,t)),tone:t>=75?"blue":t>=50?"green":"amber"}})}static{this.\u0275fac=function(n){return new(n||o)(E(R))}}static{this.\u0275cmp=V({type:o,selectors:[["app-dashboard-sales-manager"]],decls:53,vars:17,consts:[[1,"crm-page-body"],[1,"ai-briefing-card","mb-4"],[1,"ai-briefing-card__header"],[1,"ai-briefing-card__avatar"],[1,"ri-line-chart-line"],[1,"ai-briefing-card__title"],[1,"ai-briefing-card__sub"],["class","crm-page-header",4,"ngIf"],[1,"crm-stat-grid","mb-4"],["class","crm-stat-card",4,"ngFor","ngForOf","ngForTrackBy"],["class","crm-text-muted py-3","appTranslate","",4,"ngIf"],[1,"crm-grid","crm-grid-3-1"],[1,"sm-left-col"],[1,"card"],[1,"card-header"],["appTranslate","",1,"card-title"],["appTranslate","",1,"card-subtitle"],[1,"card-body"],[3,"type","options","loading","emptyMessage","height"],[1,"card-body","p-0"],[1,"crm-table-wrapper","crm-table-wrapper-flush"],[1,"crm-data-table"],["appTranslate",""],[4,"ngFor","ngForOf","ngForTrackBy"],[4,"ngIf"],["class","sm-rep-row mb-3",4,"ngFor","ngForOf","ngForTrackBy"],["class","crm-text-muted text-center py-3","appTranslate","",4,"ngIf"],[1,"crm-page-header"],[1,"crm-page-actions"],[1,"crm-filter-select",3,"ngModelChange","ngModel","ngModelOptions"],[3,"value",4,"ngFor","ngForOf","ngForTrackBy"],[3,"value"],[1,"crm-stat-card"],[1,"crm-stat-header"],[1,"crm-stat-label"],[1,"crm-stat-value"],["class","crm-stat-trend",3,"ngClass",4,"ngIf"],[1,"crm-stat-trend",3,"ngClass"],["appTranslate","",1,"crm-text-muted","py-3"],[1,"crm-badge",3,"ngClass"],["colspan","4","appTranslate","",1,"text-center","crm-text-muted","py-4"],[1,"sm-rep-row","mb-3"],[1,"d-flex","justify-content-between","align-items-center","mb-1"],[1,"crm-text-sm","crm-text-muted"],[1,"crm-text-sm","crm-fw-600"],[1,"crm-progress-wrap"],[1,"crm-progress-bar",3,"ngClass"],["appTranslate","",1,"crm-text-muted","text-center","py-3"]],template:function(n,t){n&1&&(i(0,"div",0)(1,"div",1)(2,"div",2)(3,"div",3),b(4,"i",4),r(),i(5,"div")(6,"div",5),a(7),r(),i(8,"div",6),a(9),r()()()(),f(10,Os,5,5,"div",7),i(11,"div",8),f(12,Fs,7,3,"div",9)(13,As,2,0,"div",10),r(),i(14,"div",11)(15,"div",12)(16,"div",13)(17,"div",14)(18,"div")(19,"div",15),a(20,"Pipeline by Stage"),r(),i(21,"div",16),a(22,"Open opportunities by stage"),r()()(),i(23,"div",17),b(24,"app-crm-chart",18),r()(),i(25,"div",13)(26,"div",14)(27,"div",15),a(28,"Forecast vs Quota"),r()(),i(29,"div",19)(30,"div",20)(31,"table",21)(32,"thead")(33,"tr")(34,"th",22),a(35,"Rep"),r(),i(36,"th",22),a(37,"Quota"),r(),i(38,"th",22),a(39,"Forecast"),r(),i(40,"th",22),a(41,"Gap"),r()()(),i(42,"tbody"),f(43,Ds,10,5,"tr",23)(44,Vs,3,0,"tr",24),r()()()()()(),i(45,"div",13)(46,"div",14)(47,"div",15),a(48,"Top Reps"),r()(),i(49,"div",17)(50,"div"),f(51,Ls,8,5,"div",25)(52,Ns,2,0,"div",26),r()()()()()),n&2&&(l(7),g(t.greeting),l(2),g(t.greetingSub),l(),c("ngIf",t.rangeOptions.length),l(2),c("ngForOf",t.kpis)("ngForTrackBy",t.trackByIndex),l(),c("ngIf",!t.kpis.length&&!t.loading),l(11),c("type","column")("options",t.pipelineChart)("loading",t.loading)("emptyMessage","No pipeline data for this period.")("height",240),l(19),c("ngForOf",t.forecast)("ngForTrackBy",t.trackByIndex),l(),c("ngIf",!t.forecast.length),l(7),c("ngForOf",t.topReps)("ngForTrackBy",t.trackByIndex),l(),c("ngIf",!t.topReps.length))},dependencies:[j,W,N,X,ee,Z,U,H,L,ft],styles:["[_nghost-%COMP%]{display:block}.sm-left-col[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px}"]})}}return o}
2)();var Bs=(o,m)=>({"crm-stat-trend-down":o,"crm-stat-trend-up":m});function Ws(o,m){if(o&1&&(i(0,"div",27),a(1),r()),o&2){let e=d().$implicit;c("ngClass",ke(2,Bs,e.trendDir==="down",e.trendDir==="up")),l(),A(" ",e.footnote," ")}}function Rs(o,m){if(o&1&&(i(0,"div",22)(1,"div",23)(2,"span",24),a(3),r()(),i(4,"div",25),a(5),r(),f(6,Ws,2,5,"div",26),r()),o&2){let e=m.$implicit;l(3),g(e.label),l(2),g(e.value),l(),c("ngIf",e.footnote)}}function qs(o,m){o&1&&(i(0,"div",28),a(1,"No dashboard metrics returned."),r())}function zs(o,m){if(o&1){let e=w();i(0,"tr")(1,"td")(2,"a",29),h("click",function(){let t=p(e).$implicit,s=d();return u(s.openTicket(t))}),a(3),r()(),i(4,"td"),a(5),r(),i(6,"td"),a(7),r(),i(8,"td")(9,"span",30),a(10),r()(),i(11,"td")(12,"span",30),a(13),r()()()}if(o&2){let e=m.$implicit;D("crm-row-risk",e.isOverdue),l(3),g(e.id),l(2),g(e.subject),l(2),g(e.customer),l(2),c("ngClass","crm-badge-"+e.priorityTone),l(),g(e.priority),l(2),c("ngClass","crm-badge-"+e.slaTone),l(),g(e.sla)}}function js(o,m){o&1&&(i(0,"tr")(1,"td",31),a(2,"Queue is clear."),r()())}function Us(o,m){if(o&1&&(i(0,"div",32),b(1,"span",33),i(2,"div",34),a(3),r(),i(4,"div",35),a(5),r()()),o&2){let e=m.$implicit;l(),c("ngClass","crm-timeline-dot-"+e.tone),l(2),g(e.time),l(2),g(e.text)}}function Hs(o,m){o&1&&(i(0,"div",36),a(1,"No SLA risk."),r())}function Ks(o,m){if(o&1){let e=w();i(0,"tr")(1,"td")(2,"a",29),h("click",function(){let t=p(e).$implicit,s=d();return u(s.openAccount(t))}),a(3),r()(),i(4,"td"),a(5),r(),i(6,"td"),a(7),r(),i(8,"td"),a(9),r(),i(10,"td"),a(11),r(),i(12,"td"),a(13),r(),i(14,"td")(15,"span",30),a(16),r()()()}if(o&2){let e=m.$implicit;D("crm-row-risk",e.isFlagged),l(3),g(e.account),l(2),g(e.tier),l(2),g(e.tickets90),l(2),g(e.agentHours),l(2),g(e.loadedCost),l(2),g(e.costToArr),l(2),c("ngClass","crm-badge-"+e.trendTone),l(),g(e.trend)}}function Qs(o,m){o&1&&(i(0,"tr")(1,"td",37),a(2,"No cost data."),r()())}var Ii=(()=>{class o{constructor(e,n,t){this.api=e,this.router=n,this.route=t,this.loading=!1,this.kpis=[],this.queue=[],this.slaRisk=[],this.cost=[]}ngOnInit(){this.load()}trackByIndex(e){return e}load(){this.loading=!0,this.api.getSupportAgentDashboard({}).subscribe({next:e=>{this.loading=!1;let n=e?.response?.data;n&&(this.kpis=(n.count_info||[]).map(t=>({label:t?.title||"\u2014",value:t?.value_display??(t?.value!=null?String(t.value):"\u2014"),footnote:t?.subtitle||void 0})),this.queue=(n.ticket_queue||[]).map(t=>({ticketId:t?.id??null,id:t?.ticket_number||"\u2014",subject:t?.subject||"\u2014",customer:t?.customer||"\u2014",priority:t?.priority_display||t?.priority||"\u2014",priorityTone:this.toneFromColor(t?.priority_color),sla:t?.sla_label||"\u2014",slaTone:this.toneFromColor(t?.sla_color),isOverdue:!!t?.is_overdue})),this.slaRisk=(n.sla_breach_risk||[]).map(t=>({ticketId:t?.ticket_id??null,time:t?.time_bucket||"\u2014",text:t?.description||t?.ticket_number||"\u2014",tone:this.toneFromColor(t?.indicator_color)})),this.cost=(n.support_cost_per_customer||[]).map(t=>({customerId:t?.customer_id??null,account:t?.account||"\u2014",tier:t?.tier||"\u2014",tickets90:t?.tickets_90d??0,agentHours:t?.agent_hours_display??(t?.agent_hours!=null?String(t.agent_hours):"\u2014"),loadedCost:t?.loaded_cost_display??(t?.loaded_cost!=null?String(t.loaded_cost):"\u2014"),costToArr:t?.cost_to_arr_display??(t?.cost_to_arr!=null?String(t.cost_to_arr):"\u2014"),trend:t?.trend_label||t?.trend||"\u2014",trendTone:this.toneFromColor(t?.trend_color),isFlagged:!!t?.is_flagged})))},error:()=>{this.loading=!1}})}toneFromColor(e){let n=String(e||"").toLowerCase();return/red|danger|critical|high|overdue|breach/.test(n)?"red":/amber|orange|warn|yellow|medium|risk/.test(n)?"amber":/green|success|ok|low|safe/.test(n)?"green":/blue|info|primary/.test(n)?"blue":"gray"}openTicket(e){e?.ticketId!=null&&this.router.navigate(["tickets",e.ticketId],{relativeTo:this.route.parent})}openAccount(e){e?.customerId!=null&&this.router.navigate(["accounts",e.customerId],{relativeTo:this.route.parent})}static{this.\u0275fac=function(n){return new(n||o)(E(R),E($),E(Y))}}static{this.\u0275cmp=V({type:o,selectors:[["app-dashboard-support"]],decls:70,vars:12,consts:[[1,"crm-page-body"],[1,"crm-page-header"],["appTranslate","",1,"crm-page-title"],["appTranslate","",1,"crm-page-subtitle"],[1,"crm-stat-grid"],["class","crm-stat-card",4,"ngFor","ngForOf","ngForTrackBy"],["class","crm-text-muted py-3","appTranslate","",4,"ngIf"],[1,"crm-grid","crm-grid-3-1","mb-4"],[1,"card"],[1,"card-header"],["appTranslate","",1,"card-title"],[1,"card-body","p-0"],[1,"crm-table-wrapper","crm-table-wrapper-flush"],[1,"crm-data-table"],["appTranslate",""],[3,"crm-row-risk",4,"ngFor","ngForOf","ngForTrackBy"],[4,"ngIf"],[1,"card-body"],[1,"crm-timeline"],["class","crm-timeline-item",4,"ngFor","ngForOf","ngForTrackBy"],["class","crm-text-muted text-center py-3","appTranslate","",4,"ngIf"],["appTranslate","",1,"card-subtitle"],[1,"crm-stat-card"],[1,"crm-stat-header"],[1,"crm-stat-label"],[1,"crm-stat-value"],["class","crm-stat-trend",3,"ngClass",4,"ngIf"],[1,"crm-stat-trend",3,"ngClass"],["appTranslate","",1,"crm-text-muted","py-3"],[1,"crm-cell-primary",3,"click"],[1,"crm-badge",3,"ngClass"],["colspan","5","appTranslate","",1,"text-center","crm-text-muted","py-4"],[1,"crm-timeline-item"],[1,"crm-timeline-dot",3,"ngClass"],[1,"crm-timeline-time"],[1,"crm-timeline-text"],["appTranslate","",1,"crm-text-muted","text-center","py-3"],["colspan","7","appTranslate","",1,"text-center","crm-text-muted","py-4"]],template:function(n,t){n&1&&(i(0,"div",0)(1,"div",1)(2,"div")(3,"h1",2),a(4,"Support Dashboard"),r(),i(5,"p",3),a(6,"Ticket queue, SLA risk, and customer cost."),r()()(),i(7,"div",4),f(8,Rs,7,3,"div",5)(9,qs,2,0,"div",6),r(),i(10,"div",7)(11,"div",8)(12,"div",9)(13,"div",10),a(14,"Ticket Queue"),r()(),i(15,"div",11)(16,"div",12)(17,"table",13)(18,"thead")(19,"tr")(20,"th",14),a(21,"ID"),r(),i(22,"th",14),a(23,"Subject"),r(),i(24,"th",14),a(25,"Customer"),r(),i(26,"th",14),a(27,"Priority"),r(),i(28,"th",14),a(29,"SLA"),r()()(),i(30,"tbody"),f(31,zs,14,9,"tr",15)(32,js,3,0,"tr",16),r()()()()(),i(33,"div",8)(34,"div",9)(35,"div",10),a(36,"SLA Breach Risk"),r()(),i(37,"div",17)(38,"div",18),f(39,Us,6,3,"div",19)(40,Hs,2,0,"div",20),r()()()(),i(41,"div",8)(42,"div",9)(43,"div")(44,"div",10),a(45,"Support Cost per Customer"),r(),i(46,"div",21),a(47,"Loaded cost from Finance \xB7 feeds account profitability & health"),r()()(),i(48,"div",11)(49,"div",12)(50,"table",13)(51,"thead")(52,"tr")(
253,"th",14),a(54,"Account"),r(),i(55,"th",14),a(56,"Tier"),r(),i(57,"th",14),a(58,"Tickets (90d)"),r(),i(59,"th",14),a(60,"Agent Hours"),r(),i(61,"th",14),a(62,"Loaded Cost"),r(),i(63,"th",14),a(64,"Cost-to-ARR"),r(),i(65,"th",14),a(66,"Trend"),r()()(),i(67,"tbody"),f(68,Ks,17,10,"tr",15)(69,Qs,3,0,"tr",16),r()()()()()()),n&2&&(l(8),c("ngForOf",t.kpis)("ngForTrackBy",t.trackByIndex),l(),c("ngIf",!t.kpis.length&&!t.loading),l(22),c("ngForOf",t.queue)("ngForTrackBy",t.trackByIndex),l(),c("ngIf",!t.queue.length&&!t.loading),l(7),c("ngForOf",t.slaRisk)("ngForTrackBy",t.trackByIndex),l(),c("ngIf",!t.slaRisk.length&&!t.loading),l(28),c("ngForOf",t.cost)("ngForTrackBy",t.trackByIndex),l(),c("ngIf",!t.cost.length&&!t.loading))},dependencies:[j,W,N,L],styles:["[_nghost-%COMP%]{display:block}"]})}}return o})();var Xt=()=>({standalone:!0}),Gs=(o,m,e)=>({"health-val-green":o,"health-val-amber":m,"health-val-red":e}),Js=(o,m)=>({"crm-stat-trend-up":o,"crm-stat-trend-down":m});function Ys(o,m){o&1&&b(0,"i",41)}function $s(o,m){o&1&&b(0,"i",42)}function Zs(o,m){if(o&1&&(i(0,"div",38),f(1,Ys,1,0,"i",39)(2,$s,1,0,"i",40),a(3),r()),o&2){let e=d().$implicit;c("ngClass",ke(4,Js,e.trendDir==="up",e.trendDir==="down")),l(),c("ngIf",e.trendDir==="up"),l(),c("ngIf",e.trendDir==="down"),l(),A(" ",e.footnote," ")}}function Xs(o,m){if(o&1&&(i(0,"div",33)(1,"div",34)(2,"span",35),a(3),r()(),i(4,"div",36),a(5),r(),f(6,Zs,4,7,"div",37),r()),o&2){let e=m.$implicit;l(3),g(e.label),l(),c("ngClass",Dt(4,Gs,e.valueTone==="green",e.valueTone==="amber",e.valueTone==="red")),l(),g(e.value),l(),c("ngIf",e.footnote)}}function el(o,m){if(o&1&&(i(0,"option",43),a(1),r()),o&2){let e=m.$implicit;c("value",e.value),l(),g(e.label)}}function tl(o,m){if(o&1&&(i(0,"option",44),a(1),r()),o&2){let e=m.$implicit;c("ngValue",e.id),l(),g(e.name)}}function nl(o,m){if(o&1&&(i(0,"option",43),a(1),r()),o&2){let e=m.$implicit;c("value",e.value),l(),g(e.label)}}function il(o,m){if(o&1){let e=w();i(0,"tr")(1,"td")(2,"a",45),h("click",function(){let t=p(e).$implicit,s=d();return u(s.openAccount(t))}),a(3),r()(),i(4,"td"),a(5),r(),i(6,"td")(7,"span",46),a(8),r()(),i(9,"td"),a(10),r(),i(11,"td"),a(12),r(),i(13,"td"),a(14),r(),i(15,"td"),a(16),r(),i(17,"td"),a(18),r(),i(19,"td"),a(20),r()()}if(o&2){let e=m.$implicit;D("crm-row-risk",e.risk),l(3),g(e.account),l(2),g(e.tier),l(2),c("ngClass","crm-badge-"+e.healthTone),l(),g(e.health),l(2),g(e.engagement),l(2),g(e.ar),l(2),g(e.renewal),l(2),g(e.support),l(2),g(e.nps),l(2),g(e.owner)}}function rl(o,m){o&1&&(i(0,"tr")(1,"td",47),a(2,"Loading accounts\u2026"),r()())}function ol(o,m){o&1&&(i(0,"tr")(1,"td",48),a(2,"No accounts to display."),r()())}function al(o,m){if(o&1&&(i(0,"div",49),b(1,"span",50),i(2,"div",51),a(3),r(),i(4,"div",52),a(5),r()()),o&2){let e=m.$implicit;l(),c("ngClass","crm-timeline-dot-"+e.tone),l(2),g(e.date),l(2),g(e.html)}}function sl(o,m){o&1&&(i(0,"div",53),a(1,"No expansion signals this week."),r())}var Oi=(()=>{class o{constructor(e,n,t,s){this.toast=e,this.api=n,this.router=t,this.route=s,this.kpis=[{label:"Healthy (80+)",value:"\u2014",valueTone:"green"},{label:"At-Risk (50\u201379)",value:"\u2014",valueTone:"amber"},{label:"Critical (< 50)",value:"\u2014",valueTone:"red"},{label:"AI Expansion Signals",value:"\u2014"}],this.search="",this.filterBand="",this.filterCsmId=null,this.filterTier="",this.bandFilterOpts=[],this.tierFilterOpts=[],this.csmFilterOpts=[],this.bandOptsSeeded=!1,this.tierOptsSeeded=!1,this.accounts=[],this.loading=!1,this.signals=[],this.recomputing=!1,this.searchInput$=new Ie,this.destroy$=new Ie,this.exporting=!1}ngOnInit(){this.searchInput$.pipe(Re(300),qe(),ze(this.destroy$)).subscribe(()=>this.loadAccounts()),this.loadDashboard(),this.loadChoices(),this.loadAccounts()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}onSearchChange(){this.searchInput$.next(this.search)}onFilterChange(){this.loadAccounts()}loadDashboard(){this.api.getHealthDashboard().subscribe({next:e=>{let n=e?.response?.data;if(!n)return;let t=s=>s==null?void 0:`${s>=0?"+":""}${s}pp`;this.kpis=[{label:"Healthy (80+)",value:n.healthy?n.healthy.percent+"%":"\u2014",valueTone:"green",footnote:t(n.healthy?.delta_pp),trendDir:(n.healthy?.delta_pp??0)>=0?"up":"down"},{label:"At-Risk (50\u201379)",value:n.at_risk?n.at_risk.percent+"%":"\u2014",valueTone:"amber",footnote:t(n.at_risk?.delta_pp)},{label:"Critical (< 50)",value:n.critical?n.critical.percent+"%":"\u2014",valueTone:"red",footnote:t(n.critical?.delta_pp),trendDir:(n.critical?.delta_pp??0)>0?"up":"down"},{label:"AI Expansion Signals",value:String(n.expansion_signals?.total??"\u2014"),footnote:n.expansion_signals?.new_this_week!=null?`${n.expansion_signals.new_this_week} new this week`:void 0,trendDir:"up"}]},error:()=>{}})}
2loadChoices(){this.api.getHealthChoices().subscribe({next:e=>{let n=e?.response?.data;if(!n)return;let t=this.pickList(n,["health_bands","bands","health_band","health_band_choices"]);t&&(this.bandFilterOpts=this.toChoices(t),this.bandOptsSeeded=this.bandFilterOpts.length>0);let s=this.pickList(n,["tiers","tier","tier_choices","account_tiers"]);s&&(this.tierFilterOpts=this.toChoices(s),this.tierOptsSeeded=this.tierFilterOpts.length>0);let _=this.pickList(n,["csm_owners","csms","owners","csm_owner","users"]);this.csmFilterOpts=_?this.toCsmOptions(_):[],this.csmFilterOpts.length||this.loadCsmUsers()},error:()=>{this.loadCsmUsers()}})}loadCsmUsers(){this.api.getAssigneeUsers({user_type:"SELLER",search:"",perPage:100,pageNumber:1}).subscribe({next:e=>{let n=e?.response?.data?.users??[];this.csmFilterOpts=this.toCsmOptions(Array.isArray(n)?n:[])},error:()=>{this.csmFilterOpts=[]}})}pickList(e,n){for(let t of n){let s=e?.[t];if(Array.isArray(s)&&s.length)return s}return null}toChoices(e){return e.map(n=>{if(n==null)return null;if(typeof n=="string"||typeof n=="number")return{value:String(n),label:String(n)};let t=n.value??n.key??n.code??n.id??n.name,s=n.label??n.display??n.display_name??n.name??n.title??t;return t==null?null:{value:String(t),label:String(s)}}).filter(n=>!!n)}toCsmOptions(e){return e.map(n=>({id:Number(n?.id??n?.user_id??n?.csm_owner_id??n?.value),name:String(n?.name||n?.full_name||n?.label||n?.username||n?.email||"")})).filter(n=>Number.isFinite(n.id)&&!!n.name)}filterBody(){let e={},n=this.search.trim();return n&&(e.search=n),this.filterTier&&(e.tier=this.filterTier),this.filterBand&&(e.health_band=this.filterBand),this.filterCsmId!=null&&(e.csm_owner_id=Number(this.filterCsmId)),e}loadAccounts(){this.loading=!0,this.api.getHealthAccountList(se(z({},this.filterBody()),{page:1,page_size:100})).subscribe({next:e=>{let n=e?.response?.data?.items||[],t=e?.responseCode===200?n:[];this.seedOptsFromRows(t),this.accounts=t.map(s=>this.mapAccount(s)),this.loading=!1},error:()=>{this.accounts=[],this.loading=!1}})}seedOptsFromRows(e){if(!Object.keys(this.filterBody()).length){if(!this.bandOptsSeeded){let n=new Map;e.forEach(t=>{t?.health_band&&n.set(String(t.health_band),String(t.health_band_label||t.health_band))}),n.size&&(this.bandFilterOpts=Array.from(n,([t,s])=>({value:t,label:s})),this.bandOptsSeeded=!0)}if(!this.tierOptsSeeded){let n=new Set;e.forEach(t=>{t?.tier&&n.add(String(t.tier))}),n.size&&(this.tierFilterOpts=Array.from(n,t=>({value:t,label:t})),this.tierOptsSeeded=!0)}}}mapAccount(e){let n=Number(e.health_score??0);return{customerId:e.customer_id??null,account:e.account_name||"\u2014",tier:e.tier||"\u2014",health:n,healthTone:n>=80?"green":n>=50?"amber":"red",engagement:Number(e.engagement??0),ar:Number(e.ar??0),renewal:Number(e.renewal??0),support:Number(e.support??0),nps:Number(e.nps??0),owner:e.owner||"\u2014",risk:n<50}}trackByIndex(e){return e}openAccount(e){if(e.customerId==null){this.toast.info(`Open account: ${e.account}`);return}this.router.navigate(["accounts",e.customerId],{relativeTo:this.route.parent})}recompute(){this.recomputing=!0,this.api.recomputeHealth({force:!0}).subscribe({next:e=>{this.recomputing=!1,e?.responseCode===200?(this.toast.success(e?.response?.message||"Health scores recomputed."),this.loadAccounts()):this.toast.error(e?.response?.message||"Failed to recompute.")},error:()=>{this.recomputing=!1,this.toast.error("Failed to recompute.")}})}exportTable(){this.exporting||(this.exporting=!0,this.api.exportHealth(se(z({},this.filterBody()),{page:1,page_size:1e3})).subscribe({next:e=>{this.exporting=!1,this.api.saveBlob(e,"account-health.csv"),this.toast.success("Account health exported.")},error:()=>{this.exporting=!1,this.toast.error("Failed to export account health.")}}))}static{this.\u0275fac=function(n){return new(n||o)(E(q),E(R),E($),E(Y))}}static{this.\u0275cmp=V({type:o,selectors:[["app-health-dashboard"]],decls:68,vars:32,consts:[[1,"crm-page-body"],[1,"crm-page-header"],["appTranslate","",1,"crm-page-title"],["appTranslate","",1,"crm-page-subtitle"],[1,"crm-stat-grid"],["class","crm-stat-card",4,"ngFor","ngForOf","ngForTrackBy"],[1,"card","mb-4"],[1,"card-header"],[1,"d-flex","flex-wrap","align-items-center","gap-2","flex-grow-1"],[1,"crm-search-wrap"],[1,"ri-search-line"],["type","search","placeholder","Search accounts\u2026",1,"crm-search-input",3,"ngModelChange","ngModel","ngModelOptions"],[1,"crm-filter-select",3,"ngModelChange","ngModel","ngModelOptions"],["value","","appTranslate",""],[3,"value",4,"ngFor","ngForOf","ngForTrackBy"],["appTranslate","",3,"ngValue"],[3,"ngValue",4,"ngFor","ngForOf","ngForTrackBy"],["type","button",1,"btn","btn-light","btn-sm",3,"click","disabled"],[1,"ri-refresh-line"],["type","button",1,"btn","btn-outline-theme","btn-sm",3,"click","disabled"],[1,"ri-download-l
2ine"],[1,"card-body","p-0"],[1,"crm-table-wrapper","crm-table-wrapper-flush"],[1,"crm-data-table"],["appTranslate",""],[3,"crm-row-risk",4,"ngFor","ngForOf","ngForTrackBy"],[4,"ngIf"],[1,"card"],["appTranslate","",1,"card-title"],[1,"card-body"],[1,"crm-timeline"],["class","crm-timeline-item",4,"ngFor","ngForOf","ngForTrackBy"],["class","crm-text-muted text-center py-3","appTranslate","",4,"ngIf"],[1,"crm-stat-card"],[1,"crm-stat-header"],[1,"crm-stat-label"],[1,"crm-stat-value",3,"ngClass"],["class","crm-stat-trend",3,"ngClass",4,"ngIf"],[1,"crm-stat-trend",3,"ngClass"],["class","ri-arrow-up-line",4,"ngIf"],["class","ri-arrow-down-line",4,"ngIf"],[1,"ri-arrow-up-line"],[1,"ri-arrow-down-line"],[3,"value"],[3,"ngValue"],[1,"crm-cell-primary",3,"click"],[1,"crm-badge",3,"ngClass"],["colspan","9","appTranslate","",1,"text-center","py-4"],["colspan","9","appTranslate","",1,"text-center"],[1,"crm-timeline-item"],[1,"crm-timeline-dot",3,"ngClass"],[1,"crm-timeline-time"],[1,"crm-timeline-text"],["appTranslate","",1,"crm-text-muted","text-center","py-3"]],template:function(n,t){n&1&&(i(0,"div",0)(1,"div",1)(2,"div")(3,"h1",2),a(4,"Customer Health Dashboard"),r(),i(5,"p",3),a(6,"Composite score across all accounts \u2014 Engagement + AR + Renewal + Support + NPS"),r()()(),i(7,"div",4),f(8,Xs,7,8,"div",5),r(),i(9,"div",6)(10,"div",7)(11,"div",8)(12,"div",9),b(13,"i",10),i(14,"input",11),v("ngModelChange",function(_){return y(t.search,_)||(t.search=_),_}),h("ngModelChange",function(){return t.onSearchChange()}),r()(),i(15,"select",12),v("ngModelChange",function(_){return y(t.filterBand,_)||(t.filterBand=_),_}),h("ngModelChange",function(){return t.onFilterChange()}),i(16,"option",13),a(17,"All Health Bands"),r(),f(18,el,2,2,"option",14),r(),i(19,"select",12),v("ngModelChange",function(_){return y(t.filterCsmId,_)||(t.filterCsmId=_),_}),h("ngModelChange",function(){return t.onFilterChange()}),i(20,"option",15),a(21,"All CSMs"),r(),f(22,tl,2,2,"option",16),r(),i(23,"select",12),v("ngModelChange",function(_){return y(t.filterTier,_)||(t.filterTier=_),_}),h("ngModelChange",function(){return t.onFilterChange()}),i(24,"option",13),a(25,"All Tiers"),r(),f(26,nl,2,2,"option",14),r()(),i(27,"button",17),h("click",function(){return t.recompute()}),b(28,"i",18),a(29),r(),i(30,"button",19),h("click",function(){return t.exportTable()}),b(31,"i",20),a(32),r()(),i(33,"div",21)(34,"div",22)(35,"table",23)(36,"thead")(37,"tr")(38,"th",24),a(39,"Account"),r(),i(40,"th",24),a(41,"Tier"),r(),i(42,"th",24),a(43,"Health"),r(),i(44,"th",24),a(45,"Engagement"),r(),i(46,"th",24),a(47,"AR"),r(),i(48,"th",24),a(49,"Renewal"),r(),i(50,"th",24),a(51,"Support"),r(),i(52,"th",24),a(53,"NPS"),r(),i(54,"th",24),a(55,"Owner"),r()()(),i(56,"tbody"),f(57,il,21,12,"tr",25)(58,rl,3,0,"tr",26)(59,ol,3,0,"tr",26),r()()()()(),i(60,"div",27)(61,"div",7)(62,"div",28),a(63,"AI Expansion Signals \u2014 Last 7 days"),r()(),i(64,"div",29)(65,"div",30),f(66,al,6,3,"div",31)(67,sl,2,0,"div",32),r()()()()),n&2&&(l(8),c("ngForOf",t.kpis)("ngForTrackBy",t.trackByIndex),l(6),x("ngModel",t.search),c("ngModelOptions",C(28,Xt)),l(),x("ngModel",t.filterBand),c("ngModelOptions",C(29,Xt)),l(3),c("ngForOf",t.bandFilterOpts)("ngForTrackBy",t.trackByIndex),l(),x("ngModel",t.filterCsmId),c("ngModelOptions",C(30,Xt)),l(),c("ngValue",null),l(2),c("ngForOf",t.csmFilterOpts)("ngForTrackBy",t.trackByIndex),l(),x("ngModel",t.filterTier),c("ngModelOptions",C(31,Xt)),l(3),c("ngForOf",t.tierFilterOpts)("ngForTrackBy",t.trackByIndex),l(),c("disabled",t.recomputing),l(2),A(" ",t.recomputing?"Recomputing\u2026":"Recompute"," "),l(),c("disabled",t.exporting),l(2),A(" ",t.exporting?"Exporting\u2026":"Export"," "),l(25),c("ngForOf",t.accounts)("ngForTrackBy",t.trackByIndex),l(),c("ngIf",t.loading),l(),c("ngIf",!t.loading&&!t.accounts.length),l(7),c("ngForOf",t.signals)("ngForTrackBy",t.trackByIndex),l(),c("ngIf",!t.signals.length))},dependencies:[j,W,N,X,ee,te,Z,U,H,L],styles:["[_nghost-%COMP%]{display:block}.health-val-green[_ngcontent-%COMP%]{color:var(--color-success)}.health-val-amber[_ngcontent-%COMP%]{color:var(--color-warning)}.health-val-red[_ngcontent-%COMP%]{color:var(--color-error)}"]})}}return o}
2)();var en=(()=>{class o{static{this.SUPER_ADMIN_CODES=["super_admin","superadmin","admin"]}constructor(e){this.http=e,this.superAdmin=null,this.probed=!1}currentUserId(){let e=this.read("userDetails"),n=this.read("details")?.response?.user_id??e?.userId??e?.user_id??e?.id,t=Number(n);return Number.isFinite(t)&&t>0?t:null}get isSuperAdmin(){if(this.superAdmin===null){let e=this.read("details");this.superAdmin=[this.read("userDetails"),e?.response,e,this.read("roles")].some(n=>this.holdsSuperAdmin(n))}return this.superAdmin||this.probe(),this.superAdmin}refresh(){this.superAdmin=null,this.probed=!1}probe(){if(this.probed||!localStorage.getItem("api_token"))return;this.probed=!0;let e=new rt({"Content-Type":"application/json"});this.http.get(Oe.apiUrl+"user/profile/details",{headers:e}).subscribe(n=>this.accept(n),()=>{}),this.http.post(Oe.apiUrl+"roles/user/access/list","",{headers:e}).subscribe(n=>this.accept(n),()=>{})}accept(e){this.holdsSuperAdmin(e)&&(this.superAdmin=!0)}read(e){try{return JSON.parse(localStorage.getItem(e)||"null")}catch{return null}}holdsSuperAdmin(e,n=0){return e==null||n>6?!1:Array.isArray(e)?e.some(t=>this.holdsSuperAdmin(t,n+1)):typeof e!="object"?!1:Object.entries(e).some(([t,s])=>{let _=t.toLowerCase();return s===!0&&(_.includes("super")||_==="is_admin"||_==="isadmin")||(_.includes("role")||_.includes("designation"))&&this.isSuperAdminRole(s,n)?!0:s!==null&&typeof s=="object"&&this.holdsSuperAdmin(s,n+1)})}isSuperAdminRole(e,n){if(n>6)return!1;if(typeof e=="string"){let t=e.trim().toLowerCase().replace(/[\s-]+/g,"_");return o.SUPER_ADMIN_CODES.includes(t)}return Array.isArray(e)?e.some(t=>this.isSuperAdminRole(t,n+1)):e!==null&&typeof e=="object"?["code","userRole","user_role","role","name","title","label"].some(t=>this.isSuperAdminRole(e[t],n+1)):!1}static{this.\u0275fac=function(n){return new(n||o)(je(_t))}}static{this.\u0275prov=Te({token:o,factory:o.\u0275fac,providedIn:"root"})}}return o})();var un=()=>({standalone:!0});function ll(o,m){if(o&1){let e=w();i(0,"label",38)(1,"input",39),v("ngModelChange",function(t){let s=p(e).$implicit;return y(s.visible,t)||(s.visible=t),u(t)}),r(),i(2,"span"),a(3),r()()}if(o&2){let e=m.$implicit;l(),x("ngModel",e.visible),c("ngModelOptions",C(3,un)),l(2),g(e.label)}}function cl(o,m){if(o&1&&b(0,"i",42),o&2){let e=d(2);c("ngClass",e.sortDir===1?"ri-arrow-up-line":"ri-arrow-down-line")}}function dl(o,m){if(o&1){let e=w();i(0,"button",40),h("click",function(){let t=p(e).$implicit,s=d();return u(s.doSort(t.key))}),i(1,"span"),a(2),r(),f(3,cl,1,1,"i",41),r()}if(o&2){let e=m.$implicit,n=d();l(2),g(e.label),l(),c("ngIf",n.sortKey===e.key)}}function ml(o,m){if(o&1&&(i(0,"option",51),a(1),r()),o&2){let e=m.$implicit;c("ngValue",e.id),l(),g(e.name)}}function pl(o,m){if(o&1){let e=w();P(0),i(1,"select",47),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.assignTo,t)||(s.assignTo=t),u(t)}),i(2,"option",48),a(3,"Assign to\u2026"),r(),f(4,ml,2,2,"option",49),r(),i(5,"button",8),h("click",function(){p(e);let t=d(2);return u(t.assignSelected())}),b(6,"i",50),i(7,"span",7),a(8,"Assign"),r()(),F()}if(o&2){let e=d(2);l(),x("ngModel",e.assignTo),c("ngModelOptions",C(5,un)),l(),c("ngValue",null),l(2),c("ngForOf",e.assignees)("ngForTrackBy",e.trackByIndex)}}function ul(o,m){o&1&&(i(0,"span",52),b(1,"i",53),i(2,"span",7),a(3,"Only a Super Admin can assign leads."),r()())}function gl(o,m){if(o&1){let e=w();i(0,"div",43)(1,"span",44),a(2),i(3,"span",7),a(4,"selected"),r()(),f(5,pl,9,6,"ng-container",36)(6,ul,4,0,"span",45),i(7,"button",46),h("click",function(){p(e);let t=d();return u(t.clearSelection())}),a(8,"Clear"),r()()}if(o&2){let e=d();l(2),A("",e.selected.size," "),l(3),c("ngIf",e.canAssign),l(),c("ngIf",!e.canAssign)}}function _l(o,m){if(o&1){let e=w();i(0,"th",54),h("click",function(){p(e);let t=d();return u(t.doSort("title"))}),a(1,"Lead Title"),r()}if(o&2){let e=d();c("ngClass",e.sortClass("title"))}}function hl(o,m){if(o&1){let e=w();i(0,"th",54),h("click",function(){p(e);let t=d();return u(t.doSort("owner"))}),a(1,"Lead Owner"),r()}if(o&2){let e=d();c("ngClass",e.sortClass("owner"))}}function fl(o,m){if(o&1){let e=w();i(0,"th",54),h("click",function(){p(e);let t=d();return u(t.doSort("company"))}),a(1,"Company"),r()}if(o&2){let e=d();c("ngClass",e.sortClass("company"))}}function xl(o,m){if(o&1){let e=w();i(0,"th",54),h("click",function(){p(e);let t=d();return u(t.doSort("contact"))}),a(1,"Contact Person"),r()}if(o&2){let e=d();c("ngClass",e.sortClass("contact"))}}function yl(o,m){if(o&1){let e=w();i(0,"th",54),h("click",function(){p(e);let t=d();return u(t.doSort("assigned"))}),a(1,"Assigned To"),r()}if(o&2){let e=d();c("ngClass",e.sortClass("assigned"))}}function vl(o,m){if(o&1){let e=w();i(0,"th",54),h("click",function(){p(e);let t=d();return u(t.doSort("status"))}),a(1,"Status"),r()}if(o&2){let e=d();c("ngClass",e.sortClass("status"))}}function Cl(o,m){if(o&1){let e=w();i(0,"td")(1,"a",58),h("click",function(){p(e);let t=d().$implicit,s=d();return u(s.view(t))}),a(2),r()()}if(o&2){let e=d().$implicit;l(2),g(e.title)}}function bl(o,m){if(o&1&&(i(0,"td"),a(1),r()),o&2){let e=d().$implicit;l(),g(e.owner)}}function Sl(o,m){if(o&1&&(i(0,"td"),a(1),r()),o&2){let e=d().$implicit;l(),g(e.company)}}function wl(o,m){if(o&1&&(i(0,"td"),a(1),r()),o&2){let e=d().$implicit;l(),g(e.contact)}}function Tl(o,m){if(o&1&&(i(0,"td"),a(1),r()),o&2){let e=d().$implicit;l(),g(e.assigned)}}function kl(o,m){if(o&1&&(i(0,"td")(1,"span",59),a(2),r()()),o&2){let e=d().$implicit;l(),c("ngClass","crm-badge-"+e.statusTone),l(),g(e.status)}}function El(o,m){if(o&1){let e=w();i(0,"tr")(1,"td",55)(2,"input",56),h("change",function(){let t=p(e).$implicit,s=d();return u(s.toggleSelect(t.id))}),r()(),f(3,Cl,3,1,"td",36)(4,bl,2,1,"td",36)(5,Sl,2,1,"td",36)(6,wl,2,1,"td",36)(7,Tl,2,1,"td",36)(8,kl,3,2,"td",36),b(9,"td",57),r()}if(o&2){let e=m.$implicit,n=d();D("is-selected",n.isSelected(e.id)),l(2),c("checked",n.isSelected(e.id)),l(),c("ngIf",n.isVisible("title")),l(),c("ngIf",n.isVisible("owner")),l(),c("ngIf",n.isVisible("company")),l(),c("ngIf",n.isVisible("contact")),l(),c("ngIf",n.isVisible("assigned")),l(),c("ngIf",n.isVisible("status"))}}function Ml(o,m){o&1&&(i(0,"tr")(1,"td",60),a(2,"Loading leads\u2026"),r()())}function Il(o,m){if(o&1){let e=w();i(0,"tr")(1,"td",61)(2,"div",62)(3,"div",63),b(4,"i",64),r(),i(5,"div",65),a(6,"No leads yet"),r(),i(7,"div",66),a(8,"Capture your first inbound or outbound lead to start building your pipeline."),r(),i(9,"button",67),h("click",function(){p(e);let t=d();return u(t.addLead())}),b(10,"i",9),i(11,"span",7),a(12," Add Lead"),r()()()()()}}var Fi=(()=>{class o{constructor(e,n,t,s,_,S){this.router=e,this.route=n,this.toast=t,this.modal=s,this.api=_,this.perms=S,this.search="",this.rows=[],this.viewRows=[],this.loading=!1,this.totalCount=0,this.pageSize=10,this.pageIndex=0,this.pageSizeOptions=[5,10,25,50],this.sortKey=null,this.sortDir=1,this.columns=[{key:"title",label:"Lead Title",visible:!0},{key:"owner",label:"Lead Owner",visible:!0},{key:"company",label:"Company",visible:!0},{key:"contact",label:"Contact Person",visible:!0},{key:"assigned",label:"Assigned To",visible:!0},{key:"status",label:"Status",visible:!0}],this.selected=new Set,this.assignees=[],this.assignTo=null,this.searchInput$=new Ie,this.destroy$=new Ie}ngOnInit(){this.searchInput$.pipe(Re(300),qe(),ze(this.destroy$)).subscribe(()=>this.loadLeads()),this.loadLeads(),this.loadAssignees()}loadAssignees(){this.api.getAssigneeUsers({user_type:"SELLER",search:"",perPage:100,pageNumber:1}).subscribe({next:e=>{this.assignees=e?.response?.data?.users??[]},error:()=>{}})}isSelected(e){return this.selected.has(e)}toggleSelect(e){this.selected.has(e)?this.selected.delete(e):this.selected.add(e)}get allSelected(){return this.viewRows.length>0&&this.viewRows.every(e=>this.selected.has(e.id))}
2toggleSelectAll(){this.allSelected?this.viewRows.forEach(e=>this.selected.delete(e.id)):this.viewRows.forEach(e=>this.selected.add(e.id))}clearSelection(){this.selected.clear(),this.assignTo=null}assignSelected(){if(!this.canAssign){this.toast.warning("Only a Super Admin can assign leads \u2014 including the assigned user.");return}if(this.assignTo==null){this.toast.warning("Pick an assignee from the dropdown first.");return}let e=Array.from(this.selected).map(Number).filter(n=>!Number.isNaN(n));if(!e.length){this.toast.warning("Select at least one lead.");return}this.api.assignLeads({lead_ids:e,assigned_to:Number(this.assignTo)}).subscribe({next:n=>{n?.responseCode===200?(this.toast.success(n?.response?.message||`Assigned ${e.length} lead(s).`),this.clearSelection(),this.loadLeads()):this.toast.error(n?.response?.message||"Failed to assign leads.")},error:()=>this.toast.error("Failed to assign leads.")})}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}loadLeads(){this.loading=!0;let e={search_query:this.search?.trim()||"",page:this.pageIndex+1,page_size:this.pageSize,order_by:"-created_date"};this.api.getLeadList(e).subscribe({next:n=>{if(n?.responseCode===200&&n?.response?.success){let s=n.response.data||[];this.rows=s.map(_=>this.mapLead(_)),this.totalCount=n.response.total_count??this.rows.length,n.response.current_page!=null&&(this.pageIndex=n.response.current_page-1),n.response.page_size!=null&&(this.pageSize=n.response.page_size)}else this.rows=[],this.totalCount=0,this.toast.error(n?.response?.message||"Failed to load leads.");this.applySortToView(),this.loading=!1},error:()=>{this.rows=[],this.totalCount=0,this.applySortToView(),this.loading=!1,this.toast.error("Failed to load leads.")}})}onPageChange(e){this.pageIndex=e.pageIndex,this.pageSize=e.pageSize,this.loadLeads()}mapLead(e){let n=`${e.contactFirstName||""} ${e.contactLastName||""}`.trim(),t=e.leadStatus||"",s=e.AssignedTo??e.assignedTo??e.assigned_to??null;return{id:String(e.id),assignedId:s!=null&&s!==""?Number(s):null,title:e.leadTitle||"\u2014",owner:e.leadOwner||"\u2014",company:e.contactCompany||"\u2014",contact:n||"\u2014",assigned:e.assignedToName!=null&&e.assignedToName!==""?String(e.assignedToName):"\u2014",status:t||"\u2014",statusTone:this.statusTone(t)}}statusTone(e){return{New:"blue",Contacted:"amber",Interested:"purple",Qualified:"green","Follow-Up":"teal",Won:"green",Lost:"red",Disqualified:"gray"}[e]??"gray"}isVisible(e){return this.columns.find(n=>n.key===e)?.visible??!0}clearSort(){this.sortKey=null,this.viewRows=[...this.rows]}trackByIndex(e){return e}onSearchChange(){this.pageIndex=0,this.searchInput$.next(this.search)}applySortToView(){this.sortKey?(this.viewRows=[...this.rows],this.runSort(this.sortKey,this.sortDir)):this.viewRows=[...this.rows]}doSort(e){this.sortDir=this.sortKey===e&&this.sortDir===1?-1:1,this.sortKey=e,this.runSort(e,this.sortDir)}runSort(e,n){this.viewRows.sort((t,s)=>String(t[e]).localeCompare(String(s[e]),void 0,{numeric:!0})*n)}sortClass(e){return this.sortKey!==e?"crm-sort":this.sortDir===1?"crm-sort-asc":"crm-sort-desc"}addLead(){this.router.navigate(["leads","new"],{relativeTo:this.route.parent})}canEdit(e){return this.perms.isSuperAdmin?!0:e.assignedId!=null&&e.assignedId===this.currentUserId()}get canAssign(){return this.perms.isSuperAdmin}view(e){this.router.navigate(["leads",e.id],{relativeTo:this.route.parent})}edit(e){if(!this.canEdit(e)){this.toast.warning("You can only edit leads assigned to you.");return}this.router.navigate(["leads",e.id,"edit"],{relativeTo:this.route.parent})}currentUserId(){return this.perms.currentUserId()}deleteRow(e){return B(this,null,function*(){if(!(yield this.modal.confirm({title:"Delete lead?",body:`This will permanently remove "${e.title}".`,confirmTone:"danger",confirmLabel:"Delete"})))return;let t=Number(e.id);Number.isNaN(t)||this.api.deleteLead({id:t}).subscribe({next:s=>{s?.responseCode===200?(this.toast.success(s?.response?.message||"Lead deleted."),this.loadLeads()):this.toast.error(s?.response?.message||"Failed to delete lead.")},error:()=>this.toast.error("Failed to delete lead.")})})}exportRows(){this.api.exportLeads({search_query:this.search?.trim()||"",order_by:"-created_date",max_rows:1e4}).subscribe({next:e=>{this.api.saveBlob(e,"leads.csv"),this.toast.success("Leads exported.")},error:()=>this.toast.error("Failed to export leads.")})}toggleColumns(){this.toast.info("Column customization coming soon.")}
2applyFilter(){this.toast.info("Filter pane coming soon.")}static{this.\u0275fac=function(n){return new(n||o)(E($),E(Y),E(q),E(ue),E(R),E(en))}}static{this.\u0275cmp=V({type:o,selectors:[["app-leads"]],decls:63,vars:24,consts:[[1,"crm-page-body"],[1,"crm-page-header"],["appTranslate","",1,"crm-page-title"],["appTranslate","",1,"crm-page-subtitle"],[1,"crm-page-actions"],["type","button",1,"btn","btn-light","btn-sm",3,"click"],[1,"ri-download-line"],["appTranslate",""],["type","button",1,"btn","btn-theme","btn-sm",3,"click"],[1,"ri-add-line"],[1,"card"],[1,"card-header"],[1,"d-flex","align-items-center","gap-2","w-100","leads-toolbar"],["ngbDropdown","","container","body","placement","bottom-start",1,"d-inline-block",3,"autoClose"],["type","button","ngbDropdownToggle","",1,"btn","btn-light","btn-sm"],[1,"ri-layout-column-line"],["ngbDropdownMenu","",1,"leads-cols-menu"],["appTranslate","",1,"dropdown-header"],["class","leads-col-item",4,"ngFor","ngForOf","ngForTrackBy"],[1,"crm-search-wrap","flex-grow-1"],[1,"ri-search-line"],["type","search","placeholder","Search leads\u2026",1,"crm-search-input",3,"ngModelChange","ngModel","ngModelOptions"],["ngbDropdown","","container","body","placement","bottom-end",1,"d-inline-block"],[1,"ri-filter-3-line"],["ngbDropdownMenu","",1,"leads-sort-menu"],["type","button","ngbDropdownItem","","class","d-flex align-items-center justify-content-between",3,"click",4,"ngFor","ngForOf","ngForTrackBy"],[1,"dropdown-divider"],["type","button","ngbDropdownItem","","appTranslate","",3,"click"],["class","card-header d-flex align-items-center gap-2 flex-wrap",4,"ngIf"],[1,"card-body","p-0"],[1,"crm-table-wrapper","crm-table-wrapper-flush"],[1,"crm-data-table"],[1,"text-center",2,"width","36px"],["type","checkbox","aria-label","Select all",3,"change","checked"],["appTranslate","",3,"ngClass","click",4,"ngIf"],[3,"is-selected",4,"ngFor","ngForOf","ngForTrackBy"],[4,"ngIf"],["showFirstLastButtons","",3,"page","length","pageSize","pageIndex","pageSizeOptions"],[1,"leads-col-item"],["type","checkbox",3,"ngModelChange","ngModel","ngModelOptions"],["type","button","ngbDropdownItem","",1,"d-flex","align-items-center","justify-content-between",3,"click"],[3,"ngClass",4,"ngIf"],[3,"ngClass"],[1,"card-header","d-flex","align-items-center","gap-2","flex-wrap"],[1,"crm-fw-600","crm-text-sm"],["class","crm-text-muted crm-text-sm d-inline-flex align-items-center gap-1",4,"ngIf"],["type","button","appTranslate","",1,"btn","btn-light","btn-sm",3,"click"],[1,"crm-filter-select",3,"ngModelChange","ngModel","ngModelOptions"],["appTranslate","",3,"ngValue"],[3,"ngValue",4,"ngFor","ngForOf","ngForTrackBy"],[1,"ri-user-shared-line"],[3,"ngValue"],[1,"crm-text-muted","crm-text-sm","d-inline-flex","align-items-center","gap-1"],[1,"ri-lock-line"],["appTranslate","",3,"click","ngClass"],[1,"text-center"],["type","checkbox","aria-label","Select lead",3,"change","checked"],[1,"text-right"],[1,"crm-cell-primary",3,"click"],[1,"crm-badge",3,"ngClass"],["colspan","8","appTranslate","",1,"text-center","py-4"],["colspan","8"],[1,"crm-empty-state"],[1,"crm-empty-state-icon"],[1,"ri-user-search-line"],["appTranslate","",1,"crm-empty-state-title"],["appTranslate","",1,"crm-empty-state-subtitle"],["type","button",1,"btn","btn-theme","btn-sm","mt-3",3,"click"]],template:function(n,t){n&1&&(i(0,"div",0)(1,"div",1)(2,"div")(3,"h1",2),a(4,"Leads"),r(),i(5,"p",3),a(6,"Inbound and Outbound Lead Pipeline"),r()(),i(7,"div",4)(8,"button",5),h("click",function(){return t.exportRows()}),b(9,"i",6),i(10,"span",7),a(11,"Export"),r()(),i(12,"button",8),h("click",function(){return t.addLead()}),b(13,"i",9),i(14,"span",7),a(15," Add Lead"),r()()()(),i(16,"div",10)(17,"div",11)(18,"div",12)(19,"div",13)(20,"button",14),b(21,"i",15),i(22,"span",7),a(23,"Columns"),r()(),i(24,"div",16)(25,"h6",17),a(26,"Show columns"),r(),f(27,ll,4,4,"label",18),r()(),i(28,"div",19),b(29,"i",20),i(30,"input",21),v("ngModelChange",function(_){return y(t.search,_)||(t.search=_),_}),h("ngModelChange",function(){return t.onSearchChange()}),r()(),i(31,"div",22)(32,"button",14),b(33,"i",23),i(34,"span",7),a(35,"Filter"),r()(),i(36,"div",24)(37,"h6",17),a(38,"Sort table by"),r(),f(39,dl,4,2,"button",25),b(40,"div",26),i(41,"button",27),h("click",function(){return t.clearSort()}),a(42,"Clear sort"),r()()()()(),f(43,gl,9,3,"div",28),i(44,"div",29)(45,"div",30)(46,"table",31)(47,"thead")(48,"tr")(49,"th",32)(50,"input",33),h("change",function(){return t.toggleSelectAll()}),r()(),f(51,_l,2,1,"th",34)(52,hl,2,1,"th",34)(53,fl,2,1,"th",34)(54,xl,2,1,"th",34)(55,yl,2,1,"th",34)(56,vl,2,1,"th",34),b(57,"th"),r()(),i(58,"tbody"),f(59,El,10,9,"tr",35)(60,Ml,3,0,"tr",36)(61,Il,13,0,"tr",36),r()()(),i(62,"mat-paginator",37),h("page",function(_){return t.onPageChange(_)}),r()()()()),n&2&&(l(19),c("autoClose","outside"),l(8),c("ngForOf",t.columns)("ngForTrackBy",t.trackByIndex),l(3),x("ngModel",t.search),c("ngModelOptions",C(23,un)),l(9),c("ngForOf",t.columns)("ngForTrackBy",t.trackByIndex),l(4),c("ngIf",t.selected.size>0),l(7),c("checked",t.allSelected),l(),c("ngIf",t.isVisible("title")),l(),c("ngIf",t.isVisible("owner")),l(),c("ngIf",t.isVisible("company")),l(),c("ngIf",t.isVisible("contact")),l(),c("ngIf",t.isVisible("assigned")),l(),c("ngIf",t.isVisible("status")),l(3),c("ngForOf",t.viewRows)("ngForTrackBy",t.trackByIndex),l(),c("ngIf",t.loading),l(
2),c("ngIf",!t.loading&&!t.viewRows.length),l(),c("length",t.totalCount)("pageSize",t.pageSize)("pageIndex",t.pageIndex)("pageSizeOptions",t.pageSizeOptions))},dependencies:[j,W,N,X,ee,te,Qe,Z,U,H,at,Ve,De,Ae,Pe,Fe,L],styles:["[_nghost-%COMP%]{display:block}.crm-actions-toggle.dropdown-toggle[_ngcontent-%COMP%]:after{display:none}.leads-toolbar[_ngcontent-%COMP%] .crm-search-wrap[_ngcontent-%COMP%]{max-width:none}.leads-cols-menu[_ngcontent-%COMP%]{min-width:210px;padding:6px}.leads-col-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;margin:0;padding:6px 10px;border-radius:var(--radius-md);font-size:.8125rem;color:var(--color-text-secondary);cursor:pointer}.leads-col-item[_ngcontent-%COMP%]:hover{background:var(--color-primary-50)}.leads-col-item[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{cursor:pointer}.leads-sort-menu[_ngcontent-%COMP%]{min-width:210px}"]})}}return o})();var ge=()=>({standalone:!0});function Ol(o,m){o&1&&b(0,"i",24)}function Pl(o,m){if(o&1&&(i(0,"span"),a(1),r()),o&2){let e=d().index;l(),g(e+1)}}function Fl(o,m){if(o&1&&b(0,"div",25),o&2){let e=d().index,n=d();D("crm-step-connector-done",n.step>e+1)}}function Al(o,m){if(o&1&&(P(0),i(1,"div",18)(2,"div",19)(3,"div",20),f(4,Ol,1,0,"i",21)(5,Pl,2,1,"span",10),r(),i(6,"div",22),a(7),r()()(),f(8,Fl,1,2,"div",23),F()),o&2){let e=m.$implicit,n=m.index,t=d();l(3),D("crm-step-circle-active",t.step===n+1)("crm-step-circle-done",t.step>n+1),l(),c("ngIf",t.step>n+1),l(),c("ngIf",t.step<=n+1),l(),D("crm-step-label-active",t.step===n+1)("crm-step-label-done",t.step>n+1),l(),g(e),l(),c("ngIf",n<t.steps.length-1)}}function Dl(o,m){if(o&1&&(i(0,"option",41),a(1),r()),o&2){let e=m.$implicit;c("value",e.name),l(),g(e.name)}}function Vl(o,m){if(o&1&&(i(0,"option"),a(1),r()),o&2){let e=m.$implicit;l(),g(e)}}function Ll(o,m){if(o&1&&(i(0,"option",44),a(1),r()),o&2){let e=m.$implicit;c("ngValue",e.id),l(),Ye(" ",e.name,"",e.company?" ("+e.company+")":""," ")}}function Nl(o,m){o&1&&(i(0,"p",45),a(1," Who sent this to us. Used to credit the referral in Advocacy. "),r())}function Bl(o,m){o&1&&(i(0,"p",45),a(1," No promoters found in Advocacy yet \u2014 add one under Customer Advocacy first. "),r())}function Wl(o,m){if(o&1){let e=w();i(0,"div",26)(1,"div",27)(2,"label",28),a(3,"Referred By"),r(),i(4,"select",30),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.model.referredBy,t)||(s.model.referredBy=t),u(t)}),h("ngModelChange",function(t){p(e);let s=d(2);return u(s.onReferredByChange(t))}),i(5,"option",34),a(6,"Select\u2026"),r(),f(7,Ll,2,3,"option",35),r(),f(8,Nl,2,0,"p",42)(9,Bl,2,0,"p",42),r(),i(10,"div",27)(11,"label",36),a(12,"Referrer Company"),r(),i(13,"input",43),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.model.referrerCompany,t)||(s.model.referrerCompany=t),u(t)}),r()()()}if(o&2){let e=d(2);l(4),x("ngModel",e.model.referredBy),c("ngModelOptions",C(9,ge)),l(),c("ngValue",null),l(2),c("ngForOf",e.referralPromoters)("ngForTrackBy",e.trackByIndex),l(),c("ngIf",e.referralPromoters.length),l(),c("ngIf",!e.referralPromoters.length),l(4),x("ngModel",e.model.referrerCompany),c("ngModelOptions",C(10,ge))}}function Rl(o,m){if(o&1&&(i(0,"option"),a(1),r()),o&2){let e=m.$implicit;l(),g(e)}}function ql(o,m){if(o&1&&(i(0,"option",44),a(1),r()),o&2){let e=m.$implicit;c("ngValue",e.id),l(),g(e.name)}}function zl(o,m){if(o&1&&(i(0,"option"),a(1),r()),o&2){let e=m.$implicit;l(),g(e)}}function jl(o,m){if(o&1){let e=w();i(0,"span",46)(1,"span"),a(2),r(),i(3,"button",47),h("click",function(t){let s=p(e).index;return d(2).removeTag(s),u(t.stopPropagation())}),a(4,"\xD7"),r()()}if(o&2){let e=m.$implicit;l(2),g(e),l(),pe("aria-label","Remove "+e)}}function Ul(o,m){if(o&1){let e=w();P(0),i(1,"div",26)(2,"div",27)(3,"label",28),a(4,"Lead Title"),r(),i(5,"input",29),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.title,t)||(s.model.title=t),u(t)}),r()(),i(6,"div",27)(7,"label",28),a(8,"Lead Owner"),r(),i(9,"select",30),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.owner,t)||(s.model.owner=t),u(t)}),i(10,"option",31),a(11,"Select\u2026"),r(),f(12,Dl,2,2,"option",32),r()()(),i(13,"div",26)(14,"div",27)(15,"label",28),a(16,"Lead Source"),r(),i(17,"select",30),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.source,t)||(s.model.source=t),u(t)}),f(18,Vl,2,1,"option",8),r()()(),f(19,Wl,14,11,"div",33),i(20,"div",26)(21,"div",27)(22,"label",28),a(23,"Lead Priority"),r(),i(24,"select",30),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.priority,t)||(s.model.priority=t),u(t)}),f(25,Rl,2,1,"option",8),r()(),i(26,"div",27)(27,"label",28),a(28,"Assign To"),r(),i(29,"select",30),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.assignTo,t)||(s.model.assignTo=t),u(t)}
2),i(30,"option",34),a(31,"Select\u2026"),r(),f(32,ql,2,2,"option",35),r()()(),i(33,"div",26)(34,"div",27)(35,"label",36),a(36,"Industry"),r(),i(37,"select",30),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.industry,t)||(s.model.industry=t),u(t)}),f(38,zl,2,1,"option",8),r()(),i(39,"div",27)(40,"label",36),a(41,"Tags"),r(),i(42,"div",37),h("click",function(){p(e);let t=le(45);return u(t.focus())}),f(43,jl,5,2,"span",38),i(44,"input",39,0),v("ngModelChange",function(t){p(e);let s=d();return y(s.tagInput,t)||(s.tagInput=t),u(t)}),h("keydown",function(t){p(e);let s=d();return u(s.onTagKeydown(t))})("focus",function(){p(e);let t=d();return u(t.tagFocused=!0)})("blur",function(){p(e);let t=d();return t.tagFocused=!1,u(t.commitTag())}),r()()()(),i(46,"div",27)(47,"label",36),a(48,"Note"),r(),i(49,"textarea",40),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.leadNote,t)||(s.model.leadNote=t),u(t)}),r()(),F()}if(o&2){let e=d();l(5),x("ngModel",e.model.title),c("ngModelOptions",C(33,ge)),l(4),x("ngModel",e.model.owner),c("ngModelOptions",C(34,ge)),l(3),c("ngForOf",e.assignUsers)("ngForTrackBy",e.trackByIndex),l(5),x("ngModel",e.model.source),c("ngModelOptions",C(35,ge)),l(),c("ngForOf",e.sourceOpts)("ngForTrackBy",e.trackByIndex),l(),c("ngIf",e.showReferralFields),l(5),x("ngModel",e.model.priority),c("ngModelOptions",C(36,ge)),l(),c("ngForOf",e.priorityOpts)("ngForTrackBy",e.trackByIndex),l(4),x("ngModel",e.model.assignTo),c("ngModelOptions",C(37,ge)),l(),c("ngValue",null),l(2),c("ngForOf",e.assignUsers)("ngForTrackBy",e.trackByIndex),l(5),x("ngModel",e.model.industry),c("ngModelOptions",C(38,ge)),l(),c("ngForOf",e.industryOpts)("ngForTrackBy",e.trackByIndex),l(4),D("is-focused",e.tagFocused),l(),c("ngForOf",e.tagList)("ngForTrackBy",e.trackByIndex),l(),c("placeholder",e.tagList.length?"":"forging, high-value"),x("ngModel",e.tagInput),c("ngModelOptions",C(39,ge)),l(5),x("ngModel",e.model.leadNote),c("ngModelOptions",C(40,ge))}}function Hl(o,m){if(o&1){let e=w();P(0),i(1,"div",26)(2,"div",27)(3,"label",28),a(4,"First Name"),r(),i(5,"input",48),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.firstName,t)||(s.model.firstName=t),u(t)}),r()(),i(6,"div",27)(7,"label",36),a(8,"Last Name"),r(),i(9,"input",48),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.lastName,t)||(s.model.lastName=t),u(t)}),r()()(),i(10,"div",26)(11,"div",27)(12,"label",28),a(13,"Email"),r(),i(14,"input",49),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.email,t)||(s.model.email=t),u(t)}),r()(),i(15,"div",27)(16,"label",28),a(17,"Phone Number"),r(),i(18,"input",48),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.phone,t)||(s.model.phone=t),u(t)}),r()()(),i(19,"div",26)(20,"div",27)(21,"label",28),a(22,"Company"),r(),i(23,"input",48),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.company,t)||(s.model.company=t),u(t)}),r()(),i(24,"div",27)(25,"label",36),a(26,"Job Title"),r(),i(27,"input",50),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.jobTitle,t)||(s.model.jobTitle=t),u(t)}),r()()(),i(28,"div",27)(29,"label",36),a(30,"Company Website"),r(),i(31,"input",51),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.website,t)||(s.model.website=t),u(t)}),r()(),F()}if(o&2){let e=d();l(5),x("ngModel",e.model.firstName),c("ngModelOptions",C(14,ge)),l(4),x("ngModel",e.model.lastName),c("ngModelOptions",C(15,ge)),l(5),x("ngModel",e.model.email),c("ngModelOptions",C(16,ge)),l(4),x("ngModel",e.model.phone),c("ngModelOptions",C(17,ge)),l(5),x("ngModel",e.model.company),c("ngModelOptions",C(18,ge)),l(4),x("ngModel",e.model.jobTitle),c("ngModelOptions",C(19,ge)),l(4),x("ngModel",e.model.website),c("ngModelOptions",C(20,ge))}}function Kl(o,m){if(o&1&&(i(0,"option"),a(1),r()),o&2){let e=m.$implicit;l(),g(e)}}function Ql(o,m){if(o&1&&(i(0,"option"),a(1),r()),o&2){let e=m.$implicit;l(),g(e)}}function Gl(o,m){if(o&1&&(i(0,"option"),a(1),r()),o&2){let e=m.$implicit;l(),g(e)}}function Jl(o,m){if(o&1){let e=w();P(0),i(1,"div",26)(2,"div",27)(3,"label",28),a(4,"Address Line 1"),r(),i(5,"input",48),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.address1,t)||(s.model.address1=t),u(t)}),r()(),i(6,"div",27)(7,"label",36),a(8,"Address Line 2"),r(),i(9,"
2input",48),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.address2,t)||(s.model.address2=t),u(t)}),r()()(),i(10,"div",26)(11,"div",27)(12,"label",28),a(13,"City"),r(),i(14,"input",48),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.city,t)||(s.model.city=t),u(t)}),r()(),i(15,"div",27)(16,"label",28),a(17,"State"),r(),i(18,"select",30),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.state,t)||(s.model.state=t),u(t)}),f(19,Kl,2,1,"option",8),r()()(),i(20,"div",26)(21,"div",27)(22,"label",28),a(23,"Country"),r(),i(24,"input",48),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.country,t)||(s.model.country=t),u(t)}),r()(),i(25,"div",27)(26,"label",28),a(27,"Pincode"),r(),i(28,"input",48),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.pincode,t)||(s.model.pincode=t),u(t)}),r()()(),b(29,"div",52),i(30,"p",53),a(31,"Additional"),r(),i(32,"div",26)(33,"div",27)(34,"label",36),a(35,"Company Size"),r(),i(36,"select",30),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.companySize,t)||(s.model.companySize=t),u(t)}),f(37,Ql,2,1,"option",8),r()(),i(38,"div",27)(39,"label",36),a(40,"Annual Revenue"),r(),i(41,"select",30),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.annualRevenue,t)||(s.model.annualRevenue=t),u(t)}),f(42,Gl,2,1,"option",8),r()()(),F()}if(o&2){let e=d();l(5),x("ngModel",e.model.address1),c("ngModelOptions",C(22,ge)),l(4),x("ngModel",e.model.address2),c("ngModelOptions",C(23,ge)),l(5),x("ngModel",e.model.city),c("ngModelOptions",C(24,ge)),l(4),x("ngModel",e.model.state),c("ngModelOptions",C(25,ge)),l(),c("ngForOf",e.stateOpts)("ngForTrackBy",e.trackByIndex),l(5),x("ngModel",e.model.country),c("ngModelOptions",C(26,ge)),l(4),x("ngModel",e.model.pincode),c("ngModelOptions",C(27,ge)),l(8),x("ngModel",e.model.companySize),c("ngModelOptions",C(28,ge)),l(),c("ngForOf",e.sizeOpts)("ngForTrackBy",e.trackByIndex),l(4),x("ngModel",e.model.annualRevenue),c("ngModelOptions",C(29,ge)),l(),c("ngForOf",e.revenueOpts)("ngForTrackBy",e.trackByIndex)}}function Yl(o,m){if(o&1){let e=w();i(0,"button",54),h("click",function(){p(e);let t=d();return u(t.back())}),b(1,"i",55),i(2,"span",56),a(3,"Back"),r()()}}function $l(o,m){o&1&&b(0,"i",57)}var gn=(()=>{class o{constructor(e,n,t,s){this.router=e,this.route=n,this.toast=t,this.api=s,this.steps=["Lead Details","Contact Details","Address Details"],this.ownerOpts=["Gunda Hruthick","Priya Menon","Karthik Iyer"],this.sourceOpts=["Website","Referral","Cold Outreach","Event","LinkedIn"],this.priorityOpts=["High","Medium","Low"],this.industryOpts=["Automotive","Manufacturing","IT Services","Pharma"],this.stateOpts=["Telangana","Maharashtra","Karnataka"],this.sizeOpts=["1-10","11-50","51-200","201-1000","1000+"],this.revenueOpts=["< \u20B91 Cr","\u20B91-10 Cr","\u20B910-100 Cr","> \u20B9100 Cr"],this.assignUsers=[],this.referralPromoters=[],this.saving=!1,this.editMode=!1,this.leadData=null,this.step=1,this.model={title:"",owner:"",source:"Website",priority:"Medium",assignTo:null,industry:"Automotive",tags:"",leadNote:"",referredBy:null,referrerCompany:"",firstName:"",lastName:"",email:"",phone:"",company:"",jobTitle:"",website:"",address1:"",address2:"",city:"",state:"Telangana",country:"India",pincode:"",companySize:"1-10",annualRevenue:"< \u20B91 Cr"},this.leadId=null,this.referralRecorded=!1,this.tagList=[],this.tagInput="",this.tagFocused=!1}ngOnInit(){this.loadAssignUsers(),this.loadReferralPromoters();let e=this.route.snapshot.paramMap.get("id");e&&(this.editMode=!0,this.leadId=Number(e),this.loadLead())}loadAssignUsers(){this.api.getAssigneeUsers({user_type:"SELLER",search:"",perPage:100,pageNumber:1}).subscribe({next:e=>{this.assignUsers=e?.response?.data?.users??[]},error:e=>{console.error("getAssigneeUsers failed",e)}})}loadReferralPromoters(){this.api.getPromoterList({search:"",page:1,page_size:100}).subscribe({next:e=>{this.referralPromoters=this.rowsOf(e).map(n=>({id:n.id,name:n.contactName||n.contact_name||"\u2014",company:n.account_name||n.company_name||n.companyName||""}))},error:e=>{console.error("getPromoterList failed",e)}})}onReferredByChange(e){let n=this.referralPromoters.find(t=>
2t.id===e);this.model.referrerCompany=n?.company||""}rowsOf(e){let n=e?.response?.data;return Array.isArray(n)?n:n?.data||n?.results||n?.items||[]}loadLead(){this.api.getLeadView({id:this.leadId}).subscribe({next:e=>{e?.responseCode===200&&e?.response?.data&&(this.leadData=e.response.data,this.prefill(this.leadData))},error:()=>{}})}prefill(e){this.model={title:e.leadTitle||"",owner:e.leadOwner||"",source:e.leadSource||"Website",priority:e.leadPriority||"Medium",assignTo:e.AssignedTo!=null&&e.AssignedTo!==""?Number(e.AssignedTo):null,industry:e.industry||"Automotive",tags:e.tags||"",leadNote:e.note||"",referredBy:null,referrerCompany:"",firstName:e.contactFirstName||"",lastName:e.contactLastName||"",email:e.contactEmail||"",phone:e.contactPhoneNumber||"",company:e.contactCompany||"",jobTitle:e.contactJobTitle||"",website:e.contactCompanyWebsite||"",address1:e.addressLineOne||"",address2:e.addressLineTwo||"",city:e.city||"",state:e.state||"Telangana",country:e.country||"India",pincode:e.pincode||"",companySize:e.companySize||"1-10",annualRevenue:e.annualRevenue||"< \u20B91 Cr"},this.setTags(e.tags||""),this.model.source==="Referral"&&this.loadLinkedReferral(this.leadId)}loadLinkedReferral(e){this.api.getReferralList({search:"",page:1,page_size:100}).subscribe({next:n=>{let t=this.rowsOf(n),s=`Lead #${e}`,_=t.find(S=>String(S.notes||"").includes(s));if(_){this.model.referrerCompany=_.referredCompany||_.referred_company||"";let S=_.promoterId??_.promoter_id;S!=null&&(this.model.referredBy=Number(S)),this.referralRecorded=!0}},error:()=>{}})}get isEdit(){return!!(this.leadData?.leadStatus&&this.leadData.leadStatus!=="Saved")}get pageTitle(){return this.editMode?"Edit Lead":"Add Lead"}get showReferralFields(){return this.model.source==="Referral"}onTagKeydown(e){e.key==="Enter"||e.key===","?(e.preventDefault(),this.commitTag()):e.key==="Backspace"&&!this.tagInput&&this.tagList.length&&(this.tagList.pop(),this.syncTags())}commitTag(){for(let e of this.tagInput.split(",")){let n=e.trim();n&&!this.tagList.some(t=>t.toLowerCase()===n.toLowerCase())&&this.tagList.push(n)}this.tagInput="",this.syncTags()}removeTag(e){this.tagList.splice(e,1),this.syncTags()}syncTags(){this.model.tags=this.tagList.join(", ")}setTags(e){this.tagList=(e||"").split(",").map(n=>n.trim()).filter(Boolean),this.syncTags()}trackByIndex(e){return e}validateStep(e){let n=this.model;return e===1?n.title?.trim()?n.owner?n.source?n.priority?n.assignTo==null?(this.toast.warning("Assign To is required."),!1):n.source==="Referral"&&n.referredBy==null?(this.toast.warning("Referred By is required for a Referral lead."),!1):!0:(this.toast.warning("Lead Priority is required."),!1):(this.toast.warning("Lead Source is required."),!1):(this.toast.warning("Lead Owner is required."),!1):(this.toast.warning("Lead Title is required."),!1):e===2?n.firstName?.trim()?!n.email?.trim()||!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(n.email)?(this.toast.warning("A valid Email is required."),!1):!n.phone?.trim()||n.phone.replace(/\D/g,"").length<10?(this.toast.warning("A valid Phone Number is required."),!1):n.company?.trim()?!0:(this.toast.warning("Company is required."),!1):(this.toast.warning("First Name is required."),!1):n.address1?.trim()?n.city?.trim()?n.state?.trim()?n.country?.trim()?!n.pincode?.trim()||!/^\d{6}$/.test(n.pincode)?(this.toast.warning("A valid 6-digit Pincode is required."),!1):!0:(this.toast.warning("Country is required."),!1):(this.toast.warning("State is required."),!1):(this.toast.warning("City is required."),!1):(this.toast.warning("Address Line 1 is required."),!1)}next(){if(this.saving)return;if(this.editMode&&!this.leadData){this.toast.info("Loading lead\u2026 please wait.");return}if(!this.validateStep(this.step))return;if((this.step===2||this.step===3)&&this.leadId==null){this.toast.error("Lead not created yet \u2014 please complete Step 1 first."),this.step=1;return}let e=this.step===1?this.step1Payload():this.step===2?this.step2Payload(this.leadId):this.step3Payload(this.leadId);this.saving=!0,(this.isEdit?this.api.updateLead(e):this.api.createLead(e)).subscribe({next:t=>{if(this.saving=!1,t?.responseCode!==200){this.toast.error(t?.response?.message||"Failed to save lead.");return}if(this.step===1){let s=this.leadId??this.extractId(t);if(s==null){this.toast.error("Lead saved but no id was returned.");return}this.leadId=s,this.model.source==="Referral"&&this.createReferralRecord(s)}this.step<this.steps.length?this.step++:(this.toast.success(t?.response?.message||(this.editMode?"Lead updated.":"Lead created.")),this.router.navigate(["leads"],{relativeTo:this.route.parent}))},error:()=>{this.saving=!1,this.toast.error("Failed to save lead.")}})}back(){this.step>1&&this.step--}step1Payload(){this.commitTag();let e={leadTitle:this.model.title?.trim(),leadOwner:this.model.owner,leadSource:this.model.source,leadPriority:this.model.priority,industry:this.model.industry,AssignedTo:this.model.assignTo,tags:this.model.tags,note:this.model.leadNote||"",step:1};return this.leadId!=null&&(e.id=this.leadId),e}step2Payload(e){let n=`${this.model.firstName||""} ${this.model.lastName||""}`.trim();return{id:e,contactFirstName:n,contactEmail:this.model.email?.trim(),contactPhoneNumber:this.model.phone,contactCompany:this.model.company?.trim(),contactJobTitle:this.model.jobTitle,contactCompanyWebsite:this.model.website,step:2}}step3Payload(e){return{id:e,addressLineOne:this.model.address1,addressLineTwo:this.model.address2,city:this.model.city,state:this.model.state,country:this.model.country,pincode:this.model.pincode,companySize:this.model.companySize,annualRevenue:this.model.annualRevenue,step:3}}createReferralRecord(e){if(this.referralRecorded||this.model.referredBy==null)return;let n=this.referralPromoters.find(t=>
2t.id===this.model.referredBy);if(!this.model.referrerCompany?.trim()){this.toast.warning("Lead saved, but add a Referrer Company to credit this referral in Advocacy.");return}this.api.createReferral({promoter_id:this.model.referredBy,referred_company:this.model.referrerCompany.trim(),contact_name:n?.name||"",referral_status:"Active",pipeline_value:"0.00",notes:`Auto-created from Lead #${e} (${this.model.title||"Untitled"}).`}).subscribe({next:t=>{t?.responseCode===200?this.referralRecorded=!0:this.toast.warning(t?.response?.message||"Lead saved, but the referral record could not be created.")},error:()=>{this.toast.warning("Lead saved, but the referral record could not be created.")}})}extractId(e){let n=e?.response,t=n?.lead_id??n?.data?.id??n?.data?.lead_id??n?.id;return t!=null?Number(t):null}saveDraft(){if(!this.model.title?.trim()){this.toast.warning("Lead Title is required to save a draft."),this.step=1;return}this.saving=!0;let e=this.step1Payload();(this.isEdit?this.api.updateLead(e):this.api.createLead(e)).subscribe({next:t=>{if(this.saving=!1,t?.responseCode===200){let s=this.leadId??this.extractId(t);this.leadId=s,s!=null&&this.model.source==="Referral"&&this.createReferralRecord(s),this.toast.success("Draft saved.")}else this.toast.error(t?.response?.message||"Failed to save draft.")},error:()=>{this.saving=!1,this.toast.error("Failed to save draft.")}})}cancel(){this.router.navigate(["leads"],{relativeTo:this.route.parent})}get isLast(){return this.step===this.steps.length}static{this.\u0275fac=function(n){return new(n||o)(E($),E(Y),E(q),E(R))}}static{this.\u0275cmp=V({type:o,selectors:[["app-lead-create"]],decls:27,vars:13,consts:[["tagBox",""],[1,"crm-page-body"],[1,"crm-page-header"],[1,"crm-page-title"],[1,"crm-page-subtitle"],[1,"card","mb-4"],[1,"card-body"],[1,"crm-step-progress"],[4,"ngFor","ngForOf","ngForTrackBy"],[1,"crm-text-muted","crm-text-sm","mb-4"],[4,"ngIf"],[1,"card-footer","d-flex","align-items-center","justify-content-between"],[1,"d-flex","align-items-center","gap-2"],["type","button","appTranslate","",1,"btn","btn-light","btn-sm",3,"click"],[1,"d-flex","gap-2"],["type","button","class","btn btn-light btn-sm",3,"click",4,"ngIf"],["type","button",1,"btn","btn-theme","btn-sm",3,"click"],["class","ri-arrow-right-line",4,"ngIf"],[1,"crm-step-item"],[1,"crm-step-wrapper"],[1,"crm-step-circle"],["class","ri-check-line",4,"ngIf"],[1,"crm-step-label"],["class","crm-step-connector",3,"crm-step-connector-done",4,"ngIf"],[1,"ri-check-line"],[1,"crm-step-connector"],[1,"crm-form-row","crm-form-row-2"],[1,"crm-form-group"],["appTranslate","",1,"crm-form-label","crm-form-label-required"],["type","text","placeholder","e.g. Mahindra forging RFQ",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],[1,"crm-form-select",3,"ngModelChange","ngModel","ngModelOptions"],["value","","appTranslate",""],[3,"value",4,"ngFor","ngForOf","ngForTrackBy"],["class","crm-form-row crm-form-row-2",4,"ngIf"],["appTranslate","",3,"ngValue"],[3,"ngValue",4,"ngFor","ngForOf","ngForTrackBy"],["appTranslate","",1,"crm-form-label"],[1,"crm-tag-field",3,"click"],["class","crm-tag-chip",4,"ngFor","ngForOf","ngForTrackBy"],["type","text",1,"crm-tag-input",3,"ngModelChange","keydown","focus","blur","placeholder","ngModel","ngModelOptions"],["rows","3",1,"crm-form-textarea",3,"ngModelChange","ngModel","ngModelOptions"],[3,"value"],["class","crm-text-muted crm-text-sm mt-1","appTranslate","",4,"ngIf"],["type","text","placeholder","Company being referred","readonly","",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],[3,"ngValue"],["appTranslate","",1,"crm-text-muted","crm-text-sm","mt-1"],[1,"crm-tag-chip"],["type","button",1,"crm-tag-chip-remove",3,"click"],["type","text",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["type","email",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","placeholder","Procurement Head",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["type","url","placeholder","https://",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],[1,"crm-divider"],["appTranslate","",1,"crm-section-title","mb-3"],["type","button",1,"btn","btn-light","btn-sm",3,"click"],[1,"ri-arrow-left-line"],["appTranslate",""],[1,"ri-arrow-right-line"]],template:function(n,t){n&1&&(i(0,"div",1)(1,"div",2)(2,"div")(3,"h1",3),a(4),r(),i(5,"p",4),a(6),r()()(),i(7,"div",5)(8,"div",6)(9,"div",7),f(10,Al,9,12,"ng-container",8),r(),i(11,"p",9),a(12),r(),f(13,Ul,50,41,"ng-container",10)(14,Hl,32,21,"ng-container",10)(15,Jl,43,30,"ng-container",10),r(),i(16,"div",11)(17,"div",12)(18,"button",13),h("click",function(){return t.cancel()}),a(19,"Cancel"),r(),i(20,"button",13),h("click",function(){return t.saveDraft()}),a(21,"Save Draft"),r()(),i(22,"div",14),f(23,Yl,4,0,"button",15),i(24,"button",16),h("click",function(){return t.next()}),a(25),f(26,$l,1,0,"i",17),r()()()()()),n&2&&(l(4),g(t.pageTitle),l(2),g(t.editMode?"Update lead details in 3 steps":"Capture a new lead in 3 steps"),l(4),c("ngForOf",t.steps)("ngForTrackBy",t.trackByIndex),l(2),Le("Step ",t.step," of ",t.steps.length," \u2014 ",t.steps[t.step-1],""),l(),c("ngIf",t.step===1),l(),c("ngIf",t.step===2),l(),c("ngIf",t.step===3),l(8),c("ngIf",t.step>1),l(2),A(" ",t.isLast?"Save":"Next"," "),l(),c("ngIf",!t.isLast))},dependencies:[W,N,X,ee,te,Z,U,H,L],styles:["[_nghost-%COMP%]{display:block}.crm-page-body[_ngcontent-%COMP%]{padding-bottom:32px}"]})}}return o}
2)();var Zl=()=>({standalone:!0});function Xl(o,m){if(o&1&&(i(0,"span"),a(1),r()),o&2){let e=d();l(),A(" \xB7 ",e.lead==null?null:e.lead.contactCompany,"")}}function ec(o,m){if(o&1&&(i(0,"div",39),b(1,"i",23),i(2,"div")(3,"div",40),a(4,"Next action"),r(),i(5,"div",41),a(6),r()()()),o&2){let e=d();l(6),g(e.nextAction)}}function tc(o,m){if(o&1&&(i(0,"span"),a(1),r()),o&2){let e=d();l(),g(e.lead==null?null:e.lead.contactCompany)}}function nc(o,m){if(o&1&&(i(0,"span"),a(1),Ke(2,"date"),r()),o&2){let e=d();l(),A(" \xB7 Created ",Vt(2,1,e.lead==null?null:e.lead.created_date),"")}}function ic(o,m){o&1&&(i(0,"span",42),a(1,"Change \u25BE"),r())}function rc(o,m){if(o&1){let e=w();i(0,"button",45),h("click",function(){let t=p(e).$implicit,s=d(2);return u(s.setStatus(t))}),i(1,"span",14),a(2),r()()}if(o&2){let e=m.$implicit;l(),c("ngClass","crm-badge-"+e.tone),l(),g(e.label)}}function oc(o,m){if(o&1){let e=w();i(0,"div",43),h("click",function(t){return p(e),u(t.stopPropagation())}),f(1,rc,3,2,"button",44),r()}if(o&2){let e=d();l(),c("ngForOf",e.statusOpts)("ngForTrackBy",e.trackByIndex)}}function ac(o,m){if(o&1&&(i(0,"div",46),b(1,"i",47),i(2,"span"),a(3,"View only \u2014 this lead is assigned to "),i(4,"strong"),a(5),r(),a(6,". Only the assigned user can edit it, change its status or add activities."),r()()),o&2){let e=d();l(5),g(e.assignedToName)}}function sc(o,m){o&1&&(i(0,"div",46),b(1,"i",48),i(2,"span"),a(3,"This lead is marked "),i(4,"strong"),a(5,"Lost"),r(),a(6,". Notes, to-dos and reminders are disabled until its status is changed."),r()())}function lc(o,m){if(o&1&&(i(0,"option",61),a(1),r()),o&2){let e=m.$implicit;c("ngValue",e.id),l(),g(e.name)}}function cc(o,m){if(o&1){let e=w();i(0,"div",55)(1,"select",56),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.reassignTo,t)||(s.reassignTo=t),u(t)}),i(2,"option",57),a(3,"Select assignee\u2026"),r(),f(4,lc,2,2,"option",58),r(),i(5,"button",59),h("click",function(){p(e);let t=d(2);return u(t.doReassign())}),a(6,"Assign"),r(),i(7,"button",60),h("click",function(){p(e);let t=d(2);return u(t.cancelReassign())}),a(8,"Cancel"),r()()}if(o&2){let e=d(2);l(),x("ngModel",e.reassignTo),c("ngModelOptions",C(6,Zl)),l(),c("ngValue",null),l(2),c("ngForOf",e.assignees)("ngForTrackBy",e.trackByIndex),l(),c("disabled",e.reassignTo==null)}}function dc(o,m){if(o&1){let e=w();P(0),i(1,"div",6)(2,"div",32)(3,"div",33),a(4,"Lead Overview"),r()(),i(5,"div",34)(6,"dl",49)(7,"dt",21),a(8,"Lead Title"),r(),i(9,"dd"),a(10),r(),i(11,"dt",21),a(12,"Priority"),r(),i(13,"dd")(14,"span",50),a(15),r()(),i(16,"dt",21),a(17,"Lead Owner"),r(),i(18,"dd"),a(19),r(),i(20,"dt",21),a(21,"Assigned To"),r(),i(22,"dd"),a(23),i(24,"button",51),h("click",function(){p(e);let t=d();return u(t.reassign())}),a(25,"Reassign"),r(),f(26,cc,9,7,"div",52),r()()()(),i(27,"div",31)(28,"div",32)(29,"div",33),a(30,"Lead Information"),r()(),i(31,"div",34)(32,"dl",49)(33,"dt",21),a(34,"Next Follow-up"),r(),i(35,"dd"),a(36),r(),i(37,"dt",21),a(38,"Lead Source"),r(),i(39,"dd"),a(40),r(),i(41,"dt",21),a(42,"Tags"),r(),i(43,"dd"),a(44),r()(),b(45,"div",53),i(46,"p",54),a(47,"Note"),r(),i(48,"p",11),a(49),r()()(),F()}if(o&2){let e=d();l(10),g((e.lead==null?null:e.lead.leadTitle)||"\u2014"),l(5),g((e.lead==null?null:e.lead.leadPriority)||"\u2014"),l(4),g(e.ownerName),l(4),A(" ",e.assignedToName," "),l(),c("disabled",!e.canReassign)("title",e.reassignTitle),l(2),c("ngIf",e.reassignOpen),l(10),g(e.pendingFollowUp?e.pendingFollowUp.label:"\u2014"),l(4),g((e.lead==null?null:e.lead.leadSource)||"\u2014"),l(4),g((e.lead==null?null:e.lead.tags)||"\u2014"),l(5),g((e.lead==null?null:e.lead.note)||"No note.")}}function mc(o,m){o&1&&(i(0,"p",64),a(1,"No activities yet."),r())}function pc(o,m){if(o&1&&(i(0,"div",75)(1,"span",76),a(2),r(),i(3,"span",77),a(4),r()()),o&2){let e=m.$implicit;l(2),g(e.label),l(2),g(e.value)}}function uc(o,m){if(o&1){let e=w();i(0,"img",82),h("error",function(){p(e);let t=d().$implicit,s=d(5);return u(s.onAttachmentError(t))}),r()}if(o&2){let e=d().$implicit;c("src",e.url,me)("alt",e.name)}}function gc(o,m){if(o&1&&(i(0,"span"),b(1,"i",83),a(2),r()),o&2){let e=d().$implicit;l(2),A(" ",e.name,"")}}function _c(o,m){if(o&1&&(i(0,"a",80),f(1,uc,1,2,"img",81)(2,gc,3,1,"span",4),r()),o&2){let e=m.$implicit,n=d(5);D("ld-attachment-image",n.isImageAttachment(e)),pe("href",e.url||null,me)("target",e.url?"_blank":null)("title",e.name),l(),c("ngIf",n.isImageAttachment(e)),l(),c("ngIf",!n.isImageAttachment(e))}}function hc(o,m){if(o&1&&(i(0,"div",78),f(1,_c,3,7,"a",79),r()),o&2){let e=d(2).$implicit,n=d(2);l(),c("ngForOf",e.attachments)("ngForTrackBy",n.trackByIndex)}}function fc(o,m){if(o&1&&(i(0,"div",72),f(1,pc,5,2,"div",73)(2,hc,2,2,"div",74),r()),o&2){let e=d().$implicit,n=d(2);l(),c("ngForOf",e.fields)("ngForTrackBy",n.trackByIndex),l(),c("ngIf",e.attachments==null?null:e.attachments.length)}}function xc(o,m){if(o&1&&(i(0,"div",65),b(1,"span",66),i(2,"div",67)(3,"div",68)(4,"span",69),a(5),r(),i(6,"span",70),a(7),r()(),f(8,fc,3,3,"div",71),r()()),o&2){let e=m.$implicit;l(),c("ngClass","crm-timeline-dot-"+e.tone),l(4),g(e.title),l(2),g(e.time),l(),c("ngIf",(e.fields==null?null:e.fields.length)||(e.attachments==null?null:e.attachments.length))}}function yc(o,m){if(o&1&&(P(0),i(1,"div",31)(2,"div",32)(3,"div",33),a(4,"Activity Timeline"),r(),i(5,"div",42),a(6,"Calls \xB7 Emails \xB7 Meetings \xB7 Status changes \xB7 AI summaries"),r()(),i(7,"div",34),f(8,mc,2,0,"p",62),i(9,"div",37),f(10,xc,9,4,"div",63),r()()(),F()),o&2){let e=d();l(8),c("ngIf",!e.timeline.length),l(2),c("ngForOf",e.timeline)("ngForTrackBy",e.trackByIndex)}}function vc(o,m){o&1&&(i(0,"p",64),a(1,"No notes yet."),r())}function Cc(o,m){if(o&1){let e=w();i(0,"img",82),h("error",function(){p(e);let t=d().$implicit,s=d(4);return u(s.onAttachmentError(t))}),r()}if(o&2){let e=d().$implicit;c("src",e.url,me)("alt",e.name)}}function bc(o,m){if(o&1&&(i(0,"span"),b(1,"i",83),a(2),r()),o&2){let e=d().$implicit;l(2),A(" ",e.name,"")}}function Sc(o,m){if(o&1&&(i(0,"a",80),f(1,Cc,1,2,"img",81)(2,bc,3,1,"span",4),r()),o&2){let e=m.$implicit,n=d(4);D("ld-attachment-image",n.isImageAttachment(e)),pe("href",e.url||null,me)("target",e.url?"_blank":null)("title",e.name),l(),c("ngIf",n.isImageAttachment(e)),l(),c("ngIf",!n.isImageAttachment(e))}}function wc(o,m){if(o&1&&(i(0,"div",93)(1,"strong",21),a(2,"Attachments:"),r(),i(3,"div",78),f(4,Sc,3,7,"a",79),r()()),o&2){let e=d().$implicit,n=d(2);l(4),c("ngForOf",e.attachments)("ngForTrackBy",n.trackByIndex)}}function Tc(o,m){if(o&1&&(i(0,"span",14),a(1),r()),o&2){let e=m.$implicit;c("ngClass","crm-badge-"+e.tone),l(),g(e.label)}}function kc(o,m){if(o&1&&(i(0,"div",94),f(1,Tc,2,2,"span",95),r()),o&2){let e=d().$implicit,n=d(2);l(),c("ngForOf",e.tags)("ngForTrackBy",n.trackByIndex)}}function Ec(o,m){if(o&1&&(i(0,"div",6)(1,"div",34)(2,"div",87)(3,"div",88),a(4),r(),i(5,"div",89),a(6),r()(),i(7,"p",90),a(8),r(),f(9,wc,5,2,"div",91)(10,kc,2,2,"div",92),r()()),o&2){let e=m.$implicit;D("ld-note-pinned",e.pinned),l(4),g(e.title),l(2),g(e.meta),l(2),g(e.body),l(),c("ngIf",e.attachments==null?null:e.attachments.length),l(),c("ngIf",e.tags)}}function Mc(o,m){if(o&1&&(P(0),i(1,"div",84)(2,"div")(3,"strong",21),a(4,"Notes"),r(),i(5,"span",85),a(6),r()()(),f(7,vc,2,0,"p",62)(8,Ec,11,7,"div",86),F()),o&2){let e=d();
2l(6),A("",e.noteCards.length," note(s)"),l(),c("ngIf",!e.noteCards.length),l(),c("ngForOf",e.noteCards)("ngForTrackBy",e.trackByIndex)}}function Ic(o,m){if(o&1&&(i(0,"div",96),b(1,"span",66),i(2,"div",97),a(3),r(),i(4,"div",98),a(5),r()()),o&2){let e=m.$implicit;l(),c("ngClass","crm-timeline-dot-"+e.tone),l(2),g(e.time),l(2),g(e.text)}}var Ai=(()=>{class o{buildStatusActivityJson(e,n){switch(e){case"contacted":return{contact_method:n.contactMode,contacted_on:n.attemptedDate,next_follow_up_date:n.nextFollowup||"",notes:n.note||""};case"disqualified":return{reason:n.reason,notes:n.note||"",note:n.note||""};case"converted":return{deal_name:n.dealName,product_service:this.toProductService(n.products),delivery_location:n.deliveryLocation||"",expected_close_date:n.expectedCloseDate?new Date(n.expectedCloseDate+"T00:00:00").toISOString().split("T")[0]:"",budget:n.budget||"",priority:n.priority||"",attachments:n.attachments||"",note:n.note||""};case"lost":{let t=n.followLater?String(n.followDate||"").trim():"";return{reason:n.reason,follow_up_later:!!n.followLater,follow_up_date:t,next_follow_up_date:t}}default:return z({},n)}}toProductService(e){return(Array.isArray(e)?e:[]).map(n=>{let t=n?.selected||{};return{id:t.id,parentId:t.parent_id,sellerId:t.vendor_id,requestedPrice:n.price,qty:n.quantity,dueDate:"",description:"",category:t.categoryTree,status:9,gst:n.gst||"",discountPercent:n.discount||"",previousPrice:0,productName:t.name,productType:t.product_type,rfqProductQuoteLimit:0,questions:[],documents:[]}})}hasBlankRequiredFields(e,n){let t=this.requiredFieldsByPopup[n]||[];return t.length===0?!1:t.some(s=>{let _=e[s];return _==null||typeof _=="string"&&_.trim()===""})}constructor(e,n,t,s,_,S,T){this.router=e,this.route=n,this.toast=t,this.modal=s,this.popup=_,this.api=S,this.perms=T,this.statusOpts=[{label:"Contacted",key:"contacted",tone:"amber"},{label:"Disqualified",key:"disqualified",tone:"gray"},{label:"Converted to Deal",key:"converted",tone:"purple"},{label:"Lost",key:"lost",tone:"red"}],this.status={label:"\u2014",tone:"gray"},this.statusMenuOpen=!1,this.activeTab="details",this.leadId=null,this.lead=null,this.timeline=[],this.statusTone={New:"blue","Follow-Up":"amber",Contacted:"amber",Interested:"purple",Qualified:"green",Won:"green",Lost:"red",Disqualified:"gray"},this.requiredFieldsByPopup={"lead-contacted":["attemptedDate","contactMode"],"lead-converted":["dealName","deliveryLocation","priority"],"lead-disqualified":["reason"],"lead-lost":["reason"]},this.noteCards=[],this.upcomingActivities=[],this.assignHistory=[],this.nextAction="",this.pendingFollowUp=null,this.assignees=[],this.reassignOpen=!1,this.reassignTo=null}isCommittedLead(){return!!(this.lead?.leadStatus&&this.lead.leadStatus!=="Saved")}currentUserId(){return this.perms.currentUserId()}get isSuperAdmin(){return this.perms.isSuperAdmin}get canAct(){if(this.isSuperAdmin)return!0;let e=Number(this.lead?.AssignedTo);if(!Number.isFinite(e)||e<=0)return!0;let n=this.currentUserId();return n==null?!0:e===n}get actionTitle(){return this.canAct?"":`Assigned to ${this.assignedToName} \u2014 you have view-only access.`}get isLost(){return String(this.status?.label||"").trim()==="Lost"}get canLogActivity(){return this.canAct&&!this.isLost}get activityTitle(){return this.canAct?this.isLost?"This lead is Lost \u2014 change its status to log activities.":"":this.actionTitle}blockedByLost(){return this.isLost?(this.toast.warning("This lead is Lost \u2014 change its status before adding activities."),!0):!1}blockedByAssignment(){return this.canAct?!1:(this.toast.warning(`This lead is assigned to ${this.assignedToName} \u2014 you have view-only access.`),!0)}get canReassign(){return this.isSuperAdmin}get reassignTitle(){return this.canReassign?"":"Only a Super Admin can reassign a lead."}blockedFromReassign(){return this.canReassign?!1:(this.toast.warning("Only a Super Admin can reassign a lead \u2014 including the assigned user."),!0)}ngOnInit(){let e=this.route.snapshot.paramMap.get("id");this.leadId=e?Number(e):null,this.leadId!=null&&!Number.isNaN(this.leadId)&&
2(this.loadLead(),this.loadActivities(),this.loadAssignHistory(),this.loadAssignees())}loadAssignees(){this.api.getAssigneeUsers({user_type:"SELLER",search:"",perPage:100,pageNumber:1}).subscribe({next:e=>{this.assignees=e?.response?.data?.users??[]},error:()=>{}})}loadLead(){this.api.getLeadView({id:this.leadId}).subscribe({next:e=>{if(e?.responseCode===200){this.lead=e.response?.data||null;let n=this.lead?.leadStatus||"";n&&(this.status={label:n,tone:this.statusTone[n]??"gray"})}},error:()=>{}})}loadAssignHistory(){this.api.getLeadAssignHistory({id:this.leadId}).subscribe({next:e=>{let n=e?.response?.data||[];this.assignHistory=(Array.isArray(n)?n:[]).map(t=>this.mapHistory(t))},error:()=>{}})}mapHistory(e){let n=e.actor||e.performed_by_name||e.user||"",t=e.to_user||e.assigned_to||"",s=e.description||e.text||[e.action||e.event,t?"\u2192 "+t:"",n?"("+n+")":""].filter(Boolean).join(" ")||"Update",_=String(e.action||e.event||"").toLowerCase(),S=_.includes("creat")?"blue":_.includes("assign")?"green":_.includes("status")?"amber":"blue";return{time:this.fmtDate(e.created_date||e.created_at),tone:S,title:String(s),fields:n?[{label:"User",value:String(n)}]:[],text:String(s),attachments:[]}}fmtDate(e){if(!e)return"";let n=new Date(e);return Number.isNaN(n.getTime())?String(e):Ee(n,"MMM dd, yyyy hh:mm a","en-US")}get leadName(){return`${this.lead?.contactFirstName||""} ${this.lead?.contactLastName||""}`.trim()||this.lead?.leadTitle||"\u2014"}get leadInitial(){return(this.leadName||"?").charAt(0).toUpperCase()}get ownerName(){return this.lead?.leadOwner||"\u2014"}get assignedToName(){let e=this.lead?.AssignedTo;return e==null||e===""?"\u2014":this.assignees.find(t=>t.id===Number(e))?.name||String(e)}loadActivities(){this.api.getLeadActivities({leadId:this.leadId,activityType:"",page_size:100,page:1}).subscribe({next:e=>{let n=e?.response?.data||{},t=n.all_activities||(Array.isArray(n)?n:[])||[];this.upcomingActivities=n.upcoming_activities||[],this.timeline=(t||[]).map(s=>this.mapActivity(s)),this.noteCards=(t||[]).filter(s=>s?.activityType==="NOTE_ADDED").map(s=>this.mapNote(s)),this.resolveNoteLinksViaDrive(),this.pendingFollowUp=Zt(t),this.nextAction=this.deriveNextAction()},error:()=>{}})}mapNote(e){let n=e?.activityJson||{};return{title:"Note",meta:`${e?.performed_by_name||"\u2014"} \xB7 ${this.fmtDate(e?.created_date)}`,body:String(n?.note||n?.notes||""),attachments:this.attachmentsFrom(e)}}resolveNoteLinksViaDrive(){let e=this.noteCards.reduce((t,s)=>t.concat(s.attachments||[]),[]),n=this.timeline.reduce((t,s)=>t.concat(s.attachments||[]),[]);this.resolveAttachmentLinks(e.concat(n))}deriveNextAction(){let e=this.upcomingActivities?.[0];if(!e)return"";let n=e.activityJson||{};return e.activityType==="REMINDER_ADDED"?`${n.remainder||"Reminder"}${n.reminder_date?" on "+n.reminder_date:""}`:e.activityType==="TODO_CREATED"?`${xt(e)||"To-do"}${n.follow?" \u2014 "+n.follow:""}`:et(e.activityType)}mapActivity(e){let n=e?.activityType||"Activity",t=Je(e,"lead");return{time:this.fmtDate(e?.created_date||e?.created_at),tone:this.activityTone(n),title:t.title,fields:t.fields,text:yt(e,"lead"),attachments:this.attachmentsFrom(e)}}activityTone(e){return{STATUS_CHANGED:"green",NOTE_ADDED:"blue",TODO_CREATED:"amber",REMINDER_ADDED:"purple",LEAD_CREATED:"blue"}[e]??"blue"}trackByIndex(e){return e}toggleStatusMenu(){this.blockedByAssignment()||(this.statusMenuOpen=!this.statusMenuOpen)}setStatus(e){return B(this,null,function*(){if(this.statusMenuOpen=!1,this.blockedByAssignment())return;if(!this.isCommittedLead()){this.toast.warning("This lead is a draft and status changes are not allowed.");return}let n="lead-"+e.key,t=yield this.popup.open(n);if(t===null)return;if(this.hasBlankRequiredFields(t,n)){this.toast.error("Please fill in all required fields before submitting.");return}if(this.leadId==null){this.toast.error("No lead loaded \u2014 status not updated.");return}let _={contacted:"Contacted",disqualified:"Disqualified",converted:"Won",lost:"Lost"}[e.key]||e.label,S=this.buildStatusActivityJson(e.key,t);this.api.updateLeadStatus({lead_id:this.leadId,updated_status:_,activityJson:S}).subscribe({next:T=>{if(T?.responseCode===200){let M=T?.response?.new_status||e.label;this.status={label:M,tone:this.statusTone[M]??e.tone},this.toast.success(T?.response?.message||`Status updated to ${e.label}.`),e.key==="converted"&&this.openConvertedDealAtProposalSent(T,String(t.dealName||"").trim(),String(t.expectedCloseDate||"").trim()),this.loadLead(),this.loadActivities()}else this.toast.error(T?.response?.message||"Failed to update status.")},error:()=>this.toast.error("Failed to update status.")})})}openConvertedDealAtProposalSent(e,n,t){let s=this.convertedDealId(e);if(s!=null){this.setDealProposalSent(s,t);return}this.api.getDealList({search_query:"",page:1,page_size:50,order_by:"-created_date"}).subscribe({next:_=>{let S=_?.response?.data,T=(Array.isArray(S)?S:[]).find(k=>this.isDealFromThisLead(k,n)),M=Number(T?.id);if(!Number.isFinite(M)||M<=0)return;let I=T?.dealStatus||T?.deal_status||T?.status||T?.dealStage||"";String(I).trim()!=="Proposal Sent"&&this.setDealProposalSent(M,t)},error:()=>{}})}convertedDealId(e){let n=e?.response||{},t=n.deal_id??n.dealId??n.deal?.id??n.data?.deal_id??n.data?.dealId??n.data?.deal?.i
2d,s=Number(t);return Number.isFinite(s)&&s>0?s:null}isDealFromThisLead(e,n){let t=Number(e?.createFromLead??e?.create_from_lead??e?.leadId??e?.lead_id);if(Number.isFinite(t)&&t>0)return t===this.leadId;let s=String(e?.dealTitle||"").trim().toLowerCase();return!!n&&s===n.toLowerCase()}setDealProposalSent(e,n){this.api.updateDealStatus({deal_id:e,updated_status:"Proposal Sent",activityJson:{proposal_sent_date:new Date().toISOString().split("T")[0],quote_expiry_date:n,notes:"Stage set on conversion from lead."}}).subscribe({next:()=>{},error:()=>{}})}setTab(e){this.activeTab=e}back(){this.router.navigate(["leads"],{relativeTo:this.route.parent})}addNote(){return B(this,null,function*(){if(this.blockedByAssignment()||this.blockedByLost())return;if(!this.isCommittedLead()){this.toast.warning("This lead is a draft and activities are not allowed.");return}let e=yield this.popup.open("add-note");if(e===null)return;let n=String(e.note||"").trim();if(!n){this.toast.error("Note content is required.");return}let t=Array.isArray(e.attachmentFiles)?e.attachmentFiles.filter(s=>s instanceof File):[];this.api.uploadAttachments(t,"crm",this.leadId??void 0).subscribe({next:s=>this.commitNote(n,s),error:()=>this.commitNote(n,t.map(s=>({name:s.name,size:s.size,type:s.type,url:""})))})})}commitNote(e,n){let t=n.filter(s=>!s.url).length;t&&this.toast.warning(`${t} attachment(s) could not be uploaded \u2014 the note was saved with the filename only.`),this.saveActivity("NOTE_ADDED",{note:e,attachments:n},"Note added successfully","Failed to add note")}addTodo(){return B(this,null,function*(){if(this.blockedByAssignment()||this.blockedByLost())return;if(!this.isCommittedLead()){this.toast.warning("This lead is a draft and activities are not allowed.");return}let e=yield this.popup.open("to-do");if(e===null)return;let n=String(e.type||"").trim();if(!n){this.toast.error("Type is required.");return}this.saveActivity("TODO_CREATED",{type:n.toLowerCase(),follow:String(e.follow||"").toLowerCase(),note:String(e.note||"").trim(),start_date:e.startDate||"",end_date:e.endDate||""},"To-do added successfully","Failed to add to-do")})}addReminder(){return B(this,null,function*(){if(this.blockedByAssignment()||this.blockedByLost())return;if(!this.isCommittedLead()){this.toast.warning("This lead is a draft and activities are not allowed.");return}let e=yield this.popup.open("add-reminder");if(e===null)return;let n=String(e.reminder||"").trim();if(!n){this.toast.error("Reminder is required.");return}let t="",s="";if(e.datetime){let _=new Date(e.datetime);Number.isNaN(_.getTime())||(t=_.toISOString().split("T")[0],s=_.toTimeString().split(" ")[0])}this.saveActivity("REMINDER_ADDED",{remainder:n,reminder_date:t,reminder_time:s},"Reminder added successfully","Failed to add reminder")})}saveActivity(e,n,t,s){if(!this.blockedByAssignment()){if(!this.isCommittedLead()){this.toast.warning("This lead is a draft and activities are not allowed.");return}if(this.leadId==null){this.toast.info("No lead to update.");return}this.api.addLeadActivity({lead:this.leadId,activityType:e,activityJson:n}).subscribe({next:_=>{_?.responseCode===200?(this.toast.success(_?.response?.message||t),this.loadActivities()):this.toast.error(_?.response?.message||s)},error:()=>this.toast.error(s)})}}edit(){if(!this.blockedByAssignment()){if(this.leadId==null){this.toast.info("No lead to edit.");return}this.router.navigate(["leads",this.leadId,"edit"],{relativeTo:this.route.parent})}}reassign(){this.blockedFromReassign()||(this.reassignTo=this.lead?.AssignedTo!=null&&this.lead?.AssignedTo!==""?Number(this.lead.AssignedTo):null,this.reassignOpen=!this.reassignOpen)}cancelReassign(){this.reassignOpen=!1}doReassign(){if(!this.blockedFromReassign()){if(this.reassignTo==null){this.toast.warning("Pick an assignee first.");return}this.leadId!=null&&this.api.assignLeads({lead_ids:[this.leadId],assigned_to:Number(this.reassignTo)}).subscribe({next:e=>{e?.responseCode===200?(this.toast.success(e?.response?.message||"Lead reassigned."),this.reassignOpen=!1,this.loadLead(),this.loadAssignHistory(),this.loadActivities()):this.toast.error(e?.response?.message||"Failed to reassign.")},error:()=>this.toast.error("Failed to reassign.")})}}deleteLead(){return B(this,null,function*(){if(!(this.blockedByAssignment()||!(yield this.modal.confirm({title:"Delete lead?",body:"This will permanently remove the lead.",confirmTone:"danger",confirmLabel:"Delete"})))){if(this.leadId==null){this.router.navigate(["leads"],{relativeTo:this.route.parent});return}this.api.deleteLead({id:this.leadId}).subscribe({next:n=>{n?.responseCode===200?(this.toast.success(n?.response?.message||"Lead deleted."),this.router.navigate(["leads"],{relativeTo:this.route.parent})):this.toast.error(n?.response?.message||"Failed to delete lead.")},error:()=>this.toast.error("Failed to delete lead.")})}})}attachmentsFrom(e){let n=[e?.activityJson,e?.activity_json,e?.meta,e?.payload,e].map(t=>
2this.attachmentPayload(t)).filter(Boolean);for(let t of n){let s=t.attachments??t.files??t.attachment??this.attachmentPayload(t.meta)?.attachments,_=this.attachmentRows(s);if(_.length)return _}return[]}attachmentRows(e){let n=[];if(Array.isArray(e))n=e;else if(typeof e=="string"&&e.trim().startsWith("["))try{let t=JSON.parse(e);n=Array.isArray(t)?t:[]}catch{n=[]}return n.map(t=>{let s=t&&typeof t=="object"?t:{name:String(t??""),url:String(t??"")};return{name:this.displayFileName(s),size:Number(s?.size||0),type:String(s?.type||""),url:this.attachmentUrl(s),path:String(s?.filepath||s?.filePath||s?.file_path||s?.name||"")}})}attachmentPayload(e){if(e&&typeof e=="object"&&!Array.isArray(e))return e;if(typeof e=="string"&&e.trim().startsWith("{"))try{return JSON.parse(e)}catch{return null}return null}attachmentUrl(e){let n=String(e?.url||e?.fileViewPath||e?.file_view_path||e?.pathViewPath||e?.path_view_path||e?.viewUrl||"").trim();return n?/^(https?:)?\/\//i.test(n)||n.startsWith("data:")||n.startsWith("blob:")?n:n.startsWith("/")?Oe.apiUrl.replace(/\/+$/,"")+n:"":""}resolveAttachmentLinks(e){for(let n of(e||[]).filter(t=>t&&!t.url&&t.name&&!t.looked))n.looked=!0,this.api.searchDriveFiles({query:n.name,pageLength:50}).subscribe({next:t=>{let s=Array.isArray(t?.response?.data)?t.response.data:[],_=this.pickDriveUrl(s,n);_&&(n.url=_)},error:()=>{}})}pickDriveUrl(e,n){let t=k=>String(k?.pathViewPath||k?.viewUrl||k?.fileViewPath||"").trim(),s=k=>String(k||"").trim().toLowerCase().split("/").pop()||"",_=s(n.path),S=this.bareName(n.name),T=_&&e.find(k=>s(k?.filepath||k?.filePath)===_&&t(k));if(T)return t(T);let M=S&&e.find(k=>this.bareName(String(k?.fileName||k?.file_name||k?.name||k?.fileGenName||""))===S&&t(k));if(M)return t(M);let I=S&&e.find(k=>s(k?.filepath||k?.filePath).endsWith("_"+S)&&t(k));return I?t(I):""}bareName(e){return String(e||"").trim().replace(/^[0-9a-f]{16,40}[_-]/i,"").toLowerCase()}displayFileName(e){let n=String(e?.name||e?.file_name||"").trim();return n.replace(/^[0-9a-f]{16,40}[_-]/i,"")||n}isImageAttachment(e){if(!e?.url)return!1;if(String(e.type||"").toLowerCase().startsWith("image/"))return!0;let n=/\.(png|jpe?g|gif|webp|bmp|svg)(\?|#|$)/i;return n.test(e.name||"")||n.test(e.path||"")||n.test(e.url||"")}onAttachmentError(e){!e||e.looked||(e.url="",this.resolveAttachmentLinks([e]))}static{this.\u0275fac=function(n){return new(n||o)(E($),E(Y),E(q),E(ue),E(xe),E(R),E(en))}}static{this.\u0275cmp=V({type:o,selectors:[["app-lead-detail"]],decls:78,vars:38,consts:[[1,"crm-page-body"],["aria-label","Breadcrumb",1,"d-flex","align-items-center","gap-1","mb-3","crm-text-sm","crm-text-muted"],["appTranslate","",1,"crm-section-action",3,"click"],[1,"mx-1"],[4,"ngIf"],["class","crm-alert crm-alert-warning mb-3",4,"ngIf"],[1,"card","mb-3"],[1,"card-body","d-flex","align-items-center","gap-3","flex-wrap"],[1,"crm-avatar","crm-avatar-xl","crm-avatar-indigo"],[1,"flex-grow-1"],[1,"crm-fw-700","font-18"],[1,"crm-text-muted","crm-text-sm"],[1,"position-relative"],["type","button",1,"btn","btn-light","btn-sm","d-flex","align-items-center","gap-2",3,"click","disabled","title"],[1,"crm-badge",3,"ngClass"],["class","crm-text-muted crm-text-xs","appTranslate","",4,"ngIf"],["class","ld-status-menu",3,"click",4,"ngIf"],["class","ld-readonly-note mb-3",4,"ngIf"],[1,"d-flex","flex-wrap","gap-2","mb-4"],["type","button",1,"btn","btn-outline-theme","btn-sm",3,"click","disabled","title"],[1,"ri-sticky-note-line"],["appTranslate",""],[1,"ri-checkbox-circle-line"],[1,"ri-alarm-line"],[1,"ri-edit-line"],[1,"crm-grid","crm-grid-2-1"],[1,"crm-tabs-bar"],["appTranslate","",1,"crm-tab-item",3,"click"],["appTranslateText","",1,"crm-tab-item",3,"click"],[1,"crm-tab-count"],[1,"d-flex","flex-column","gap-3"],[1,"card"],[1,"card-header"],["appTranslate","",1,"card-title"],[1,"card-body"],[1,"crm-fw-600"],[1,"crm-text-muted","crm-text-sm","mt-1"],[1,"crm-timeline"],["class","crm-timeline-item",4,"ngFor","ngForOf","ngForTrackBy"],[1,"crm-alert","crm-alert-warning","mb-3"],["appTranslate","",1,"crm-alert-title"],[1,"crm-alert-text"],["appTranslate","",1,"crm-text-muted","crm-text-xs"],[1,"ld-status-menu",3,"click"],["type","button","class","ld-status-item",3,"click",4,"ngFor","ngForOf","ngForTrackBy"],["type","button",1,"ld-status-item",3,"click"],[1,"ld-readonly-note","mb-3"],[1,"ri-lock-line"],[1,"ri-close-circle-line"],[1,"crm-meta-list"],[1,"crm-badge","crm-badge-amber"],["type","button","appTranslate","",1,"btn","btn-light","btn-sm","ml-2",3,"click","disabled","title"],["class","d-flex align-items-center gap-2 mt-2",4,"ngIf"],[1,"crm-divider"],["appTranslate","",1,"crm-section-title","mb-2"],[1,"d-flex","align-items-center","gap-2","mt-2"],[1,"crm-filter-select",3,"ngModelChange","ngModel","ngModelOptions"],["appTranslate","",3,"ngValue"],[3,"ngValue",4,"ngFor","ngForOf","ngForTrackBy"],["type","button","appTranslate","",1,"btn","btn-theme","btn-sm",3,"click","disabled"],["type","button","appTranslate","",1,"btn","btn-light","btn-sm",3,"click"],[3,"ngValue"],["class","crm-text-muted crm-text-sm","appTranslate","",4,"ngIf"],["class","crm-timeline-item crm-timeline-item--card",4,"ngFor","ngForOf","ngForTrackBy"],["appTranslate","",1,"crm-text-muted","crm-text-sm"],[1,"crm-timeline-item","crm-timeline-item--card"],[1,"crm-timeline-dot",3,"ngClass"],[1,"crm-timeline-card"],[1,"crm-timeline-card__head"],[1,"crm-timeline-card__title"],[1,"crm-timeline-card__time"],["class","crm-timeline-card__body",4,"ngIf"],[1,"crm-timeline-card__body"],["class","crm-timeline-field",4,"ngFor","ngForOf","ngForTrackBy"],["class","ld-attachments",4,"ngIf"],[1,"crm-timeline-field"],[1,"crm-timeline-field__label"],[1,"crm-timeline-field__value"],[1,"ld-attachments"],["class","ld-attachment","rel","noopener",3,"ld-attachment-image",4,"ngFor","ngForOf","ngForTrackBy"],["rel","noopener",1,"ld-attachment"],["loading","lazy",3,"src","alt","error",4,"ngIf"],["loading","lazy",3,"error","src","alt"],[1,"ri-attachment-2"],[1,"d-flex","align-items-center","justify-content-between","mb-3"],[1,"crm-text-muted","crm-text-xs","ml-2"],["class","card mb-3",3,"ld-note-pinned",4,"ngFor","ngForOf","ngForTrackBy"],[1,"d-flex","align-items-start","justify-content-between","mb-2"],[1,"crm-fw-600","crm-text-sm"],[1,"crm-text-muted","crm-text-xs"],[1,"crm-text-sm","crm-text-muted","mb-0"],["class","crm-note-attachments mt-2",4,"ngIf"],["class","d-flex flex-wrap gap-1 mt-2",4,"ngIf"],[1,"crm-note-attachments","mt-2"],[1,"d-flex","flex-wrap","gap-1","mt-2"],["class","crm-badge",3,"ngClass",4,"ngFor","ngForOf","ngForTrackBy"],[1,"crm-timeline-item"],[1,"crm-timeline-time"],[1,"crm-timeline-text"]],template:function(n,t){n&1&&(i(0,"div",0)(1,"nav",1)(2,"a",2),h("click",function(){return t.back()}),a(3,"Leads"),r(),i(4,"span",3),a(5,"/"),r(),i(6,"span"),a(7),f(8,Xl,2,1,"span",4),r()(),f(9,ec,7,1,"div",5),i(10,"div",6)(11,"div",7)(12,"div",8),a(13),r(),i(14,"div",9)(15,"div",10),a(16),r(),i(17,"div",11),f(18,tc,2,1,"span",4)(19,nc,3,3,"span",4),r()(),i(20,"div",12)(21,"button",13),h("click",function(){return t.toggleStatusMenu()}),i(22,"span",14),a(23),r(),f(24,ic,2,0,"span",15),r(),f(25,oc,2,2,"div",16),r()()(),f(26,ac,7,1,"div",17)(27,sc,7,0,"div",17),i(28,"div",18)(29,"button",19),h("click",function(){return t.addNote()}),b(30,"i",20),i(31,"span",21),a(32,"Add Note"),r()(),i(33,"button",19),h("click",function(){return t.addTodo()}),b(34,"i",22),i(35,"span",21),a(36,"To Do"),r()(),i(37,"button",19),h("click",function(){return t.addReminder()}),b(38,"i",23),i(39,"span",21),a(40,"Add Reminder"),r()(),i(41,"button",19),h("click",function(){return t.edit()}),b(42,"i",24),i(43,"span",21),a(44,"Edit"),r()()(),i(45,"div",25)(46,"div")(47,"div",26)(48,"button",27),h("click",function(){return t.setTab("details")}),a(49,"Details"),r(),i(50,"button",27),h("click",function(){return t.setTab("activities")}),a(51,"Activities"),r(),i(52,"button",28),h("click",function(){return t.setTab("notes")}),a(53,"Notes "),i(54,"span",29),a(55),r()()(),f(56,dc,50,11,"ng-container",4)(57,yc,11,3,"ng-container",4)(58,Mc,9,4,"ng-container",4),r(),i(59,"div",30)(60,"div",31)(61,"div",32)(62,"div",33),a(63,"Contact"),r()(),i(64,"div",34)(65,"div",35),a(66),r(),i(67,"div",36),a(68),r(),i(69,"div",11),a(70),r()()(),i(71,"div",31)(72,"div",32)(73,"div",33),a(74,"Assign History"),r()(),i(75,"div",34)(76,"div",37),f(77,Ic,6,3,"div",38),r()()()()()()),n&2&&(l(7),g(t.leadName),l(),c("ngIf",t.lead==null?null:t.lead.c
2ontactCompany),l(),c("ngIf",t.nextAction),l(4),g(t.leadInitial),l(3),g(t.leadName),l(2),c("ngIf",t.lead==null?null:t.lead.contactCompany),l(),c("ngIf",t.lead==null?null:t.lead.created_date),l(2),c("disabled",!t.canAct)("title",t.canAct?"":"Only the assigned user can change this lead\u2019s status."),l(),c("ngClass","crm-badge-"+t.status.tone),l(),g(t.status.label),l(),c("ngIf",t.canAct),l(),c("ngIf",t.statusMenuOpen),l(),c("ngIf",t.lead&&!t.canAct),l(),c("ngIf",t.lead&&t.canAct&&t.isLost),l(2),c("disabled",!t.canLogActivity)("title",t.activityTitle),l(4),c("disabled",!t.canLogActivity)("title",t.activityTitle),l(4),c("disabled",!t.canLogActivity)("title",t.activityTitle),l(4),c("disabled",!t.canAct)("title",t.actionTitle),l(7),D("active",t.activeTab==="details"),l(2),D("active",t.activeTab==="activities"),l(2),D("active",t.activeTab==="notes"),l(3),g(t.noteCards.length),l(),c("ngIf",t.activeTab==="details"),l(),c("ngIf",t.activeTab==="activities"),l(),c("ngIf",t.activeTab==="notes"),l(8),g(t.leadName),l(2),g((t.lead==null?null:t.lead.contactEmail)||"\u2014"),l(2),g((t.lead==null?null:t.lead.contactPhoneNumber)||"\u2014"),l(7),c("ngForOf",t.assignHistory)("ngForTrackBy",t.trackByIndex))},dependencies:[j,W,N,X,ee,Z,U,H,L,Me,En],styles:["[_nghost-%COMP%]{display:block}.ld-readonly-note[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:8px;padding:10px 14px;border:1px solid var(--color-border);border-left:3px solid var(--color-warning, #f0ad4e);border-radius:var(--radius-md);background:var(--color-surface-alt, rgba(0, 0, 0, .02));font-size:.8125rem;line-height:1.45}.ld-readonly-note[_ngcontent-%COMP%] > i[_ngcontent-%COMP%]{line-height:1.45}.ld-status-menu[_ngcontent-%COMP%]{position:absolute;right:0;top:calc(100% + 6px);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);z-index:500;min-width:180px;padding:4px}.ld-status-item[_ngcontent-%COMP%]{display:flex;align-items:center;width:100%;padding:7px 12px;background:transparent;border:none;cursor:pointer;border-radius:var(--radius-sm)}.ld-status-item[_ngcontent-%COMP%]:hover{background:var(--color-primary-50)}.ld-note-pinned[_ngcontent-%COMP%]{border-left:3px solid var(--color-warning)!important}.ld-attachments[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px}.ld-attachment[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px;max-width:100%;padding:4px 10px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);color:inherit;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ld-attachment[_ngcontent-%COMP%]:hover{text-decoration:none}.ld-attachment-image[_ngcontent-%COMP%]{padding:0;border-radius:var(--radius-md);overflow:hidden}.ld-attachment-image[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{display:block;width:120px;height:90px;object-fit:cover}"]})}}return o})();var Di=()=>({standalone:!0});function Oc(o,m){if(o&1){let e=w();i(0,"label",35)(1,"input",36),v("ngModelChange",function(t){let s=p(e).$implicit;return y(s.visible,t)||(s.visible=t),u(t)}),r(),i(2,"span"),a(3),r()()}if(o&2){let e=m.$implicit;l(),x("ngModel",e.visible),c("ngModelOptions",C(3,Di)),l(2),g(e.label)}}function Pc(o,m){if(o&1&&b(0,"i",39),o&2){let e=d(2);c("ngClass",e.sortDir===1?"ri-arrow-up-line":"ri-arrow-down-line")}}function Fc(o,m){if(o&1){let e=w();i(0,"button",37),h("click",function(){let t=p(e).$implicit,s=d();return u(s.doSort(t.key))}),i(1,"span"),a(2),r(),f(3,Pc,1,1,"i",38),r()}if(o&2){let e=m.$implicit,n=d();l(2),g(e.label),l(),c("ngIf",n.sortKey===e.key)}}function Ac(o,m){if(o&1){let e=w();i(0,"th",40),h("click",function(){p(e);let t=d();return u(t.doSort("name"))}),a(1,"Customer"),r()}if(o&2){let e=d();c("ngClass",e.sortClass("name"))}}function Dc(o,m){if(o&1){let e=w();i(0,"th",40),h("click",function(){p(e);let t=d();return u(t.doSort("email"))}),a(1,"Email"),r()}if(o&2){let e=d();c("ngClass",e.sortClass("email"))}}function Vc(o,m){if(o&1){let e=w();i(0,"th",40),h("click",function(){p(e);let t=d();return u(t.doSort("phone"))}),a(1,"Phone"),r()}if(o&2){let e=d();c("ngClass",e.sortClass("phone"))}}function Lc(o,m){if(o&1){let e=w();i(0,"th",40),h("click",function(){p(e);let t=d();return u(t.doSort("company"))}),a(1,"Company"),r()}if(o&2){let e=d();c("ngClass",e.sortClass("company"))}}function Nc(o,m){if(o&1){let e=w();i(0,"th",40),h("click",function(){p(e);let t=d();return u(t.doSort("location"))}),a(1,"Location"),r()}if(o&2){let e=d();c("ngClass",e.sortClass("location"))}}function Bc(o,m){if(o&1){let e=w();i(0,"th",40),h("click",function(){p(e);let t=d();return u(t.doSort("source"))}),a(1,"Source"),r()}if(o&2){let e=d();c("ngClass",e.sortClass("source"))}}function Wc(o,m){if(o&1){let e=w();i(0,"th",40),h("click",function(){p(e);let t=d();return u(t.doSort("assigned"))}),a(1,"Assigned"),r()}if(o&2){let e=d();c("ngClass",e.sortClass("assigned"))}}function Rc(o,m){if(o&1){let e=w();i(0,"th",40),h("click",function(){p(e);let t=d();return u(t.doSort("status"))}),a(1,"Status"),r()}if(o&2){let e=d();c("ngClass",e.sortClass("status"))}}function qc(o,m){if(o&1){let e=w();i(0,"td")(1,"a",51),h("click",function(){p(e);let t=d().$implicit,s=d();return u(s.view(t))}),a(2),r()()}if(o&2){let e=d().$implicit;l(2),g(e.name)}
2}function zc(o,m){if(o&1&&(i(0,"td",52),a(1),r()),o&2){let e=d().$implicit;l(),g(e.email)}}function jc(o,m){if(o&1&&(i(0,"td",52),a(1),r()),o&2){let e=d().$implicit;l(),g(e.phone)}}function Uc(o,m){if(o&1&&(i(0,"td"),a(1),r()),o&2){let e=d().$implicit;l(),g(e.company)}}function Hc(o,m){if(o&1&&(i(0,"td"),a(1),r()),o&2){let e=d().$implicit;l(),g(e.location)}}function Kc(o,m){if(o&1&&(i(0,"td"),a(1),r()),o&2){let e=d().$implicit;l(),g(e.source)}}function Qc(o,m){if(o&1&&(i(0,"td"),a(1),r()),o&2){let e=d().$implicit;l(),g(e.assigned)}}function Gc(o,m){if(o&1&&(i(0,"td")(1,"span",53),a(2),r()()),o&2){let e=d().$implicit;l(),c("ngClass","crm-badge-"+e.statusTone),l(),g(e.status)}}function Jc(o,m){if(o&1){let e=w();i(0,"tr"),f(1,qc,3,1,"td",33)(2,zc,2,1,"td",41)(3,jc,2,1,"td",41)(4,Uc,2,1,"td",33)(5,Hc,2,1,"td",33)(6,Kc,2,1,"td",33)(7,Qc,2,1,"td",33)(8,Gc,3,2,"td",33),i(9,"td",42)(10,"div",22)(11,"button",43),b(12,"i",44),r(),i(13,"div",45)(14,"button",46),h("click",function(){let t=p(e).$implicit,s=d();return u(s.view(t))}),b(15,"i",47),i(16,"span",7),a(17,"View"),r()(),i(18,"button",46),h("click",function(){let t=p(e).$implicit,s=d();return u(s.edit(t))}),b(19,"i",48),i(20,"span",7),a(21,"Edit"),r()(),i(22,"button",49),h("click",function(){let t=p(e).$implicit,s=d();return u(s.deleteRow(t))}),b(23,"i",50),i(24,"span",7),a(25,"Delete"),r()()()()()()}if(o&2){let e=d();l(),c("ngIf",e.isVisible("name")),l(),c("ngIf",e.isVisible("email")),l(),c("ngIf",e.isVisible("phone")),l(),c("ngIf",e.isVisible("company")),l(),c("ngIf",e.isVisible("location")),l(),c("ngIf",e.isVisible("source")),l(),c("ngIf",e.isVisible("assigned")),l(),c("ngIf",e.isVisible("status"))}}function Yc(o,m){o&1&&(i(0,"tr")(1,"td",54),a(2,"Loading customers\u2026"),r()())}function $c(o,m){if(o&1){let e=w();i(0,"tr")(1,"td",55)(2,"div",56)(3,"div",57),b(4,"i",58),r(),i(5,"div",59),a(6,"No accounts yet"),r(),i(7,"div",60),a(8,"Won deals automatically become accounts. You can also import existing customers."),r(),i(9,"button",61),h("click",function(){p(e);let t=d();return u(t.addAccount())}),b(10,"i",9),i(11,"span",7),a(12,"Add Account"),r()()()()()}}var Vi=(()=>{class o{constructor(e,n,t,s,_){this.router=e,this.route=n,this.toast=t,this.modal=s,this.api=_,this.search="",this.rows=[],this.viewRows=[],this.loading=!1,this.totalCount=0,this.pageSize=10,this.pageIndex=0,this.pageSizeOptions=[5,10,25,50],this.sortKey=null,this.sortDir=1,this.columns=[{key:"name",label:"Customer",visible:!0},{key:"email",label:"Email",visible:!0},{key:"phone",label:"Phone",visible:!0},{key:"company",label:"Company",visible:!0},{key:"location",label:"Location",visible:!0},{key:"source",label:"Source",visible:!0},{key:"assigned",label:"Assigned",visible:!0},{key:"status",label:"Status",visible:!0}],this.searchInput$=new Ie,this.destroy$=new Ie,this.allRows=[],this.clientSideSearch=!1,this.cacheStale=!0,this.searchTruncated=!1,this.fallbackAnnounced=!1}
2ngOnInit(){this.searchInput$.pipe(Re(300),qe(),ze(this.destroy$)).subscribe(()=>this.loadCustomers()),this.loadCustomers()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}onSearchChange(){this.pageIndex=0,this.searchInput$.next(this.search)}onPageChange(e){this.pageIndex=e.pageIndex,this.pageSize=e.pageSize,this.loadCustomers()}searchPayload(){return{search_query:this.search?.trim()||"",companyName:"",leadOwner:"",date_from:"",date_to:"",columnFilters:{}}}static{this.FALLBACK_PAGE_SIZE=100}static{this.FALLBACK_MAX_PAGES=10}loadCustomers(){let e=this.search?.trim()||"";if(this.clientSideSearch&&e){this.applyClientSearch(e);return}this.loading=!0;let n=se(z({},this.searchPayload()),{page:this.pageIndex+1,page_size:this.pageSize});(e?this.api.searchCustomerList(n):this.api.getCustomerList(n)).subscribe({next:s=>{if(s?.responseCode===200&&s?.response){let _=s.response.data||s.response.results||[];this.rows=_.map(S=>this.mapCustomer(S)),this.totalCount=s.response.total_count??s.response.total??this.rows.length,s.response.current_page!=null&&(this.pageIndex=s.response.current_page-1),s.response.page_size!=null&&(this.pageSize=s.response.page_size),this.applySortToView(),this.loading=!1}else e?this.startClientSearch(e):(this.rows=[],this.totalCount=0,this.applySortToView(),this.loading=!1,this.toast.error(s?.response?.message||"Failed to load customers."))},error:s=>{if(e){this.startClientSearch(e);return}this.rows=[],this.totalCount=0,this.applySortToView(),this.loading=!1;let _=s?.error?.response,S=typeof _=="string"?_:_?.message||_?.response;this.toast.error(S?`Failed to load customers: ${S}`:"Failed to load customers.")}})}startClientSearch(e){if(this.clientSideSearch=!0,!this.cacheStale&&this.allRows.length){this.applyClientSearch(e);return}this.loading=!0,this.fetchAllRows(1,[])}fetchAllRows(e,n){this.api.getCustomerList({search_query:"",page:e,page_size:o.FALLBACK_PAGE_SIZE}).subscribe({next:t=>{let s=t?.response?.data||t?.response?.results||[];n.push(...s.map(T=>this.mapCustomer(T)));let _=t?.response?.total_count??t?.response?.total??n.length,S=s.length===o.FALLBACK_PAGE_SIZE&&n.length<_;if(S&&e<o.FALLBACK_MAX_PAGES){this.fetchAllRows(e+1,n);return}this.allRows=n,this.cacheStale=!1,this.searchTruncated=S,this.announceFallback(),this.applyClientSearch(this.search?.trim()||"")},error:()=>{this.clientSideSearch=!1,this.rows=[],this.totalCount=0,this.applySortToView(),this.loading=!1,this.toast.error("Failed to search customers.")}})}applyClientSearch(e){let n=e.toLowerCase(),t=n?this.allRows.filter(_=>this.rowMatches(_,n)):[...this.allRows];this.totalCount=t.length,this.pageIndex*this.pageSize>=t.length&&(this.pageIndex=0);let s=this.pageIndex*this.pageSize;this.rows=t.slice(s,s+this.pageSize),this.applySortToView(),this.loading=!1}rowMatches(e,n){return["name","email","phone","company","location","source","assigned","status"].some(s=>String(e[s]??"").toLowerCase().includes(n))}announceFallback(){this.fallbackAnnounced||(this.fallbackAnnounced=!0,this.toast.info(this.searchTruncated?`Server search is unavailable \u2014 filtering the first ${this.allRows.length} accounts on this device.`:"Server search is unavailable \u2014 filtering the loaded accounts on this device."))}mapCustomer(e){let n=e.status||e.customerStatus||"";return{id:String(e.id),name:e.contactName||"\u2014",email:e.contactEmail||"\u2014",phone:e.contactPhoneNumber||"\u2014",company:e.companyName||"\u2014",location:e.location||e.city||"\u2014",source:e.source||"\u2014",assigned:e.assignedToName||(e.AssignedTo!=null?String(e.AssignedTo):"\u2014"),status:n||"\u2014",statusTone:this.statusTone(n)}}statusTone(e){return{Active:"green",Won:"green",Prospect:"blue",Inactive:"gray",Lost:"red"}[e]??"gray"}isVisible(e){return this.columns.find(n=>n.key===e)?.visible??!0}clearSort(){this.sortKey=null,this.viewRows=[...this.rows]}applySortToView(){this.viewRows=[...this.rows],this.sortKey&&this.runSort(this.sortKey,this.sortDir)}doSort(e){this.sortDir=this.sortKey===e&&this.sortDir===1?-1:1,this.sortKey=e,this.runSort(e,this.sortDir)}runSort(e,n){this.viewRows.sort((t,s)=>String(t[e]).localeCompare(String(s[e]),void 0,{numeric:!0})*n)}sortClass(e){return this.sortKey!==e?"crm-sort":this.sortDir===1?"crm-sort-asc":"crm-sort-desc"}trackByIndex(e){return e}addAccount(){this.router.navigate(["accounts","new"],{relativeTo:this.route.parent})}view(e){this.router.navigate(["accounts",e.id],{relativeTo:this.route.parent})}edit(e){this.router.navigate(["accounts",e.id,"edit"],{relativeTo:this.route.parent})}deleteRow(e){return B(this,null,function*(){if(!(yield this.modal.confirm({title:"Delete account?",body:`This will remove "${e.company}".`,confirmTone:"danger",confirmLabel:"Delete"})))return;let t=Number(e.id);Number.isNaN(t)||this.api.deleteCustomer({id:t}).subscribe({next:s=>{s?.responseCode===200?(this.toast.success(s?.response?.message||"Account deleted."),this.cacheStale=!0,this.loadCustomers()):this.toast.error(s?.response?.message||"Failed to delete account.")},error:()=>this.toast.error("Failed to delete account.")})})}exportRows(){let e=this.clientSideSearch&&!!this.search?.trim(),n=e?se(z({},this.searchPayload()),{search_query:"",max_rows:1e4}):se(z({},this.searchPayload()),{max_rows:1e4});this.api.exportCustomers(n).subscribe({next:t=>{this.api.saveBlob(t,"accounts.csv"),this.toast.success(e?"Exported all accounts \u2014 the server cannot apply the search f
2ilter to an export.":"Accounts exported.")},error:()=>this.toast.error("Failed to export accounts.")})}static{this.\u0275fac=function(n){return new(n||o)(E($),E(Y),E(q),E(ue),E(R))}}static{this.\u0275cmp=V({type:o,selectors:[["app-accounts"]],decls:62,vars:24,consts:[[1,"crm-page-body"],[1,"crm-page-header"],["appTranslate","",1,"crm-page-title"],["appTranslate","",1,"crm-page-subtitle"],[1,"crm-page-actions"],["type","button",1,"btn","btn-light","btn-sm",3,"click"],[1,"ri-download-line"],["appTranslate",""],["type","button",1,"btn","btn-theme","btn-sm",3,"click"],[1,"ri-add-line"],[1,"card"],[1,"card-header"],[1,"d-flex","align-items-center","gap-2","w-100","acc-toolbar"],["ngbDropdown","","container","body","placement","bottom-start",1,"d-inline-block",3,"autoClose"],["type","button","ngbDropdownToggle","",1,"btn","btn-light","btn-sm"],[1,"ri-layout-column-line"],["ngbDropdownMenu","",1,"acc-cols-menu"],["appTranslate","",1,"dropdown-header"],["class","acc-col-item",4,"ngFor","ngForOf","ngForTrackBy"],[1,"crm-search-wrap","flex-grow-1"],[1,"ri-search-line"],["type","search","placeholder","Search customers\u2026",1,"crm-search-input",3,"ngModelChange","ngModel","ngModelOptions"],["ngbDropdown","","container","body","placement","bottom-end",1,"d-inline-block"],[1,"ri-filter-3-line"],["ngbDropdownMenu","",1,"acc-sort-menu"],["type","button","ngbDropdownItem","","class","d-flex align-items-center justify-content-between",3,"click",4,"ngFor","ngForOf","ngForTrackBy"],[1,"dropdown-divider"],["type","button","ngbDropdownItem","","appTranslate","",3,"click"],[1,"card-body","p-0"],[1,"crm-table-wrapper","crm-table-wrapper-flush"],[1,"crm-data-table"],["appTranslate","",3,"ngClass","click",4,"ngIf"],[4,"ngFor","ngForOf","ngForTrackBy"],[4,"ngIf"],["showFirstLastButtons","",3,"page","length","pageSize","pageIndex","pageSizeOptions"],[1,"acc-col-item"],["type","checkbox",3,"ngModelChange","ngModel","ngModelOptions"],["type","button","ngbDropdownItem","",1,"d-flex","align-items-center","justify-content-between",3,"click"],[3,"ngClass",4,"ngIf"],[3,"ngClass"],["appTranslate","",3,"click","ngClass"],["class","crm-text-sm",4,"ngIf"],[1,"text-right"],["type","button","ngbDropdownToggle","","aria-label","Actions",1,"crm-btn-icon","crm-actions-toggle"],[1,"ri-more-2-fill"],["ngbDropdownMenu",""],["ngbDropdownItem","",3,"click"],[1,"ri-eye-line","mr-2"],[1,"ri-pencil-line","mr-2"],["ngbDropdownItem","",1,"text-danger",3,"click"],[1,"ri-delete-bin-line","mr-2"],[1,"crm-cell-primary",3,"click"],[1,"crm-text-sm"],[1,"crm-badge",3,"ngClass"],["colspan","9","appTranslate","",1,"text-center","py-4"],["colspan","9"],[1,"crm-empty-state"],[1,"crm-empty-state-icon"],[1,"ri-building-2-line"],["appTranslate","",1,"crm-empty-state-title"],["appTranslate","",1,"crm-empty-state-subtitle"],["type","button",1,"btn","btn-theme","btn-sm","mt-3",3,"click"]],template:function(n,t){n&1&&(i(0,"div",0)(1,"div",1)(2,"div")(3,"h1",2),a(4,"Customers"),r(),i(5,"p",3),a(6,"Active and prospective customer accounts"),r()(),i(7,"div",4)(8,"button",5),h("click",function(){return t.exportRows()}),b(9,"i",6),i(10,"span",7),a(11,"Export"),r()(),i(12,"button",8),h("click",function(){return t.addAccount()}),b(13,"i",9),i(14,"span",7),a(15,"Add Customer"),r()()()(),i(16,"div",10)(17,"div",11)(18,"div",12)(19,"div",13)(20,"button",14),b(21,"i",15),i(22,"span",7),a(23,"Columns"),r()(),i(24,"div",16)(25,"h6",17),a(26,"Show columns"),r(),f(27,Oc,4,4,"label",18),r()(),i(28,"div",19),b(29,"i",20),i(30,"input",21),v("ngModelChange",function(_){return y(t.search,_)||(t.search=_),_}),h("ngModelChange",function(){return t.onSearchChange()}),r()(),i(31,"div",22)(32,"button",14),b(33,"i",23),i(34,"span",7),a(35,"Filter"),r()(),i(36,"div",24)(37,"h6",17),a(38,"Sort table by"),r(),f(39,Fc,4,2,"button",25),b(40,"div",26),i(41,"button",27),h("click",function(){return t.clearSort()}),a(42,"Clear sort"),r()()()()(),i(43,"div",28)(44,"div",29)(45,"table",30)(46,"thead")(47,"tr"),f(48,Ac,2,1,"th",31)(49,Dc,2,1,"th",31)(50,Vc,2,1,"th",31)(51,Lc,2,1,"th",31)(52,Nc,2,1,"th",31)(53,Bc,2,1,"th",31)(54,Wc,2,1,"th",31)(55,Rc,2,1,"th",31),b(56,"th"),r()(),i(57,"tbody"),f(58,Jc,26,8,"tr",32)(59,Yc,3,0,"tr",33)(60,$c,13,0,"tr",33),r()()(),i(61,"mat-paginator",34),h("page",function(_){return t.onPageChange(_)}),r()()()()),n&2&&(l(19),c("autoClose","outside"),l(8),c("ngForOf",t.columns)("ngForTrackBy",t.trackByIndex),l(3),x("ngModel",t.search),c("ngModelOptions",C(23,Di)),l(9),c("ngForOf",t.columns)("ngForTrackBy",t.trackByIndex),l(9),c("ngIf",t.isVisible("name")),l(),c("ngIf",t.isVisible("email")),l(),c("ngIf",t.isVisible("phone")),l(),c("ngIf",t.isVisible("company")),l(),c("ngIf",t.isVisible("location")),l(),c("ngIf",t.isVisible("source")),l(),c("ngIf",t.isVisible("assigned")),l(),c("ngIf",t.isVisible("status")),l(3),c("ngForOf",t.viewRows)("ngForTrackBy",t.trackByIndex),l(),c("ngIf",t.loading),l(
2),c("ngIf",!t.loading&&!t.viewRows.length),l(),c("length",t.totalCount)("pageSize",t.pageSize)("pageIndex",t.pageIndex)("pageSizeOptions",t.pageSizeOptions))},dependencies:[j,W,N,te,Qe,U,H,at,Ve,De,Ae,Pe,Fe,L],styles:["[_nghost-%COMP%]{display:block}.crm-actions-toggle.dropdown-toggle[_ngcontent-%COMP%]:after{display:none}.acc-toolbar[_ngcontent-%COMP%] .crm-search-wrap[_ngcontent-%COMP%]{max-width:none}.acc-cols-menu[_ngcontent-%COMP%]{min-width:210px;padding:6px}.acc-col-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;margin:0;padding:6px 10px;border-radius:var(--radius-md);font-size:.8125rem;color:var(--color-text-secondary);cursor:pointer}.acc-col-item[_ngcontent-%COMP%]:hover{background:var(--color-primary-50)}.acc-col-item[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{cursor:pointer}.acc-sort-menu[_ngcontent-%COMP%]{min-width:210px}"]})}}return o})();var Se=()=>({standalone:!0});function Zc(o,m){o&1&&b(0,"i",23)}function Xc(o,m){if(o&1&&(i(0,"span"),a(1),r()),o&2){let e=d().index;l(),g(e+1)}}function ed(o,m){if(o&1&&b(0,"div",24),o&2){let e=d().index,n=d();D("crm-step-connector-done",n.step>e+1)}}function td(o,m){if(o&1&&(P(0),i(1,"div",17)(2,"div",18)(3,"div",19),f(4,Zc,1,0,"i",20)(5,Xc,2,1,"span",9),r(),i(6,"div",21),a(7),r()()(),f(8,ed,1,2,"div",22),F()),o&2){let e=m.$implicit,n=m.index,t=d();l(3),D("crm-step-circle-active",t.step===n+1)("crm-step-circle-done",t.step>n+1),l(),c("ngIf",t.step>n+1),l(),c("ngIf",t.step<=n+1),l(),D("crm-step-label-active",t.step===n+1)("crm-step-label-done",t.step>n+1),l(),g(e),l(),c("ngIf",n<t.steps.length-1)}}function nd(o,m){if(o&1&&(i(0,"option",36),a(1),r()),o&2){let e=m.$implicit;c("ngValue",e.id),l(),g(e.name)}}function id(o,m){if(o&1&&(i(0,"option"),a(1),r()),o&2){let e=m.$implicit;l(),g(e)}}function rd(o,m){if(o&1){let e=w();P(0),i(1,"div",25)(2,"div",26)(3,"label",27),a(4,"Contact Name"),r(),i(5,"input",28),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.contactName,t)||(s.model.contactName=t),u(t)}),r()(),i(6,"div",26)(7,"label",27),a(8,"Email ID"),r(),i(9,"input",29),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.email,t)||(s.model.email=t),u(t)}),r()()(),i(10,"div",25)(11,"div",26)(12,"label",27),a(13,"Phone Number"),r(),i(14,"input",30),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.phone,t)||(s.model.phone=t),u(t)}),r()(),i(15,"div",26)(16,"label",31),a(17,"Product"),r(),i(18,"input",32),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.product,t)||(s.model.product=t),u(t)}),r()()(),i(19,"div",25)(20,"div",26)(21,"label",31),a(22,"Assign To"),r(),i(23,"select",33),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.assignTo,t)||(s.model.assignTo=t),u(t)}),i(24,"option",34),a(25,"Select\u2026"),r(),f(26,nd,2,2,"option",35),r()(),i(27,"div",26)(28,"label",31),a(29,"Source"),r(),i(30,"select",33),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.source,t)||(s.model.source=t),u(t)}),f(31,id,2,1,"option",7),r()()(),F()}if(o&2){let e=d();l(5),x("ngModel",e.model.contactName),c("ngModelOptions",C(17,Se)),l(4),x("ngModel",e.model.email),c("ngModelOptions",C(18,Se)),l(5),x("ngModel",e.model.phone),c("ngModelOptions",C(19,Se)),l(4),x("ngModel",e.model.product),c("ngModelOptions",C(20,Se)),l(5),x("ngModel",e.model.assignTo),c("ngModelOptions",C(21,Se)),l(),c("ngValue",null),l(2),c("ngForOf",e.assignUsers)("ngForTrackBy",e.trackByIndex),l(4),x("ngModel",e.model.source),c("ngModelOptions",C(22,Se)),l(),c("ngForOf",e.sourceOpts)("ngForTrackBy",e.trackByIndex)}}function od(o,m){if(o&1&&(i(0,"option"),a(1),r()),o&2){let e=m.$implicit;l(),g(e)}}function ad(o,m){if(o&1){let e=w();P(0),i(1,"div",25)(2,"div",26)(3,"label",27),a(4,"Company Name"),r(),i(5,"input",37),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.companyName,t)||(s.model.companyName=t),u(t)}),r()(),i(6,"div",26)(7,"label",31),a(8,"Company URL"),r(),i(9,"input",38),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.companyUrl,t)||(s.model.companyUrl=t),u(t)}),r()()(),i(10,"div",25)(11,"div",26)(12,"label",31),a(13,"Company Size"),r(),i(14,"select",33),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.companySize,t)||(s.model.companySize=t),u(t)}),f(15,od,2,1,"option",7),r()(),i(16,"div",26)(17,"label",31),a(18,"GST / TAX ID"),r(),i(19,"input",39),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.gst,t)||(s.model.gst=t),u(t)}),r()()(),F()}if(o&2){let e=d();l(5),x("ngModel",e.model.companyName),c("ngModelOptions",C(10,Se)),l(4),x("ngModel",e.model.companyUrl),c("ngModelOptions",C(11,Se)),l(5),x("ngModel",e.model.companySize),c("ngModelOptions",C(12,Se)),l(),c("ngForOf",e.sizeOpts)("ngForTrackBy",e.trackByIndex),l(4),x("ngModel",e.model.gst),c("ngModelOptions",C(13,Se))}}function sd(o,m){if(o&1&&(i(0,"option"),a(1),r()),o&2){let e=m.$implicit;l(),g(e)}}function ld(o,m){if(o&1){let e=w();P(0),i(1,"div",25)(2,"div",26)(3,"label",31),a(4,"Address 1"),r(),i(5,"input",40),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.address1,t)||(s.model.address1=t),u(t)}
2),r()(),i(6,"div",26)(7,"label",31),a(8,"Address 2"),r(),i(9,"input",41),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.address2,t)||(s.model.address2=t),u(t)}),r()()(),i(10,"div",25)(11,"div",26)(12,"label",31),a(13,"City"),r(),i(14,"input",42),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.city,t)||(s.model.city=t),u(t)}),r()(),i(15,"div",26)(16,"label",31),a(17,"State"),r(),i(18,"select",33),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.state,t)||(s.model.state=t),u(t)}),f(19,sd,2,1,"option",7),r()()(),i(20,"div",25)(21,"div",26)(22,"label",31),a(23,"Country"),r(),i(24,"input",43),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.country,t)||(s.model.country=t),u(t)}),r()(),i(25,"div",26)(26,"label",31),a(27,"Pincode"),r(),i(28,"input",44),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.pincode,t)||(s.model.pincode=t),u(t)}),r()()(),F()}if(o&2){let e=d();l(5),x("ngModel",e.model.address1),c("ngModelOptions",C(14,Se)),l(4),x("ngModel",e.model.address2),c("ngModelOptions",C(15,Se)),l(5),x("ngModel",e.model.city),c("ngModelOptions",C(16,Se)),l(4),x("ngModel",e.model.state),c("ngModelOptions",C(17,Se)),l(),c("ngForOf",e.stateOpts)("ngForTrackBy",e.trackByIndex),l(5),x("ngModel",e.model.country),c("ngModelOptions",C(18,Se)),l(4),x("ngModel",e.model.pincode),c("ngModelOptions",C(19,Se))}}function cd(o,m){if(o&1&&(i(0,"option"),a(1),r()),o&2){let e=m.$implicit;l(),g(e)}}function dd(o,m){if(o&1){let e=w();P(0),i(1,"div",26)(2,"label",31),a(3,"Annual Revenue"),r(),i(4,"select",33),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.annualRevenue,t)||(s.model.annualRevenue=t),u(t)}),f(5,cd,2,1,"option",7),r()(),i(6,"div",26)(7,"label",31),a(8,"Note"),r(),i(9,"textarea",45),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.note,t)||(s.model.note=t),u(t)}),r()(),F()}if(o&2){let e=d();l(4),x("ngModel",e.model.annualRevenue),c("ngModelOptions",C(6,Se)),l(),c("ngForOf",e.revenueOpts)("ngForTrackBy",e.trackByIndex),l(4),x("ngModel",e.model.note),c("ngModelOptions",C(7,Se))}}function md(o,m){if(o&1){let e=w();i(0,"button",46),h("click",function(){p(e);let t=d();return u(t.back())}),b(1,"i",47),i(2,"span",48),a(3,"Back"),r()()}}function pd(o,m){o&1&&b(0,"i",49)}var _n=(()=>{class o{get pageTitle(){return this.editMode?"Edit Customer":"Add Customer"}constructor(e,n,t,s){this.router=e,this.route=n,this.toast=t,this.api=s,this.steps=["Basic Info","Organization","Address","Additional"],this.step=1,this.saving=!1,this.model={contactName:"",email:"",phone:"",product:"",assignTo:null,source:"Website",companyName:"",companyUrl:"",companySize:"11-50",gst:"",address1:"",address2:"",city:"",state:"Telangana",country:"India",pincode:"",annualRevenue:"< \u20B91 Cr",note:""},this.sourceOpts=["Website","Referral","Event","LinkedIn"],this.sizeOpts=["1-10","11-50","51-200","201-1000","1000+"],this.stateOpts=["Telangana","Maharashtra","Karnataka","Tamil Nadu"],this.revenueOpts=["< \u20B91 Cr","\u20B91-10 Cr","\u20B910-100 Cr","> \u20B9100 Cr"],this.assignUsers=[],this.customerId=null,this.editMode=!1,this.customerData=null}ngOnInit(){this.api.getAssigneeUsers({user_type:"SELLER",search:"",perPage:100,pageNumber:1}).subscribe({next:n=>{this.assignUsers=n?.response?.data?.users??[]},error:()=>{}});let e=this.route.snapshot.paramMap.get("id");e&&(this.editMode=!0,this.customerId=Number(e),this.loadCustomer())}loadCustomer(){this.api.getCustomerView({id:this.customerId}).subscribe({next:e=>{e?.responseCode===200&&e?.response?.data&&(this.customerData=e.response.data,this.prefill(this.customerData))},error:()=>{}})}prefill(e){this.model={contactName:e.contactName||"",email:e.contactEmail||"",phone:e.contactPhoneNumber||"",product:e.productName||"",assignTo:e.AssignedTo!=null&&e.AssignedTo!==""?Number(e.AssignedTo):null,source:e.source||"Website",companyName:e.companyName||"",companyUrl:e.CompanyUrl||e.companyUrl||"",companySize:e.CompanySize||e.companySize||"11-50",gst:e.gstOrTaxId||"",address1:e.addressLineOne||"",address2:e.addressLineTwo||"",city:e.city||"",state:e.state||"Telangana",country:e.country||"India",pincode:e.pincode||"",annualRevenue:e.annualRevenue||"< \u20B91 Cr",note:e.note||""}}trackByIndex(e){return e}isValidPhone(e){let n=(e||"").replace(/[\s\-()]/g,"").replace(/^(\+?91|0)/,"");return/^[6-9]\d{9}$/.test(n)}next(){if(this.saving)return;if(this.editMode&&!this.customerData){this.toast.info("Loading customer\u2026 please wait.");return}if(this.step===1){if(!this.model.contactName?.trim()){this.toast.warning("Contact Name is required.");return}if(!this.model.email?.trim()||!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(this.model.email)){this.toast.warning("A valid Email is required.");return}if(!this.isValidPhone(this.model.phone)){this.toast.warning("A valid 10-digit phone number is required.");return}}else if(this.customerId==null){this.toast.error("Customer not created yet \u2014 please complete Step 1 first."),this.step=1;return}let e=this.step===1?this.step1Payload():this.step===2?this.step2Payload(this.customerId):this.step===3?this.step3Payload(this.customerId):this.step4Payload(this.customerId);this.saving=!0,this.saveCustomer(e).subscribe({next:n=>{if(this.saving=!1,n?.responseCode!==200){this.toast.error(n?.response?.message||"Failed to save customer.");return}if(this.step===1){let t=this.customerId??this.extractId(n);if(t==null){this.toast.error("Customer created but no id was returned.");return}this.customerId=t}this.step<this.steps.length?this.step++:(this.toast.success(n?.response?.message||(this.editMode?"Customer updated.":"Customer saved.")),this.router.navigate(["accounts"],{relativeTo:this.route.parent}))},error:()=>{this.saving=!1,this.toast.error("Failed to save customer.")}})}back(){this.step>1&&this.step--}step1Payload(){let e={contactName:this.model.contactName?.trim(),contactEmail:this.model.email?.trim(),contactPhoneNumber:this.model.phone,productName:this.model.product,AssignedTo:this.model.assignTo,source:this.model.source,step:1};return this.customerId!=null&&(e.id=this.customerId),e}step2Payload(e){return{id:e,companyName:this.model.companyName?.trim(),CompanyUrl:this.model.companyUrl,CompanySize:this.model.companySize,gstOrTaxId:this.model.gst,step:2}}step3Payload(e){return{id:e,addressLineOne:this.model.address1,addressLineTwo:this.model.address2,city:this.model.city,state:this.model.state,country:this.model.country,pincode:this.model.pincode,step:3}}step4Payload(e){return{id:e,annualRevenue:this.model.annualRevenue,note:this.model.note,step:4}}
2extractId(e){let n=e?.response,t=n?.data?.deal?.id??n?.customer_id??n?.data?.id??n?.data?.customer?.id??n?.id;return t!=null?Number(t):null}saveCustomer(e){return this.editMode?this.api.updateCustomer(e):this.api.createCustomer(e)}saveDraft(){if(!this.model.contactName?.trim()||!this.model.email?.trim()){this.toast.warning("Contact name and email are required to save a draft."),this.step=1;return}this.saving=!0,this.saveCustomer(this.step1Payload()).subscribe({next:e=>{this.saving=!1,e?.responseCode===200?this.toast.success("Draft saved."):this.toast.error(e?.response?.message||"Failed to save draft.")},error:()=>{this.saving=!1,this.toast.error("Failed to save draft.")}})}cancel(){this.router.navigate(["accounts"],{relativeTo:this.route.parent})}get isLast(){return this.step===this.steps.length}static{this.\u0275fac=function(n){return new(n||o)(E($),E(Y),E(q),E(R))}}static{this.\u0275cmp=V({type:o,selectors:[["app-account-create"]],decls:28,vars:13,consts:[[1,"crm-page-body"],[1,"crm-page-header"],[1,"crm-page-title"],["appTranslate","",1,"crm-page-subtitle"],[1,"card"],[1,"card-body"],[1,"crm-step-progress"],[4,"ngFor","ngForOf","ngForTrackBy"],[1,"crm-text-muted","crm-text-sm","mb-4"],[4,"ngIf"],[1,"card-footer","d-flex","align-items-center","justify-content-between"],[1,"d-flex","align-items-center","gap-2"],["type","button","appTranslate","",1,"btn","btn-light","btn-sm",3,"click"],[1,"d-flex","gap-2"],["type","button","class","btn btn-light btn-sm",3,"click",4,"ngIf"],["type","button",1,"btn","btn-theme","btn-sm",3,"click"],["class","ri-arrow-right-line",4,"ngIf"],[1,"crm-step-item"],[1,"crm-step-wrapper"],[1,"crm-step-circle"],["class","ri-check-line",4,"ngIf"],[1,"crm-step-label"],["class","crm-step-connector",3,"crm-step-connector-done",4,"ngIf"],[1,"ri-check-line"],[1,"crm-step-connector"],[1,"crm-form-row","crm-form-row-2"],[1,"crm-form-group"],["appTranslate","",1,"crm-form-label","crm-form-label-required"],["type","text","placeholder","Enter contact name",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["type","email","placeholder","Enter email address",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","placeholder","Enter phone number",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["appTranslate","",1,"crm-form-label"],["type","text","placeholder","Product of interest",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],[1,"crm-form-select",3,"ngModelChange","ngModel","ngModelOptions"],["appTranslate","",3,"ngValue"],[3,"ngValue",4,"ngFor","ngForOf","ngForTrackBy"],[3,"ngValue"],["type","text","placeholder","Enter company name",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["type","url","placeholder","Enter company URL",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","placeholder","Enter GST / TAX ID",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","placeholder","Enter address line 1",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","placeholder","Enter address line 2",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","placeholder","Enter city",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","placeholder","Enter country",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","placeholder","Enter pincode",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["rows","4",1,"crm-form-textarea",3,"ngModelChange","ngModel","ngModelOptions"],["type","button",1,"btn","btn-light","btn-sm",3,"click"],[1,"ri-arrow-left-line"],["appTranslate",""],[1,"ri-arrow-right-line"]],template:function(n,t){n&1&&(i(0,"div",0)(1,"div",1)(2,"div")(3,"h1",2),a(4),r(),i(5,"p",3),a(6,"4-step customer onboarding"),r()()(),i(7,"div",4)(8,"div",5)(9,"div",6),f(10,td,9,12,"ng-container",7),r(),i(11,"p",8),a(12),r(),f(13,rd,32,23,"ng-container",9)(14,ad,20,14,"ng-container",9)(15,ld,29,20,"ng-container",9)(16,dd,10,8,"ng-container",9),r(),i(17,"div",10)(18,"div",11)(19,"button",12),h("click",function(){return t.cancel()}),a(20,"Cancel"),r(),i(21,"button",12),h("click",function(){return t.saveDraft()}),a(22,"Save Draft"),r()(),i(23,"div",13),f(24,md,4,0,"button",14),i(25,"button",15),h("click",function(){return t.next()}),a(26),f(27,pd,1,0,"i",16),r()()()()()),n&2&&(l(4),g(t.pageTitle),l(6),c("ngForOf",t.steps)("ngForTrackBy",t.trackByIndex),l(2),Le("Step ",t.step," of ",t.steps.length," \u2014 ",t.steps[t.step-1],""),l(),c("ngIf",t.step===1),l(),c("ngIf",t.step===2),l(),c("ngIf",t.step===3),l(),c("ngIf",t.step===4),l(8),c("ngIf",t.step>1),l(2),A(" ",t.isLast?"Save":"Next"," "),l(),c("ngIf",!t.isLast))},dependencies:[W,N,X,ee,te,Z,U,H,L],styles:["[_nghost-%COMP%]{display:block}"]})}}return o}
2)();var vt=()=>({standalone:!0});function ud(o,m){if(o&1&&(i(0,"div",36)(1,"span",19),a(2,"Customer since"),r(),a(3),r()),o&2){let e=d();l(3),A(" ",e.createdDisplay,"")}}function gd(o,m){if(o&1){let e=w();i(0,"div",40)(1,"button",41),h("click",function(){p(e);let t=d();return u(t.markActive())}),a(2,"Mark as Active"),r(),i(3,"button",41),h("click",function(){p(e);let t=d();return u(t.markProspect())}),a(4,"Move to Prospect"),r(),i(5,"button",41),h("click",function(){p(e);let t=d();return u(t.markInactive())}),a(6,"Mark as Inactive"),r(),i(7,"button",41),h("click",function(){p(e);let t=d();return u(t.markLost())}),a(8,"Mark as Lost"),r()()}}function _d(o,m){if(o&1&&(P(0),i(1,"div",30)(2,"div",31)(3,"div",32),a(4,"Overview"),r()(),i(5,"div",33)(6,"dl",38)(7,"dt",19),a(8,"Product"),r(),i(9,"dd"),a(10),r(),i(11,"dt",19),a(12,"Source"),r(),i(13,"dd"),a(14),r(),i(15,"dt",19),a(16,"SLA Tier"),r(),i(17,"dd"),a(18),r(),i(19,"dt",19),a(20,"Annual Revenue"),r(),i(21,"dd"),a(22),r()(),b(23,"div",42),i(24,"p",43),a(25,"Note"),r(),i(26,"p",44),a(27),r()()(),F()),o&2){let e=d();l(10),g((e.customer==null?null:e.customer.productName)||"\u2014"),l(4),g((e.customer==null?null:e.customer.source)||"\u2014"),l(4),g((e.customer==null?null:e.customer.slaTier)||"\u2014"),l(4),g((e.customer==null?null:e.customer.annualRevenue)||"\u2014"),l(5),g((e.customer==null?null:e.customer.note)||"No note.")}}function hd(o,m){if(o&1){let e=w();i(0,"tr")(1,"td")(2,"a",52),h("click",function(){let t=p(e).$implicit,s=d(2);return u(s.openDeal(t))}),a(3),r()(),i(4,"td")(5,"span",13),a(6),r()(),i(7,"td"),a(8),r(),i(9,"td"),a(10),r()()}if(o&2){let e=m.$implicit;l(3),g(e.name),l(2),c("ngClass","crm-badge-"+e.stageTone),l(),g(e.stage),l(2),g(e.amount),l(2),g(e.close)}}function fd(o,m){o&1&&(i(0,"tr")(1,"td",53),a(2,"No deals yet."),r()())}function xd(o,m){if(o&1){let e=w();P(0),i(1,"div",45)(2,"strong",19),a(3,"Deals"),r(),i(4,"button",46),h("click",function(){p(e);let t=d();return u(t.addDeal())}),b(5,"i",47),i(6,"span",19),a(7,"New Deal"),r()()(),i(8,"div",30)(9,"div",48)(10,"div",49)(11,"table",50)(12,"thead")(13,"tr")(14,"th",19),a(15,"Deal"),r(),i(16,"th",19),a(17,"Stage"),r(),i(18,"th",19),a(19,"Amount"),r(),i(20,"th",19),a(21,"Close"),r()()(),i(22,"tbody"),f(23,hd,11,5,"tr",51)(24,fd,3,0,"tr",28),r()()()()(),F()}if(o&2){let e=d();l(23),c("ngForOf",e.deals)("ngForTrackBy",e.trackByIndex),l(),c("ngIf",!e.deals.length)}}function yd(o,m){if(o&1&&(i(0,"tr")(1,"td",34),a(2),r(),i(3,"td"),a(4),r(),i(5,"td",54),a(6),r(),i(7,"td",54),a(8),r()()),o&2){let e=m.$implicit;l(2),g(e.name),l(2),g(e.role),l(2),g(e.email),l(2),g(e.phone)}}function vd(o,m){o&1&&(i(0,"tr")(1,"td",53),a(2,"No contacts."),r()())}function Cd(o,m){if(o&1){let e=w();P(0),i(1,"div",45)(2,"strong",19),a(3,"Stakeholders"),r(),i(4,"button",46),h("click",function(){p(e);let t=d();return u(t.addContact())}),b(5,"i",47),i(6,"span",19),a(7,"Add Contact"),r()()(),i(8,"div",30)(9,"div",48)(10,"div",49)(11,"table",50)(12,"thead")(13,"tr")(14,"th",19),a(15,"Name"),r(),i(16,"th",19),a(17,"Role"),r(),i(18,"th",19),a(19,"Email"),r(),i(20,"th",19),a(21,"Phone"),r()()(),i(22,"tbody"),f(23,yd,9,4,"tr",51)(24,vd,3,0,"tr",28),r()()()()(),F()}if(o&2){let e=d();l(23),c("ngForOf",e.contacts)("ngForTrackBy",e.trackByIndex),l(),c("ngIf",!e.contacts.length)}}function bd(o,m){o&1&&(i(0,"p",57),a(1,"No notes yet."),r())}function Sd(o,m){if(o&1){let e=w();i(0,"img",67),h("error",function(){p(e);let t=d().$implicit,s=d(4);return u(s.onAttachmentError(t))}),r()}if(o&2){let e=d().$implicit;c("src",e.url,me)("alt",e.name)}}function wd(o,m){if(o&1&&(i(0,"span"),b(1,"i",68),a(2),r()),o&2){let e=d().$implicit;l(2),A(" ",e.name,"")}}function Td(o,m){if(o&1&&(i(0,"a",65),f(1,Sd,1,2,"img",66)(2,wd,3,1,"span",28),r()),o&2){let e=m.$implicit,n=d(4);D("ac-attachment-image",n.isImageAttachment(e)),pe("href",e.url||null,me)("target",e.url?"_blank":null)("title",e.name),l(),c("ngIf",n.isImageAttachment(e)),l(),c("ngIf",!n.isImageAttachment(e))}}function kd(o,m){if(o&1&&(i(0,"div",62)(1,"strong",19),a(2,"Attachments:"),r(),i(3,"div",63),f(4,Td,3,7,"a",64),r()()),o&2){let e=d().$implicit,n=d(2);l(4),c("ngForOf",e.attachments)("ngForTrackBy",n.trackByIndex)}}function Ed(o,m){if(o&1&&(i(0,"div",4)(1,"div",33)(2,"div",58)(3,"div",59),a(4),r(),i(5,"div",60),a(6),r()(),i(7,"p",44),a(8),r(),f(9,kd,5,2,"div",61),r()()),o&2){let e=m.$implicit;l(4),g(e.title),l(2),g(e.meta),l(2),g(e.body),l(),c("ngIf",e.attachments==null?null:e.attachments.length)}}function Md(o,m){if(o&1&&(P(0),i(1,"div",30)(2,"div",31)(3,"div",32),a(4,"N
2otes"),r()(),i(5,"div",33),f(6,bd,2,0,"p",55)(7,Ed,10,4,"div",56),r()(),F()),o&2){let e=d();l(6),c("ngIf",!e.noteCards.length),l(),c("ngForOf",e.noteCards)("ngForTrackBy",e.trackByIndex)}}function Id(o,m){o&1&&(i(0,"p",57),a(1,"No activity yet."),r())}function Od(o,m){if(o&1&&(i(0,"div",82)(1,"span",83),a(2),r(),i(3,"span",84),a(4),r()()),o&2){let e=m.$implicit;l(2),g(e.label),l(2),g(e.value)}}function Pd(o,m){if(o&1){let e=w();i(0,"img",67),h("error",function(){p(e);let t=d().$implicit,s=d(5);return u(s.onAttachmentError(t))}),r()}if(o&2){let e=d().$implicit;c("src",e.url,me)("alt",e.name)}}function Fd(o,m){if(o&1&&(i(0,"span"),b(1,"i",68),a(2),r()),o&2){let e=d().$implicit;l(2),A(" ",e.name,"")}}function Ad(o,m){if(o&1&&(i(0,"a",65),f(1,Pd,1,2,"img",66)(2,Fd,3,1,"span",28),r()),o&2){let e=m.$implicit,n=d(5);D("ac-attachment-image",n.isImageAttachment(e)),pe("href",e.url||null,me)("target",e.url?"_blank":null)("title",e.name),l(),c("ngIf",n.isImageAttachment(e)),l(),c("ngIf",!n.isImageAttachment(e))}}function Dd(o,m){if(o&1&&(i(0,"div",63),f(1,Ad,3,7,"a",64),r()),o&2){let e=d(2).$implicit,n=d(2);l(),c("ngForOf",e.attachments)("ngForTrackBy",n.trackByIndex)}}function Vd(o,m){if(o&1&&(i(0,"div",79),f(1,Od,5,2,"div",80)(2,Dd,2,2,"div",81),r()),o&2){let e=d().$implicit,n=d(2);l(),c("ngForOf",e.fields)("ngForTrackBy",n.trackByIndex),l(),c("ngIf",e.attachments==null?null:e.attachments.length)}}function Ld(o,m){if(o&1&&(i(0,"div",72),b(1,"span",73),i(2,"div",74)(3,"div",75)(4,"span",76),a(5),r(),i(6,"span",77),a(7),r()(),f(8,Vd,3,3,"div",78),r()()),o&2){let e=m.$implicit;l(),c("ngClass","crm-timeline-dot-"+e.tone),l(4),g(e.title),l(2),g(e.time),l(),c("ngIf",(e.fields==null?null:e.fields.length)||(e.attachments==null?null:e.attachments.length))}}function Nd(o,m){if(o&1&&(P(0),i(1,"div",30)(2,"div",31)(3,"div",32),a(4,"Interaction Timeline"),r(),i(5,"div",69),a(6,"Calls \xB7 Emails \xB7 Meetings \xB7 DealRoom \xB7 Support"),r()(),i(7,"div",33),f(8,Id,2,0,"p",55),i(9,"div",70),f(10,Ld,9,4,"div",71),r()()(),F()),o&2){let e=d();l(8),c("ngIf",!e.activities.length),l(2),c("ngForOf",e.activities)("ngForTrackBy",e.trackByIndex)}}function Bd(o,m){if(o&1){let e=w();i(0,"button",12),h("click",function(){p(e);let t=d();return u(t.openAddressForm())}),b(1,"i",47),i(2,"span",19),a(3,"Address"),r()()}}function Wd(o,m){if(o&1){let e=w();i(0,"div",85),b(1,"div",86),i(2,"div",43),a(3,"Add Address"),r(),i(4,"input",87),v("ngModelChange",function(t){p(e);let s=d();return y(s.addressForm.street,t)||(s.addressForm.street=t),u(t)}),r(),i(5,"div",88)(6,"input",89),v("ngModelChange",function(t){p(e);let s=d();return y(s.addressForm.city,t)||(s.addressForm.city=t),u(t)}),r(),i(7,"input",90),v("ngModelChange",function(t){p(e);let s=d();return y(s.addressForm.region,t)||(s.addressForm.region=t),u(t)}),r()(),i(8,"div",88)(9,"input",91),v("ngModelChange",function(t){p(e);let s=d();return y(s.addressForm.postCode,t)||(s.addressForm.postCode=t),u(t)}),r(),i(10,"input",92),v("ngModelChange",function(t){p(e);let s=d();return y(s.addressForm.phone,t)||(s.addressForm.phone=t),u(t)}),r()(),i(11,"select",93),v("ngModelChange",function(t){p(e);let s=d();return y(s.addressForm.addressType,t)||(s.addressForm.addressType=t),u(t)}),i(12,"option",94),a(13,"Shipping"),r(),i(14,"option",95),a(15,"Billing"),r()(),i(16,"div",10)(17,"button",96),h("click",function(){p(e);let t=d();return u(t.saveAddress())}),a(18,"Save"),r(),i(19,"button",97),h("click",function(){p(e);let t=d();return u(t.cancelAddress())}),a(20,"Cancel"),r()()()}if(o&2){let e=d();l(4),x("ngModel",e.addressForm.street),c("ngModelOptions",C(12,vt)),l(2),x("ngModel",e.addressForm.city),c("ngModelOptions",C(13,vt)),l(),x("ngModel",e.addressForm.region),c("ngModelOptions",C(14,vt)),l(2),x("ngModel",e.addressForm.postCode),c("ngModelOptions",C(15,vt)),l(),x("ngModel",e.addressForm.phone),c("ngModelOptions",C(16,vt)),l(),x("ngModel",e.addressForm.addressType),c("ngModelOptions",C(17,vt))}}var Li=(()=>{class o{get contacts(){let e=this.customer?.contactName;return e?[{name:e,role:"\u2014",email:this.customer?.contactEmail||"\u2014",phone:this.customer?.contactPhoneNumber||"\u2014"}]:[]}constructor(e,n,t,s,_,S){this.router=e,this.route=n,this.toast=t,this.modal=s,this.popup=_,this.api=S,this.activeTab="overview",this.noteCards=[],this.statusMenuOpen=!1,this.deals=[],this.activities=[],this.customerId=null,this.customer=null,this.requiredFieldsByPopup={"customer-active":["reason"],"customer-prospect":["reason"],"customer-inactive":["reason"],"customer-lost":["reason"]},this.addressFormOpen=!1,this.addressForm={firstname:"",lastname:"",street:"",city:"",region:"",postCode:"",phone:"",addressType:"SHIPPING"}}
2ngOnInit(){let e=this.route.snapshot.paramMap.get("id");this.customerId=e?Number(e):null,this.customerId!=null&&!Number.isNaN(this.customerId)&&(this.loadCustomer(),this.loadActivities())}loadCustomer(){this.api.getCustomerView({id:this.customerId}).subscribe({next:e=>{e?.responseCode===200&&(this.customer=e.response?.data||null),this.loadDeals()},error:()=>{this.loadDeals()}})}loadDeals(){this.api.getDealList({customer_id:String(this.customerId),search_query:"",page:1,page_size:100,order_by:"-created_date"}).subscribe({next:e=>{let n=e?.responseCode===200&&e?.response?.data||[];this.deals=(n||[]).filter(t=>this.belongsToThisAccount(t)).map(t=>{let s=t.dealStatus||t.deal_status||t.status||t.dealStage||"\u2014";return{id:String(t.id),name:t.dealTitle||"\u2014",stage:s,stageTone:this.stageTone(s),amount:this.formatAmount(t.dealAmount),close:t.expectedCloseDate?String(t.expectedCloseDate).slice(0,10):"\u2014"}})},error:()=>{}})}belongsToThisAccount(e){if(!e)return!1;let n=e.customer_id??e.customerId??e.customer;if(n!=null&&n!=="")return Number(n)===this.customerId;let t=this.norm(this.customer?.contactEmail);if(t)return this.norm(e.contactEmail)===t;let s=this.digits(this.customer?.contactPhoneNumber);if(s)return this.digits(e.contactPhoneNumber)===s;let _=this.norm(this.customer?.companyName);return _?this.norm(e.contactCompany)===_:!1}norm(e){return String(e??"").trim().toLowerCase()}digits(e){return String(e??"").replace(/\D/g,"")}stageTone(e){return{New:"gray",Contacted:"gray","Follow-Up":"amber",Qualified:"blue","Proposal Sent":"blue",Negotiation:"amber","Decision Pending":"purple",Won:"green",Lost:"red",Disqualified:"gray"}[e]??"gray"}formatAmount(e){let n=Number(e)||0;return n?n>=1e7?"\u20B9"+(n/1e7).toFixed(2).replace(/\.00$/,"")+" Cr":"\u20B9"+Math.round(n/1e5)+" L":"\u2014"}get accountName(){return this.customer?.companyName||this.customer?.contactName||"\u2014"}get accountInitial(){return(this.accountName||"?").charAt(0).toUpperCase()}get createdDisplay(){return this.customer?.created_date?String(this.customer.created_date).slice(0,10):""}get statusLabel(){return this.customer?.status||"\u2014"}get statusTone(){return{Active:"green",Won:"green",Prospect:"blue",Inactive:"gray",Lost:"red"}[this.statusLabel]??"gray"}get contactName(){return this.customer?.contactName||"\u2014"}get contactEmail(){return this.customer?.contactEmail||"\u2014"}get contactPhone(){return this.customer?.contactPhoneNumber||"\u2014"}get gstin(){return this.customer?.gstOrTaxId||"\u2014"}get companySize(){return this.customer?.CompanySize||"\u2014"}get addressLine(){return[this.customer?.addressLineOne,this.customer?.city,this.customer?.state].filter(Boolean).join(", ")||"\u2014"}fmtActivityTime(e){if(!e)return"";let n=new Date(e);return Number.isNaN(n.getTime())?String(e):Ee(n,"MMM dd, yyyy hh:mm a","en-US")}loadActivities(){this.api.getCustomerActivities({customerId:this.customerId,activityType:"",page_size:100,page:1}).subscribe({next:e=>{let n=e?.response?.data?.all_activities||e?.response?.data||[];this.activities=(n||[]).map(t=>se(z({time:this.fmtActivityTime(t?.created_date||t?.created_at),tone:"blue"},Je(t,"customer")),{text:yt(t,"customer"),attachments:this.attachmentsFrom(t)})),this.noteCards=(n||[]).filter(t=>/note/i.test(t?.activityType||t?.activity_type||t?.type||"")).map(t=>this.mapNote(t)),this.resolveAttachmentLinks(this.activities.reduce((t,s)=>t.concat(s.attachments||[]),[]).concat(this.noteCards.reduce((t,s)=>t.concat(s.attachments||[]),[])))},error:()=>{}})}mapNote(e){let n=e?.activityJson||e?.meta||{};return{title:"Note",meta:`${e?.performed_by_name||"\u2014"} \xB7 ${e?.created_date||e?.created_at||""}`,body:String(n?.note||n?.notes||n?.body||""),attachments:this.attachmentsFrom(e)}}trackByIndex(e){return e}setTab(e){this.activeTab=e}back(){this.router.navigate(["accounts"],{relativeTo:this.route.parent})}toggleStatusMenu(){this.statusMenuOpen=!this.statusMenuOpen}hasBlankRequiredFields(e,n){let t=this.requiredFieldsByPopup[n]||[];return t.length===0?!1:t.some(s=>{let _=e[s];return _==null||typeof _=="string"&&_.trim()===""})}changeStatus(e,n,t=!1){return B(this,null,function*(){if(this.statusMenuOpen=!1,String(this.statusLabel).trim().toLowerCase()===e.toLowerCase()){this.toast.info(`This account is already ${e}.`);return}let s=yield this.popup.open(n);if(s!==null){if(console.log("DEBUG payload:",s),this.hasBlankRequiredFields(s,n)){this.toast.error("Please fill in all required fields before submitting.");return}if(this.customerId==null){this.toast.error("No account loaded \u2014 status not updated.");return}this.api.updateCustomerStatus({customer_id:this.customerId,updated_status:e,activityJson:s}).subscribe({next:_=>{_?.responseCode===200?(this.toast[t?"warning":"success"](_?.response?.message||`Customer marked as ${e}.`),this.loadCustomer(),this.loadActivities()):this.toast.error(_?.response?.message||"Failed to update status.")},error:()=>this.toast.error("Failed to update status.")})}})}edit(){if(this.customerId==null){this.toast.info("No account to edit.");return}this.router.navigate(["accounts",this.customerId,"edit"],{relativeTo:this.route.parent})}addDeal(){this.router.navigate(["opportunities","new"],{relativeTo:this.route.parent})}addContact(){this.toast.info("Additional contacts \u2014 coming soon. Use Edit to change the primary contact.")}openAddressForm(){this.addressForm={firstname:"",lastname:"",street:"",city:"",region:"",postCode:"",phone:"",addressType:"SHIPPING"},this.addressFormOpen=!0}cancelAddress(){this.addressFormOpen=!1}saveAddress(){if(this.customerId==null){this.toast.info("No account.");return}if(!this.addressForm.street.trim()||!this.addressForm.city.trim()){this.toast.error("Street and city are required.");return}let e={entity_id:0,isActive:1,asDefault:0,firstname:this.addressForm.firstname,lastname:this.addressForm.lastname,street:this.addressForm.street,city:this.addressForm.city,region:this.addressForm.region,regionId:0,countryId:"",postCode:this.addressForm.postCode,ph
2one:this.addressForm.phone,addressType:this.addressForm.addressType,leadOrgId:this.customerId};this.api.addCustomerAddress({customerAddress:e}).subscribe({next:n=>{n?.responseCode===200?(this.toast.success(n?.response?.message||"Address added."),this.addressFormOpen=!1):this.toast.error(n?.response?.message||"Failed to add address.")},error:()=>this.toast.error("Failed to add address.")})}reviewMerge(){this.toast.info("Merging duplicate accounts \u2014 coming soon.")}markActive(){return this.changeStatus("Active","customer-active")}markProspect(){return this.changeStatus("Prospect","customer-prospect",!0)}markInactive(){return this.changeStatus("Inactive","customer-inactive",!0)}markLost(){return this.changeStatus("Lost","customer-lost",!0)}addNote(){return B(this,null,function*(){let e=yield this.popup.open("add-note");if(e===null)return;let n=String(e.note||"").trim();if(!n){this.toast.error("Note content is required.");return}let t=Array.isArray(e.attachmentFiles)?e.attachmentFiles.filter(s=>s instanceof File):[];this.api.uploadAttachments(t,"crm",this.customerId??void 0).subscribe({next:s=>this.commitNote(n,s),error:()=>this.commitNote(n,[])})})}commitNote(e,n){let t=n.filter(s=>!s.url).length;t&&this.toast.warning(`${t} attachment(s) could not be uploaded \u2014 the note was saved with the filename only.`),this.saveActivity("NOTE_ADDED",{note:e,attachments:n},"Note added successfully","Failed to add note")}addTodo(){return B(this,null,function*(){let e=yield this.popup.open("to-do");if(e===null)return;let n=String(e.type||"").trim();if(!n){this.toast.error("Type is required.");return}this.saveActivity("TODO_CREATED",{type:n.toLowerCase(),follow:String(e.follow||"").toLowerCase(),note:String(e.note||"").trim(),start_date:e.startDate||"",end_date:e.endDate||""},"To-do added successfully","Failed to add to-do")})}addReminder(){return B(this,null,function*(){let e=yield this.popup.open("add-reminder");if(e===null)return;let n=String(e.reminder||"").trim();if(!n){this.toast.error("Reminder is required.");return}let t="",s="";if(e.datetime){let _=new Date(e.datetime);Number.isNaN(_.getTime())||(t=_.toISOString().split("T")[0],s=_.toTimeString().split(" ")[0])}this.saveActivity("REMINDER_ADDED",{remainder:n,reminder_date:t,reminder_time:s},"Reminder added successfully","Failed to add reminder")})}saveActivity(e,n,t,s){if(this.customerId==null){this.toast.info("No account to update.");return}this.api.addCustomerActivity({customer:this.customerId,activityType:e,activityJson:n}).subscribe({next:_=>{_?.responseCode===200?(this.toast.success(_?.response?.message||t),this.loadActivities()):this.toast.error(_?.response?.message||s)},error:()=>this.toast.error(s)})}openDeal(e){this.router.navigate(["opportunities",e.id],{relativeTo:this.route.parent})}deleteAccount(){return B(this,null,function*(){if(yield this.modal.confirm({title:"Delete account?",body:"This will remove the account and all linked records.",confirmTone:"danger",confirmLabel:"Delete"}
2)){if(this.customerId==null){this.router.navigate(["accounts"],{relativeTo:this.route.parent});return}this.api.deleteCustomer({id:this.customerId}).subscribe({next:n=>{n?.responseCode===200?(this.toast.success(n?.response?.message||"Account deleted."),this.router.navigate(["accounts"],{relativeTo:this.route.parent})):this.toast.error(n?.response?.message||"Failed to delete account.")},error:()=>this.toast.error("Failed to delete account.")})}})}attachmentsFrom(e){let n=[e?.activityJson,e?.activity_json,e?.meta,e?.payload,e].map(t=>this.attachmentPayload(t)).filter(Boolean);for(let t of n){let s=t.attachments??t.files??t.attachment??this.attachmentPayload(t.meta)?.attachments,_=this.attachmentRows(s);if(_.length)return _}return[]}attachmentRows(e){let n=[];if(Array.isArray(e))n=e;else if(typeof e=="string"&&e.trim().startsWith("["))try{let t=JSON.parse(e);n=Array.isArray(t)?t:[]}catch{n=[]}return n.map(t=>{let s=t&&typeof t=="object"?t:{name:String(t??""),url:String(t??"")};return{name:this.displayFileName(s),size:Number(s?.size||0),type:String(s?.type||""),url:this.attachmentUrl(s),path:String(s?.filepath||s?.filePath||s?.file_path||s?.name||"")}})}attachmentPayload(e){if(e&&typeof e=="object"&&!Array.isArray(e))return e;if(typeof e=="string"&&e.trim().startsWith("{"))try{return JSON.parse(e)}catch{return null}return null}attachmentUrl(e){let n=String(e?.url||e?.fileViewPath||e?.file_view_path||e?.pathViewPath||e?.path_view_path||e?.viewUrl||"").trim();return n?/^(https?:)?\/\//i.test(n)||n.startsWith("data:")||n.startsWith("blob:")?n:n.startsWith("/")?Oe.apiUrl.replace(/\/+$/,"")+n:"":""}resolveAttachmentLinks(e){for(let n of(e||[]).filter(t=>t&&!t.url&&t.name&&!t.looked))n.looked=!0,this.api.searchDriveFiles({query:n.name,pageLength:50}).subscribe({next:t=>{let s=Array.isArray(t?.response?.data)?t.response.data:[],_=this.pickDriveUrl(s,n);_&&(n.url=_)},error:()=>{}})}pickDriveUrl(e,n){let t=k=>String(k?.pathViewPath||k?.viewUrl||k?.fileViewPath||"").trim(),s=k=>String(k||"").trim().toLowerCase().split("/").pop()||"",_=s(n.path),S=this.bareName(n.name),T=_&&e.find(k=>s(k?.filepath||k?.filePath)===_&&t(k));if(T)return t(T);let M=S&&e.find(k=>this.bareName(String(k?.fileName||k?.file_name||k?.name||k?.fileGenName||""))===S&&t(k));if(M)return t(M);let I=S&&e.find(k=>s(k?.filepath||k?.filePath).endsWith("_"+S)&&t(k));return I?t(I):""}bareName(e){return String(e||"").trim().replace(/^[0-9a-f]{16,40}[_-]/i,"").toLowerCase()}displayFileName(e){let n=String(e?.name||e?.file_name||"").trim();return n.replace(/^[0-9a-f]{16,40}[_-]/i,"")||n}isImageAttachment(e){if(!e?.url)return!1;if(String(e.type||"").toLowerCase().startsWith("image/"))return!0;let n=/\.(png|jpe?g|gif|webp|bmp|svg)(\?|#|$)/i;return n.test(e.name||"")||n.test(e.path||"")||n.test(e.url||"")}onAttachmentError(e){!e||e.looked||(e.url="",this.resolveAttachmentLinks([e]))}static{this.\u0275fac=function(n){return new(n||o)(E($),E(Y),E(q),E(ue),E(xe),E(R))}}static{this.\u0275cmp=V({type:o,selectors:[["app-account-detail"]],decls:101,vars:34,consts:[[1,"crm-page-body"],["aria-label","Breadcrumb",1,"d-flex","align-items-center","gap-1","mb-3","crm-text-sm","crm-text-muted"],["appTranslate","",1,"crm-section-action",3,"click"],[1,"mx-1"],[1,"card","mb-3"],[1,"card-body","d-flex","align-items-center","gap-3","flex-wrap"],[1,"crm-avatar","crm-avatar-xl","crm-avatar-green"],[1,"flex-grow-1"],[1,"crm-fw-700","ad-account-name"],["class","crm-text-muted crm-text-sm",4,"ngIf"],[1,"d-flex","gap-2"],[1,"ad-status-wrap","position-relative"],["type","button",1,"btn","btn-light","btn-sm",3,"click"],[1,"crm-badge",3,"ngClass"],["appTranslate","",1,"crm-text-muted","crm-text-xs","ml-1"],["class","ad-status-menu",4,"ngIf"],[1,"d-flex","flex-wrap","gap-2","mb-4"],["type","button",1,"btn","btn-outline-theme","btn-sm",3,"click"],[1,"ri-sticky-note-line"],["appTranslate",""],[1,"ri-checkbox-circle-line"],[1,"ri-alarm-line"],[1,"ri-edit-line"],[1,"crm-grid","crm-grid-2-1"],[1,"crm-tabs-bar"],["appTranslate","",1,"crm-tab-item",3,"click"],["appTranslateText","",1,"crm-tab-item",3,"click"],[1,"crm-tab-count"],[4,"ngIf"],[1,"d-flex","flex-column","gap-3"],[1,"card"],[1,"card-header"],["appTranslate","",1,"card-title"],[1,"card-body"],[1,"crm-fw-600"],[1,"crm-text-muted","crm-text-sm","mt-1"],[1,"crm-text-muted","crm-text-sm"],["type","button","class","btn btn-light btn-sm",3,"click",4,"ngIf"],[1,"crm-meta-list"],["class","mt-2",4,"ngIf"],[1,"ad-status-menu"],["type","button","appTranslate","",1,"ad-status-item",3,"click"],[1,"crm-divider"],["appTranslate","",1,"crm-section-title","mb-2"],[1,"crm-text-sm","crm-text-muted","mb-0"],[1,"d-flex","align-items-center","justify-content-between","mb-3"],["type","button",1,"btn","btn-theme","btn-sm",3,"click"],[1,"ri-add-line"],[1,"card-body","p-0"],[1,"crm-table-wrapper","crm-table-wrapper-flush"],[1,"crm-data-table"],[4,"ngFor","ngForOf","ngForTrackBy"],[1,"crm-cell-primary",3,"click"],["colspan","4","appTranslate","",1,"text-center","crm-text-muted"],[1,"crm-text-sm"],["class","crm-text-muted crm-text-sm","appTranslate","",4,"ngIf"],["class","card mb-3",4,"ngFor","ngForOf","ngForTrackBy"],["appTranslate","",1,"crm-text-muted","crm-text-sm"],[1,"d-flex","align-items-start","justify-content-between","mb-2"],[1,"crm-fw-600","crm-text-sm"],[1,"crm-text-muted","crm-text-xs"],["class","crm-note-attachments mt-2",4,"ngIf"],[1,"crm-note-attachments","mt-2"],[1,"ac-attachments"],["class","ac-attachment","rel","noopener",3,"ac-attachment-image",4,"ngFor","ngForOf","ngForTrackBy"],["rel","noopener",1,"ac-attachment"],["loading","lazy",3,"src","alt","error",4,"ngIf"],["loading","lazy",3,"error","src","alt"],[1,"ri-attachment-2"],["appTranslate","",1,"crm-text-muted","crm-text-xs"],[1,"crm-timeline"],["class","crm-timeline-item crm-timeline-item--card",4,"ngFor","ngForOf","ngForTrackBy"],[1,"crm-timeline-item","crm-timeline-item--card"],[1,"crm-timeline-dot",3,"ngClass"],[1,"crm-timeline-card"],[1,"crm-timeline-card__head"],[1,"crm-timeline-card__title"],[1,"crm-timeline-card__time"],["class","crm-timeline-card__body",4,"ngIf"],[1,"crm-timeline-card__body"],["class","crm-timeline-field",4,"ngFor","ngForOf","ngForTrackBy"],["class","ac-attachments",4,"ngIf"],[1,"crm-timeline-field"],[1,"crm-timeline-field__label"],[1,"crm-timeline-field__value"],[1,"mt-2"],[1,"crm-divider","mb-2"],["placeholder","Street",1,"crm-search-input","w-100","mb-2",3,"ngModelChange","ngModel","ngModelOptions"],[1,"d-flex","gap-2","mb-2"],["placeholder","City",1,"crm-search-input","w-100",3,"ngModelChange","ngModel","ngModelOptions"],["placeholder","Region/State",1,"crm-search-input","w-100",3,"ngModelChange","ngModel","ngModelOptions"],["placeholder","Postcode",1,"crm-search-input","w-100",3,"ngModelChange","ngModel","ngModelOptions"],["placeholder","Phone",1,"crm-search-input","w-100",3,"ngModelChange","ngModel","ngModelOptions"],[1,"crm-filter-select","w-100","mb-2",3,"ngModelChange","ngModel","ngModelOptions"],["value","SHIPPING","appTranslate",""],["value","BILLING","appTranslate",""],["type","button","appTranslate","",1,"btn","btn-theme","btn-sm",3,"click"],["type","button","appTranslate","",1,"btn","btn-light","btn-sm",3,"click"]],template:function(n,t){n&1&&(i(0,"div",0)(1,"nav",1)(2,"a",2),h("click",function(){return t.back()}),a(3,"Accounts"),r(),i(4,"span",3),a(5,"/"),r(),i(6,"span"),a(7),r()(),i(8,"div",4)(9,"div",5)(10,"div",6),a(11),r(),i(12,"div",7)(13,"div",8),a(14),r(),f(15,ud,4,1,"div",9),r(),i(16,"div",10)(17,"div",11)(18,"button",12),h("click",function(){return t.toggleStatusMenu()}),i(19,"span",13),a(20),r(),i(21,"span",14),a(22,"Change \u25BE"),r()(),f(23,gd,9,0,"div",15),r()()()(),i(24,"div",16)(25,"button",17),h("click",function(){return t.addNote()}),b(26,"i",18),i(27,"span",19),a(28,"Add Note"),r()(),i(29,"button",17),h("click",function(){return t.addTodo()}),b(30,"i",20),i(31,"span",19),a(32,"To Do"),r()(),i(33,"button",17),h("click",function(){return t.addReminder()}),b(34,"i",21),i(35,"span",19),a(36,"Add Reminder"),r()(),i(37,"button",17),h("click",function(){return t.edit()}),b(38,"i",22),i(39,"span",19),a(40,"Edit"),r()()(),i(41,"div",23)(42,"div")(43,"div",24)(44,"button",25),h("click",function(){return t.setTab("overview")}),a(45,"Overview"),r(),i(46,"button",26),h("click",function(){return t.setTab("deals")}),a(47,"Opportunities "),i(48,"span",27),a(49),r()(),i(50,"button",26),h("click",function(){return t.setTab("contacts")}
2),a(51,"Stakeholders "),i(52,"span",27),a(53),r()(),i(54,"button",25),h("click",function(){return t.setTab("activities")}),a(55,"Timeline"),r(),i(56,"button",26),h("click",function(){return t.setTab("notes")}),a(57,"Notes "),i(58,"span",27),a(59),r()()(),f(60,_d,28,5,"ng-container",28)(61,xd,25,3,"ng-container",28)(62,Cd,25,3,"ng-container",28)(63,Md,8,3,"ng-container",28)(64,Nd,11,3,"ng-container",28),r(),i(65,"div",29)(66,"div",30)(67,"div",31)(68,"div",32),a(69,"Primary Contact"),r()(),i(70,"div",33)(71,"div",34),a(72),r(),i(73,"div",35),a(74),r(),i(75,"div",36),a(76),r()()(),i(77,"div",30)(78,"div",31)(79,"div",32),a(80,"Organization Details"),r(),f(81,Bd,4,0,"button",37),r(),i(82,"div",33)(83,"dl",38)(84,"dt",19),a(85,"Company"),r(),i(86,"dd"),a(87),r(),i(88,"dt",19),a(89,"GSTIN"),r(),i(90,"dd"),a(91),r(),i(92,"dt",19),a(93,"Address"),r(),i(94,"dd"),a(95),r(),i(96,"dt",19),a(97,"Size"),r(),i(98,"dd"),a(99),r()(),f(100,Wd,21,18,"div",39),r()()()()()),n&2&&(l(7),g(t.accountName),l(4),g(t.accountInitial),l(3),g(t.accountName),l(),c("ngIf",t.createdDisplay),l(4),c("ngClass","crm-badge-"+t.statusTone),l(),g(t.statusLabel),l(3),c("ngIf",t.statusMenuOpen),l(21),D("active",t.activeTab==="overview"),l(2),D("active",t.activeTab==="deals"),l(3),g(t.deals.length),l(),D("active",t.activeTab==="contacts"),l(3),g(t.contacts.length),l(),D("active",t.activeTab==="activities"),l(2),D("active",t.activeTab==="notes"),l(3),g(t.noteCards.length),l(),c("ngIf",t.activeTab==="overview"),l(),c("ngIf",t.activeTab==="deals"),l(),c("ngIf",t.activeTab==="contacts"),l(),c("ngIf",t.activeTab==="notes"),l(),c("ngIf",t.activeTab==="activities"),l(8),g(t.contactName),l(2),g(t.contactEmail),l(2),g(t.contactPhone),l(5),c("ngIf",!t.addressFormOpen),l(6),g(t.accountName),l(4),g(t.gstin),l(4),g(t.addressLine),l(4),g(t.companySize),l(),c("ngIf",t.addressFormOpen))},dependencies:[j,W,N,X,ee,te,Z,U,H,L,Me],styles:["[_nghost-%COMP%]{display:block}.ad-status-wrap[_ngcontent-%COMP%]{position:relative}.ad-status-menu[_ngcontent-%COMP%]{position:absolute;right:0;top:calc(100% + 6px);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);z-index:500;
2min-width:200px;padding:4px}.ad-status-item[_ngcontent-%COMP%]{display:block;width:100%;padding:8px 14px;background:transparent;border:none;cursor:pointer;font-size:.8125rem;text-align:left;border-radius:var(--radius-sm);color:var(--color-text-secondary)}.ad-status-item[_ngcontent-%COMP%]:hover{background:var(--color-primary-50);color:var(--color-primary)}.ad-score-big[_ngcontent-%COMP%]{font-size:2.5rem;font-weight:800;color:var(--color-success);line-height:1;flex-shrink:0}.ad-score-sub[_ngcontent-%COMP%]{font-size:1rem;font-weight:500;color:var(--color-text-muted)}.ad-account-name[_ngcontent-%COMP%]{font-size:1.125rem}.ad-renewal-date[_ngcontent-%COMP%]{font-size:1.25rem}.ad-warning-icon[_ngcontent-%COMP%]{color:var(--color-warning);font-size:1.25rem;flex-shrink:0;margin-top:2px}.ac-attachments[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px}.ac-attachment[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px;max-width:100%;padding:4px 10px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);color:inherit;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ac-attachment[_ngcontent-%COMP%]:hover{text-decoration:none}.ac-attachment-image[_ngcontent-%COMP%]{padding:0;border-radius:var(--radius-md);overflow:hidden}.ac-attachment-image[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{display:block;width:120px;height:90px;object-fit:cover}"]})}}return o})();var Ni=["Follow-Up","Proposal Sent","Negotiation","Decision Pending","Won","Lost","Disqualified"],Rd="Won",Ct=(()=>{class o{constructor(e){this.api=e,this.QUOTE_STAGES=["Proposal Sent","Negotiation","Decision Pending"]}displayStage(e,n){let t=String(e??"").trim();if(Ni.includes(t))return t;let s=String(n??"").trim();return Ni.includes(s)?s:"Proposal Sent"}isClosedStage(e){return String(e??"").trim()===Rd}context(e){let n={rfqCards:[],prefill:{},contactName:"",wonProducts:[],deal:null};return!Number.isFinite(e)||e<=0?K(n):this.api.getDealView({id:e}).pipe(de(()=>K(null)),lt(t=>{let s=t?.response?.data??t?.response??null;return We({cards:this.rfqCards(s?.rfqId,s),activities:this.api.getDealActivities({dealId:e,activityType:"",page_size:100,page:1}).pipe(we(_=>_?.response?.data?.all_activities||_?.response?.data||[]),de(()=>K([])))}).pipe(we(({cards:_,activities:S})=>({rfqCards:_,prefill:this.prefillFrom(s,Array.isArray(S)?S:[],_),contactName:[s?.contactFirstName,s?.contactLastName].filter(Boolean).join(" ").trim(),wonProducts:this.wonProductsFrom(s,_),deal:s})))}),de(()=>K(n)))}rfqCards(e,n){return e?this.api.getRFQDetails({rfqId:e,userType:"SELLER"}).pipe(we(t=>this.cardsFromRfq(t,n)),de(()=>K(this.cardsFromDeal(n)))):K(this.cardsFromDeal(n))}cardsFromRfq(e,n=null){let t=e?.response?.products||[],s=this.dealProductsByName(n),_=t.map(S=>{let T=this.latestQuote(S),M=s.get(this.productKey(S.name))||{},I=T.quoteId!=null?T:{};return{product:S.name||M.productName||M.name||"",quantity:this.firstText(I.quotedQty,this.positive(S.requestedQty??S.qty),M.qty??M.quantity),specs:"",priceperunit:this.firstText(I.quotedPrice,this.positive(S.requestedPrice),M.requestedPrice??M.price),discount:this.firstText(I.discountPercent,M.discountPercent??M.discount),gst:this.firstText(I.gst,M.gst),additionalcharges:this.firstText(this.positive(I.shippingCharges??I.shipping_charges),M.additionalCharges??M.additional_charges),rfqProductId:S.rfqProductId,rfqId:e?.response?.rfqId,sellerId:S.sellerId,quoteId:T.quoteId}});return _.length?_:this.cardsFromDeal(n)}cardsFromDeal(e){return this.dealProductRows(e).map(n=>({product:n.productName||n.name||"",quantity:this.numberText(n.qty??n.quantity),specs:"",priceperunit:this.numberText(n.requestedPrice??n.price),discount:this.numberText(n.discountPercent??n.discount),gst:this.numberText(n.gst),additionalcharges:this.numberText(n.additionalCharges??n.additional_charges)}))}dealProductsByName(e){let n=new Map;for(let t of this.dealProductRows(e)){let s=this.productKey(t?.productName||t?.name);s&&n.set(s,t)}return n}firstText(...e){for(let n of e){let t=this.numberText(n);if(t!=="")return t}return""}positive(e){return Number(e)>0?e:void 0}latestQuote(e){return(Array.isArray(e?.quoteSellerDetails)?e.quoteSellerDetails:[]).slice().sort((t,s)=>Number(s?.quoteId||0)-Number(t?.quoteId||0))[0]||{}}numberText(e){let n=Number(e);return e==null||e===""||!Number.isFinite(n)?"":String(n)}firstId(...e){for(let n of e){let t=Number(n);if(Number.isFinite(t)&&t>0)return t}return null}wonProductsFrom(e,n=[]){let t=this.quotedByProduct(n);return this.dealProductRows(e).map(s=>{let _=t.get(this.productKey(s.productName||s.name));return{name:s.productName||s.name||"\u2014",sku:s.sku||s.productC
2ode||"",qty:this.quotedNumber(_?.quantity,s.qty??s.quantity),price:this.quotedNumber(_?.priceperunit,s.requestedPrice??s.price),gst:this.quotedNumber(_?.gst,s.gst),discount:this.quotedNumber(_?.discount,s.discountPercent??s.discount),additionalCharges:this.quotedNumber(_?.additionalcharges,s.additionalCharges??s.additional_charges),image:s.image||(Array.isArray(s.images)?s.images[0]?.imageViewPath:"")||"",selected:!0,productId:this.firstId(s.parentId,s.parent_id,s.id,s.productId,s.product_id)}})}dealProductRows(e){return Array.isArray(e?.products)?e.products:Object.values(e?.products||{})}quotedNumber(e,n){let t=Number(e);return e!=null&&String(e).trim()!==""&&Number.isFinite(t)?t:Number(n)||0}productKey(e){return String(e??"").trim().toLowerCase()}quotedByProduct(e){let n=new Map;for(let t of e||[]){let s=this.productKey(t?.product);s&&n.set(s,t)}return n}usesQuote(e){return this.QUOTE_STAGES.includes(String(e??"").trim())}quoteExpiryFrom(e,n){let t=String(e??"").trim()==="Decision Pending"?"expectedDecisionDate":"quoteExpiryDate";return String(n?.[t]??"")}buildQuoteBulkPayload(e,n,t){return{quotes:(n||[]).map(s=>({quote:{rfqId:s.rfqId||0,quoteId:s.quoteId||0,rfqProductId:s.rfqProductId||0,sellerId:s.sellerId||0,expiryDate:t||"",offeredQty:+s.quantity||0,unitPrice:+s.priceperunit||0,discountPercent:+s.discount||0,deliveryDate:t||"",gst:+s.gst||0,shippingCharges:+s.additionalcharges||0,logisticsCharges:0,insuranceCharges:0,remarks:"",comments:"",status:9,documents:[]},dealId:+(e||0)}))}}saveQuote(e,n,t,s){return t?.length?t.some(_=>this.firstId(_?.rfqProductId)!=null)?this.api.quoteBulkCreate(this.buildQuoteBulkPayload(e,t,s)).pipe(lt(_=>_?.responseCode!==200?K({ok:!1,message:_?.response?.message||"Failed to create quote"}):this.mirrorQuoteToDeal(e,n,t).pipe(we(()=>({ok:!0,message:""})))),de(()=>K({ok:!1,message:"Failed to create quote"}))):this.mirrorQuoteToDeal(e,n,t).pipe(we(()=>({ok:!0,message:""}))):K({ok:!0,message:""})}mirrorQuoteToDeal(e,n,t){let s=this.dealProductRows(n);if(!s.length)return K(!1);let _=this.quotedByProduct(t),S=!1,T=s.map(I=>{let k=_.get(this.productKey(I.productName||I.name)),oe=se(z({},I),{id:I.id??I.product_id});return k?(S=!0,se(z({},oe),{qty:this.quotedNumber(k.quantity,I.qty??I.quantity),requestedPrice:this.quotedNumber(k.priceperunit,I.requestedPrice??I.price),gst:this.quotedNumber(k.gst,I.gst),discountPercent:this.quotedNumber(k.discount,I.discountPercent??I.discount),additionalCharges:this.quotedNumber(k.additionalcharges,I.additionalCharges??I.additional_charges)})):oe});if(!S)return K(!1);let M=Math.round(this.payableTotal(T));return this.api.updateDeal({id:e,products:T,dealAmount:M,opportunityValue:M,step:2}).pipe(we(I=>I?.responseCode===200),de(()=>K(!1)))}payableTotal(e){return(e||[]).reduce((n,t)=>{let s=(Number(t.qty)||0)*(Number(t.requestedPrice??t.price)||0),_=s-s*((Number(t.discountPercent??t.discount)||0)/100);return n+_+_*((Number(t.gst)||0)/100)+(Number(t.additionalCharges)||0)},0)}shipToAddressFrom(e){return[e?.addressLineOne,e?.addressLineTwo,e?.city,e?.state,e?.country,e?.pincode].map(n=>String(n??"").trim()).filter(Boolean).join(", ")}prefillFrom(e,n,t){let s=[...n].sort((M,I)=>new Date(I?.created_date||I?.created_at||0).getTime()-new Date(M?.created_date||M?.created_at||0).getTime()),_=(...M)=>{for(let I of s){let k=I?.activityJson||I?.meta||{};for(let oe of M){let _e=k[oe];if(_e!=null&&String(_e).trim()!=="")return String(_e)}}return""},S=M=>M?String(M).slice(0,10):"",T={proposalSentDate:S(_("proposal_sent_date"))||S(e?.proposalSentDate),quoteExpiryDate:S(_("quote_expiry_date"))||S(e?.quoteExpiryDate),expectedDecisionDate:S(_("expected_decision_date"))||S(e?.expectedDecisionDate),quoteId:_("quote_id")||String(t.find(M=>M.quoteId)?.quoteId??""),customerResponse:_("customer_response"),objections:_("objections"),nextFollowupDate:S(_("next_follow_up_date","follow_up_date")),note:_("notes"),shipToName:String(e?.contactCompany||"").trim()||[e?.contactFirstName,e?.contactLastName].filter(Boolean).join(" ").trim(),shipToAddress:this.shipToAddressFrom(e),shipToState:String(e?.state||"").trim()};return Object.keys(T).forEach(M=>{String(T[M]??"").trim()||delete T[M]}),T}buildActivityJson(e,n){switch(e){case"Follow-Up":return{customer_response:n.customerResponse,objections:n.objections||"",follow_up_date:n.nextFollowupDate,
2next_follow_up_date:n.nextFollowupDate};case"Proposal Sent":return{proposal_sent_date:n.proposalSentDate,quote_expiry_date:n.quoteExpiryDate,products:n.products||[],notes:n.note||""};case"Negotiation":return{quote_id:n.quoteId,proposal_sent_date:n.proposalSentDate,quote_expiry_date:n.quoteExpiryDate,products:n.products||[],notes:n.note||""};case"Decision Pending":return{quote_id:n.quoteId||"",expected_decision_date:n.expectedDecisionDate,products:n.products||[],notes:n.note||""};case"Lost":{let t=n.followLater?String(n.followDate||"").trim():"";return{reason:n.reason,follow_up_later:!!n.followLater,follow_up_date:t,next_follow_up_date:t}}case"Disqualified":return{reason:n.reason,notes:n.note||""};default:return{notes:n.note||""}}}static{this.\u0275fac=function(n){return new(n||o)(je(R))}}static{this.\u0275prov=Te({token:o,factory:o.\u0275fac,providedIn:"root"})}}return o})();var Bi=()=>({standalone:!0});function zd(o,m){if(o&1){let e=w();i(0,"label",32)(1,"input",33),v("ngModelChange",function(t){let s=p(e).$implicit;return y(s.visible,t)||(s.visible=t),u(t)}),r(),i(2,"span"),a(3),r()()}if(o&2){let e=m.$implicit;l(),x("ngModel",e.visible),c("ngModelOptions",C(3,Bi)),l(2),g(e.label)}}function jd(o,m){if(o&1&&b(0,"i",36),o&2){let e=d(2);c("ngClass",e.sortDir===1?"ri-arrow-up-line":"ri-arrow-down-line")}}function Ud(o,m){if(o&1){let e=w();i(0,"button",34),h("click",function(){let t=p(e).$implicit,s=d();return u(s.doSort(t.key))}),i(1,"span"),a(2),r(),f(3,jd,1,1,"i",35),r()}if(o&2){let e=m.$implicit,n=d();l(2),g(e.label),l(),c("ngIf",n.sortKey===e.key)}}function Hd(o,m){if(o&1){let e=w();i(0,"th",44),h("click",function(){p(e);let t=d(2);return u(t.doSort("name"))}),a(1," Opportunity Title"),r()}if(o&2){let e=d(2);c("ngClass",e.sortClass("name"))}}function Kd(o,m){if(o&1){let e=w();i(0,"th",44),h("click",function(){p(e);let t=d(2);return u(t.doSort("account"))}),a(1,"Company"),r()}if(o&2){let e=d(2);c("ngClass",e.sortClass("account"))}}function Qd(o,m){if(o&1){let e=w();i(0,"th",44),h("click",function(){p(e);let t=d(2);return u(t.doSort("priority"))}),a(1,"Priority"),r()}if(o&2){let e=d(2);c("ngClass",e.sortClass("priority"))}}function Gd(o,m){if(o&1){let e=w();i(0,"th",44),h("click",function(){p(e);let t=d(2);return u(t.doSort("contact"))}),a(1,"Contact"),r()}if(o&2){let e=d(2);c("ngClass",e.sortClass("contact"))}}function Jd(o,m){if(o&1){let e=w();i(0,"th",44),h("click",function(){p(e);let t=d(2);return u(t.doSort("owner"))}),a(1," Assigned To"),r()}if(o&2){let e=d(2);c("ngClass",e.sortClass("owner"))}}function Yd(o,m){if(o&1){let e=w();i(0,"th",44),h("click",function(){p(e);let t=d(2);return u(t.doSort("stage"))}),a(1,"Stage / Confidence"),r()}if(o&2){let e=d(2);c("ngClass",e.sortClass("stage"))}}function $d(o,m){if(o&1){let e=w();i(0,"td")(1,"a",46),h("click",function(){p(e);let t=d().$implicit,s=d(2);return u(s.openRow(t))}),a(2),r()()}if(o&2){let e=d().$implicit;l(2),g(e.name)}}function Zd(o,m){if(o&1&&(i(0,"td"),a(1),r()),o&2){let e=d().$implicit;l(),g(e.account)}}function Xd(o,m){if(o&1&&(i(0,"td")(1,"span",47),a(2),r()()),o&2){let e=d().$implicit,n=d(2);l(),c("ngClass","crm-badge-"+n.priorityTone(e.priority)),l(),g(e.priority)}}function em(o,m){if(o&1&&(i(0,"td"),a(1),r()),o&2){let e=d().$implicit;l(),g(e.contact)}}function tm(o,m){if(o&1&&(i(0,"td"),a(1),r()),o&2){let e=d().$implicit;l(),g(e.owner)}}function nm(o,m){if(o&1&&(i(0,"td")(1,"span",48),a(2),r()()),o&2){let e=d().$implicit;l(),c("ngClass","crm-badge-"+e.stageTone),l(),g(e.stage)}}function im(o,m){if(o&1&&(i(0,"tr"),f(1,$d,3,1,"td",42)(2,Zd,2,1,"td",42)(3,Xd,3,2,"td",42)(4,em,2,1,"td",42)(5,tm,2,1,"td",42)(6,nm,3,2,"td",42),b(7,"td",45),r()),o&2){let e=d(2);l(),c("ngIf",e.isVisible("name")),l(),c("ngIf",e.isVisible("account")),l(),c("ngIf",e.isVisible("priority")),l(),c("ngIf",e.isVisible("contact")),l(),c("ngIf",e.isVisible("owner")),l(),c("ngIf",e.isVisible("stage"))}}function rm(o,m){if(o&1&&(i(0,"tr")(1,"td",49),a(2,"Loading opportunities\u2026 "),r()()),o&2){let e=d(2);l(),pe("colspan",e.oppColumns.length+1)}}function om(o,m){if(o&1&&(i(0,"tr")(1,"td",50),a(2,"No opportunities."),r()()),o&2){let e=d(2);l(),pe("colspan",e.oppColumns.length+1)}}function am(o,m){if(o&1){let e=w();i(0,"div",37)(1,"div",38)(2,"table",39)(3,"thead")(4,"tr"),f(5,Hd,2,1,"th",40)(6,Kd,2,1,"th",40)(7,Qd,2,1,"th",40)(8,Gd,2,1,"th",40)(9,Jd,2,1,"th",40)(10,Yd,2,1,"th",40),b(11,"th"),r()(),i(12,"tbody"),f(13,im,8,6,"tr",41)(14,rm,3,1,"tr",42)(15,om,3,1,"tr",42),r()()(),i(16,"mat-paginator",43),h("page",function(t){p(e);let s=d();return u(s.onPageChange(t))}),r()()}if(o&2){let e=d();l(5),c("ngIf",e.isVisible("name")),l(),c("ngIf",e.isVisible("account")),l(),c("ngIf",e.isVisible("priority")),l(),c("ngIf",e.isVisible("contact")),l(),c("ngIf",e.isVisible("owner")),l(),c("ngIf",e.isVisible("stage")),l(3),c("ngForOf",e.viewRows)("ngForTrackBy",e.trackByIndex),l(),c("ngIf",e.loading),l(
2),c("ngIf",!e.loading&&!e.viewRows.length),l(),c("length",e.totalCount)("pageSize",e.pageSize)("pageIndex",e.pageIndex)("pageSizeOptions",e.pageSizeOptions)}}function sm(o,m){if(o&1){let e=w();i(0,"div",58),h("cdkDragStarted",function(){p(e);let t=d().$implicit,s=d(2);return u(s.onDragStart(t.stage))})("cdkDragEnded",function(){p(e);let t=d(3);return u(t.onDragEnd())})("click",function(){let t=p(e).$implicit,s=d(3);return u(s.openRow(t))}),i(1,"div",59),a(2),r(),i(3,"div",60)(4,"span"),a(5),r(),i(6,"span"),a(7),r()()()}if(o&2){let e=m.$implicit,n=d().$implicit,t=d(2);c("cdkDragDisabled",t.isStageLocked(n.stage)),pe("title",t.isStageLocked(n.stage)?"Won is a closed stage \u2014 this opportunity can no longer be moved.":null),l(2),g(e.name),l(3),g(e.account),l(2),g(e.amount)}}function lm(o,m){o&1&&(i(0,"div",61),a(1,"No deals"),r())}function cm(o,m){if(o&1){let e=w();i(0,"div",54),h("cdkDropListEntered",function(){let t=p(e).$implicit,s=d(2);return u(s.onListEntered(t.stage))})("cdkDropListExited",function(){p(e);let t=d(2);return u(t.onListExited())})("cdkDropListDropped",function(t){let s=p(e).$implicit,_=d(2);return u(_.onDrop(t,s.stage,s.tone))}),i(1,"div",55)(2,"span"),a(3),r(),i(4,"span",47),a(5),r()(),f(6,sm,8,5,"div",56)(7,lm,2,0,"div",57),r()}if(o&2){let e=m.$implicit,n=m.index,t=d(2);D("is-drag-source",t.draggingFromStage===e.stage)("is-drag-target",t.dragOverStage===e.stage&&t.draggingFromStage!==e.stage),c("id",t.columnIds[n])("cdkDropListData",e.cards)("cdkDropListConnectedTo",t.columnIds),l(3),g(e.stage),l(),c("ngClass","crm-badge-"+e.tone),l(),g(e.cards.length),l(),c("ngForOf",e.cards)("ngForTrackBy",t.trackByCard),l(),c("ngIf",!e.cards.length)}}function dm(o,m){if(o&1&&(i(0,"div",51)(1,"div",52),f(2,cm,8,13,"div",53),r()()),o&2){let e=d();l(2),c("ngForOf",e.columns)("ngForTrackBy",e.trackByIndex)}}var Wi=(()=>{class o{isVisible(e){return this.oppColumns.find(n=>n.key===e)?.visible??!0}doSort(e){this.sortDir=this.sortKey===e&&this.sortDir===1?-1:1,this.sortKey=e;let n=this.sortDir;this.viewRows.sort((t,s)=>String(t[e]).localeCompare(String(s[e]),void 0,{numeric:!0})*n)}sortClass(e){return this.sortKey!==e?"crm-sort":this.sortDir===1?"crm-sort-asc":"crm-sort-desc"}clearSort(){this.sortKey=null,this.viewRows=[...this.rows]}constructor(e,n,t,s,_,S,T){this.router=e,this.route=n,this.toast=t,this.modal=s,this.stageForm=_,this.dealStage=S,this.api=T,this.search="",this.view="table",this.loading=!1,this.totalCount=0,this.pageSize=10,this.pageIndex=0,this.pageSizeOptions=[5,10,25,50],this.KANBAN_PAGE_SIZE=100,this.searchInput$=new Ie,this.destroy$=new Ie,this.viewRows=[],this.sortKey=null,this.sortDir=1,this.oppColumns=[{key:"name",label:"Opportunity Title",visible:!0},{key:"account",label:"Company",visible:!0},{key:"priority",label:"Priority",visible:!0},{key:"contact",label:"Contact",visible:!0},{key:"owner",label:"Assigned",visible:!0},{key:"stage",label:"Stage / Confidence",visible:!0}],this.rows=[],this.kanbanStageList=[{stage:"Follow-Up",tone:"amber"},{stage:"Proposal Sent",tone:"blue"},{stage:"Negotiation",tone:"amber"},{stage:"Decision Pending",tone:"purple"},{stage:"Won",tone:"green"},{stage:"Lost",tone:"red"},{stage:"Disqualified",tone:"gray"}],this.PERSISTABLE_STAGES=["Proposal Sent","Negotiation","Decision Pending","Won"],this.columns=[],this.columnIds=this.kanbanStageList.map((M,I)=>`kanban-col-${I}`),this.draggingFromStage=null,this.dragOverStage=null,this.DRAFT_STAGE="Saved Draft"}ngOnInit(){this.searchInput$.pipe(Re(300),qe(),ze(this.destroy$)).subscribe(()=>this.loadDeals()),this.loadDeals()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}onSearchChange(){this.pageIndex=0,this.searchInput$.next(this.search)}loadDeals(){this.loading=!0;let e=this.view==="kanban",n={search_query:this.search?.trim()||"",page:e?1:this.pageIndex+1,page_size:e?this.KANBAN_PAGE_SIZE:this.pageSize,order_by:"-created_date"};this.api.getDealList(n).subscribe({next:t=>{if(t?.responseCode===200&&t?.response){let s=t.response.data||[];this.rows=s.map(_=>this.mapDeal(_)),this.totalCount=t.response.total_count??this.rows.length,e||(t.response.current_page!=null&&(this.pageIndex=t.response.current_page-1),t.response.page_size!=null&&(this.pageSize=t.response.page_size))}else this.rows=[],this.totalCount=0,this.toast.error(t?.response?.message||"Failed to load opportunities.");this.viewRows=[...this.rows],this.sortKey&&this.doSortReapply(),this.rebuildColumns(),this.loading=!1},error:()=>{this.rows=[],this.viewRows=[],this.totalCount=0,this.rebuildColumns(),this.loading=!1,this.toast.error("Failed to load opportunities.")}})}onPageChange(e){this.pageIndex=e.pageIndex,this.pageSize=e.pageSize,this.loadDeals()}mapDeal(e){let n=e.dealStatus||e.deal_status||e.status,t=this.isDraftStatus(n)?this.DRAFT_STAGE:this.dealStage.displayStage(n,e.dealStage),s=`${e.contactFirstName||""} ${e.contactLastName||""}`.trim();return{id:String(e.id),name:e.dealTitle||"\u2014",account:e.contactCompany||"\u2014",stage:t,stageTone:this.stageTone(t),amount:this.formatAmou
2nt(e.dealAmount),close:e.expectedCloseDate?String(e.expectedCloseDate).slice(0,10):"\u2014",owner:e.assignedToName||e.dealOwner||"\u2014",contact:s||"\u2014",priority:e.dealPriority||"\u2014",status:e.dealStatus||"\u2014",probability:e.probability??0}}priorityTone(e){return{High:"red",Medium:"amber",Low:"gray"}[String(e||"").trim()]??"gray"}stageTone(e){return{"Follow-Up":"amber","Proposal Sent":"blue",Negotiation:"amber","Decision Pending":"purple",Won:"green",Lost:"red",Disqualified:"gray"}[e]??"gray"}formatAmount(e){let n=Number(e)||0;return n>=1e7?"\u20B9"+(n/1e7).toFixed(2).replace(/\.00$/,"")+" Cr":"\u20B9"+Math.round(n/1e5)+" L"}rebuildColumns(){this.columns=this.kanbanStageList.map(({stage:e,tone:n})=>({stage:e,tone:n,cards:this.rows.filter(t=>this.columnForStage(t.stage)===e)}))}columnForStage(e){switch((e||"").trim()){case"Follow-Up":return"Follow-Up";case"Proposal Sent":return"Proposal Sent";case"Negotiation":return"Negotiation";case"Decision Pending":return"Decision Pending";case"Won":return"Won";case"Lost":return"Lost";case"Disqualified":return"Disqualified";default:return"Proposal Sent"}}doSortReapply(){if(!this.sortKey)return;let e=this.sortKey,n=this.sortDir;this.viewRows.sort((t,s)=>String(t[e]).localeCompare(String(s[e]),void 0,{numeric:!0})*n)}setView(e){this.view!==e&&(this.view=e,this.pageIndex=0,this.loadDeals())}trackByIndex(e){return e}trackByCard(e,n){return n.id}isStageLocked(e){return this.dealStage.isClosedStage(e)}onDragStart(e){this.draggingFromStage=e}onDragEnd(){this.draggingFromStage=null,this.dragOverStage=null}onListEntered(e){this.dragOverStage=e}onListExited(){this.dragOverStage=null}onDrop(e,n,t){return B(this,null,function*(){if(this.dragOverStage=null,this.draggingFromStage=null,e.previousContainer===e.container){Ut(e.container.data,e.previousIndex,e.currentIndex);return}let s=e.previousContainer.data[e.previousIndex],_=s.stage;if(this.isStageLocked(_)){this.toast.warning(`"${s.name}" is closed as Won and can no longer be moved to another stage.`),this.loadDeals();return}if(!this.PERSISTABLE_STAGES.includes(n)){this.loadDeals();return}let S=yield nt(this.dealStage.context(Number(s.id))),T=yield this.stageForm.open({stage:n,cardName:s.name,cardAmount:s.amount,cardAccount:s.account,sourceStage:_,data:{rfqCards:S.rfqCards,wonProducts:S.wonProducts,prefill:S.prefill,contactName:S.contactName||s.contact}});if(T!==null){if(this.dealStage.usesQuote(n)){let M=yield nt(this.dealStage.saveQuote(Number(s.id),S.deal,T.products||[],this.dealStage.quoteExpiryFrom(n,T)));if(!M.ok){this.toast.error(M.message||"Failed to create quote."),this.loadDeals();return}}Ht(e.previousContainer.data,e.container.data,e.previousIndex,e.currentIndex),s.stage=n,s.stageTone=t,this.api.updateDealStatus({deal_id:Number(s.id),updated_status:n,activityJson:this.dealStage.buildActivityJson(n,T)}).subscribe({next:M=>{M?.responseCode===200?this.toast.success(`"${s.name}" moved to ${n}.`):(this.toast.error(M?.response?.message||"Failed to update stage."),this.loadDeals())},error:()=>{this.toast.error("Failed to update stage."),this.loadDeals()}})}})}create(){this.router.navigate(["opportunities","new"],{relativeTo:this.route.parent})}isDraft(e){return this.isDraftStatus(e?.status)}isDraftStatus(e){return String(e||"").trim().toLowerCase()==="saved"}openRow(e){if(this.isDraft(e)){this.edit(e);return}this.router.navigate(["opportunities",e.id],{relativeTo:this.route.parent})}edit(e){this.router.navigate(["opportunities",e.id,"edit"],{relativeTo:this.route.parent})}deleteRow(e){return B(this,null,function*(){if(!(yield this.modal.confirm({title:"Delete opportunity?",body:`Remove "${e.name}".`,confirmTone:"danger",confirmLabel:"Delete"})))return;let t=Number(e.id);Number.isNaN(t)||this.api.deleteDeal({id:t}).subscribe({next:s=>{s?.responseCode===200?(this.toast.success(s?.response?.message||"Opportunity deleted."),this.loadDeals()):this.toast.error(s?.response?.message||"Failed to delete opportunity.")},error:()=>this.toast.error("Failed to delete opportunity.")})})}exportRows(){this.api.exportDeals({search_query:this.search?.trim()||"",order_by:"-created_date",max_rows:1e4}).subscribe({next:e=>{this.api.saveBlob(e,"opportunities.csv"),this.toast.success("Opportunities exp
2orted.")},error:()=>this.toast.error("Failed to export opportunities.")})}static{this.\u0275fac=function(n){return new(n||o)(E($),E(Y),E(q),E(ue),E(Ge),E(Ct),E(R))}}static{this.\u0275cmp=V({type:o,selectors:[["app-opportunities"]],decls:50,vars:12,consts:[[1,"crm-page-body"],[1,"crm-page-header"],["appTranslate","",1,"crm-page-title"],["appTranslate","",1,"crm-page-subtitle"],[1,"crm-page-actions"],["type","button",1,"btn","btn-light","btn-sm",3,"click"],[1,"ri-download-line"],["appTranslate",""],["type","button",1,"btn","btn-theme","btn-sm",3,"click"],[1,"ri-add-line"],[1,"card"],[1,"card-header","opp-card-header"],[1,"d-flex","align-items-center","gap-2","w-100","opp-toolbar"],["ngbDropdown","","container","body","placement","bottom-start",1,"d-inline-block",3,"autoClose"],["type","button","ngbDropdownToggle","",1,"btn","btn-light","btn-sm"],[1,"ri-layout-column-line"],["ngbDropdownMenu","",1,"opp-cols-menu"],["appTranslate","",1,"dropdown-header"],["class","opp-col-item",4,"ngFor","ngForOf","ngForTrackBy"],[1,"crm-search-wrap","flex-grow-1"],[1,"ri-search-line"],["type","search","placeholder","Search opportunities\u2026",1,"crm-search-input",3,"ngModelChange","ngModel","ngModelOptions"],["ngbDropdown","","container","body","placement","bottom-end",1,"d-inline-block"],[1,"ri-filter-3-line"],["ngbDropdownMenu","",1,"opp-sort-menu"],["type","button","ngbDropdownItem","","class","d-flex align-items-center justify-content-between",3,"click",4,"ngFor","ngForOf","ngForTrackBy"],[1,"dropdown-divider"],["type","button","ngbDropdownItem","","appTranslate","",3,"click"],[1,"crm-view-toggle","d-flex","gap-1"],["type","button","appTranslate","",1,"btn","btn-sm",3,"click","ngClass"],["class","card-body p-0",4,"ngIf"],["class","card-body",4,"ngIf"],[1,"opp-col-item"],["type","checkbox",3,"ngModelChange","ngModel","ngModelOptions"],["type","button","ngbDropdownItem","",1,"d-flex","align-items-center","justify-content-between",3,"click"],[3,"ngClass",4,"ngIf"],[3,"ngClass"],[1,"card-body","p-0"],[1,"crm-table-wrapper","crm-table-wrapper-flush"],[1,"crm-data-table"],["appTranslate","",3,"ngClass","click",4,"ngIf"],[4,"ngFor","ngForOf","ngForTrackBy"],[4,"ngIf"],["showFirstLastButtons","",3,"page","length","pageSize","pageIndex","pageSizeOptions"],["appTranslate","",3,"click","ngClass"],[1,"text-right"],[1,"crm-cell-primary",3,"click"],[1,"crm-badge",3,"ngClass"],[1,"crm-badge","mb-1",3,"ngClass"],["appTranslate","",1,"text-center","py-4"],["appTranslate","",1,"text-center"],[1,"card-body"],[1,"crm-pipeline-grid"],["class","crm-pipeline-col","cdkDropList","",3,"is-drag-source","is-drag-target","id","cdkDropListData","cdkDropListConnectedTo","cdkDropListEntered","cdkDropListExited","cdkDropListDropped",4,"ngFor","ngForOf","ngForTrackBy"],["cdkDropList","",1,"crm-pipeline-col",3,"cdkDropListEntered","cdkDropListExited","cdkDropListDropped","id","cdkDropListData","cdkDropListConnectedTo"],[1,"crm-pipeline-col-header"],["class","crm-pipeline-card","cdkDrag","",3,"cdkDragDisabled","cdkDragStarted","cdkDragEnded","click",4,"ngFor","ngForOf","ngForTrackBy"],["class","crm-pipeline-card-meta text-center py-2","appTranslate","",4,"ngIf"],["cdkDrag","",1,"crm-pipeline-card",3,"cdkDragStarted","cdkDragEnded","click","cdkDragDisabled"],[1,"crm-pipeline-card-title"],[1,"crm-pipeline-card-meta"],["appTranslate","",1,"crm-pipeline-card-meta","text-center","py-2"]],template:function(n,t){n&1&&(i(0,"div",0)(1,"div",1)(2,"div")(3,"h1",2),a(4,"Opportunities"),r(),i(5,"p",3),a(6,"All active deals across stages"),r()(),i(7,"div",4)(8,"button",5),h("click",function(){return t.exportRows()}),b(9,"i",6),i(10,"span",7),a(11,"Export"),r()(),i(12,"button",8),h("click",function(){return t.create()}),b(13,"i",9),i(14,"span",7),a(15," Add Opportunity"),r()()()(),i(16,"div",10)(17,"div",11)(18,"div",12)(19,"div",13)(20,"button",14),b(21,"i",15),i(22,"span",7),a(23,"Columns"),r()(),i(24,"div",16)(25,"h6",17),a(26,"Show columns"),r(),f(27,zd,4,4,"label",18),r()(),i(28,"div",19),b(29,"i",20),i(30,"input",21),v("ngModelChange",function(_){return y(t.search,_)||(t.search=_),_}),h("ngModelChange",function(){return t.onSearchChange()}),r()(),i(31,"div",22)(32,"button",14),b(33,"i",23),i(34,"span",7),a(35,"Filter"),r()(),i(36,"div",24)(37,"h6",17),a(38,"Sort table by"),r(),f(39,Ud,4,2,"button",25),b(40,"div",26),i(41,"button",27),h("click",function(){return t.clearSort()}),a(42,"Clear sort"),r()()(),i(43,"div",28)(44,"button",29),h("click",function(){return t.setView("table")}),a(45,"Table"),r(),i(46,"button",29),h("click",function(){return t.setView("kanban")}),a(47,"Kanban"),r()()()(),f(48,am,17,14,"div",30)(49,dm,3,2,"div",31),r()()),n&2&&(l(19),c("autoClose","outside"),l(8),c("ngForOf",t.oppColumns)("ngForTrackBy",t.trackByIndex),l(3),x("ngModel",t.search),c("ngModelOptions",C(11,Bi)),l(9),c("ngForOf",t.oppColumns)("ngForTrackBy",t.trackByIndex),l(5),c("ngClass",t.view==="table"?"btn-theme":"btn-light"),l(2),c("ngClass",t.view==="kanban"?"btn-theme":"btn-light"),l(2),c("ngIf",t.view==="table"),l(),c("ngIf",t.view==="kanban"))},dependencies:[j,W,N,te,Qe,U,H,at,Ve,De,Ae,Pe,Fe,Qt,Kt,L],styles:["[_nghost-%COMP%]{display:block}.opp-card-header[_ngcontent-%COMP%]{display:flex;align-items:center}.opp-toolbar[_ngcontent-%COMP%] .crm-search-wrap[_ngcontent-%COMP%]{max-width:none}.opp-cols-menu[_ngcontent-%COMP%]{min-width:210px;padding:6px}.opp-col-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;margin:0;padding:6px 10px;border-radius:var(--radius-md);font-size:.8125rem;color:var(--color-text-secondary);cursor:pointer}.opp-col-item[_ngcontent-%COMP%]:hover{background:var(--color-primary-50)}.opp-col-item[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{cursor:pointer}.opp-sort-menu[_ngcontent-%COMP%]{min-width:210px}.crm-view-toggle[_ngcontent-%COMP%]{display:inline-flex;border:1px solid var(--color-border);border-radius:var(--radius-md);overflow:hidden}.crm-view-toggle[_ngcontent-%COMP%] > .btn[_ngcontent-%COMP%]{border:0;border-radius:0;padding:4px 14px;font-size:.8125rem}.crm-view-toggle[_ngcontent-%COMP%] > .btn[_ngcontent-%COMP%]:not(:first-child){border-left:1px solid var(--color-border)}.opp-actions-toggle.dropdown-toggle[_ngcontent-%COMP%]:after{display:none}.crm-pipeline-card.cdk-drag-disabled[_ngcontent-%COMP%]{cursor:pointer}.crm-pipeline-col.cdk-drop-list-dragging[_ngcontent-%COMP%] .crm-pipeline-card[_ngcontent-%COMP%]:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}"]})}}return o}
2)();var ie=()=>({standalone:!0});function mm(o,m){if(o&1&&b(0,"div",27),o&2){let e=d().index,n=d();D("crm-step-connector-done",e<n.step)}}function pm(o,m){o&1&&b(0,"i",28)}function um(o,m){if(o&1&&(i(0,"span"),a(1),r()),o&2){let e=d().index;l(),g(e+1)}}function gm(o,m){if(o&1&&(P(0),f(1,mm,1,2,"div",21),i(2,"div",22)(3,"div",23)(4,"div",24),f(5,pm,1,0,"i",25)(6,um,2,1,"span",10),r(),i(7,"div",26),a(8),r()()(),F()),o&2){let e=m.$implicit,n=m.index,t=d();l(),c("ngIf",n>0),l(3),D("crm-step-circle-active",t.step===n+1)("crm-step-circle-done",n+1<t.step),l(),c("ngIf",n+1<t.step),l(),c("ngIf",n+1>=t.step),l(),D("crm-step-label-active",t.step===n+1)("crm-step-label-done",n+1<t.step),l(),g(e)}}function _m(o,m){if(o&1&&(i(0,"option"),a(1),r()),o&2){let e=m.$implicit;l(),g(e)}}function hm(o,m){if(o&1&&(i(0,"option"),a(1),r()),o&2){let e=m.$implicit;l(),g(e)}}function fm(o,m){if(o&1&&(i(0,"option"),a(1),r()),o&2){let e=m.$implicit;l(),g(e)}}function xm(o,m){if(o&1&&(i(0,"option"),a(1),r()),o&2){let e=m.$implicit;l(),g(e)}}function ym(o,m){if(o&1&&(i(0,"option",46),a(1),r()),o&2){let e=m.$implicit;c("ngValue",e.id),l(),Ye(" ",e.name,"",e.company?" ("+e.company+")":""," ")}}function vm(o,m){o&1&&(i(0,"p",47),a(1," Who sent this to us. Used to credit the referral in Advocacy. "),r())}function Cm(o,m){o&1&&(i(0,"p",47),a(1," No promoters found in Advocacy yet \u2014 add one under Customer Advocacy first. "),r())}function bm(o,m){if(o&1){let e=w();i(0,"div",29)(1,"div",30)(2,"label",31),a(3,"Referred By"),r(),i(4,"select",35),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.model.referredBy,t)||(s.model.referredBy=t),u(t)}),h("ngModelChange",function(t){p(e);let s=d(2);return u(s.onReferredByChange(t))}),i(5,"option",39),a(6,"Select\u2026"),r(),f(7,ym,2,3,"option",40),r(),f(8,vm,2,0,"p",44)(9,Cm,2,0,"p",44),r(),i(10,"div",30)(11,"label",33),a(12,"Referrer Company"),r(),i(13,"input",45),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.model.referrerCompany,t)||(s.model.referrerCompany=t),u(t)}),r()()()}if(o&2){let e=d(2);l(4),x("ngModel",e.model.referredBy),c("ngModelOptions",C(9,ie)),l(),c("ngValue",null),l(2),c("ngForOf",e.referralPromoters)("ngForTrackBy",e.trackByIndex),l(),c("ngIf",e.referralPromoters.length),l(),c("ngIf",!e.referralPromoters.length),l(4),x("ngModel",e.model.referrerCompany),c("ngModelOptions",C(10,ie))}}function Sm(o,m){if(o&1&&(i(0,"option",46),a(1),r()),o&2){let e=m.$implicit;c("ngValue",e.id),l(),g(e.name)}}function wm(o,m){if(o&1){let e=w();i(0,"span",48)(1,"span"),a(2),r(),i(3,"button",49),h("click",function(t){let s=p(e).index;return d(2).removeTag(s),u(t.stopPropagation())}),a(4,"\xD7"),r()()}if(o&2){let e=m.$implicit;l(2),g(e),l(),pe("aria-label","Remove "+e)}}function Tm(o,m){if(o&1){let e=w();P(0),i(1,"div",29)(2,"div",30)(3,"label",31),a(4,"Opportunity Title"),r(),i(5,"input",32),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.title,t)||(s.model.title=t),u(t)}),r()(),i(6,"div",30)(7,"label",33),a(8,"Opportunity Amount"),r(),i(9,"input",34),h("input",function(t){p(e);let s=d();return u(s.onAmountInput(t))}),r()()(),i(10,"div",29)(11,"div",30)(12,"label",31),a(13,"Opportunity Stage"),r(),i(14,"select",35),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.stage,t)||(s.model.stage=t),u(t)}),f(15,_m,2,1,"option",8),r()(),i(16,"div",30)(17,"label",33),a(18,"Pipeline Name"),r(),i(19,"select",35),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.pipeline,t)||(s.model.pipeline=t),u(t)}),f(20,hm,2,1,"option",8),r()()(),i(21,"div",29)(22,"div",30)(23,"label",31),a(24,"Opportunity Priority"),r(),i(25,"select",35),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.priority,t)||(s.model.priority=t),u(t)}),f(26,fm,2,1,"option",8),r()(),i(27,"div",30)(28,"label",31),a(29,"Expected Close Date"),r(),i(30,"input",36),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.closeDate,t)||(s.model.closeDate=t),u(t)}),r()()(),i(31,"div",29)(32,"div",30)(33,"label",31),a(34,"Lead Source"),r(),i(35,"select",35),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.source,t)||(s.model.source=t),u(t)}),f(36,xm,2,1,"option",8),r()()(),f(37,bm,14,11,"div",37),i(38,"div",29)(39,"div",30)(40,"label",33),a(41,"Probability %"),r(),i(42,"input",38),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.probability,t)||(s.model.probability=t),u(t)}),r()(),i(43,"div",30)(44,"label",31),a(45,"Assign to"),r(),i(46,"select",35),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.assignTo,t)||(s.model.assignTo=t),u(t)}),i(47,"option",39),a(48,"Select\u2026"),r(),f(49,Sm,2,2,"option",40),r()()(),i(50,"div",30)(51,"label",33),a(52,"Tags"),r(),i(53,"div",41),h("click",function(){p(e);let t=le(56);return u(t.focus())}),f(54,wm,5,2,"span",42),i(55,"input",43,0),v("ngModelChange",function(t){p(e);let s=d();return y(s.tagInput,t)||(s.tagInput=t),u(t)}
2),h("keydown",function(t){p(e);let s=d();return u(s.onTagKeydown(t))})("focus",function(){p(e);let t=d();return u(t.tagFocused=!0)})("blur",function(){p(e);let t=d();return t.tagFocused=!1,u(t.commitTag())}),r()()(),F()}if(o&2){let e=d();l(5),x("ngModel",e.model.title),c("ngModelOptions",C(37,ie)),l(4),c("ngModel",e.model.amount)("ngModelOptions",C(38,ie)),l(5),x("ngModel",e.model.stage),c("ngModelOptions",C(39,ie)),l(),c("ngForOf",e.stageOpts)("ngForTrackBy",e.trackByIndex),l(4),x("ngModel",e.model.pipeline),c("ngModelOptions",C(40,ie)),l(),c("ngForOf",e.pipelineOpts)("ngForTrackBy",e.trackByIndex),l(5),x("ngModel",e.model.priority),c("ngModelOptions",C(41,ie)),l(),c("ngForOf",e.priorityOpts)("ngForTrackBy",e.trackByIndex),l(4),x("ngModel",e.model.closeDate),c("ngModelOptions",C(42,ie)),l(5),x("ngModel",e.model.source),c("ngModelOptions",C(43,ie)),l(),c("ngForOf",e.sourceOpts)("ngForTrackBy",e.trackByIndex),l(),c("ngIf",e.showReferralFields),l(5),x("ngModel",e.model.probability),c("ngModelOptions",C(44,ie)),l(4),x("ngModel",e.model.assignTo),c("ngModelOptions",C(45,ie)),l(),c("ngValue",null),l(2),c("ngForOf",e.assignUsers)("ngForTrackBy",e.trackByIndex),l(4),D("is-focused",e.tagFocused),l(),c("ngForOf",e.tagList)("ngForTrackBy",e.trackByIndex),l(),c("placeholder",e.tagList.length?"":"enterprise, high-value"),x("ngModel",e.tagInput),c("ngModelOptions",C(46,ie))}}function km(o,m){if(o&1){let e=w();i(0,"div",62)(1,"span",63),a(2),r(),i(3,"button",64),h("click",function(){p(e);let t=d(2);return u(t.openSelectedProducts())}),a(4,"Selected Products"),r()()}if(o&2){let e=d(2);l(2),A("Added ",e.selectedCount," product(s)")}}function Em(o,m){o&1&&(i(0,"div",65)(1,"div",66)(2,"span",67),a(3,"Loading..."),r()()())}function Mm(o,m){o&1&&b(0,"app-crm-empty-state",68)}function Im(o,m){if(o&1&&(i(0,"span",77),a(1),r()),o&2){let e=d().$implicit;l(),g(e.status||"Inactive")}}function Om(o,m){if(o&1){let e=w();i(0,"button",78),h("click",function(){p(e);let t=d().$implicit,s=d(3);return u(s.openProductDetail(t))}),a(1,"Select"),r()}if(o&2){let e=d().$implicit,n=d(3);c("disabled",!n.isActiveProduct(e))("title",n.isActiveProduct(e)?"":"Only Active products can be added to an opportunity.")}}function Pm(o,m){if(o&1){let e=w();i(0,"div",79)(1,"button",80),h("click",function(){p(e);let t=d().$implicit,s=d(3);return u(s.openProductDetail(t))}),b(2,"i",81),r(),i(3,"button",82),h("click",function(){p(e);let t=d().$implicit,s=d(3);return u(s.deselectProduct(t))}),a(4,"Deselect"),r()()}}function Fm(o,m){if(o&1&&(i(0,"div",71),b(1,"img",72),i(2,"div",73),a(3),r(),f(4,Im,2,1,"span",74)(5,Om,2,2,"button",75)(6,Pm,5,0,"div",76),r()),o&2){let e=m.$implicit,n=d(3);D("is-selected",e.isSelected)("is-not-active",!n.isActiveProduct(e)),l(),c("src",n.getProductImage(e),me),l(),c("title",e.name),l(),g(e.name),l(),c("ngIf",!n.isActiveProduct(e)),l(),c("ngIf",!e.isSelected),l(),c("ngIf",e.isSelected)}}function Am(o,m){if(o&1&&(i(0,"div",69),f(1,Fm,7,10,"div",70),r()),o&2){let e=d(2);l(),c("ngForOf",e.productsList)("ngForTrackBy",e.trackByIndex)}}function Dm(o,m){if(o&1){let e=w();i(0,"div",83)(1,"button",84),h("click",function(){p(e);let t=d(2);return u(t.prevPage())}),a(2,"Prev"),r(),i(3,"span",85),a(4),r(),i(5,"button",84),h("click",function(){p(e);let t=d(2);return u(t.nextPage())}),a(6,"Next"),r()()}if(o&2){let e=d(2);l(),c("disabled",e.pageIndex===0),l(3),Ye("Page ",e.pageIndex+1," of ",e.totalPages,""),l(),c("disabled",e.pageIndex+1>=e.totalPages)}}function Vm(o,m){if(o&1){let e=w();P(0),f(1,km,5,1,"div",50),i(2,"div",51)(3,"div",52),b(4,"i",53),i(5,"input",54),v("ngModelChange",function(t){p(e);let s=d();return y(s.searchProductByName,t)||(s.searchProductByName=t),u(t)}),h("keyup.enter",function(){p(e);let t=d();return u(t.onProductSearch())}),r()(),i(6,"button",55),h("click",function(){p(e);let t=d();return u(t.onProductSearch())}),a(7,"Search"),r()(),i(8,"h6",56),a(9,"Product List "),i(10,"span",57),a(11),r()(),f(12,Em,4,0,"div",58)(13,Mm,1,0,"app-crm-empty-state",59)(14,Am,2,2,"div",60)(15,Dm,7,4,"div",61),F()}if(o&2){let e=d();l(),c("ngIf",e.selectedProducts.length),l(4),x("ngModel",e.searchProductByName),c("ngModelOptions",C(8,ie)),l(6),A("(",e.pageLength," products)"),l(),c("ngIf",e.productLoading),l(
2),c("ngIf",!e.productLoading&&!e.productsList.length),l(),c("ngIf",!e.productLoading&&e.productsList.length),l(),c("ngIf",!e.productLoading&&e.totalPages>1)}}function Lm(o,m){if(o&1){let e=w();P(0),i(1,"div",29)(2,"div",30)(3,"label",31),a(4,"First Name"),r(),i(5,"input",86),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.firstName,t)||(s.model.firstName=t),u(t)}),r()(),i(6,"div",30)(7,"label",33),a(8,"Last Name"),r(),i(9,"input",87),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.lastName,t)||(s.model.lastName=t),u(t)}),r()()(),i(10,"div",29)(11,"div",30)(12,"label",31),a(13,"Email"),r(),i(14,"input",88),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.email,t)||(s.model.email=t),u(t)}),r()(),i(15,"div",30)(16,"label",31),a(17,"Phone Number"),r(),i(18,"input",89),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.phone,t)||(s.model.phone=t),u(t)}),r()()(),i(19,"div",29)(20,"div",30)(21,"label",33),a(22,"Company"),r(),i(23,"input",90),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.company,t)||(s.model.company=t),u(t)}),r()(),i(24,"div",30)(25,"label",33),a(26,"Job Title"),r(),i(27,"input",91),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.jobTitle,t)||(s.model.jobTitle=t),u(t)}),r()()(),i(28,"div",30)(29,"label",33),a(30,"Company Website"),r(),i(31,"input",92),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.website,t)||(s.model.website=t),u(t)}),r()(),F()}if(o&2){let e=d();l(5),x("ngModel",e.model.firstName),c("ngModelOptions",C(14,ie)),l(4),x("ngModel",e.model.lastName),c("ngModelOptions",C(15,ie)),l(5),x("ngModel",e.model.email),c("ngModelOptions",C(16,ie)),l(4),x("ngModel",e.model.phone),c("ngModelOptions",C(17,ie)),l(5),x("ngModel",e.model.company),c("ngModelOptions",C(18,ie)),l(4),x("ngModel",e.model.jobTitle),c("ngModelOptions",C(19,ie)),l(4),x("ngModel",e.model.website),c("ngModelOptions",C(20,ie))}}function Nm(o,m){if(o&1&&(i(0,"option"),a(1),r()),o&2){let e=m.$implicit;l(),g(e)}}function Bm(o,m){if(o&1&&(i(0,"option"),a(1),r()),o&2){let e=m.$implicit;l(),g(e)}}function Wm(o,m){if(o&1&&(i(0,"option"),a(1),r()),o&2){let e=m.$implicit;l(),g(e)}}function Rm(o,m){if(o&1){let e=w();P(0),i(1,"div",29)(2,"div",30)(3,"label",31),a(4,"Address Line 1"),r(),i(5,"input",93),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.address1,t)||(s.model.address1=t),u(t)}),r()(),i(6,"div",30)(7,"label",33),a(8,"Address Line 2"),r(),i(9,"input",94),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.address2,t)||(s.model.address2=t),u(t)}),r()()(),i(10,"div",95)(11,"div",30)(12,"label",31),a(13,"City"),r(),i(14,"input",96),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.city,t)||(s.model.city=t),u(t)}),r()(),i(15,"div",30)(16,"label",31),a(17,"State"),r(),i(18,"select",35),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.state,t)||(s.model.state=t),u(t)}),f(19,Nm,2,1,"option",8),r()(),i(20,"div",30)(21,"label",31),a(22,"Country"),r(),i(23,"input",97),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.country,t)||(s.model.country=t),u(t)}),r()()(),i(24,"div",95)(25,"div",30)(26,"label",31),a(27,"Pincode"),r(),i(28,"input",98),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.pincode,t)||(s.model.pincode=t),u(t)}),r()(),i(29,"div",30)(30,"label",33),a(31,"Company Size"),r(),i(32,"select",35),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.companySize,t)||(s.model.companySize=t),u(t)}),f(33,Bm,2,1,"option",8),r()(),i(34,"div",30)(35,"label",33),a(36,"Annual Revenue"),r(),i(37,"select",35),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.annualRevenue,t)||(s.model.annualRevenue=t),u(t)}),f(38,Wm,2,1,"option",8),r()()(),i(39,"div",30)(40,"label",33),a(41,"Notes"),r(),i(42,"textarea",99),v("ngModelChange",function(t){p(e);let s=d();return y(s.model.note,t)||(s.model.note=t),u(t)}),r()(),F()}if(o&2){let e=d();l(5),x("ngModel",e.model.address1),c("ngModelOptions",C(24,ie)),l(4),x("ngModel",e.model.address2),c("ngModelOptions",C(25,ie)),l(5),x("ngModel",e.model.city),c("ngModelOptions",C(26,ie)),l(4),x("ngModel",e.model.state),c("ngModelOptions",C(27,ie)),l(),c("ngForOf",e.stateOpts)("ngForTrackBy",e.trackByIndex),l(4),x("ngModel",e.model.country),c("ngModelOptions",C(28,ie)),l(5),x("ngModel",e.model.pincode),c("ngModelOptions",C(29,ie)),l(4),x("ngModel",e.model.companySize),c("ngModelOptions",C(30,ie)),l(),c("ngForOf",e.sizeOpts)("ngForTrackBy",e.trackByIndex),l(4),x("ngModel",e.model.annualRevenue),c("ngModelOptions",C(31,ie)),l(),c("ngForOf",e.revenueOpts)("ngForTrackBy",e.trackByIndex),l(4),x("ngModel",e.model.note),c("ngModelOptions",C(32,ie))}}function qm(o,m){if(o&1){let e=w();i(0,"button",16),h("click",function(){p(e);let t=d();return u(t.back())}),a(1,"Back"),r()}}function zm(o,m){if(o&1){let e=w();i(0,"div",100),h("click",function(){p(e);let t=d();return u(t.closeProductDetail())}),r()}}function jm(o,m){if(o&1&&(i(0,"div",85),a(1),r()),o&2){let e=d(2);l(),A("Product ID: PRD-",e.selectedProduct==null?null:e.selectedProduct.product_id,"")}}function Um(o,m){o&1&&(i(0,"small",119),a(1,"Quantity is required"),r())}function Hm(o,m){o&1&&(i(0,"small",119),a(1,"Price is required"),r())}function Km(o,m){o&1&&(i(0,"small",119),a(1,"GST is required"),r())}function Qm(o,m){if(o&1&&(i(0,"div",120)(1,"h6",121),a(2,"Description"),r(),i(3,"p",85),a(4),r()()),o&2){let e=d(2);l(4),g(e.selectedProduct==null?null:e.selectedProduct.description)}}function Gm(o,m){if(o&1){let e=w();i(0,"aside",101)(1,"div",102)(2,"h5",103),a(3,"Product Details"),r(),i(4,"button",104),h("click",function(){p(e);let t=d();return u(t.closeProductDetail())}),b(5,"i",105),r()(),i(6,"div",106)(7,"div",107),b(8,"img",108),i(9,"div")(10,"div",109),a(11),r(),f(12,jm,2,1,"div",110),r()(),i(13,"div",30)(14,"label",31),a(15,"Quantity"),r(),i(16,"input",111),v("ngModelChange",function(t){p(e);let s=d();return y(s.detail.qty,t)||(s.detail.qty=t),u(t)}),r(),f(17,Um,2,0,"small",112),r(),i(18,"div",30)(19,"label",31),a(20,"Price per unit"),r(),i(21,"input",113),v("ngModelChange",function(t){p(e);let s=d();return y(s.detail.requestedPrice,t)||(s.detail.requestedPrice=t),u(t)}),r(),f(22,Hm,2,0,"small",112),r(),i(23,"div",30)(24,"label",33),a(25,"Discount %"),r(),i(26,"input",114),v("ngModelChange",function(t){p(e);let s=d();return y(s.detail.discountPercent,t)||(s.detail.discountPercent=t),u(t)}),r()(),i(27,"div",30)(28,"label",31),a(29,"GST"),r(),i(30,"input",115),v("ngModelChange",function(t){p(e);let s=d();return y(s.detail.gst,t)||(s.detail.gst=t),u(t)}),r(),f(31,Km,2,0,"small",112),r(),i(32,"div",30)(33,"label",33),a(34,"Additional Charges"),r(),i(35,"input",116),v("ngModelChange",function(t){p(e);let s=d();return y(s.detail.additionalCharges,t)||(s.detail.additionalCharges=t),u(t)}),r()(),f(36,Qm,5,1,"div",117),r(),i(37,"div",118)(38,"button",16),h("click",function(){p(e);let t=d();return u(t.closeProductDetail())}),a(39,"Cancel"),r(),i(40,"button",18),h("click",function(){p(e);let t=d();return u(t.addProduct())}),a(41),r()()()}if(o&2){let e=d();l(8),c("src",e.getProductImage(e.selectedProduct),me),l(3),g(e.selectedProduct==null?null:e.selectedProduct.name),l(),c("ngIf",e.selectedProduct==null?null:e.selectedProduct.product_id),l(4),x("ngModel",e.detail.qty),c("ngModelOptions",C(18,ie)),l(),c("ngIf",e.detailSubmitted&&!e.detail.qty),l(4),x("ngModel",e.detail.requestedPrice),c("ngModelOptions",C(19,ie)),l(),c("ngIf",e.detailSubmitted&&!e.detail.requestedPrice),l(4),x("ngModel",e.detail.discountPercent),c("ngModelOptions",C(20,ie)),l(4),x("ngModel",e.detail.gst),c("ngModelOptions",C(21,ie)),l(),c("ngIf",e.detailSubmitted&&!e.detail.gst),l(4),x("ngModel",e.detail.additionalCharges),c("ngModelOptions",C(22,ie)),l(),c("ngIf",e.selectedProduct==null?null:e.selectedProduct.description),l(5),A(" ",e.isProductSelected(e.selectedProduct)?"Update Product":"Add Product"," ")}}function Jm(o,m){if(o&1){let e=w();i(0,"div",100),h("click",function(){p(e);let t=d();return u(t.closeSelectedProducts())}),r()}}function Ym(o,m){if(o&1){let e=w();i(0,"div",126),b(1,"img",108),i(2,"div",127)(3,"div",63),a(4),r(),i(5,"div",85),a(6),r()(),i(7,"div",128)(8,"button",8
20),h("click",function(){let t=p(e).$implicit,s=d(2);return u(s.editSelectedProduct(t))}),b(9,"i",81),r(),i(10,"button",82),h("click",function(){let t=p(e).index,s=d(2);return u(s.removeSelectedProduct(t))}),a(11,"Remove"),r()()()}if(o&2){let e=m.$implicit;l(),c("src",e.image||"assets/img/placeholderimage.png",me),l(3),g(e.productName),l(2),Le("Qty: ",e.qty," \xB7 Price: ",e.requestedPrice," \xB7 GST: ",e.gst,"")}}function $m(o,m){o&1&&(i(0,"p",129),a(1,"No products selected yet."),r())}function Zm(o,m){if(o&1){let e=w();i(0,"aside",101)(1,"div",102)(2,"h5",122)(3,"span",123),a(4,"Selected Products"),r(),a(5),r(),i(6,"button",104),h("click",function(){p(e);let t=d();return u(t.closeSelectedProducts())}),b(7,"i",105),r()(),i(8,"div",106),f(9,Ym,12,5,"div",124)(10,$m,2,0,"p",125),r()()}if(o&2){let e=d();l(5),A(" (",e.selectedProducts.length,")"),l(4),c("ngForOf",e.selectedProducts)("ngForTrackBy",e.trackByIndex),l(),c("ngIf",!e.selectedProducts.length)}}var fn=(()=>{class o{get pageTitle(){return this.editMode?"Edit Opportunity":"Add Opportunity"}get showReferralFields(){return this.model.source==="Referral"}constructor(e,n,t,s){this.router=e,this.route=n,this.toast=t,this.api=s,this.steps=["Opportunity Details","Product Selection","Organization Details","Address & Additional Details"],this.stageOpts=["Proposal Sent","Negotiation","Decision Pending"],this.pipelineOpts=["Standard Sales","Enterprise","SMB"],this.priorityOpts=["High","Medium","Low"],this.sourceOpts=["Website","Referral","Cold Outreach","Event"],this.stateOpts=["Telangana","Maharashtra","Karnataka"],this.sizeOpts=["1-10","11-50","51-200","201-1000","1000+"],this.revenueOpts=["< \u20B91 Cr","\u20B91-10 Cr","\u20B910-100 Cr","> \u20B9100 Cr"],this.assignUsers=[],this.referralPromoters=[],this.step=1,this.saving=!1,this.model={title:"",amount:"",stage:"Proposal Sent",pipeline:"Standard Sales",priority:"Medium",closeDate:"",source:"Website",fromLead:"",probability:40,assignTo:null,tags:"",firstName:"",lastName:"",email:"",phone:"",company:"",jobTitle:"",website:"",address1:"",address2:"",city:"",state:"Telangana",country:"India",pincode:"",companySize:"1-10",annualRevenue:"< \u20B91 Cr",opportunityValue:"",note:"",referredBy:null,referrerCompany:""},this.productsList=[],this.searchProductByName="",this.productLoading=!1,this.pageIndex=0,this.pageSize=12,this.pageLength=0,this.pageSizeOptions=[12,24,48],this.selectedProducts=[],this.productDrawerOpen=!1,this.selectedDrawerOpen=!1,this.selectedProduct=null,this.detailSubmitted=!1,this.detail={qty:"",requestedPrice:"",discountPercent:"0",gst:"",additionalCharges:""},this.dealId=null,this.editMode=!1,this.dealData=null,this.rfqId=null,this.tagList=[],this.tagInput="",this.tagFocused=!1}ngOnInit(){this.api.getAssigneeUsers({user_type:"SELLER",search:"",perPage:100,pageNumber:1}).subscribe({next:n=>{this.assignUsers=n?.response?.data?.users??[]},error:()=>{}});let e=this.route.snapshot.paramMap.get("id");e&&(this.editMode=!0,this.dealId=Number(e),this.loadDeal()),this.loadProducts(),this.loadReferralPromoters()}loadDeal(){this.api.getDealView({id:this.dealId}).subscribe({next:e=>{e?.responseCode===200&&e?.response?.data&&(this.dealData=e.response.data,this.prefill(this.dealData))},error:()=>{}})}prefill(e){this.rfqId=e.rfqId??e.rfq_id??null,this.model={title:e.dealTitle||"",amount:e.dealAmount!=null?String(e.dealAmount):e.budget!=null?String(e.budget):e.opportunityValue!=null?String(e.opportunityValue):"",stage:this.stageOpts.includes(e.dealStage)?e.dealStage:"Proposal Sent",pipeline:e.pipelineName||"Standard Sales",priority:e.dealPriority||"Medium",closeDate:e.expectedCloseDate?String(e.expectedCloseDate).slice(0,10):"",source:e.LeadSource||"Website",fromLead:e.createFromLead!=null?String(e.createFromLead):"",probability:e.probability!=null?Number(e.probability):40,assignTo:e.AssignedTo!=null&&e.AssignedTo!==""?Number(e.AssignedTo):null,tags:e.tags||"",firstName:e.contactFirstName||"",lastName:e.contactLastName||"",email:e.contactEmail||"",phone:e.contactPhoneNumber||"",company:e.contactCompany||"",jobTitle:e.contactJobTitle||"",website:e.contactCompanyWebsite||"",address1:e.addressLineOne||"",address2:e.addressLineTwo||"",city:e.city||"",state:e.state||"Telangana",country:e.country||"India",pincode:e.pincode||"",companySize:e.companySize||"1-10",annualRevenue:e.annualRevenue||"< \u20B91 Cr",opportunityValue:e.opportunityValue||"",note:e.note||"",referredBy:e.referredBy||null,referrerCompany:e.referrerCompany||""},this.setTags(e.tags||""),Array.isArray(e.products)&&e.products.length&&(this.selectedProducts=e.products.map(n=>se(z({},n),{id:n.id??n.product_id})),this.syncSelectionFlags())}onTagKeydown(e){e.key==="Enter"||e.key===","?(e.preventDefault(),this.commitTag()):e.key==="Backspace"&&!this.tagInput&&this.tagList.length&&(this.tagList.pop(),this.syncTags())}commitTag(){for(let e of this.tagInput.split(",")){let n=e.trim();n&&!this.tagList.some(t=>t.toLowerCase()===n.toLowerCase())&&this.tagList.push(n)}this.tagInput="",this.syncTags()}removeTag(e){this.tagList.splice(e,1),this.syncTags()}syncTags(){this.model.tags=this.tagList.join(", ")}setTags(e){this.tagList=(e||"").split(",").map(n=>
2n.trim()).filter(Boolean),this.syncTags()}trackByIndex(e){return e}get selectedCount(){return this.selectedProducts.length}loadProducts(){this.productLoading=!0;let e={pageLength:this.pageSize,currentPage:this.pageIndex+1,searchName:this.searchProductByName||"",status:"A"};this.api.getMyProducts(e).subscribe({next:n=>{this.productLoading=!1;let t=n?.response||{},s=Array.isArray(t.products)?t.products:[];this.productsList=s.map(_=>this.mapMyProduct(_)),this.pageLength=Number(t.totalProducts??t.totalCount)||0,this.syncSelectionFlags()},error:()=>{this.productLoading=!1,this.productsList=[],this.pageLength=0}})}mapMyProduct(e){let n=e?.product||{},s=(e?.miscAttr||{}).imageViewPath||"";return{product_id:n.id,parent_id:n.parent_id??n.parentId??n.parentProductId??0,vendor_id:n.vendor_id??n.vendorId??n.sellerId??n.seller_id??0,name:n.name||"",sku:n.sku||"",price:n.price??"",description:n.description||e?.description||"",product_type:n.temp_product?"temp":"catalog",status:String(n.status??""),categoryTree:"",image:s,images:s?[{imageViewPath:s,mediaType:"MainImages"}]:[],keyAttributes:[],filterOptions:[]}}onProductSearch(){this.pageIndex=0,this.loadProducts()}searchByCategory(){this.toast.info("Category browse isn't available yet \u2014 search by product name for now.")}get totalPages(){return this.pageSize?Math.ceil(this.pageLength/this.pageSize):0}prevPage(){this.pageIndex>0&&(this.pageIndex--,this.loadProducts())}nextPage(){this.pageIndex+1<this.totalPages&&(this.pageIndex++,this.loadProducts())}syncSelectionFlags(){this.productsList.forEach(e=>{e.isSelected=this.selectedProducts.some(n=>n.id===e.product_id)})}getProductImage(e){let n=e?.images;return Array.isArray(n)&&n.length?n.find(s=>s.mediaType==="MainImages")?.imageViewPath||n[0]?.imageViewPath||"assets/img/placeholderimage.png":e?.image||"assets/img/placeholderimage.png"}isActiveProduct(e){let n=String(e?.status??"").trim().toLowerCase();return n===""||n==="a"||n==="active"}isProductSelected(e){let n=e?.product_id??e?.id;return this.selectedProducts.some(t=>t.id===n)}openProductDetail(e){this.selectedProduct=e,this.detailSubmitted=!1;let n=this.selectedProducts.find(t=>t.id===e.product_id);n?this.detail={qty:String(n.qty??""),requestedPrice:String(n.requestedPrice??""),discountPercent:String(n.discountPercent??"0"),gst:String(n.gst??""),additionalCharges:String(n.additionalCharges??"")}:this.detail={qty:"",requestedPrice:e.price!=null?String(e.price):"",discountPercent:"0",gst:"",additionalCharges:""},this.productDrawerOpen=!0}closeProductDetail(){this.productDrawerOpen=!1,this.selectedProduct=null}addProduct(){this.detailSubmitted=!0;let e=this.detail;if(!e.qty||!e.requestedPrice||!e.gst){this.toast.warning("Quantity, Price and GST are required.");return}let n=this.selectedProduct,t={id:n.product_id,parentId:n.parent_id??n.parentId??0,sellerId:n.vendor_id??n.sellerId??0,requestedPrice:e.requestedPrice,qty:e.qty,gst:e.gst,discountPercent:e.discountPercent||"0",additionalCharges:e.additionalCharges||"",productName:n.name,productType:"catalog",previousPrice:n.price||"",description:n.description||"",category:n.categoryTree||"",sku:n.sku||"",image:this.getProductImage(n),keyAttributes:n.keyAttributes||[],filterOptions:n.filterOptions||[],status:"1"},s=this.selectedProducts.findIndex(_=>_.id===n.product_id);s>-1?(this.selectedProducts[s]=t,this.toast.success("Product updated.")):(this.selectedProducts.push(t),this.toast.success("Product added.")),this.syncSelectionFlags(),this.closeProductDetail()}deselectProduct(e){let n=e?.product_id??e?.id,t=this.selectedProducts.findIndex(s=>s.id===n);t>-1&&(this.selectedProducts.splice(t,1),this.syncSelectionFlags(),this.toast.info("Product removed."))}openSelectedProducts(){this.selectedDrawerOpen=!0}closeSelectedProducts(){this.selectedDrawerOpen=!1}removeSelectedProduct(e){this.selectedProducts.splice(e,1),this.syncSelectionFlags(),this.toast.info("Product removed.")}editSelectedProduct(e){let n=this.productsList.find(t=>t.product_id===e.id);if(this.closeSelectedProducts(),n){this.openProductDetail(n);return}this.openProductDetail({product_id:e.id,name:e.productName,price:e.previousPrice,description:e.description,sku:e.sku,product_type:e.productType,parent_id:e.parentId??0,vendor_id:e.sellerId??0,images:e.image?[{imageViewPath:e.image}]:[],keyAttributes:e.keyAttributes,filterOptions:e.filterOptions})}next(){if(this.saving)return;if(this.editMode&&!this.dealData){this.toast.info("Loading opportunity\u2026 please wait.");return}if(this.step===2){if(this.dealId==null){this.toast.error("Opportunity not created yet \u2014 complete Step 1 first."),this.step=1;return}if(!this.selectedProducts.length){this.toast.warning("Select at least one product.");return}this.saving=!0,this.saveDeal({id:this.dealId,products:this.selectedProducts,step:2}).subscribe({next:n=>{if(this.saving=!1,n?.responseCode!==200){this.toast.error(n?.response?.message||"Failed to save products.");return}this.syncProductsToRfq(),this.step=3},error:()=>{this.saving=!1,this.toast.error("Failed to save products.")}});return}if(!this.validateStep(this.step))return;if(this.step!==1&&this.dealId==null){this.toast.error("Opportunity not created yet \u2014 complete Step 1 first."),this.step=1;return}let e=this.step===1?this.step1Payload():this.step===3?this.step3Payload(this.dealId):this.step4Payload(this.dealId);this.saving=!0,this.saveDeal(e).subscribe({next:n=>{if(this.saving=!1,n?.responseCode!==200){this.toast.error(this.apiErrorMessage(n)||"Failed to save opportunity.");return}if(this.step===1){let t=this.dealId??this.extractId(n);if(t==null){this.toast.error("Opportunity created but no id was returned.");return}this.dealId=t,this.editMode&&this.api.syncRfqStatus(this.rfqId,this.model.stage).subscribe(s=>{s.failed&&this.toast.warning(s.message)})}this.step<this.steps.length?this.step++:(this.toast.success(n?.response?.message||(this.editMode?"Opp
2ortunity updated.":"Opportunity created.")),this.router.navigate(["opportunities"],{relativeTo:this.route.parent}))},error:n=>{this.saving=!1,this.toast.error(this.apiErrorMessage(n)||"Failed to save opportunity.")}})}back(){this.step>1&&this.step--}validateStep(e){let n=this.model;return e===1?n.title?.trim()?n.amount?.trim()&&!/^\d+$/.test(n.amount.trim())?(this.toast.warning("Opportunity Amount must be a whole number."),!1):n.stage?n.priority?n.closeDate?n.source?n.assignTo==null?(this.toast.warning("Assign to is required."),!1):!0:(this.toast.warning("Lead Source is required."),!1):(this.toast.warning("Expected Close Date is required."),!1):(this.toast.warning("Priority is required."),!1):(this.toast.warning("Stage is required."),!1):(this.toast.warning("Opportunity Title is required."),!1):e===3?n.firstName?.trim()?!n.email?.trim()||!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(n.email)?(this.toast.warning("A valid Email is required."),!1):!n.phone?.trim()||n.phone.replace(/\D/g,"").length<10?(this.toast.warning("A valid Phone Number is required."),!1):!0:(this.toast.warning("Contact Name is required."),!1):n.address1?.trim()?n.city?.trim()?n.state?.trim()?n.country?.trim()?!n.pincode?.trim()||!/^\d{6}$/.test(n.pincode)?(this.toast.warning("A valid 6-digit Pincode is required."),!1):!0:(this.toast.warning("Country is required."),!1):(this.toast.warning("State is required."),!1):(this.toast.warning("City is required."),!1):(this.toast.warning("Address Line 1 is required."),!1)}amountValue(){let e=String(this.model.amount??"").trim();return e?Number(e):null}onAmountInput(e){let n=e.target,t=n.value.replace(/\D/g,"");n.value!==t&&(n.value=t),this.model.amount=t}step1Payload(){this.commitTag();let e={dealTitle:this.model.title?.trim(),dealAmount:this.amountValue(),opportunityValue:this.amountValue(),dealStage:this.model.stage,pipelineName:this.model.pipeline,dealPriority:this.model.priority,expectedCloseDate:this.model.closeDate||"",LeadSource:this.model.source,probability:this.model.probability,AssignedTo:this.model.assignTo,tags:this.model.tags,step:1};return this.dealId!=null&&(e.id=this.dealId),e}step3Payload(e){let n=`${this.model.firstName||""} ${this.model.lastName||""}`.trim();return{id:e,contactFirstName:n,contactEmail:this.model.email?.trim(),contactPhoneNumber:this.model.phone,contactCompany:this.model.company?.trim(),contactJobTitle:this.model.jobTitle,contactCompanyWebsite:this.model.website,step:3}}step4Payload(e){return{id:e,addressLineOne:this.model.address1,addressLineTwo:this.model.address2,city:this.model.city,state:this.model.state,country:this.model.country,pincode:this.model.pincode,companySize:this.model.companySize,annualRevenue:this.model.annualRevenue,note:this.model.note,step:4}}syncProductsToRfq(){!this.editMode||!this.rfqId||this.api.syncRfqProducts(this.rfqId,this.selectedProducts).subscribe(e=>{e.count>0?this.toast.success(e.message):e.failed&&this.toast.error(e.message)})}extractId(e){let n=e?.response,t=n?.deal_id??n?.data?.deal?.id??n?.data?.id??n?.id;return t!=null?Number(t):null}apiErrorMessage(e){if(Number(e?.status)>=500)return"";let n=e?.error??e,t=n?.response,s=typeof t=="string"?t:t?.message||t?.detail||n?.message||n?.detail;return typeof s=="string"?s.trim():""}saveDeal(e){return this.editMode?this.api.updateDeal(e):this.api.createDeal(e)}loadReferralPromoters(){this.api.getPromoterList({search:"",page:1,page_size:100}).subscribe({next:e=>{this.referralPromoters=this.rowsOf(e).map(n=>({id:n.id,name:n.contactName||n.contact_name||"\u2014",company:n.account_name||n.company_name||n.companyName||""}))},error:()=>{this.referralPromoters=[]}})}onReferredByChange(e){let n=this.referralPromoters.find(t=>t.id===e);this.model.referrerCompany=n?.company||""}rowsOf(e){let n=e?.response?.data;return Array.isArray(n)?n:n?.data||n?.results||n?.items||[]}saveDraft(){if(!this.model.title?.trim()){this.toast.warning("Opportunity Title is required to save a draft."),this.step=1;return}this.saving=!0,this.saveDeal(this.step1Payload()).subscribe({next:e=>{this.saving=!1,e?.responseCode===200?this.toast.success("Draft saved."):this.toast.error(e?.response?.message||"Failed to save draft.")},error:()=>{this.saving=!1,this.toast.error("Failed to save draft.")}})}cancel(){this.router.navigate(["opportunities"],{relativeTo:this.route.parent})}get isLast(){return this.step===this.steps.length}static{this.\u0275fac=function(n){return new(n||o)(E($),E(Y),E(q),E(R))}}static{this.\u0275cmp=V({type:o,selectors:[["app-opportunity-create"]],decls:32,vars:16,consts:[["tagBox",""],[1,"crm-page-body"],[1,"crm-page-header"],[1,"crm-page-title"],["appTranslate","",1,"crm-page-subtitle"],[1,"card","mb-3"],[1,"card-body"],[1,"crm-step-progress","mb-4"],[4,"ngFor","ngForOf","ngForTrackBy"],[1,"crm-text-muted","crm-text-sm","mb-5"],[4,"ngIf"],[1,"card","card-body"],[1,"row"],[1,"col"],["type","button","class","btn btn-light","appTranslate","",3,"click",4,"ngIf"],[1,"col-auto","d-flex","gap-2"],["type","button","appTranslate","",1,"btn","btn-light",3,"click"],["type","button","appTranslate","",1,"btn","btn-outline-theme",3,"click"],["type","button",1,"btn","btn-theme",3,"click"],["class","opp-drawer-backdrop",3,"click",4,"ngIf"],["class","opp-drawer",4,"ngIf"],["class","crm-step-connector",3,"crm-step-connector-done",4,"ngIf"],[1,"crm-step-item"],[1,"crm-step-wrapper"],[1,"crm-step-circle"],["class","ri-check-line",4,"ngIf"],[1,"crm-step-label"],[1,"crm-step-connector"],[1,"ri-check-line"],[1,"crm-form-row","crm-form-row-2"],[1,"crm-form-group"],["appTranslate","",1,"crm-form-label","crm-form-label-required"],["type","text","placeholder","Enter Opportunity Title",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["appTranslate","",1,"crm-form-label"],["type","text","inputmode","numeric","placeholder","\u20B9",1,"crm-form-input",3,"input","ngModel","ngModelOptions"],[1,"crm-form-select",3,"ngModelChange","ngModel","ngModelOptions"],["type","date",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["class","crm-form-row crm-form-row-2",4,"ngIf"],["type","number","min","0","max","100",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["appTranslate","",3,"ngValue"],[3,"ngValue",4,"ngFor","ngForOf","ngForTrackBy"],[1,"crm-tag-field",3,"click"],["class","crm-tag-chip",4,"ngFor","ngForOf","ngForTrackBy"],["type","text",1,"crm-tag-input",3,"ngModelChange","keydown","focus","blur","placeholder","ngModel","ngModelOptions"],["class","crm-text-muted crm-text-sm mt-1","appTranslate","",4,"ngIf"],["type","text","placeholder","Company being referred","readonly","",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],[3,"ngValue"],["appTranslate","",1,"crm-text-muted","crm-text-sm","mt-1"],[1,"crm-tag-chip"],["type","button",1,"crm-tag-chip-remove",3,"click"],["class","opp-selected-banner",4,"ngIf"],[1,"opp-product-searchbar"],[1,"crm-search-wrap"],[1,"ri-search-line","crm-search-icon"],["type","text","placeholder","Search for the products...",1,"crm-search-input",3,"ngModelChange","keyup.enter","ngModel","ngModelOptions"],["type","button","appTranslate","",1,"btn","btn-theme",3,"click"],["appTranslateText","",1,"crm-fw-600","crm-text-sm","mt-4","mb-3"],[1,"crm-text-muted"],["class","text-center py-5",4,"ngIf"],["icon","ri-shopping-bag-3-line","title","No products found","subtitle","Try a different product name.",4,"ngIf"],["class","opp-product-grid",4,"ngIf"],["class","opp-product-pager",4,"ngIf"],[1,"opp-selected-banner"],[1,"crm-fw-600","crm-text-sm"],["type","button","appTranslate","",1,"btn","btn-sm","btn-outline-theme",3,"click"],[1,"text-center","py-5"],["role","status",1,"spinner-border","text-primary"],["appTranslate","",1,"sr-only"],["icon","ri-shopping-bag-3-line","title","No products found","subtitle","Try a different product name."],[1,"opp-product-grid"],["class","opp-product-card",3,"is-selected","is-not-active",4,"ngFor","ngForOf","ngForTrackBy"],[1,"opp-product-card"],["loading","lazy","alt","","onerror","this.src='assets/img/placeholderimage.png'",1,"opp-product-img",3,"src"],[1,"opp-product-title","crm-fw-600","crm-text-sm",3,"title"],["class","opp-product-status",4,"ngIf"],["type","button","class","btn btn-sm btn-outline-theme","appTranslate","",3,"disabled","title","click",4,"ngIf"],["class","opp-product-actions",4,"ngIf"],[1,"opp-product-status"],["type","button","appTranslate","",1,"btn","btn-sm","btn-outline-theme",3,"click","disabled","title"],[1,"opp-product-actions"],["type","button",1,"btn","btn-sm","btn-light",3,"click"],[1,"ri-pencil-fill"],["type","button","appTranslate","",1,"btn","btn-sm","btn-outline-danger",3,"click"],[1,"opp-product-pager"],["type","button","appTranslate","",1,"btn","btn-sm","btn-light",3,"click","disabled"],[1,"crm-text-sm","crm-text-muted"],["type","text","placeholder","Enter First Name",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","placeholder","Enter Last Name",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["type","email","placeholder","[email protected]",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","placeholder","+91 9999999999",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","placeholder","Enter Company Name",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","placeholder","Procurement Head",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["type","url","placeholder","https://",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","placeholder","Street, building\u2026",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","placeholder","Area, locality\u2026",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],[1,"crm-form-row","crm-form-row-3"],["type","text","placeholder","Enter City",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","placeholder","India",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","placeholder","Enter Pincode",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["rows","3","placeholder","Enter Notes",1,"crm-form-textarea",3,"ngModelChange","ngModel","ngModelOptions"],[1,"opp-drawer-backdrop",3,"click"],[1,"opp-drawer"],[1,"opp-drawer-header"],["appTranslate","",1,"crm-fw-600","mb-0"],["type","button",1,"opp-drawer-close",3,"click"],[1,"ri-close-line"],[1,"opp-drawer-body"],[1,"opp-drawer-product"],["alt","","onerror","this.src='assets/img/placeholderimage.png'",3,"src"],[1,"crm-fw-600"],["class","crm-text-sm crm-text-muted",4,"ngIf"],["type","number","placeholder","Enter Quantity",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["class","text-danger","appTranslate","",4,"ngIf"],["type","text","placeholder","Enter Price",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","placeholder","Enter Discount",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","placeholder","Enter GST",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","placeholder","Enter Additional Charges",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["class","opp-drawer-desc",4,"ngIf"],[1,"opp-drawer-footer"],["appTranslate","",1,"text-danger"],[1,"opp-drawer-desc"],["appTranslate","",1,"crm-fw-600","crm-text-sm","mb-1"],[1,"crm-fw-600","mb-0"],["appTranslate",""],["class","opp-selected-row",4,"ngFor","ngForOf","ngForTrackBy"],["class","crm-text-muted text-center py-4","appTranslate","",4,"ngIf"],[1,"opp-selected-row"],[1,"opp-selected-info"],[1,"opp-selected-actions"],["appTranslate","",1,"crm-text-muted","text-center","py-4"]],template:function(n,t){n&1&&(i(0,"div",1)(1,"div",2)(2,"div")(3,"h1",3),a(4),r(),i(5,"p",4),a(6,"4-step deal setup"),r()()(),i(7,"div",5)(8,"div",6)(9,"div",7),f(10,gm,9,12,"ng-container",8),r(),i(11,"p",9),a(12),r(),f(13,Tm,57,47,"ng-container",10)(14,Vm,16,9,"ng-container",10)(15,Lm,32,21,"ng-container",10)(16,Rm,43,33,"ng-container",10),r()(),i(17,"div",11)(18,"div",12)(19,"div",13),f(20,qm,2,0,"button",14),r(),i(21,"div",15)(22,"button",16),h("click",function(){return t.cancel()}),a(23,"Cancel"),r(),i(24,"button",17),h("click",function(){return t.saveDraft()}),a(25,"Save Draft"),r(),i(26,"button",18),h("click",function(){return t.next()}),a(27),r()()()(),f(28,zm,1,0,"div",19)(29,Gm,42,23,"aside",20)(30,Jm,1,0,"div",19)(31,Zm,11,4,"aside",20),r()),n&2&&(l(4),g(t.pageTitle),l(6),c("ngForOf",t.steps)("ngForTrackBy",t.trackByIndex),l(2),Le("Step ",t.step," of ",t.steps.length," \u2014 ",t.steps[t.step-1],""),l(),c("ngIf",t.step===1),l(),c("ngIf",t.step===2),l(),c("ngIf",t.step===3),l(),c("ngIf",t.step===4),l(4),c("ngIf",t.step>1),l(7),g(t.isLast?"Save":"Next"),l(),c("ngIf",t.productDrawerOpen),l(),c("ngIf",t.productDrawerOpen),l(),c("ngIf",t.selectedDrawerOpen),l(),c("ngIf",t.selectedDrawerOpen))},dependencies:[W,N,X,ee,te,ot,Z,U,zt,Nn,H,L,Me,st],styles:["[_nghost-%COMP%]{display:block}.opp-selected-banner[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 16px;margin-bottom:16px;border-radius:var(--radius-lg);background:var(--color-accent-light, #eef4ff);border:1px solid var(--color-border)}.opp-product-searchbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.opp-product-searchbar[_ngcontent-%COMP%] .crm-search-wrap[_ngcontent-%COMP%]{flex:1 1 260px}.opp-product-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:16px}.opp-product-card[_ngcontent-%COMP%]{border:1.5px solid var(--color-border);border-radius:var(--radius-lg);padding:14px;background:var(--color-surface);display:flex;flex-direction:column;transition:border-color .15s ease,box-shadow .15s ease}.opp-product-card[_ngcontent-%COMP%]:hover{border-color:var(--color-accent);box-shadow:var(--shadow-md)}.opp-product-card.is-selected[_ngcontent-%COMP%]{border-color:var(--color-accent);box-shadow:0 0 0 3px var(--color-accent-light)}.opp-product-img[_ngcontent-%COMP%]{width:100%;aspect-ratio:1 / 1;max-height:180px;object-fit:contain;border-radius:var(--radius-md);background:#fafafa;margin-bottom:12px;padding:4px}.opp-product-title[_ngcontent-%COMP%]{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;margin-bottom:10px;min-height:2.6em}.opp-product-actions[_ngcontent-%COMP%]{display:flex;gap:8px}.opp-product-pager[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;gap:16px;margin-top:20px}.opp-drawer-backdrop[_ngcontent-%COMP%]{position:fixed;inset:0;background:#00000059;z-index:1050}.opp-drawer[_ngcontent-%COMP%]{position:fixed;top:0;right:0;height:100vh;width:440px;max-width:92vw;background:var(--color-surface, #fff);box-shadow:-8px 0 24px #0000001f;z-index:1051;display:flex;flex-direction:column;animation:_ngcontent-%COMP%_opp-drawer-in .18s ease}@keyframes _ngcontent-%COMP%_opp-drawer-in{0%{transform:translate(100%)}to{transform:translate(0)}}.opp-drawer-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--color-border)}.opp-drawer-close[_ngcontent-%COMP%]{border:0;background:transparent;font-size:20px;line-height:1;cursor:pointer;color:var(--color-text-muted, #667)}.opp-drawer-body[_ngcontent-%COMP%]{flex:1 1 auto;overflow-y:auto;padding:20px}.opp-drawer-footer[_ngcontent-%COMP%]{display:flex;gap:12px;padding:16px 20px;border-top:1px solid var(--color-border)}.opp-drawer-footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{flex:1}.opp-drawer-product[_ngcontent-%COMP%]{display:flex;gap:14px;align-items:center;margin-bottom:20px}.opp-drawer-product[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:72px;height:72px;object-fit:contain;border-radius:var(--radius-md);background:#fafafa;border:1px solid var(--color-border)}.opp-drawer-desc[_ngcontent-%COMP%]{margin-top:12px}.opp-selected-row[_ngcontent-%COMP%]{display:flex;gap:12px;align-items:center;padding:12px 0;border-bottom:1px solid var(--color-border)}.opp-selected-row[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:48px;height:48px;object-fit:contain;border-radius:var(--radius-md);background:#fafafa;border:1px solid var(--color-border)}.opp-selected-row[_ngcontent-%COMP%] .opp
2-selected-info[_ngcontent-%COMP%]{flex:1 1 auto;min-width:0}.opp-selected-row[_ngcontent-%COMP%] .opp-selected-actions[_ngcontent-%COMP%]{display:flex;gap:6px}.opp-product-card.is-not-active[_ngcontent-%COMP%]{opacity:.55}.opp-product-card.is-not-active[_ngcontent-%COMP%]:hover{border-color:var(--color-border);box-shadow:none}.opp-product-status[_ngcontent-%COMP%]{align-self:flex-start;margin-bottom:8px;padding:2px 8px;border-radius:var(--radius-sm);background:var(--color-primary-100);color:var(--color-primary-500);font-size:11px;font-weight:600;text-transform:capitalize}"]})}}return o})();function Xm(o,m){if(o&1&&(i(0,"div",46),b(1,"i",47),i(2,"span"),a(3),r()()),o&2){let e=d();l(3),g(e.nextAction)}}function ep(o,m){o&1&&(i(0,"span",48)(1,"span",13),a(2,"Change"),r(),b(3,"i",49),r())}function tp(o,m){if(o&1){let e=w();i(0,"button",50),h("click",function(){let t=p(e).$implicit,s=d();return u(s.changeStage(t))}),a(1),r()}if(o&2){let e=m.$implicit,n=d();c("disabled",e==="Follow-Up"&&!!n.openFollowUp)("title",e==="Follow-Up"&&n.openFollowUp?"Follow-up already scheduled for "+n.openFollowUp.label:""),l(),g(e)}}function np(o,m){if(o&1){let e=w();i(0,"div",51),h("click",function(){p(e);let t=d();return u(t.toggleStatusMenu())}),r()}}function ip(o,m){o&1&&(i(0,"div",52),b(1,"i",53),i(2,"span"),a(3,"This opportunity is marked "),i(4,"strong"),a(5,"Lost"),r(),a(6,". Notes, to-dos and reminders are disabled until its status is changed."),r()())}function rp(o,m){if(o&1){let e=w();i(0,"a",64),h("click",function(){p(e);let t=d(2);return u(t.openPurchaseOrder())}),a(1),r()}if(o&2){let e=d(2);c("title","Open "+e.poRef.number+" in Finance \u2192 Sales Orders"),l(),g(e.poRef.number)}}function op(o,m){if(o&1&&(i(0,"span",65),a(1),r()),o&2){let e=d(2);D("crm-text-muted",e.poLookup!=="not-won"),c("title",e.poBlankHint),l(),g(e.poBlankLabel)}}function ap(o,m){if(o&1&&(i(0,"tr")(1,"td",66),a(2),r(),i(3,"td"),a(4),r(),i(5,"td"),a(6),r(),i(7,"td"),a(8),r(),i(9,"td"),a(10),r()()),o&2){let e=m.$implicit;l(2),g(e.name),l(2),g(e.spec),l(2),g(e.qty),l(2),g(e.price),l(2),g(e.total)}}function sp(o,m){if(o&1&&(P(0),i(1,"div",7)(2,"div",36)(3,"div",37),a(4,"Opportunity Overview"),r()(),i(5,"div",38)(6,"dl",54)(7,"dt",13),a(8,"Title"),r(),i(9,"dd"),a(10),r(),i(11,"dt",13),a(12,"Priority"),r(),i(13,"dd")(14,"span",55),a(15),r()(),i(16,"dt",13),a(17,"Assigned To"),r(),i(18,"dd"),a(19),r(),i(20,"dt",13),a(21,"Next Follow-up"),r(),i(22,"dd"),a(23),r(),i(24,"dt",13),a(25,"PO NO."),r(),i(26,"dd"),f(27,rp,2,2,"a",56)(28,op,2,4,"ng-template",null,0,Ce),r()()()(),i(30,"div",7)(31,"div",36)(32,"div",37),a(33,"Product Information"),r()(),i(34,"div",57)(35,"div",58)(36,"table",59)(37,"thead")(38,"tr")(39,"th",13),a(40,"Product"),r(),i(41,"th",13),a(42,"Specification"),r(),i(43,"th",13),a(44,"Qty"),r(),i(45,"th",13),a(46,"Price/unit"),r(),i(47,"th",13),a(48,"Total"),r()()(),i(49,"tbody"),f(50,ap,11,5,"tr",60),r()()()()(),i(51,"div",61)(52,"div",35)(53,"div",38)(54,"div",62),a(55,"Delivery Location"),r(),i(56,"div",42),a(57),r()()(),i(58,"div",35)(59,"div",38)(60,"div",62),a(61,"Delivery Time Line"),r(),i(62,"div",42),a(63),r()()(),i(64,"div",35)(65,"div",38)(66,"div",62),a(67,"Budget"),r(),i(68,"div",42),a(69),r()()()(),i(70,"div",7)(71,"div",36)(72,"div",37),a(73,"Deal Information"),r()(),i(74,"div",38)(75,"dl",54)(76,"dt",13),a(77,"Deal Source"),r(),i(78,"dd"),a(79),r(),i(80,"dt",13),a(81,"Tags"),r(),i(82,"dd"),a(83),r(),i(84,"dt",13),a(85,"Pipeline Name"),r(),i(86,"dd"),a(87),r(),i(88,"dt",13),a(89,"Probability %"),r(),i(90,"dd"),a(91),r()()()(),i(92,"div",35)(93,"div",36)(94,"div",37),a(95,"Additional Details"),r()(),i(96,"div",38)(97,"dl",54)(98,"dt",13),a(99,"Company Size"),r(),i(100,"dd"),a(101),r(),i(102,"dt",13),a(103,"Annual Revenue"),r(),i(104,"dd"),a(105),r(),i(106,"dt",13),a(107,"Opportunity Value"),r(),i(108,"dd"),a(109),r()(),b(110,"div",63),i(111,"div",62),a(112,"Note"),r(),i(113,"div",12),a(114),r()()(),F()),o&2){let e=le(29),n=d();l(10),g(n.title),l(5),g(n.priority),l(4),g(n.assignedTo),l(4),g(n.pendingFollowUp?n.pendingFollowUp.label:"\u2014"),l(4),c("ngIf",n.poRef)("ngIfElse",e),l(23),c("ngForOf",n.products)("ngForTrackBy",n.trackByIndex),l(7),g(n.deliveryLocation),l(6),g(n.deliveryTimeline),l(6),g(n.budget),l(10),g(n.dealSource),l(4),g(n.tags),l(4),g(n.pipelineName),l(4),g(n.probability),l(10),g(n.companySize),l(4),g(n.annualRevenue),l(4),g(n.opportunityValue),l(5),g(n.note)}}function lp(o,m){if(o&1&&(i(0,"div",80)(1,"span",81),a(2),r(),i(3,"span",82),a(4),r()()),o&2){let e=m.$implicit;l(2),g(e.label),l(2),g(e.value)}}function cp(o,m){if(o&1){let e=w();i(0,"div",80)(1,"span",83),a(2,"PO No."),r(),i(3,"span",82)(4,"a",64),h("click",function(){p(e);let t=d(4);return u(t.openPurchaseOrder())}),a(5),r()()()}if(o&2){let e=d(4);l(4),c("title","Open "+e.poRef.number+" in Finance \u2192 Sales Orders"),l(),g(e.poRef.number)}}function dp(o,m){if(o&1){let e=w();i(0,"img",88),h("error",function(){p(e);let t=d().$implicit,s=d(5);return u(s.onAttachmentError(t))}),r()}if(o&2){let e=d().$implicit;c("src",e.url,me)("alt",e.name)}}function mp(o,m){if(o&1&&(i(0,"span"),b(1,"i",89),a(2),r()),o&2){let e=d().$implicit;l(2),A(" ",e.name,"")}}function pp(o,m){if(o&1&&(i(0,"a",86),f(1,dp,1,2,"img",87)(2,mp,3,1,"span",32),r()),o&2){let e=m.$implicit,n=d(5);D("opp-attachment-image",n.isImageAttachment(e)),pe("href",e.url||null,me)("target",e.url?"_blank":null)("title",e.name),l(),c("ngIf",n.isImageAttachment(e)),l(),c("ngIf",!n.isImageAttachment(e))}}function up(o,m){if(o&1&&(i(0,"div",84),f(1,pp,3,7,"a",85),r()),o&2){let e=d(2).$implicit,n=d(2);l(),c("ngForOf",e.attachments)("ngForTrackBy",n.trackByIndex)}}function gp(o,m){if(o&1&&(i(0,"div",76),f(1,lp,5,2,"div",77)(2,cp,6,2,"div",78)(3,up,2,2,"div",79),r()),o&2){let e=d().$implicit,n=d(2);l(),c("ngForOf",e.fields)("ngForTrackBy",n.trackByIndex),l(),c("ngIf",e.isWon&&n.poRef),l(),c("ngIf",e.attachments==null?null:e.attachments.length)}}function _p(o,m){if(o&1&&(i(0,"div",69),b(1,"span",70),i(2,"div",71)(3,"div",72)(4,"span",73),a(5),r(),i(6,"span",74),a(7),r()(),f(8,gp,4,4,"div",75),r()()),o&2){let e=m.$implicit,n=d(2);l(),c("ngClass","crm-timeline-dot-"+e.tone),l(4),g(e.title),l(2),g(e.time),l(),c("ngIf",(e.fields==null?null:e.fields.length)||(e.attachments==null?null:e.attachments.length)||e.isWon&&n.poRef)}}function hp(o,m){o&1&&(i(0,"div",90),a(1,"No activity."),r())}function fp(o,m){if(o&1&&(P(0),i(1,"div",35)(2,"div",36)(3,"div",37),a(4,"Activity Timeline"),r()(),i(5,"div",38)(6,"div",44),f(7,_p,9,4,"div",67)(8,hp,2,0,"div",68),r()()(),F()),o&2){let e=d();l(7),c("ngForOf",e.activities)("ngForTrackBy",e.trackByIndex),l(),c("ngIf",!e.activities.length)}}function xp(o,m){o&1&&(i(0,"p",95),a(1,"No notes yet."),r())}function yp(o,m){if(o&1){let e=w();i(0,"img",88),h("error",function(){p(e);let t=d().$implicit,s=d(4);return u(s.onAttachmentError(t))}),r()}if(o&2){let e=d().$implicit;c("src",e.url,me)("alt",e.name)}}function vp(o,m){if(o&1&&(i(0,"span"),b(1,"i",89),a(2),r()),o&2){let e=d().$implicit;l(2),A(" ",e.name,"")}}function Cp(o,m){if(o&1&&(i(0,"a",86),f(1,yp,1,2,"img",87)(2,vp,3,1,"span",32),r()),o&2){let e=m.$implicit,n=d(4);D("opp-attachment-image",n.isImageAttachment(e)),pe("href",e.url||null,me)("target",e.url?"_blank":null)("title",e.name),l(),c("ngIf",n.isImageAttachment(e)),l(),c("ngIf",!n.isImageAttachment(e))}}function bp(o,m){if(o&1&&(i(0,"div",100)(1,"strong",13),a(2,"Attachments:"),r(),i(3,"div",84),f(4,Cp,3,7,"a",85),r()()),o&2){let e=d().$implicit,n=d(2);l(4),c("ngForOf",e.attachments)("ngForTrackBy",n.trackByIndex)}}function Sp(o,m){if(o&1&&(i(0,"div",7)(1,"div",38)(2,"div",96)(3,"div",97),a(4),r(),i(5,"div",48),a(6),r()(),i(7,"p",98),a(8),r(),f(9,bp,5,2,"div",99),r()()),o&2){let e=m.$implicit;l(4),g(e.title),l(2),g(e.meta),l(2),g(e.body),l(),c("ngIf",e.attachments==null?null:e.attachments.length)}}function wp(o,m){if(o&1&&(P(0),i(1,"div",91)(2,"div")(3,"strong",13),a(4,"N
2otes"),r(),i(5,"span",92),a(6),i(7,"span",13),a(8,"note(s)"),r()()()(),f(9,xp,2,0,"p",93)(10,Sp,10,4,"div",94),F()),o&2){let e=d();l(6),A("",e.noteCards.length," "),l(3),c("ngIf",!e.noteCards.length),l(),c("ngForOf",e.noteCards)("ngForTrackBy",e.trackByIndex)}}function Tp(o,m){if(o&1&&(i(0,"div",106)(1,"span",13),a(2,"Channel"),r(),i(3,"code"),a(4),r()()),o&2){let e=d(2);l(4),A("#",e.dealRoom.channel_id,"")}}function kp(o,m){if(o&1&&(i(0,"span",109),a(1),r()),o&2){let e=m.$implicit,n=d(3);c("title",e.name),l(),g(n.initials(e.name))}}function Ep(o,m){if(o&1&&(i(0,"div",107),f(1,kp,2,2,"span",108),r()),o&2){let e=d(2);l(),c("ngForOf",e.dealRoom.members)("ngForTrackBy",e.trackByIndex)}}function Mp(o,m){if(o&1&&(i(0,"span")(1,"span",13),a(2,"Last activity:"),r(),a(3),r()),o&2){let e=d(2);l(3),A(" ",e.dealRoom.last_activity_at,"")}}function Ip(o,m){if(o&1&&(i(0,"span"),a(1),i(2,"span",13),a(3,"unread"),r()()),o&2){let e=d(2);l(),A(" \xB7 ",e.dealRoom.unread_count," ")}}function Op(o,m){if(o&1){let e=w();i(0,"div",101)(1,"div",36)(2,"div",37),a(3,"Deal Room"),r()(),i(4,"div",38),f(5,Tp,5,1,"div",102)(6,Ep,2,2,"div",103),i(7,"div",104),f(8,Mp,4,1,"span",32)(9,Ip,4,1,"span",32),r(),i(10,"button",105),h("click",function(){p(e);let t=d();return u(t.openDealRoom())}),i(11,"span",13),a(12,"Open in DealRoom \u2197"),r()()()()}if(o&2){let e=d();l(5),c("ngIf",e.dealRoom.channel_id),l(),c("ngIf",e.dealRoom.members==null?null:e.dealRoom.members.length),l(2),c("ngIf",e.dealRoom.last_activity_at),l(),c("ngIf",e.dealRoom.unread_count),l(),c("disabled",!0)}}function Pp(o,m){if(o&1&&(i(0,"span",16),a(1),r()),o&2){let e=m.$implicit;c("ngClass","crm-badge-"+e.tone),l(),g(e.label)}}function Fp(o,m){if(o&1&&(i(0,"div",110),b(1,"div",70),i(2,"div",111),a(3),r(),i(4,"div",112),a(5),r()()),o&2){let e=m.$implicit;l(),c("ngClass","crm-timeline-dot-"+e.tone),l(2),g(e.time),l(2),g(e.text)}}var Ap="/finance-management/receivable-purchase-orders/seller-view",Ri=(()=>{class o{get shownStage(){return this.dealStage.displayStage(this.stage,this.deal?.dealStage)}get assignedTo(){if(this.deal?.dealOwner)return this.deal.dealOwner;let e=this.deal?.AssignedTo;return e==null||e===""?"\u2014":this.assignees.find(t=>t.id===Number(e))?.name||String(e)}constructor(e,n,t,s,_,S,T,M){this.router=e,this.route=n,this.toast=t,this.modal=s,this.stageForm=_,this.dealStage=S,this.popup=T,this.api=M,this.activeTab="details",this.dealId=null,this.deal=null,this.title="\u2014",this.account="\u2014",this.amount="\u2014",this.closeDate="\u2014",this.avatar="D",this.avatarTone="amber",this.nextAction="",this.pendingFollowUp=null,this.openFollowUp=null,this.stage="\u2014",this.stageTone="gray",this.showStatusMenu=!1,this.DEAL_STATUS_TYPES={FOLLOW_UP:"Follow-Up",PROPOSAL_SENT:"Proposal Sent",NEGOTIATION:"Negotiation",DECISION_PENDING:"Decision Pending",WON:"Won",LOST:"Lost",DISQUALIFIED:"Disqualified"},this.stageOptions=[this.DEAL_STATUS_TYPES.FOLLOW_UP,this.DEAL_STATUS_TYPES.PROPOSAL_SENT,this.DEAL_STATUS_TYPES.NEGOTIATION,this.DEAL_STATUS_TYPES.DECISION_PENDING,this.DEAL_STATUS_TYPES.WON,this.DEAL_STATUS_TYPES.LOST,this.DEAL_STATUS_TYPES.DISQUALIFIED],this.isSubmitting=!1,this.requiredFieldsByStage={"Follow-Up":["customerResponse","nextFollowupDate"],"Proposal Sent":["proposalSentDate","quoteExpiryDate"],Negotiation:["quoteId","proposalSentDate","quoteExpiryDate"],"Decision Pending":["expectedDecisionDate"],Lost:["reason"],Disqualified:["reason"]},this.stageTones={Contacted:"gray","Follow-Up":"amber",Qualified:"blue","Proposal Sent":"blue",Negotiation:"amber","Decision Pending":"purple",Won:"green",Lost:"red",Disqualified:"gray"},this.priority="\u2014",this.assignees=[],this.poRef=null,this.poLookup="not-won",this.wonPayload=null,this.products=[],this.deliveryLocation="\u2014",this.deliveryTimeline="\u2014",this.budget="\u2014",this.dealSource="\u2014",this.tags="\u2014",this.pipelineName="\u2014",this.probability="\u2014",this.companySize="\u2014",this.annualRevenue="\u2014",this.opportunityValue="\u2014",this.note="\u2014",this.contact={name:"\u2014",email:"\u2014",phone:"\u2014"},this.competitors=[],this.assignHistory=[],this.activities=[],this.noteCards=[],this.upcomingActivities=[],this.rawActivities=[],this.rfqData=null,this.rfqCards=[],this.wonProducts=[],this.dealRoom=null}
2ngOnInit(){let e=this.route.snapshot.paramMap.get("id");this.dealId=e?Number(e):null,this.dealId!=null&&!Number.isNaN(this.dealId)&&(this.loadDeal(),this.loadActivities(),this.loadAssignHistory(),this.loadDealRoom()),this.loadAssignees()}loadAssignees(){this.api.getAssigneeUsers({user_type:"SELLER",search:"",perPage:100,pageNumber:1}).subscribe({next:e=>{this.assignees=e?.response?.data?.users??[]},error:()=>{}})}getRfqDetails(){this.deal?.rfqId&&this.api.getRFQDetails({rfqId:this.deal.rfqId,userType:"SELLER"}).subscribe({next:e=>{e?.responseCode===200&&(this.rfqData=e,this.rfqCards=this.dealStage.cardsFromRfq(e,this.deal),this.applyProducts(this.deal))},error:()=>{}})}submitWithQuote(e,n,t,s){this.dealStage.saveQuote(this.dealId,this.deal,e,s).subscribe(_=>{_.ok?this.submitDealStatus(n,t,()=>this.getRfqDetails()):(this.isSubmitting=!1,this.toast.error(_.message||"Failed to create quote"))})}loadDealRoom(){this.api.getDealRoom({id:this.dealId}).subscribe({next:e=>{this.dealRoom=e?.response?.data||null},error:()=>{}})}initials(e){return String(e||"?").split(/\s+/).map(n=>n[0]).slice(0,2).join("").toUpperCase()}loadDeal(){this.api.getDealView({id:this.dealId}).subscribe({next:e=>{e?.responseCode===200&&(this.deal=e.response?.data||null,this.applyDeal(this.deal),this.getRfqDetails(),this.loadPurchaseOrder())},error:()=>{}})}applyDeal(e){e&&(this.title=e.dealTitle||"\u2014",this.account=e.contactCompany||"\u2014",this.amount=this.formatAmou
2nt(e.dealAmount),this.closeDate=e.expectedCloseDate?String(e.expectedCloseDate).slice(0,10):"\u2014",this.avatar=(this.account||"D").charAt(0).toUpperCase(),this.stage=e.dealStatus||e.deal_status||e.status||e.dealStage||e.stage||"\u2014",this.stageTone=this.stageTones[this.shownStage]??"gray",this.priority=e.dealPriority||"\u2014",this.dealSource=e.LeadSource||"\u2014",this.tags=e.tags||"\u2014",this.pipelineName=e.pipelineName||"\u2014",this.probability=e.probability!=null?e.probability+"%":"\u2014",this.companySize=e.companySize||"\u2014",this.annualRevenue=e.annualRevenue||"\u2014",this.opportunityValue=e.opportunityValue!=null&&e.opportunityValue!==""?this.formatAmount(e.opportunityValue):"\u2014",this.note=e.note||"\u2014",this.budget=this.opportunityValue,this.deliveryLocation=[e.city,e.state].filter(Boolean).join(", ")||"\u2014",this.contact={name:`${e.contactFirstName||""} ${e.contactLastName||""}`.trim()||"\u2014",email:e.contactEmail||"\u2014",phone:e.contactPhoneNumber||"\u2014"},this.applyProducts(e))}applyProducts(e){if(!e)return;this.rfqCards.length||(this.rfqCards=this.dealStage.cardsFromDeal(e)),this.wonProducts=this.dealStage.wonProductsFrom(e,this.rfqCards);let n=new Map(this.dealStage.dealProductRows(e).map(t=>[String(t.productName||t.name||"").trim().toLowerCase(),String(t.description||t.spec||"")]));this.products=this.wonProducts.map(t=>({name:t.name,spec:n.get(t.name.trim().toLowerCase())||"",qty:t.qty,price:this.formatRupee(t.price),total:this.formatRupee(t.price*t.qty)}))}loadAssignHistory(){this.api.getDealAssignHistory({id:this.dealId}).subscribe({next:e=>{let n=e?.response?.data||[];this.assignHistory=(Array.isArray(n)?n:[]).map(t=>this.mapHistory(t))},error:()=>{}})}mapHistory(e){let n=e.actor||e.performed_by_name||e.user||"",t=e.to_user||e.assigned_to||"",s=e.description||e.text||[e.action||e.event,t?"\u2192 "+t:"",n?"("+n+")":""].filter(Boolean).join(" ")||"Update",_=String(e.action||e.event||"").toLowerCase(),S=_.includes("creat")?"blue":_.includes("assign")?"green":_.includes("status")?"amber":"blue";return{time:this.fmtDate(e.created_date||e.created_at),tone:S,title:String(s),fields:n?[{label:"User",value:String(n)}]:[],text:String(s),attachments:[],isWon:!1}}loadActivities(){this.api.getDealActivities({dealId:this.dealId,activityType:"",page_size:100,page:1}).subscribe({next:e=>{let n=e?.response?.data||{},t=n.all_activities||(Array.isArray(n)?n:[])||[];this.upcomingActivities=n.upcoming_activities||[],this.rawActivities=Array.isArray(t)?t:[],this.activities=(t||[]).map(s=>this.mapActivity(s)),this.noteCards=(t||[]).filter(s=>s?.activityType==="NOTE_ADDED").map(s=>this.mapNote(s)),this.resolveAttachmentLinks(this.noteCards.reduce((s,_)=>s.concat(_.attachments||[]),[]).concat(this.activities.reduce((s,_)=>s.concat(_.attachments||[]),[]))),this.pendingFollowUp=Zt(t),this.openFollowUp=xi(t),this.nextAction=this.deriveNextAction()},error:()=>{}})}mapActivity(e){let n=Je(e,"deal");return{time:this.fmtDate(e?.created_date||e?.created_at),tone:this.activityTone(e?.activityType),title:n.title,fields:n.fields,text:yt(e,"deal"),attachments:this.attachmentsFrom(e),isWon:Ti(e)===this.DEAL_STATUS_TYPES.WON}}mapNote(e){let n=e?.activityJson||{};return{title:"Note",meta:`${e?.performed_by_name||"\u2014"} \xB7 ${this.fmtDate(e?.created_date)}`,body:String(n?.note||n?.notes||""),attachments:this.attachmentsFrom(e)}}deriveNextAction(){let e=this.upcomingActivities?.[0];if(!e)return"";let n=e.activityJson||{};return e.activityType==="REMINDER_ADDED"?`${n.remainder||"Reminder"}${n.reminder_date?" on "+n.reminder_date:""}`:e.activityType==="TODO_CREATED"?`${xt(e)||"To-do"}${n.follow?" \u2014 "+n.follow:""}`:et(e.activityType)}activityTone(e){return{STATUS_CHANGED:"green",NOTE_ADDED:"blue",TODO_CREATED:"amber",REMINDER_ADDED:"purple",DEAL_CREATED:"blue"}[e]??"blue"}fmtDate(e){if(!e)return"";let n=new Date(e);return Number.isNaN(n.getTime())?String(e):Ee(n,"MMM dd, yyyy hh:mm a","en-US")}formatAmount(e){let n=Number(e)||0;return n?n>=1e7?"\u20B9"+(n/1e7).toFixed(2).replace(/\.00$/,"")+" Cr":"\u20B9"+Math.round(n/1e5)+" L":"\u2014"}
2formatRupee(e){return"\u20B9"+(Number(e)||0).toLocaleString("en-IN")}trackByIndex(e){return e}back(){this.router.navigate(["opportunities"],{relativeTo:this.route.parent})}setTab(e){this.activeTab=e}toggleStatusMenu(){this.isWon||(this.showStatusMenu=!this.showStatusMenu)}get isWon(){return this.dealStage.isClosedStage(this.stage)}get isLost(){return this.stage===this.DEAL_STATUS_TYPES.LOST}get canLogActivity(){return!this.isLost}get activityTitle(){return this.canLogActivity?"":"This opportunity is Lost \u2014 change its status to log activities."}blockedByLost(){return this.canLogActivity?!1:(this.toast.warning("This opportunity is Lost \u2014 change its status before adding activities."),!0)}edit(){if(this.isWon){this.toast.warning("This opportunity is closed as Won and can no longer be edited.");return}if(this.dealId==null){this.toast.info("No opportunity to edit.");return}this.router.navigate(["opportunities",this.dealId,"edit"],{relativeTo:this.route.parent})}isCommittedDeal(){return!!(this.deal?.dealStatus&&this.deal.dealStatus!=="Saved")}openDealRoom(){let e=this.dealRoom?.channel_url;e?window.open(e,"_blank"):this.toast.info("Deal room channel not available.")}hasBlankRequiredFields(e,n){let t=this.requiredFieldsByStage[n]||[];return t.length===0?!1:t.some(s=>{let _=e[s];return _==null||typeof _=="string"&&_.trim()===""})}buildStageActivityJson(e,n){return this.dealStage.buildActivityJson(e,n)}changeStage(e){return B(this,null,function*(){if(this.showStatusMenu=!1,e===this.stage)return;let n;if(e===this.DEAL_STATUS_TYPES.FOLLOW_UP){if(this.openFollowUp){this.toast.warning(`A follow-up is already scheduled for ${this.openFollowUp.label}.`);return}n=yield this.popup.open("follow-up")}else e===this.DEAL_STATUS_TYPES.LOST?n=yield this.popup.open("deal-lost"):e===this.DEAL_STATUS_TYPES.DISQUALIFIED?n=yield this.popup.open("deal-disqualified"):n=yield this.stageForm.open({stage:e,cardName:this.title,cardAmount:this.amount,cardAccount:this.account,data:{rfqCards:this.rfqCards,wonProducts:this.wonProducts,contactName:this.contact.name,prefill:this.dealStage.prefillFrom(this.deal,this.rawActivities,this.rfqCards)}});if(n===null)return;if(this.hasBlankRequiredFields(n,e)){this.toast.error("Please fill in all required fields before submitting.");return}if(this.dealId==null){this.toast.error("No opportunity loaded \u2014 stage not updated.");return}if(this.isSubmitting)return;this.isSubmitting=!0,this.wonPayload=e===this.DEAL_STATUS_TYPES.WON?z({},n):null;let t=this.buildStageActivityJson(e,n);this.dealStage.usesQuote(e)?this.submitWithQuote(n.products||[],e,t,this.dealStage.quoteExpiryFrom(e,n)):this.submitDealStatus(e,t)})}submitDealStatus(e,n,t){this.api.updateDealStatus({deal_id:this.dealId,updated_status:e,activityJson:n}).subscribe({next:s=>{if(this.isSubmitting=!1,s?.responseCode===200){let _=s?.response?.new_status||e;this.stage=_,this.stageTone=this.stageTones[_]??"gray",this.toast[e===this.DEAL_STATUS_TYPES.LOST?"warning":"success"](s?.response?.message||`Moved to ${e}.`),e===this.DEAL_STATUS_TYPES.WON?this.completeWonDeal():this.api.syncRfqStatus(this.deal?.rfqId,_).subscribe(S=>{S.failed&&this.toast.warning(S.message)}),this.loadDeal(),this.loadActivities(),t&&t()}else this.toast.error(s?.response?.message||"Failed to update stage.")},error:()=>{this.isSubmitting=!1,this.toast.error("Failed to update stage.")}})}firstId(...e){for(let n of e){let t=Number(n);if(Number.isFinite(t)&&t>0)return t}return null}completeWonDeal(){this.api.awardRfqQuotes(this.wonQuoteRows()).subscribe(e=>{this.createPurchaseOrder(e.failed?e.message:"")})}wonQuoteRows(){let e=this.firstId(this.rfqData?.response?.rfqId,this.deal?.rfqId);if(e==null)return[];let n=this.rfqData?.response?.products||[],t=[];for(let s of n){let S=(Array.isArray(s?.quoteSellerDetails)?s.quoteSellerDetails:[]).slice().sort((k,oe)=>Number(oe?.quoteId||0)-Number(k?.quoteId||0))[0],T=this.firstId(S?.quoteId),M=this.firstId(S?.sellerId,s?.sellerId),I=this.firstId(s?.rfqProductId,S?.rfqProductId);
2T!=null&&M!=null&&I!=null&&t.push({quoteId:T,rfqId:e,sellerId:M,rfqProductId:I})}return t}loadPurchaseOrder(){if(this.shownStage!==this.DEAL_STATUS_TYPES.WON){this.poRef||(this.poLookup="not-won");return}this.poRef||this.resolvePurchaseOrder().subscribe()}resolvePurchaseOrder(){let e=this.firstId(this.deal?.rfqId,this.deal?.rfq_id);return e==null?(this.poLookup="no-rfq",K(null)):(this.poLookup="searching",this.api.findPoForSource(e).pipe(Pt(n=>{if(n){this.poRef=n,this.poLookup="found";return}this.poRef||(this.poLookup="not-found")})))}get poBlankLabel(){switch(this.poLookup){case"searching":return"Looking up\u2026";case"no-rfq":return"Not raised";case"not-found":return"Not found";default:return"\u2014"}}get poBlankHint(){switch(this.poLookup){case"searching":return"Looking this opportunity up in Finance \u2192 Sales Orders.";case"no-rfq":return"No purchase order was raised: this opportunity has no linked RFQ.";case"not-found":return"A purchase order was expected but none was found in Finance \u2192 Sales Orders for this opportunity\u2019s RFQ.";default:return""}}applyCreatedPo(e){let n=this.poRefFromResponse(e);return n&&(this.poRef=n,this.poLookup="found"),n?.id?(this.raiseInvoice(n.id),n):(this.resolvePurchaseOrder().subscribe(t=>{if(t?.id){this.raiseInvoice(t.id);return}console.warn("Purchase order raised, but no invoice could be created \u2014 the order could not be identified.")}),n)}poRefFromResponse(e){let n=e?.response??e;for(let t of[n,n?.data,n?.po,n?.purchase_order,n?.data?.po]){if(!t||typeof t!="object")continue;let s=this.api.toPoRef({id:t.po_id??t.poId??t.id,po_number:t.po_number??t.poNumber??t.po_no});if(s)return s}return null}raiseInvoice(e){let n=this.wonPayload||{},t=_=>String(n[_]??"").trim(),s={account_name:t("accountHolder"),bank_name:t("bankName"),account_number:t("accountNumber"),branch:t("branch"),ifsc:t("ifsc")};if(!s.account_name||!s.account_number||!s.ifsc){console.warn("Purchase order raised, but no invoice could be created \u2014 it has no bank account to be paid into.");return}We({details:this.api.getPoDetails(e).pipe(de(()=>K(null))),summary:this.api.getPoOrderSummary(e).pipe(de(()=>K(null)))}).subscribe(({details:_,summary:S})=>{let T=this.poDetailsFrom(_);if(!T){console.warn("Purchase order raised, but the invoice could not be created \u2014 the order could not be read back.");return}let M=this.firstId(T.invoice_id);if(M!=null){this.raiseTaxInvoice(M);return}let I=(T.items||[]).filter(he=>Number(he?.offered_qty)>0);if(!I.length){console.warn("Purchase order raised, but the invoice could not be created \u2014 the order has no billable line items.");return}let k=Array.isArray(T.address)?T.address:[],oe=k.find(he=>he?.addressType==="shipping")||k[0],_e=k.find(he=>he?.addressType==="billing")||k[1]||oe,G={};try{G=JSON.parse(localStorage.getItem("details")||"{}")}catch{G={}}let rn=S?.response?.data??S?.response??{},gt=this.invoiceTotals(I);this.api.createManualInvoice(se(z({po_id:e,po_number:String(T.po_number??this.poRef?.number??""),po_required:1,user_type:"SELLER",invoice_number:"",net_amount:gt.net,total_payable_amount:gt.payable,items:I.map(he=>({product_id:he.product_id,product_name:he.product_name,po_qty:Number(he.offered_qty)||0,qty:Number(he.offered_qty)||0,unit_price:Number(he.unit_price)||0,discount_percentage:Number(he.discount_percent)||0,gst_percentage:Number(he.tax_percent)||0}))},s),{seller_gst:String(rn?.seller_gst_list?.[0]?.gst_number??"").trim(),buyer_gst:String(T.buyer_gst??""),seller_name:String(T.buyer_company_name??""),vendor_id:this.firstId(T.buyer_vendor_id,T.buyer_id),buyer_name:String(T.buyer_company_name??""),seller_address:String(_e?.street??""),city:String(_e?.city??""),state:String(_e?.region??""),country:String(_e?.country_id??""),shipping_address:this.firstId(oe?.id,oe?.entity_id),billing_address:this.firstId(_e?.id,_e?.entity_id),buyer_organization_id:this.firstId(T.buyer_vendor_id,T.buyer_id),buyer_user_id:this.firstId(T.buyer_id),seller_organization_id:this.firstId(G?.response?.vendor_id),seller_user_id:this.firstId(G?.response?.user_id),terms:String(T.terms??""),additional_charges:[],documents:[],seller_terms_and_conditions_path:[],approvalUsers:[]})).subscribe({next:he=>{if(Number(he?.responseCode)!==200){let Be=he?.response,bt=typeof Be=="string"?Be:Be?.message;console.warn(`Purchase order raised, but the invoice was rejected${bt?": "+bt:"."}`);return}this.afterInvoiceCreated(e,this.invoiceIdFromResponse(he))},error:he=>{let Be=he?.error?.response,bt=typeof Be=="string"?Be:Be?.message;console.warn(`Purchase order raised, but the invoice could not be created${bt?": "+bt:"."}`)}})})}poDetailsFrom(e){let n=typeof e?.response=="string"?null:e?.response?.data;return n&&typeof n=="object"?n:null}invoiceIdFromResponse(e){let n=e?.response??e;
2for(let t of[n,n?.data,n?.invoice]){if(!t||typeof t!="object")continue;let s=this.firstId(t.invoice_id??t.invoiceId??t.id);if(s!=null)return s}return null}afterInvoiceCreated(e,n){if(n!=null){this.toast.success(`Invoice ${n} created.`),this.raiseTaxInvoice(n);return}this.api.getPoDetails(e).subscribe({next:t=>{let s=this.firstId(this.poDetailsFrom(t)?.invoice_id);if(s==null){this.toast.success("Invoice created.");return}this.toast.success(`Invoice ${s} created.`),this.raiseTaxInvoice(s)},error:()=>{this.toast.success("Invoice created.")}})}invoiceTotals(e){let n=0,t=0;for(let s of e){let _=(Number(s.unit_price)||0)*(Number(s.offered_qty)||0),S=_-_*((Number(s.discount_percent)||0)/100);n+=S,t+=S*((Number(s.tax_percent)||0)/100)}return{net:n,payable:n+t}}raiseTaxInvoice(e){this.api.getInvoiceDetails({invoice_id:e,invoice_type:"parent"}).subscribe({next:n=>{let t=(typeof n?.response=="string"?null:n?.response?.data)??{};if(Array.isArray(t.invoices)&&t.invoices.length>0)return;let _=(Array.isArray(t.items)?t.items:[]).filter(S=>this.firstId(S?.item_id)!=null&&Number(S?.required_qty)>0);if(!_.length){console.warn("Invoice created, but no tax invoice could be raised \u2014 it has no billable line items.");return}this.api.createTaxInvoice({invoice_id:String(e),invoice_number:"",type:"INVOICE",installment_id:String(void 0),amount_details:[],advance_payment:"NO",products:_.map(S=>({product_id:String(S.item_id),quantity:String(Number(S.required_qty))})),attachments:[],invoice_due_days:null,logistics:Number(t.logistics_charges)||0,insurance:Number(t.insurance_charges)||0,amount:this.taxInvoiceAmount(_,t),terms:String(t.terms??"")}).subscribe({next:S=>{if(Number(S?.responseCode)!==200){let T=S?.response,M=typeof T=="string"?T:T?.message||T?.response;console.warn(`Invoice created, but the tax invoice was rejected${M?": "+M:"."}`);return}this.toast.success("Tax invoice created.")},error:S=>{let T=S?.error?.response,M=typeof T=="string"?T:T?.message;console.warn(`Invoice created, but the tax invoice could not be created${M?": "+M:"."}`)}})},error:()=>{console.warn("Invoice created, but no tax invoice could be raised \u2014 the invoice could not be read back.")}})}taxInvoiceAmount(e,n){return e.reduce((s,_)=>{let S=(Number(_.unit_price)||0)*(Number(_.required_qty)||0),T=S*((Number(_.discount_percent)||0)/100),M=(Number(_.gst)||0)+(Number(_.logistics_charges)||0)+(Number(_.shipping_charges)||0)+(Number(_.insurance_charges)||0);return s+Math.round(S-T+M)},0)+(Number(n.logistics_charges)||0)+(Number(n.insurance_charges)||0)}openPurchaseOrder(){let e=this.poRef?.id;e&&this.router.navigate([Ap],{queryParams:{id:e,poId:e}})}createPurchaseOrder(e=""){let n=this.firstId(this.deal?.rfqId,this.deal?.rfq_id),t=this.firstId(this.deal?.quoteId,this.deal?.quote_id),s=this.firstId(this.deal?.leadUserId,this.deal?.lead_user_id),_=T=>e?`${T} ${e}`:T,S=[];if(n==null&&S.push("a linked RFQ"),t==null&&S.push("an accepted quote"),s==null&&S.push("a linked buyer"),S.length){let T=S.length>1?S.slice(0,-1).join(", ")+" and "+S[S.length-1]:S[0];console.warn(_(`Opportunity marked Won, but no purchase order could be raised \u2014 it is missing ${T}.`));return}this.api.createCrmPo({source_id:n,quote_id:t,leadUserId:s}).subscribe({next:T=>{let M=Number(T?.responseCode??0);if(M===200||M===201){let I=T?.response||{},k=this.applyCreatedPo(T),oe=k?.number?`Purchase order ${k.number} created.`:(typeof I=="string"?I:I.message)||"Purchase order created.";e&&console.warn(_(oe)),this.toast.success(oe)}else{let I=typeof T?.response=="string"?T.response:T?.response?.message;console.warn(_(`Opportunity marked Won, but the purchase order was rejected: ${I||"unknown reason"}`))}},error:T=>{let M=T?.error?.response,I=typeof M=="string"?M:M?.message;console.warn(_(`Opportunity marked Won, but the purchase order could not be created${I?": "+I:"."}`))}})}addNote(){return B(this,null,function*(){if(this.blockedByLost())return;if(!this.isCommittedDeal()){this.toast.warning("This opportunity is a draft and activities are not allowed.");return}let e=yield this.popup.open("add-note");if(e===null)return;let n=String(e.note||"").trim();if(!n){this.toast.error("Note content is required.");return}let t=Array.isArray(e.attachmentFiles)?e.attachmentFiles.filter(s=>s instanceof File):[];this.api.uploadAttachments(t,"crm",this.dealId??void 0).subscribe({next:s=>this.commitNote(n,s),error:()=>this.commitNote(n,[])})})}commitNote(e,n){let t=n.filter(s=>!s.url).length;t&&this.toast.warning(`${t} attachment(s) could not be uploaded \u2014 the note was saved with the filename only.`),this.saveActivity("NOTE_ADDED",{note:e,attachments:n},"Note added successfully","Failed to add note")}addTodo(){return B(this,null,function*(){if(this.blockedByLost())return;if(!this.isCommittedDeal()){this.toast.warning("This opportunity is a draft and activities are not allowed.");return}let e=yield this.popup.open("to-do");if(e===null)return;let n=String(e.type||"").trim();if(!n){this.toast.error("Type is required.");return}this.saveActivity("TODO_CREATED",{type:n.toLowerCase(),follow:String(e.follow||"").toLowerCase(),note:String(e.note||"").trim(),start_date:e.startDate||"",end_date:e.endDate||""},"To-do added successfully","Failed to add to-do")})}addReminder(){return B(this,null,function*(){if(this.blockedByLost())return;if(!this.isCommittedDeal()){this.toast.warning("This opportunity is a draft and activities are not allowed.");return}let e=yield this.popup.open("add-reminder");if(e===null)return;let n=String(e.reminder||"").trim();if(!n){this.toast.error("Reminder is required.");return}let t="",s="";if(e.datetime){let _=new Date(e.datetime);Number.isNaN(_.getTime())||(t=_.toISOString().split("T")[0],s=_.toTimeStr
2ing().split(" ")[0])}this.saveActivity("REMINDER_ADDED",{remainder:n,reminder_date:t,reminder_time:s},"Reminder added successfully","Failed to add reminder")})}saveActivity(e,n,t,s){if(!this.blockedByLost()){if(!this.isCommittedDeal()){this.toast.warning("This opportunity is a draft and activities are not allowed.");return}if(this.dealId==null){this.toast.info("No opportunity to update.");return}this.api.addDealActivity({dealId:this.dealId,activityType:e,activityJson:n}).subscribe({next:_=>{_?.responseCode===200?(this.toast.success(_?.response?.message||t),this.loadActivities()):this.toast.error(_?.response?.message||s)},error:()=>this.toast.error(s)})}}deleteRow(){return B(this,null,function*(){if(yield this.modal.confirm({title:"Delete opportunity?",body:"This action cannot be undone.",confirmTone:"danger",confirmLabel:"Delete"})){if(this.dealId==null){this.router.navigate(["opportunities"],{relativeTo:this.route.parent});return}this.api.deleteDeal({id:this.dealId}).subscribe({next:n=>{n?.responseCode===200?(this.toast.success(n?.response?.message||"Opportunity deleted."),this.router.navigate(["opportunities"],{relativeTo:this.route.parent})):this.toast.error(n?.response?.message||"Failed to delete opportunity.")},error:()=>this.toast.error("Failed to delete opportunity.")})}})}attachmentsFrom(e){let n=[e?.activityJson,e?.activity_json,e?.meta,e?.payload,e].map(t=>this.attachmentPayload(t)).filter(Boolean);for(let t of n){let s=t.attachments??t.files??t.attachment??this.attachmentPayload(t.meta)?.attachments,_=this.attachmentRows(s);if(_.length)return _}return[]}attachmentRows(e){let n=[];if(Array.isArray(e))n=e;else if(typeof e=="string"&&e.trim().startsWith("["))try{let t=JSON.parse(e);n=Array.isArray(t)?t:[]}catch{n=[]}return n.map(t=>{let s=t&&typeof t=="object"?t:{name:String(t??""),url:String(t??"")};return{name:this.displayFileName(s),size:Number(s?.size||0),type:String(s?.type||""),url:this.attachmentUrl(s),path:String(s?.filepath||s?.filePath||s?.file_path||s?.name||"")}})}attachmentPayload(e){if(e&&typeof e=="object"&&!Array.isArray(e))return e;if(typeof e=="string"&&e.trim().startsWith("{"))try{return JSON.parse(e)}catch{return null}return null}attachmentUrl(e){let n=String(e?.url||e?.fileViewPath||e?.file_view_path||e?.pathViewPath||e?.path_view_path||e?.viewUrl||"").trim();return n?/^(https?:)?\/\//i.test(n)||n.startsWith("data:")||n.startsWith("blob:")?n:n.startsWith("/")?Oe.apiUrl.replace(/\/+$/,"")+n:"":""}resolveAttachmentLinks(e){for(let n of(e||[]).filter(t=>t&&!t.url&&t.name&&!t.looked))n.looked=!0,this.api.searchDriveFiles({query:n.name,pageLength:50}).subscribe({next:t=>{let s=Array.isArray(t?.response?.data)?t.response.data:[],_=this.pickDriveUrl(s,n);_&&(n.url=_)},error:()=>{}})}pickDriveUrl(e,n){let t=k=>String(k?.pathViewPath||k?.viewUrl||k?.fileViewPath||"").trim(),s=k=>String(k||"").trim().toLowerCase().split("/").pop()||"",_=s(n.path),S=this.bareName(n.name),T=_&&e.find(k=>s(k?.filepath||k?.filePath)===_&&t(k));if(T)return t(T);let M=S&&e.find(k=>this.bareName(String(k?.fileName||k?.file_name||k?.name||k?.fileGenName||""))===S&&t(k));if(M)return t(M);let I=S&&e.find(k=>s(k?.filepath||k?.filePath).endsWith("_"+S)&&t(k));return I?t(I):""}bareName(e){return String(e||"").trim().replace(/^[0-9a-f]{16,40}[_-]/i,"").toLowerCase()}displayFileName(e){let n=String(e?.name||e?.file_name||"").trim();return n.replace(/^[0-9a-f]{16,40}[_-]/i,"")||n}isImageAttachment(e){if(!e?.url)return!1;if(String(e.type||"").toLowerCase().startsWith("image/"))return!0;let n=/\.(png|jpe?g|gif|webp|bmp|svg)(\?|#|$)/i;return n.test(e.name||"")||n.test(e.path||"")||n.test(e.url||"")}onAttachmentError(e){!e||e.looked||(e.url="",this.resolveAttachmentLinks([e]))}static{this.\u0275fac=function(n){return new(n||o)(E($),E(Y),E(q),E(ue),E(Ge),E(Ct),E(xe),E(R))}}static{this.\u0275cmp=V({type:o,selectors:[["app-opportunity-detail"]],decls:86,vars:42,consts:[["noPurchaseOrder",""],[1,"crm-page-body"],["aria-label","Breadcrumb",1,"crm-breadcrumb","mb-2"],["appTranslate","",1,"crm-section-action",3,"click"],[1,"crm-text-muted","mx-1"],[1,"crm-text-muted"],["class","crm-alert crm-alert-warning mb-3",4,"ngIf"],[1,"card","mb-3"],[1,"card-body","d-flex","align-items-center","flex-wrap","gap-3"],[1,"crm-avatar","crm-avatar-lg",3,"ngClass"],[1,"flex-grow-1"],[1,"crm-fw-700","font-16"],[1,"crm-text-muted","crm-text-sm"],["appTranslate",""],[1,"position-relative"],["type","button",1,"btn","btn-light","btn-sm","d-flex","align-items-center","gap-2",3,"click","disabled"],[1,"crm-badge",3,"ngClass"],["class","crm-text-muted crm-text-xs",4,"ngIf"],[1,"opp-status-menu"],["type","button","class","opp-status-item",3,"disabled","title","click",4,"ngFor","ngForOf","ngForTrackBy"],["class","opp-status-backdrop",3,"click",4,"ngIf"],["class","opp-lost-note mb-3",4,"ngIf"],[1,"d-flex","flex-wrap","gap-2","mb-3"],["type","button",1,"btn","btn-outline-theme","btn-sm",3,"click","disabled","title"],[1,"ri-sticky-note-line"],[1,"ri-checkbox-circle-line"],[1,"ri-alarm-line"],[1,"crm-grid","crm-grid-3-1"],[1,"crm-tabs-bar"],["appTranslate","",1,"crm-tab-item",3,"click"],["appTranslateText","",1,"crm-tab-item",3,"click"],[1,"crm-tab-count"],[4,"ngIf"],[1,"d-flex","flex-column","gap-3"],["class","card opp-dealroom-card",4,"ngIf"],[1,"card"],[1,"card-header"],["appTranslate","",1,"card-title"],[1,"card-body"],["appTranslate","",1,"crm-text-muted","crm-text-sm","mb-2"],[1,"d-flex","flex-wrap","gap-1","align-items-center"],["class","crm-badge",3,"ngClass",4,"ngFor","ngForOf","ngForTrackBy"],[1,"crm-fw-700","crm-text-sm"],[1,"crm-text-muted","crm-text-sm","mt-1"],[1,"crm-timeline"],["class","crm-timeline-item",4,"ngFor","ngForOf","ngForTrackBy"],[1,"crm-alert","crm-alert-warning","mb-3"],[1,"ri-alarm-warning-line"],[1,"crm-text-muted","crm-text-xs"],[1,"ri-arrow-down-s-line"],["type","button",1,"opp-status-item",3,"click","disabled","title"],[1,"opp-status-backdrop",3,"click"],[1,"opp-lost-note","mb-3"],[1,"ri-close-circle-line"],[1,"crm-meta-list"],[1,"crm-badge","crm-badge-amber"],["class","crm-cell-link crm-po-link",3,"title","click",4,"ngIf","ngIfElse"],[1,"card-body","p-0"],[1,"crm-table-wrapper","crm-table-wrapper-flush"],[1,"crm-data-table"],[4,"ngFor","ngForOf","ngForTrackBy"],[1,"crm-grid","crm-grid-3","mb-3"],["appTranslate","",1,"crm-stat-label","mb-1"],[1,"crm-divider"],[1,"crm-cell-link","crm-po-link",3,"click","title"],[3,"title"],[1,"crm-cell-primary"],["class","crm-timeline-item crm-timeline-item--card",4,"ngFor","ngForOf","ngForTrackBy"],["class","crm-text-muted text-center py-3","appTranslate","",4,"ngIf"],[1,"crm-timeline-item","crm-timeline-item--card"],[1,"crm-timeline-dot",3,"ngClass"],[1,"crm-timeline-card"],[1,"crm-timeline-card__head"],[1,"crm-timeline-card__title"],[1,"crm-timeline-card__time"],["class","crm-timeline-card__body",4,"ngIf"],[1,"crm-timeline-card__body"],["class","crm-timeline-field",4,"ngFor","ngForOf","ngForTrackBy"],["class","crm-timeline-field",4,"ngIf"],["class","opp-attachments",4,"ngIf"],[1,"crm-timeline-field"],[1,"crm-timeline-field__label"],[1,"crm-timeline-field__value"],["appTranslate","",1,"crm-timeline-field__label"],[1,"opp-attachments"],["class","opp-attachment","rel","noopener",3,"opp-attachment-image",4,"ngFor","ngForOf","ngForTrackBy"],["rel","noopener",1,"opp-attachment"],["loading","lazy",3,"src","alt","error",4,"ngIf"],["loading","lazy",3,"error","src","alt"],[1,"ri-attachment-2"],["appTranslate","",1,"crm-text-muted","text-center","py-3"],[1,"d-flex","align-items-center","justify-content-between","mb-3"],[1,"crm-text-muted","crm-text-xs","ml-2"],["class","crm-text-muted crm-text-sm","appTranslate","",4,"ngIf"],["class","card mb-3",4,"ngFor","ngForOf","ngForTrackBy"],["appTranslate","",1,"crm-text-muted","crm-text-sm"],[1,"d-flex","align-items-start","justify-content-between","mb-2"],[1,"crm-fw-600","crm-text-sm"],[1,"crm-text-sm","crm-text-muted","mb-0"],["class","crm-note-attachments mt-2",4,"ngIf"],[1,"crm-note-attachments","mt-2"],[1,"card","opp-dealroom-card"],["class","crm-text-muted crm-text-sm mb-2",4,"ngIf"],["class","d-flex gap-1 mb-2",4,"ngIf"],[1,"crm-text-muted","crm-text-sm","mb-3"],["type","button",1,"btn","btn-theme","btn-sm","w-100",3,"click","disabled"],[1,"crm-text-muted","crm-text-sm","mb-2"],[1,"d-flex","gap-1","mb-2"],["class","crm-avatar crm-avatar-sm crm-avatar-blue",3,"title",4,"ngFor","ngForOf","ngForTrackBy"],[1,"crm-avatar","crm-avatar-sm","crm-avatar-blue",3,"title"],[1,"crm-timeline-item"],[1,"crm-timeline-time"],[1,"crm-timeline-text"]],template:function(n,t){n&1&&(i(0,"div",1)(1,"nav",2)(2,"a",3),h("click",function(){return t.back()}),a(3,"Opportunities"),r(),i(4,"span",4),a(5,"/"),r(),i(6,"span",5),a(7),r()(),f(8,Xm,4,1,"div",6),i(9,"div",7)(10,"div",8)(11,"div",9),a(12),r(),i(13,"div",10)(14,"div",11),a(15),r(),i(16,"div",12),a(17),i(18,"span",13),a(19,"Close"),r(),a(20),r()(),i(21,"div",14)(22,"button",15),h("click",function(){return t.toggleStatusMenu()}),i(23,"span",16),a(24),r(),f(25,ep,4,0,"span",17),r(),i(26,"div",18),f(27,tp,2,3,"button",19),r(),f(28,np,1,0,"div",20),r()()(),f(29,ip,7,0,"div",21),i(30,"div",22)(31,"button",23),h("click",function(){return t.addNote()}),b(32,"i",24),i(33,"span",13),a(34,"Add Note"),r()(),i(35,"button",23),h("click",function(){return t.addTodo()}),b(36,"i",25),i(37,"span",13),a(38,"To Do"),r()(),i(39,"button",23),h("click",function(){return t.addReminder()}),b(40,"i",26),i(41,"span",13),a(42,"Add Reminder"),r()()(),i(43,"div",27)(44,"div")(45,"div",28)(46,"button",29),h("click",function(){return t.setTab("details")}),a(47,"Details"),r(),i(48,"button",29),h("click",function(){return t.setTab("activities")}),a(49,"Activities"),r(),i(50,"button",30),h("click",function(){return t.setTab("notes")}),a(51,"Notes "),i(52,"span",31),a(53),r()()(),f(54,sp,115,19,"ng-container",32)(55,fp,9,3,"ng-container",32)(56,wp,11,4,"ng-container",32),r(),i(57,"div",33),f(58,Op,13,5,"div",34),i(59,"div",35)(60,"div",36)(61,"div",37),a(62,"Competitive Intelligence"),r()(),i(63,"div",38)(64,"div",39),a(65,"Competitors logged on this opportunity:"),r(),i(66,"div",40),f(67,Pp,2,2,"span",41),r()()(),i(68,"div",35)(69,"div",36)(70,"div",37),a(71,"Contact"),r()(),i(72,"div",38)(73,"div",42),a(74),r(),i(75,"div",43),a(76),r(),i(77,"div",12),a(78),r()()(),i(79,"div",35)(80,"div",36)(81,"div",37),a(82,"Assign History"),r()(),i(83,"div",38)(84,"div",44),f(85,Fp,6,3,"div",45),r()()()()()()),n&2&&(l(7),g(t.title),l(
2),c("ngIf",t.nextAction),l(3),c("ngClass","crm-avatar-"+t.avatarTone),l(),g(t.avatar),l(3),g(t.title),l(2),Ye("",t.account," \xB7 ",t.amount," \xB7 "),l(3),A(" ",t.closeDate,""),l(2),c("disabled",t.isWon),l(),c("ngClass","crm-badge-"+t.stageTone),l(),g(t.shownStage),l(),c("ngIf",!t.isWon),l(),D("open",t.showStatusMenu),l(),c("ngForOf",t.stageOptions)("ngForTrackBy",t.trackByIndex),l(),c("ngIf",t.showStatusMenu),l(),c("ngIf",t.isLost),l(2),c("disabled",!t.canLogActivity)("title",t.activityTitle),l(4),c("disabled",!t.canLogActivity)("title",t.activityTitle),l(4),c("disabled",!t.canLogActivity)("title",t.activityTitle),l(7),D("active",t.activeTab==="details"),l(2),D("active",t.activeTab==="activities"),l(2),D("active",t.activeTab==="notes"),l(3),g(t.noteCards.length),l(),c("ngIf",t.activeTab==="details"),l(),c("ngIf",t.activeTab==="activities"),l(),c("ngIf",t.activeTab==="notes"),l(2),c("ngIf",t.dealRoom),l(9),c("ngForOf",t.competitors)("ngForTrackBy",t.trackByIndex),l(7),g(t.contact.name),l(2),g(t.contact.email),l(2),g(t.contact.phone),l(7),c("ngForOf",t.assignHistory)("ngForTrackBy",t.trackByIndex))},dependencies:[j,W,N,L,Me],styles:["[_nghost-%COMP%]{display:block}.crm-breadcrumb[_ngcontent-%COMP%]{display:flex;align-items:center;font-size:.8125rem;gap:4px}.opp-status-menu[_ngcontent-%COMP%]{position:absolute;top:calc(100% + 4px);right:0;z-index:200;min-width:190px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);padding:4px;display:none}.opp-status-menu.open[_ngcontent-%COMP%]{display:block}.opp-status-item[_ngcontent-%COMP%]{display:block;width:100%;text-align:left;border:0;background:transparent;padding:8px 12px;border-radius:var(--radius-md);font-size:.8125rem;color:var(--color-text-secondary);cursor:pointer}.opp-status-item[_ngcontent-%COMP%]:hover{background:var(--color-primary-50);color:var(--color-primary)}.opp-status-backdrop[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:190}.opp-dealroom-card[_ngcontent-%COMP%]{border-left:3px solid var(--color-accent)}.crm-grid-3[_ngcontent-%COMP%]{grid-template-columns:repeat(3,minmax(0,1fr))}@media (max-width: 768px){.crm-grid-3[_ngcontent-%COMP%]{grid-template-columns:1fr}}code[_ngcontent-%COMP%]{background:var(--color-primary-50);padding:1px 5px;border-radius:var(--radius-sm);font-size:.8rem;color:var(--color-text-secondary)}.opp-lost-note[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:8px;padding:10px 14px;border:1px solid var(--color-border);border-left:3px solid var(--color-danger, #d9534f);border-radius:var(--radius-md);background:var(--color-surface-alt, rgba(0, 0, 0, .02));font-size:.8125rem;line-height:1.45}.opp-lost-note[_ngcontent-%COMP%] > i[_ngcontent-%COMP%]{line-height:1.45}.opp-attachments[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px}.opp-attachment[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px;max-width:100%;padding:4px 10px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);color:inherit;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.opp-attachment[_ngcontent-%COMP%]:hover{text-decoration:none}.opp-attachment-image[_ngcontent-%COMP%]{padding:0;border-radius:var(--radius-md);overflow:hidden}.opp-attachment-image[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{display:block;width:120px;height:90px;object-fit:cover}a.crm-po-link[_ngcontent-%COMP%]:hover{color:#024e7a;text-decoration:underline}"]})}}return o})();function Dp(o,m){o&1&&(i(0,"p",9),a(1,"Drag deals across stages"),r())}function Vp(o,m){o&1&&(i(0,"p",9),a(1,"Leads by status"),r())}function Lp(o,m){if(o&1){let e=w();i(0,"div",17),h("cdkDragStarted",function(){p(e);let t=d().$implicit,s=d();return u(s.onDragStart(t.stage))})("cdkDragEnded",function(){p(e);let t=d(2);return u(t.onDragEnd())})("click",function(){let t=p(e).$implicit,s=d(2);return u(s.openCard(t))}),i(1,"div",18),a(2),r(),i(3,"div",19),a(4),r()()}if(o&2){let e=m.$implicit,n=d().$implicit,t=d();c("cdkDragDisabled",!t.canDrag||t.isStageLocked(n.stage)),l(2),g(e.title),l(2),Le("",e.account," \xB7 ",e.amount," \xB7 ",e.owner,"")}}function Np(o,m){o&1&&(i(0,"div",20),a(1,"No deals"),r())}function Bp(o,m){o&1&&(i(0,"div",20),a(1,"No leads"),r())}function Wp(o,m){if(o&1){let e=w();i(0,"div",10),h("cdkDropListEntered",function(){let t=p(e).$implicit,s=d();return u(s.onListEntered(t.stage))})("cdkDropListExited",function(){p(e);let t=d();
2return u(t.onListExited())})("cdkDropListDropped",function(t){let s=p(e).$implicit,_=d();return u(_.onDrop(t,s.stage))}),i(1,"div",11)(2,"span"),a(3),r(),i(4,"span",12)(5,"span",13),a(6),r(),i(7,"span",14),a(8),r()()(),f(9,Lp,5,5,"div",15)(10,Np,2,0,"div",16)(11,Bp,2,0,"div",16),r()}if(o&2){let e=m.$implicit,n=m.index,t=d();D("is-drag-source",t.draggingFromStage===e.stage)("is-drag-target",t.dragOverStage===e.stage&&t.draggingFromStage!==e.stage),c("id",t.columnIds[n])("cdkDropListData",e.cards)("cdkDropListConnectedTo",t.columnIds),l(3),g(e.stage),l(3),g(e.cards.length),l(),c("ngClass","crm-badge-"+e.tone),l(),g(t.columnValue(e)),l(),c("ngForOf",e.cards)("ngForTrackBy",t.trackByCard),l(),c("ngIf",!e.cards.length&&t.mode==="opportunity"),l(),c("ngIf",!e.cards.length&&t.mode==="lead")}}var Rp=[{stage:"Follow-Up",tone:"amber"},{stage:"Proposal Sent",tone:"blue"},{stage:"Negotiation",tone:"amber"},{stage:"Decision Pending",tone:"purple"},{stage:"Won",tone:"green"},{stage:"Lost",tone:"red"},{stage:"Disqualified",tone:"gray"}],xn=[{stage:"New",tone:"blue"},{stage:"Contacted",tone:"amber"},{stage:"Lost",tone:"red"},{stage:"Disqualified",tone:"gray"}],qp=["Proposal Sent","Negotiation","Decision Pending","Won"],qi=(()=>{class o{get stageList(){return this.mode==="lead"?xn:Rp}constructor(e,n,t,s,_,S){this.router=e,this.route=n,this.toast=t,this.stageForm=s,this.dealStage=_,this.api=S,this.loading=!1,this.BOARD_PAGE_SIZE=100,this.mode="lead",this.columns=xn.map(T=>se(z({},T),{cards:[]})),this.columnIds=xn.map((T,M)=>`pipeline-col-${M}`),this.draggingFromStage=null,this.dragOverStage=null}ngOnInit(){this.loadBoard()}get canDrag(){return this.mode==="opportunity"}setMode(e){this.mode!==e&&(this.mode=e,this.columnIds=this.stageList.map((n,t)=>`pipeline-col-${t}`),this.columns=this.stageList.map(n=>se(z({},n),{cards:[]})),this.loadBoard())}loadBoard(){this.loading=!0;let e={search_query:"",page:1,page_size:this.BOARD_PAGE_SIZE,order_by:"-created_date"},n=this.mode==="lead";(n?this.api.getLeadList(e):this.api.getDealList(e)).subscribe({next:s=>{let S=(s?.responseCode===200&&s?.response?.data||[]||[]).map(T=>n?this.mapLead(T):this.mapDeal(T));this.columns=this.stageList.map(({stage:T,tone:M})=>({stage:T,tone:M,cards:S.filter(I=>(n?this.columnForLeadStatus(I.stageRaw):this.columnForStage(I.stageRaw))===T)})),this.loading=!1},error:()=>{this.columns=this.stageList.map(s=>se(z({},s),{cards:[]})),this.loading=!1,this.toast.error(n?"Failed to load leads.":"Failed to load pipeline.")}})}mapDeal(e){let n=e.deal_id??e.id??e.dealId??e.id;return{id:String(n),title:e.dealTitle||"\u2014",account:e.contactCompany||"\u2014",amount:this.formatAmou
2nt(e.dealAmount),owner:e.assignedToName||e.dealOwner||"\u2014",stageRaw:this.dealStage.displayStage(e.dealStatus||e.deal_status||e.status,e.dealStage)}}mapLead(e){return{id:String(e.id),title:e.leadTitle||"\u2014",account:e.contactCompany||"\u2014",amount:this.formatAmount(e.leadValue??e.estimatedValue??e.pipelineValue??e.dealAmount),owner:e.assignedToName||e.leadOwner||"\u2014",stageRaw:e.leadStatus||e.leadStage||"New"}}columnForStage(e){switch((e||"").trim()){case"Follow-Up":return"Follow-Up";case"Proposal Sent":return"Proposal Sent";case"Negotiation":return"Negotiation";case"Decision Pending":return"Decision Pending";case"Won":return"Won";case"Lost":return"Lost";case"Disqualified":return"Disqualified";default:return"Proposal Sent"}}columnForLeadStatus(e){switch((e||"").trim()){case"Contacted":return"Contacted";case"Converted to Deal":case"Converted":case"Won":return"";case"Lost":return"Lost";case"Disqualified":return"Disqualified";default:return"New"}}formatAmount(e){let n=Number(e)||0;return n>=1e7?"\u20B9"+(n/1e7).toFixed(2).replace(/\.00$/,"")+" Cr":"\u20B9"+Math.round(n/1e5)+" L"}trackByIndex(e){return e}trackByCard(e,n){return n.id}columnValue(e){return`\u20B9${e.cards.reduce((t,s)=>t+(parseFloat(s.amount.replace(/[^\d.]/g,""))||0),0)} L`}isStageLocked(e){return this.dealStage.isClosedStage(e)}onDragStart(e){this.draggingFromStage=e}onDragEnd(){this.draggingFromStage=null,this.dragOverStage=null}onListEntered(e){this.dragOverStage=e}onListExited(){this.dragOverStage=null}onDrop(e,n){return B(this,null,function*(){if(this.dragOverStage=null,this.draggingFromStage=null,!this.canDrag)return;if(e.previousContainer===e.container){Ut(e.container.data,e.previousIndex,e.currentIndex);return}let t=e.previousContainer.data[e.previousIndex],s=this.columns.find(T=>T.cards.includes(t))?.stage;if(this.isStageLocked(s)){this.toast.warning(`"${t.title}" is closed as Won and can no longer be moved to another stage.`),this.loadBoard();return}if(!qp.includes(n)){this.loadBoard();return}let _=yield nt(this.dealStage.context(Number(t.id))),S=yield this.stageForm.open({stage:n,cardName:t.title,cardAmount:t.amount,cardAccount:t.account,sourceStage:s,data:{rfqCards:_.rfqCards,wonProducts:_.wonProducts,prefill:_.prefill,contactName:_.contactName||t.account}});if(S!==null){if(this.dealStage.usesQuote(n)){let T=yield nt(this.dealStage.saveQuote(Number(t.id),_.deal,S.products||[],this.dealStage.quoteExpiryFrom(n,S)));if(!T.ok){this.toast.error(T.message||"Failed to create quote."),this.loadBoard();return}}Ht(e.previousContainer.data,e.container.data,e.previousIndex,e.currentIndex),t.stageRaw=n,this.api.updateDealStatus({deal_id:Number(t.id),updated_status:n,activityJson:this.dealStage.buildActivityJson(n,S)}).subscribe({next:T=>{T?.responseCode===200&&(T?.response?.success??!0)?(this.toast.success(T?.response?.message||`"${t.title}" moved to ${n}.`),this.loadBoard()):(this.toast.error(T?.response?.message||"Failed to update stage."),this.loadBoard())},error:()=>{this.toast.error("Failed to update stage."),this.loadBoard()}})}})}openCard(e){let n=this.mode==="lead"?"leads":"opportunities";this.router.navigate([n,e.id],{relativeTo:this.route.parent})}refresh(){this.loadBoard()}newDeal(){this.router.navigate(["opportunities","new"],{relativeTo:this.route.parent})}static{this.\u0275fac=function(n){return new(n||o)(E($),E(Y),E(q),E(Ge),E(Ct),E(R))}}static{this.\u0275cmp=V({type:o,selectors:[["app-pipeline"]],decls:15,vars:6,consts:[[1,"crm-page-body"],[1,"crm-page-header"],["appTranslate","",1,"crm-page-title"],["class","crm-page-subtitle","appTranslate","",4,"ngIf"],[1,"crm-page-actions"],[1,"crm-view-toggle","d-flex","gap-1"],["type","button","appTranslate","",1,"btn","btn-sm",3,"click","ngClass"],[1,"crm-pipeline-grid"],["class","crm-pipeline-col","cdkDropList","",3,"is-drag-source","is-drag-target","id","cdkDropListData","cdkDropListConnectedTo","cdkDropListEntered","cdkDropListExited","cdkDropListDropped",4,"ngFor","ngForOf","ngForTrackBy"],["appTranslate","",1,"crm-page-subtitle"],["cdkDropList","",1,"crm-pipeline-col",3,"cdkDropListEntered","cdkDropListExited","cdkDropListDropped","id","cdkDropListData","cdkDropListConnectedTo"],[1,"crm-pipeline-col-header"],[1,"d-flex","align-items-center","gap-1"],[1,"crm-badge","crm-badge-gray"],[1,"crm-badge",3,"ngClass"],["class","crm-pipeline-card","cdkDrag","",3,"cdkDragDisabled","cdkDragStarted","cdkDragEnded","click",4,"ngFor","ngForOf","ngForTrackBy"],["class","crm-pipeline-card-meta text-center py-2","appTranslate","",4,"ngIf"],["cdkDrag","",1,"crm-pipeline-card",3,"cdkDragStarted","cdkDragEnded","click","cdkDragDisabled"],[1,"crm-pipeline-card-title"],[1,"crm-pipeline-card-meta"],["appTranslate","",1,"crm-pipeline-card-meta","text-center","py-2"]],template:function(n,t){n&1&&(i(0,"div",0)(1,"div",1)(2,"div")(3,"h1",2),a(4,"Pipeline"),r(),f(5,Dp,2,0,"p",3)(6,Vp,2,0,"p",3),r(),i(7,"div",4)(8,"div",5)(9,"button",6),h("click",function(){return t.setMode("lead")}),a(10,"Leads"),r(),i(11,"button",6),h("click",function(){return t.setMode("opportunity")}),a(12,"Opportunities"),r()()()(),i(13,"div",7),f(14,Wp,12,15,"div",8),r()()),n&2&&(l(5),c("ngIf",t.mode==="opportunity"),l(),c("ngIf",t.mode==="lead"),l(3),c("ngClass",t.mode==="lead"?"btn-theme":"btn-light"),l(2),c("ngClass",t.mode==="opportunity"?"btn-theme":"btn-light"),l(3),c("ngForOf",t.columns)("ngForTrackBy",t.trackByIndex))},dependencies:[j,W,N,Qt,Kt,L],styles:["[_nghost-%COMP%]{display:block}.crm-view-toggle[_ngcontent-%COMP%]{display:inline-flex;border:1px solid var(--color-border);border-radius:var(--radius-md);overflow:hidden}.crm-view-toggle[_ngcontent-%COMP%] > .btn[_ngcontent-%COMP%]{border:0;border-radius:0;padding:4px 14px;font-size:.8125rem}.crm-view-toggle[_ngcontent-%COMP%] > .btn[_ngcontent-%COMP%]:not(:first-child){border-left:1px solid var(--color-border)}.crm-pipeline-card.cdk-drag-disabled[_ngcontent-%COMP%]{cursor:pointer}.crm-pipeline-col.cdk-drop-list-dragging[_ngcontent-%COMP%] .crm-pipeline-card[_ngcontent-%COMP%]:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}"]})}}return o}
2)();var zp=()=>["Karthik Iyer","Rohit Sharma","TV Sindhu","Hruthick Gunda","Priya Menon"],jp=o=>({categories:o}),Up=()=>[150,150,120,100,150],Hp=o=>({type:"column",name:"Quota",data:o}),Kp=()=>[85,0,0,0,0],Qp=o=>({type:"column",name:"Commit",data:o}),Gp=()=>[56,80,0,0,28],Jp=o=>({type:"column",name:"Best Case",data:o}),Yp=(o,m,e)=>[o,m,e],$p=(o,m)=>({xAxis:o,series:m});function Zp(o,m){if(o&1&&(i(0,"span",33),a(1),Ke(2,"number"),r()),o&2){let e=d().$implicit;l(),A(" \xB1\u20B9",kn(2,1,e.ai*.08,"1.0-0")," L ")}}function Xp(o,m){if(o&1){let e=w();i(0,"tr")(1,"td")(2,"a",30),h("click",function(){let t=p(e).$implicit,s=d(2);return u(s.openRep(t))}),a(3),r()(),i(4,"td"),a(5),r(),i(6,"td"),a(7),r(),i(8,"td"),a(9),r(),i(10,"td"),a(11),r(),i(12,"td"),a(13),r(),i(14,"td"),a(15),f(16,Zp,3,4,"span",31),r(),i(17,"td")(18,"span",32),a(19),r()()()}if(o&2){let e=m.$implicit,n=d(2);l(3),g(e.rep),l(2),g(n.fmt(e.quota)),l(2),g(n.fmt(e.commit)),l(2),g(n.fmt(e.bestCase)),l(2),g(n.fmt(e.pipeline)),l(2),g(n.fmt(e.omitted)),l(2),A(" ",n.fmt(e.ai)," "),l(),c("ngIf",e.ai>0),l(2),c("ngClass",e.gapPositive?"forecast-gap-up":"forecast-gap-down"),l(),A(" ",n.fmtGap(e.gap)," ")}}function e0(o,m){if(o&1){let e=w();P(0),i(1,"div",1)(2,"div")(3,"h1",2),a(4,"Forecast"),r(),i(5,"p",3),a(6,"AI-assisted quota roll-up"),r()(),i(7,"div",6)(8,"select",7),v("ngModelChange",function(t){p(e);let s=d();return y(s.period,t)||(s.period=t),u(t)}),i(9,"option",8),a(10,"This Quarter (Q2 FY26)"),r(),i(11,"option",8),a(12,"Next Quarter"),r(),i(13,"option",8),a(14,"This Year"),r()(),i(15,"button",9),h("click",function(){p(e);let t=d();return u(t.exportForecast())}),b(16,"i",10),i(17,"span",8),a(18,"Export"),r()()()(),i(19,"div",11)(20,"div",12)(21,"div",13)(22,"table",14)(23,"thead")(24,"tr")(25,"th",8),a(26,"Rep"),r(),i(27,"th",8),a(28,"Quota"),r(),i(29,"th",8),a(30,"Commit"),r(),i(31,"th",8),a(32,"Best Case"),r(),i(33,"th",8),a(34,"Pipeline"),r(),i(35,"th",8),a(36,"Omitted"),r(),i(37,"th",8),a(38,"AI Forecast"),r(),i(39,"th",8),a(40,"Gap"),r()()(),i(41,"tbody"),f(42,Xp,20,10,"tr",15),i(43,"tr",16)(44,"td",17),a(45,"Total"),r(),i(46,"td",18),a(47),r(),i(48,"td",18),a(49),r(),i(50,"td",18),a(51),r(),i(52,"td",18),a(53),r(),i(54,"td",18),a(55),r(),i(56,"td",18),a(57),r(),i(58,"td")(59,"span",19),a(60),r()()()()()()()(),i(61,"div",11)(62,"div",20)(63,"div",21),a(64,"Forecast vs Quota by Rep"),r()(),i(65,"div",22),b(66,"app-crm-chart",23),r()(),i(67,"div",24)(68,"div",20)(69,"div",21),a(70,"Pipeline Gap Analysis"),r()(),i(71,"div",22)(72,"div",25)(73,"div")(74,"div",26),b(75,"i",27),i(76,"span",8),a(77,"AI Recommendation"),r()(),i(78,"div",28),a(79," Pipeline coverage is 1.26\xD7 quota \u2014 below the 3\xD7 benchmark. Recommend opening 6 net-new opps \u2265\u20B925 L in the next 14 days to close the gap. Hruthick Gunda's coverage is at 1.05\xD7 \u2014 assign Hero MotoCorp expansion + 2 Maruti follow-ups to his queue. "),r()()(),i(80,"p",29),a(81," Forecast rolls up automatically from each opportunity's stage on the Opportunities table. "),r()()(),F()}if(o&2){let e=d();l(8),x("ngModel",e.period),l(34),c("ngForOf",e.rows)("ngForTrackBy",e.trackByIndex),l(5),g(e.fmt(e.total.quota)),l(2),g(e.fmt(e.total.commit)),l(2),g(e.fmt(e.total.bestCase)),l(2),g(e.fmt(e.total.pipeline)),l(2),g(e.fmt(e.total.omitted)),l(2),g(e.fmt(e.total.ai)),l(3),g(e.fmtGap(e.total.gap)),l(6),c("type","column")("options",ke(29,$p,He(14,jp,C(13,zp)),Dt(25,Yp,He(17,Hp,C(16,Up)),He(20,Qp,C(19,Kp)),He(23,Jp,C(22,Gp)))))("height",280)}}var zi=(()=>{class o{constructor(e){this.toast=e,this.period="This Quarter (Q2 FY26)",this.rows=[{rep:"Karthik Iyer",quota:150,commit:85,bestCase:56,pipeline:45,omitted:0,ai:113,gap:-37,gapPositive:!1},{rep:"Rohit Sharma",quota:150,commit:0,bestCase:80,pipeline:32,omitted:0,ai:40,gap:-110,gapPositive:!1},{rep:"TV Sindhu",quota:120,commit:0,bestCase:0,pipeline:33,omitted:0,ai:0,gap:-120,gapPositive:!1},{rep:"Hruthick Gunda",quota:100,commit:0,bestCase:0,pipeline:45,omitted:0,ai:0,gap:-100,gapPositive:!1},{rep:"Priya Menon",quota:150,commit:0,bestCase:28,pipeline:120,omitted:0,ai:14,gap:-136,gapPositive:!1}],this.total={quota:670,commit:85,bestCase:164,pipeline:275,omitted:0,ai:167,gap:-503}}trackByIndex(e){return e}
2exportForecast(){this.toast.info("Forecast export \u2014 coming soon.")}openRep(e){this.toast.info("Rep forecast drill-down \u2014 coming soon.")}fmt(e){return e?"\u20B9"+e.toFixed(0)+" L":"\u2014"}fmtGap(e){return(e>=0?"+":"")+"\u20B9"+Math.round(e)+" L"}static{this.\u0275fac=function(n){return new(n||o)(E(q))}}static{this.\u0275cmp=V({type:o,selectors:[["app-forecast"]],decls:9,vars:1,consts:[[1,"crm-page-body"],[1,"crm-page-header"],["appTranslate","",1,"crm-page-title"],["appTranslate","",1,"crm-page-subtitle"],["icon","ri-bar-chart-grouped-line","title","Coming Soon","subtitle","AI-assisted forecasting is on the way. Check back shortly."],[4,"ngIf"],[1,"crm-page-actions"],[1,"crm-filter-select",3,"ngModelChange","ngModel"],["appTranslate",""],["type","button",1,"btn","btn-outline-theme","btn-sm",3,"click"],[1,"ri-download-line"],[1,"card","mb-4"],[1,"card-body","p-0"],[1,"crm-table-wrapper","crm-table-wrapper-flush"],[1,"crm-data-table"],[4,"ngFor","ngForOf","ngForTrackBy"],[1,"forecast-total-row"],["appTranslate","",1,"crm-fw-700"],[1,"crm-fw-700"],[1,"forecast-gap-down","crm-fw-700"],[1,"card-header"],["appTranslate","",1,"card-title"],[1,"card-body"],[3,"type","options","height"],[1,"card"],[1,"crm-alert","crm-alert-info"],[1,"crm-alert-title"],[1,"ri-sparkling-2-line"],["appTranslate","",1,"crm-alert-text"],["appTranslate","",1,"crm-text-xs","crm-text-muted","mt-3"],[1,"crm-cell-primary",3,"click"],["class","crm-text-xs crm-text-muted",4,"ngIf"],[3,"ngClass"],[1,"crm-text-xs","crm-text-muted"]],template:function(n,t){n&1&&(i(0,"div",0)(1,"div",1)(2,"div")(3,"h1",2),a(4,"Forecast"),r(),i(5,"p",3),a(6,"AI-assisted quota roll-up"),r()()(),b(7,"app-crm-empty-state",4),f(8,e0,82,32,"ng-container",5),r()),n&2&&(l(8),c("ngIf",!1))},dependencies:[j,W,N,X,ee,Z,U,H,L,ft,st,Rt],styles:["[_nghost-%COMP%]{display:block}.forecast-gap-up[_ngcontent-%COMP%]{color:var(--color-success);font-weight:600}.forecast-gap-down[_ngcontent-%COMP%]{color:var(--color-error);font-weight:600}.forecast-total-row[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{background:var(--color-primary-50);border-top:2px solid var(--color-border)}"]})}}return o})();function t0(o,m){if(o&1&&(i(0,"div",32)(1,"div",33),a(2),r(),i(3,"div",34),a(4),r(),i(5,"div",35),a(6),r()()),o&2){let e=m.$implicit;l(2),g(e.num),l(2),g(e.title),l(2),g(e.body)}}function n0(o,m){if(o&1){let e=w();P(0),i(1,"div",6)(2,"div",7)(3,"div",8),a(4,"Generate EBR Deck"),r()(),i(5,"div",9)(6,"div",10)(7,"div",11)(8,"label",12),a(9,"Account"),r(),i(10,"select",13),v("ngModelChange",function(t){p(e);let s=d();return y(s.account,t)||(s.account=t),u(t)}),i(11,"option"),a(12,"Tata Motors Ltd"),r(),i(13,"option"),a(14,"Mahindra & Mahindra"),r(),i(15,"option"),a(16,"Bajaj Auto Ltd"),r(),i(17,"option"),a(18,"Hero MotoCorp"),r(),i(19,"option"),a(20,"Ashok Leyland"),r()()(),i(21,"div",11)(22,"label",14),a(23,"Review Period"),r(),i(24,"select",13),v("ngModelChange",function(t){p(e);let s=d();return y(s.reviewPeriod,t)||(s.reviewPeriod=t),u(t)}),i(25,"option",15),a(26,"Last 90 days"),r(),i(27,"option",15),a(28,"Last 180 days"),r(),i(29,"option",15),a(30,"YTD"),r(),i(31,"option",15),a(32,"Last 12 months"),r()()()(),i(33,"div",16)(34,"div",11)(35,"label",14),a(36,"Audience"),r(),i(37,"select",13),v("ngModelChange",function(t){p(e);let s=d();return y(s.audience,t)||(s.audience=t),u(t)}),i(38,"option",15),a(39,"VP / C-suite"),r(),i(40,"option",15),a(41,"Procurement Leadership"),r(),i(42,"option",15),a(43,"Joint Steering"),r()()(),i(44,"div",11)(45,"label",14),a(46,"Template"),r(),i(47,"select",13),v("ngModelChange",function(t){p(e);let s=d();return y(s.template,t)||(s.template=t),u(t)}),i(48,"option",15),a(49,"Standard 8-slide"),r(),i(50,"option",15),a(51,"Executive 4-slide"),r(),i(52,"option",15),a(53,"Renewal-focused"),r()()()(),i(54,"div",17)(55,"label",14),a(56,"Custom asks / talking points"),r(),i(57,"textarea",18),v("ngModelChange",function(t){p(e);let s=d();return y(s.customAsks,t)||(s.customAsks=t),u(t)}),r()(),i(58,"div",19)(59,"button",20),h("click",function(){p(e);let t=d();return u(t.generateEbr())}),b(60,"i",21),i(61,"span",15),a(62,"Generate EBR with AI"),r()(),i(63,"button",22),h("click",function(){p(e);let t=d();return u(t.saveAsDraft())}),a(64," Save as draft "),r()()()(),i(65,"div",23)(66,"div",7)(67,"div",8),a(68,"Preview \u2014 Tata Motors Ltd EBR"),r(),i(69,"div",24)(70,"button",25),h("click",function(){p(e);let t=d();return u(t.editSlides())}),a(71,"Edit slides"),r(),i(72,"button",26),h("click",function(){p(e);let t=d();return u(t.exportPdf())}),b(73,"i",27),i(74,"span",15),a(75,"Export PDF"),r()(),i(76,"button",28),h("click",function(){p(e);let t=d();return u(t.scheduleWithContact())}),b(77,"i",29),i(78,"span",15),a(79,"Schedule with Anika Sen"),r()()()(),i(80,"div",9)(81,"div",30),f(82,t0,7,3,"div",31),r()()(),F()}if(o&2){let e=d();l(10),x("ngModel",e.account),l(14),x("ngModel",e.reviewPeriod),l(13),x("ngModel",e.audie
2nce),l(10),x("ngModel",e.template),l(10),x("ngModel",e.customAsks),l(25),c("ngForOf",e.slides)("ngForTrackBy",e.trackByIndex)}}var ji=(()=>{class o{constructor(e){this.toast=e,this.account="Tata Motors Ltd",this.reviewPeriod="Last 180 days",this.audience="VP / C-suite",this.template="Standard 8-slide",this.customAsks="",this.slides=[{num:1,title:"Executive Summary",body:"Strategic partnership across 3 BUs \xB7 \u20B94.6 Cr ARR \xB7 Health 87/100 \xB7 9 NPS. Strongest quarter since onboarding."},{num:2,title:"Wins \u2014 Last 180d",body:`\u2022 Latitude refresh closed \u20B948 L 3\u2022 3 new departments onboarded 4\u2022 Welding line UAT complete 5\u2022 24\xD77 SLA hit 99.4%`},{num:3,title:"Adoption",body:"Active users +42% \xB7 6 modules in production \xB7 TM EV BU now 70% deployed"},{num:4,title:"Support & SLAs",body:"Tickets resolved: 142 \xB7 CSAT 4.6/5 \xB7 Avg first response 11 min (target 15) \xB7 1 P1 (resolved < 2h)"},{num:5,title:"Renewal Outlook",body:"Renewal in 81 days \xB7 Auto-renew probability 92% \xB7 Expansion potential \u20B91.2 Cr"},{num:6,title:"Roadmap Alignment",body:"Q3: BRM rollout for vendor scorecards \xB7 Q4: EV plant pilot \xB7 Q1 27: APAC expansion"},{num:7,title:"Risks & Mitigations",body:`\u26A0 AR aging (\u20B914.2 L > 30d) \u2014 payment plan agreed 6\u26A0 Champion change in Pune plant \u2014 onboarding new POC`},{num:8,title:"Asks & Next Steps",body:`\u2022 Confirm 24-month warranty addendum 7\u2022 Joint case study for the Auto OEM peer-set 8\u2022 Exec sponsor sign-off on EV pilot scope`}]}trackByIndex(e){return e}generateEbr(){this.toast.info("EBR generation \u2014 coming soon.")}saveAsDraft(){this.toast.info("Saving EBR drafts \u2014 coming soon.")}editSlides(){this.toast.info("Open slide editor \u2014 coming soon.")}exportPdf(){this.toast.info("EBR PDF export \u2014 coming soon.")}scheduleWithContact(){this.toast.info("Scheduling an EBR \u2014 coming soon.")}static{this.\u0275fac=function(n){return new(n||o)(E(q))}}static{this.\u0275cmp=V({type:o,selectors:[["app-ebr"]],decls:9,vars:1,consts:[[1,"crm-page-body"],[1,"crm-page-header"],["appTranslate","",1,"crm-page-title"],["appTranslate","",1,"crm-page-subtitle"],["icon","ri-slideshow-2-line","title","Coming Soon","subtitle","AI-compiled EBR decks are on the way. Check back shortly."],[4,"ngIf"],[1,"card","mb-3"],[1,"card-header"],["appTranslate","",1,"card-title"],[1,"card-body"],[1,"crm-form-row","crm-form-row-2"],[1,"crm-form-group"],["appTranslate","",1,"crm-form-label","crm-form-label-required"],[1,"crm-form-select",3,"ngModelChange","ngModel"],["appTranslate","",1,"crm-form-label"],["appTranslate",""],[1,"crm-form-row","crm-form-row-2","mt-2"],[1,"crm-form-group","mt-2"],["rows","3","placeholder","E.g. discuss expansion to 2 new plants, 24-month warranty extension\u2026",1,"crm-form-textarea",3,"ngModelChange","ngModel"],[1,"d-flex","gap-2","mt-2"],["type","button",1,"btn","btn-theme","btn-sm",3,"click"],[1,"ri-sparkling-2-line"],["type","button","appTranslate","",1,"btn","btn-light","btn-sm",3,"click"],[1,"card"],[1,"d-flex","gap-2"],["type","button","appTranslate","",1,"btn","btn-light","btn-xs",3,"click"],["type","button",1,"btn","btn-outline-theme","btn-xs",3,"click"],[1,"ri-file-pdf-line"],["type","button",1,"btn","btn-theme","btn-xs",3,"click"],[1,"ri-calendar-line"],[1,"ebr-slides-grid"],["class","ebr-slide",4,"ngFor","ngForOf","ngForTrackBy"],[1,"ebr-slide"],[1,"ebr-slide-num"],[1,"ebr-slide-title"],[1,"ebr-slide-body"]],template:function(n,t){n&1&&(i(0,"div",0)(1,"div",1)(2,"div")(3,"h1",2),a(4,"Executive Business Review (EBR)"),r(),i(5,"p",3),a(6,"AI-compiled review deck from account data \u2014 Wins, Adoption, Support, Renewal Outlook, Asks"),r()()(),b(7,"app-crm-empty-state",4),f(8,n0,83,7,"ng-container",5),r()),n&2&&(l(8),c("ngIf",!1))},dependencies:[W,N,X,ee,te,Z,U,H,L,st],styles:["[_nghost-%COMP%]{display:block}.ebr-slides-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:16px}.ebr-slide[_ngcontent-%COMP%]{border:1px solid var(--color-border);border-radius:var(--radius-md);padding:16px;background:var(--color-surface);box-shadow:var(--shadow-sm);min-height:120px;
8transition:box-shadow var(--transition-base),transform var(--transition-base)}.ebr-slide[_ngcontent-%COMP%]:hover{box-shadow:var(--shadow-md);transform:translateY(-1px)}.ebr-slide-num[_ngcontent-%COMP%]{font-size:.6875rem;font-weight:700;color:var(--color-accent);text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px}.ebr-slide-title[_ngcontent-%COMP%]{font-size:.875rem;font-weight:700;color:var(--color-primary);margin-bottom:8px}.ebr-slide-body[_ngcontent-%COMP%]{font-size:.8125rem;color:var(--color-text-secondary);line-height:1.55;white-space:pre-line}"]})}}return o})();var yn=()=>({standalone:!0}),i0=(o,m)=>({"crm-stat-trend-up":o,"crm-stat-trend-down":m});function r0(o,m){if(o&1){let e=w();i(0,"div",25)(1,"div",26)(2,"div",27)(3,"label",28),a(4,"Name"),r(),i(5,"input",29),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.newTemplate.name,t)||(s.newTemplate.name=t),u(t)}),r()(),i(6,"div",27)(7,"label",30),a(8,"Duration (days)"),r(),i(9,"input",31),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.newTemplate.duration_days,t)||(s.newTemplate.duration_days=t),u(t)}),r()(),i(10,"div",27)(11,"label",30),a(12,"Description"),r(),i(13,"input",32),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.newTemplate.description,t)||(s.newTemplate.description=t),u(t)}),r()()(),i(14,"div",33)(15,"button",34),h("click",function(){p(e);let t=d(2);return u(t.createTemplate())}),a(16),r()()()}if(o&2){let e=d(2);l(5),x("ngModel",e.newTemplate.name),c("ngModelOptions",C(8,yn)),l(4),x("ngModel",e.newTemplate.duration_days),c("ngModelOptions",C(9,yn)),l(4),x("ngModel",e.newTemplate.description),c("ngModelOptions",C(10,yn)),l(2),c("disabled",e.savingTemplate),l(),A(" ",e.savingTemplate?"Saving\u2026":"Create Template"," ")}}function o0(o,m){if(o&1&&(i(0,"tr")(1,"td",35),a(2),r(),i(3,"td"),a(4),r(),i(5,"td"),a(6),r(),i(7,"td",36),a(8),r()()),o&2){let e=m.$implicit;l(2),g(e.name),l(2),g(e.durationDays!=null?e.durationDays+" days":"\u2014"),l(2),g(e.status||"\u2014"),l(2),g(e.description||"\u2014")}}function a0(o,m){o&1&&(i(0,"tr")(1,"td",37),a(2,"No templates."),r()())}function s0(o,m){if(o&1){let e=w();i(0,"div",21)(1,"div",22)(2,"div",23),a(3,"Onboarding Templates"),r(),i(4,"button",5),h("click",function(){p(e);let t=d();return u(t.toggleNewTemplate())}),b(5,"i",6),a(6),r()(),f(7,r0,17,11,"div",24),i(8,"div",16)(9,"div",17)(10,"table",18)(11,"thead")(12,"tr")(13,"th",7),a(14,"Name"),r(),i(15,"th",7),a(16,"Duration"),r(),i(17,"th",7),a(18,"Status"),r(),i(19,"th",7),a(20,"Description"),r()()(),i(21,"tbody"),f(22,o0,9,4,"tr",15)(23,a0,3,0,"tr",20),r()()()()()}if(o&2){let e=d();l(6),A(" ",e.showNewTemplate?"Cancel":"New Template"," "),l(),c("ngIf",e.showNewTemplate),l(15),c("ngForOf",e.templates)("ngForTrackBy",e.trackByIndex),l(),c("ngIf",!e.templates.length)}}function l0(o,m){if(o&1&&(i(0,"tr")(1,"td",35),a(2),r(),i(3,"td"),a(4),r(),i(5,"td"),a(6),Ke(7,"slice"),r(),i(8,"td"),a(9),r()()),o&2){let e=m.$implicit;D("crm-row-risk",e.is_overdue===!0||e.is_overdue==="true"),l(2),g(e.name||"\u2014"),l(2),g(e.owner_name||e.ownerText||"\u2014"),l(2),g(e.dueDate?Lt(7,6,e.dueDate,0,10):"\u2014"),l(3),g(e.display_status||e.status||"\u2014")}}function c0(o,m){o&1&&(i(0,"tr")(1,"td",37),a(2,"No milestones."),r()())}function d0(o,m){if(o&1){let e=w();i(0,"div",21)(1,"div",12)(2,"div",38),a(3),i(4,"span",39),a(5),r()(),i(6,"button",40),h("click",function(){p(e);let t=d();return u(t.closeDetail())}),b(7,"i",41),r()(),i(8,"div",42)(9,"dl",43)(10,"dt",7),a(11,"CSM Owner"),r(),i(12,"dd"),a(13),r(),i(14,"dt",7),a(15,"Template"),r(),i(16,"dd"),a(17),r(),i(18,"dt",7),a(19,"Kickoff"),r(),i(20,"dd"),a(21),r(),i(22,"dt",7),a(23,"Time to Value"),r(),i(24,"dd"),a(25),r(),i(26,"dt",7),a(27,"Project Ref"),r(),i(28,"dd"),a(29),r()(),i(30,"div",44),a(31,"Milestones"),r(),i(32,"div",45)(33,"table",18)(34,"thead")(35,"tr")(36,"th",7),a(37,"Milestone"),r(),i(38,"th",7),a(39,"Owner"),r(),i(40,"th",7),a(41,"Due"),r(),i(42,"th",7),a(43,"Status"),r()()(),i(44,"tbody"),f(45,l0,10,10,"tr",19)(46,c0,3,0,"tr",20),r()()()()()}if(o&2){let e=d();l(3),g(e.detail.customer_name),l(2),g(e.detail.status),l(8),g(e.detail.csm_owner_name||"\u2014"),l(4),g(e.detail.template_name||"\u2014"),l(4),g(e.detail.kickoffDate||"\u2014"),l(4),g(e.detail.timeToValueDays!=null?e.detail.timeToValueDays+" days":"\u2014"),l(4),g(e.detail.linkedProjectRef||"\u2014"),l(16),c("ngForOf",e.detailMilestones)("ngForTrackBy",e.trackByIndex),l(),c("ngIf",!e.detailMilestones.length)}}function m0(o,m){if(o&1&&(i(0,"div",51),a(1),r()),o&2){let e=d().$implicit;c("ngClass",ke(2,i0,e.trendDir==="up",e.trendDir==="down")),l(),A(" ",e.trend," ")}}function p0(o,m){if(o&1&&(i(0,"div",46)(1,"div",47)(2,"span",48),a(3),r()(),i(4,"div",49),a(5),r(),f(6,m0,2,5,"div",50),r()),o&2){let e=m.$implicit;l(3),g(e.label),l(2),g(e.value),l(),c("ngIf",e.trend)}}function u0(o,m){if(o&1&&(i(0,"option"),a(1),r()),o&2){let e=m.$implicit;l(),g(e)}}function g0(o,m){if(o&1&&(i(0,"option"),a(1),r()),o&2){let e=m.$implicit;l(),g(e)}}function _0(o,m){if(o&1){let e=w();i(0,"button",64),h("click",function(){let t=p(e).$implicit,s=d().$implicit,_=d();return u(_.setStatus(s,t))}),b(1,"i",65),a(2),r()}if(o&2){let e=m.$implicit;l(2),A("Mark ",e," ")}}function h0(o,m){if(o&1){let e=w();i(0,"tr")(1,"td")(2,"a",52),h("click",function(){let t=p(e).$implicit,s=d();return u(s.openRow(t))}),a(3),r()(),i(4,"td"),a(5),r(),i(6,"td"),a(7),r(),i(8,"td"),a(9),r(),i(10,"td")(11,"span",53),a(12),r()(),i(13,"td")(14,"span",54),a(15),r()(),i(16,"td",55)(17,"div",56)(18,"button",57),b(19,"i",58),r(),i(20,"div",59),f(21,_0,3,1,"button",60),b(22,"div",61),i(23,"button",62),h("click",function(){let t=p(e).$implicit,s=d();return u(s.deleteRow(t))}),b(24,"i",63),i(25,"span",7),a(26,"Delete"),r()()()()()()}if(o&2){let e=m.$implicit,n=d();D("crm-row-risk",e.risk),l(3),g(e.customer),l(2),g(e.milestone),l(2),g(e.owner),l(2),g(e.due),l(2),c("ngClass","crm-badge-"+e.statusTone),l(),g(e.status),l(3),g(e.project),l(6),c("ngForOf",n.statusOptions)("ngForTrackBy",n.trackByIndex)}}function f0(o,m){o&1&&(i(0,"tr")(1,"td",66),a(2,"Loading onboarding\u2026"),r()())}function x0(o,m){o&1&&(i(0,"tr")(1,"td",67),a(2,"No onboarding milestones."),r()())}var Ui=(()=>{class o{constructor(e,n,t,s){this.toast=e,this.modal=n,this.onboardCustomer=t,this.api=s,this.kpis=[{label:"Customers Onboarding",value:"\u2014",trend:""},{label:"Avg Time to Value",value:"\u2014",trend:""},{label:"On-Track",value:"\u2014",trend:""},{label:"At Risk",value:"\u2014",trend:""}],this.rows=[],this.filteredRows=[],this.loading=!1,this.customerFilter="All Customers",this.csmFilter="All CSMs",this.customerOptions=[],this.csmOptions=[],this.statusOptions=["On Track","At Risk","On Hold","Completed"],this.canDelete=!1,this.detail=null,this.detailMilestones=[],this.templates=[],this.showTemplates=!1,this.showNewTemplate=!1,this.savingTemplate=!1,this.newTemplate={name:"",duration_days:30,description:""}}ngOnInit(){this.refresh()}refresh(){this.loadDashboard(),this.loadOnboardings()}loadDashboard(){this.api.getOnboardingDashboard().subscribe({next:e=>{let n=e?.response?.data,t=n?.response||n;if(!t)return;let s=t.avg_time_to_value_delta_vs_prev_quarter;this.kpis=[{label:"Customers Onboarding",value:String(t.customers_onboarding??"\u2014"),trend:t.starting_this_week!=null?`${t.starting_this_week} starting this week`:""},{label:"Avg Time to Value",value:t.avg_time_to_value_days!=null?`${t.avg_time_to_value_days} days`:"\u2014",trend:s!=null?`${s>=0?"+":""}${s} vs prev qtr`:"",trendDir:s!=null&&s<0?"down":"up"},{label:"On-Track",value:String(t.on_track??"\u2014"),trend:t.on_track_percent!=null?`${t.on_track_percent}%`:"",trendDir:"up"},{label:"At Risk",value:String(t.at_risk??"\u2014"),trend:"",trendDir:"down"}]},error:()=>{}})}loadOnboardings(){this.loading=!0,this.api.getOnboardingList({page:1,page_size:100}).subscribe({next:e=>{if(e?.responseCode===200&&e?.response){let n=e.response.data||e.response.results||[];this.rows=this.flattenMilestones(n)}else this.rows=[];this.customerOptions=Array.from(new Set(this.rows.map(n=>n.customer).filter(n=>n&&n!=="\u2014"))),this.csmOptions=Array.from(new Set(this.rows.map(n=>n.owner).filter(n=>n&&n!=="\u2014"))),this.filteredRows=this.filterRows(this.rows),this.loading=!1},error:()=>{this.rows=[],this.filteredRows=[],this.loading=!1}})}onFilterChange(){this.filteredRows=this.filterRows(this.rows)}filterRows(e){return e.filter(n=>{let t=this.customerFilter==="All Customers"||n.customer===this.customerFilter,s=this.csmFilter==="All CSMs"||n.owner===this.csmFilter;return t&&s})}flattenMilestones(e){let n=[];for(let t of e||[]){let s=t.customer_name||"\u2014",_=t.linkedProjectRef||"\u2014",S=t.status||"\u2014";n.push({id:t.id,customer:s,milestone:this.formatMilestoneSummary(t.milestone_summary,t.milestones),owner:t.csm_owner_name||"\u2014",due:t.kickoffDate?String(t.kickoffDate).slice(0,10):"\u2014",status:S,statusTone:this.statusTone(S),project:_,risk:/overdue/i.test(S)})}return n}formatMilestoneSummary(e,n){if(e&&typeof e=="object"){let t=e.total??0,s=e.completed??0,_=e.overdue??0;if(!t)return"No milestones";let S=`${s}/${t} completed`;return _>0&&(S+=` \xB7 ${_} overdue`),S}return(typeof n=="string"?n:"")||"\u2014"}statusTone(e){return/overdue|blocked|at risk/i.test(e)?"red":/track|complete|done/i.test(e)?"green":/schedul/i.test(e)?"blue":"amber"}trackByIndex(e){return e}openRow(e){if(e.id==null){this.toast.info(`Open: ${e.customer}`);return}this.api.getOnboardingView({id:e.id}).subscribe({next:n=>{this.detail=n?.response?.data||null,this.showTemplates=!1;let t=this.detail?.customerId;this.detailMilestones=[],t!=null&&this.api.getMilestoneList({customer_id:t,page:1,page_size:100}).subscribe({next:s=>{let _=s?.response?.data;this.detailMilestones=Array.isArray(_)?_:_?.data||_?.items||[]},error:()=>{}})},error:()=>this.toast.error("Failed to load onboarding.")})}closeDetail(){this.detail=null,this.detailMilestones=[]}toggleTemplates(){this.showTemplates=!this.showTemplates,this.showTemplates&&!this.templates.length&&this.api.getOnboardingTemplateList({search:"",page:1,page_size:100}).subscribe({next:e=>{let n=e?.response?.data;this.templates=Array.isArray(n)?n:n?.data||n?.items||[]},error:()=>{}})}toggleNewTemplate(){this.showNewTemplate=!this.showNewTemplate,this.showNewTemplate&&(this.newTemplate={name:"",duration_days:30,description:""})}createTemplate(){let e=this.newTemplate.name?.trim();if(!e){this.toast.warning("Template name is required.");return}this.savingTemplate||(this.savingTemplate=!0,this.api.createOnboardingTemplate({name:e,duration_days:Number(this.newTemplate.duration_days)||30,description:this.newTemplate.description?.trim()||"",milestones:[]}).subscribe({next:n=>{this.savingTemplate=!1,n?.responseCode===200?(this.toast.success(n?.response?.message||"Template created."),this.showNewTemplate=!1,this.templates=[],this.api.getOnboardingTemplateList({search:"",page:1,page_size:100}).subscribe({next:t=>{let s=t?.response?.data;this.templates=Array.isArray(s)?s:s?.data||s?.items||[]},error:()=>{}})):this.toast.error(n?.response?.message||"Failed to create template.")},error:()=>{this.savingTemplate=!1,this.toast.error("Failed to create template.")}}))}
8setStatus(e,n){if(e.id==null){this.toast.info("No onboarding id.");return}this.api.updateOnboarding({id:e.id,status:n}).subscribe({next:t=>{t?.responseCode===200?(this.toast.success(t?.response?.message||`Marked ${n}.`),this.refresh()):this.toast.error(t?.response?.message||"Failed to update status.")},error:()=>this.toast.error("Failed to update status.")})}deleteRow(e){return B(this,null,function*(){if(yield this.modal.confirm({title:"Delete onboarding?",body:`Remove onboarding for "${e.customer}".`,confirmTone:"danger",confirmLabel:"Delete"})){if(e.id==null){this.toast.success("Onboarding deleted.");return}this.api.deleteOnboarding({id:e.id}).subscribe({next:t=>{t?.responseCode===200?(this.toast.success("Onboarding deleted."),this.refresh()):this.toast.error(t?.response?.message||"Failed to delete onboarding.")},error:()=>this.toast.error("Failed to delete onboarding.")})}})}startOnboarding(){return B(this,null,function*(){let e=yield this.onboardCustomer.open();if(e===null)return;if(e.customerId==null||e.csmOwnerId==null){this.toast.error("Please select a customer and CSM owner.");return}let n={customer_id:e.customerId,csm_owner_id:e.csmOwnerId,kickoff_date:e.kickoffDate,notes:e.notes};e.linkedProject!=null&&String(e.linkedProject).trim()!==""?n.linked_project_ref=String(e.linkedProject).trim():n.linked_project_ref=null,this.api.createOnboarding(n).subscribe({next:t=>{t?.responseCode===200?(this.toast.success(`Onboarding started for ${e.customerName}.`),this.refresh()):this.toast.error(t?.response?.message||"Failed to start onboarding.")},error:()=>this.toast.error("Failed to start onboarding.")})})}static{this.\u0275fac=function(n){return new(n||o)(E(q),E(ue),E(ht),E(R))}}static{this.\u0275cmp=V({type:o,selectors:[["app-onboarding"]],decls:49,vars:14,consts:[[1,"crm-page-body"],[1,"crm-page-header"],["appTranslate","",1,"crm-page-title"],["appTranslate","",1,"crm-page-subtitle"],[1,"crm-page-actions"],["type","button",1,"btn","btn-theme","btn-sm",3,"click"],[1,"ri-add-line"],["appTranslate",""],["class","card mb-3",4,"ngIf"],[1,"crm-stat-grid"],["class","crm-stat-card",4,"ngFor","ngForOf","ngForTrackBy"],[1,"card"],[1,"card-header"],[1,"d-flex","flex-wrap","gap-2"],[1,"crm-filter-select",3,"ngModelChange","ngModel"],[4,"ngFor","ngForOf","ngForTrackBy"],[1,"card-body","p-0"],[1,"crm-table-wrapper","crm-table-wrapper-flush"],[1,"crm-data-table"],[3,"crm-row-risk",4,"ngFor","ngForOf","ngForTrackBy"],[4,"ngIf"],[1,"card","mb-3"],[1,"card-header","crm-flex-between"],["appTranslate","",1,"card-title"],["class","card-body border-bottom",4,"ngIf"],[1,"card-body","border-bottom"],[1,"crm-form-row","crm-form-row-3"],[1,"crm-form-group"],["appTranslate","",1,"crm-form-label","crm-form-label-required"],["type","text","placeholder","Template name",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["appTranslate","",1,"crm-form-label"],["type","number","min","1",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],["type","text","placeholder","Optional",1,"crm-form-input",3,"ngModelChange","ngModel","ngModelOptions"],[1,"text-end"],["type","button",1,"btn","btn-theme","btn-sm",3,"click","disabled"],[1,"crm-fw-600"],[1,"crm-text-muted","crm-text-sm"],["colspan","4","appTranslate","",1,"text-center","crm-text-muted"],[1,"card-title"],[1,"crm-text-muted","crm-text-sm","ml-2"],["type","button","aria-label","Close",1,"crm-btn-icon",3,"click"],[1,"ri-close-line"],[1,"card-body"],[1,"crm-meta-list"],["appTranslate","",1,"crm-section-title","mb-2","mt-3"],[1,"crm-table-wrapper"],[1,"crm-stat-card"],[1,"crm-stat-header"],[1,"crm-stat-label"],[1,"crm-stat-value"],["class","crm-stat-trend",3,"ngClass",4,"ngIf"],[1,"crm-stat-trend",3,"ngClass"],[1,"crm-cell-primary",3,"click"],[1,"crm-badge",3,"ngClass"],[1,"crm-badge","crm-badge-blue"],[1,"text-right"],["ngbDropdown","","container","body","placement","bottom-end",1,"d-inline-block"],["type","button","ngbDropdownToggle","","aria-label","Actions",1,"crm-btn-icon"],[1,"ri-more-2-fill"],["ngbDropdownMenu",""],["ngbDropdownItem","",3,"click",4,"ngFor","ngForOf","ngForTrackBy"],[1,"dropdown-divider"],["ngbDropdownItem","",1,"text-danger",3,"click"],[1,"ri-delete-bin-line","mr-2"],["ngbDropdownItem","",3,"click"],[1,"ri-flag-line","mr-2"],["colspan","7","appTranslate","",1,"text-center","py-4"],["colspan","7","appTranslate","",1,"text-center"]],template:function(n,t){n&1&&(i(0,"div",0)(1,"div",1)(2,"div")(3,"h1",2),a(4,"Customer Onboarding"),r(),i(5,"p",3),a(6,"Post-sale milestone plan \u2014 linked to Project Management for execution"),r()(),i(7,"div",4)(8,"button",5),h("click",function(){return t.startOnboarding()}),b(9,"i",6),i(10,"span",7),a(11,"Onboard Customer"),r()()()(),f(12,s0,24,5,"div",8)(13,d0,47,10,"div",8),i(14,"div",9),f(15,p0,7,3,"div",10),r(),i(16,"div",11)(17,"div",12)(18,"div",13)(19,"select",14),v("ngModelChange",function(_){return y(t.customerFilter,_)||(t.customerFilter=_),_}),h("ngModelChange",function(){return t.onFilterChange()}),i(20,"option",7),a(21,"All Customers"),r(),f(22,u0,2,1,"option",15),r(),i(23,"select",14),v("ngModelChange",function(_){return y(t.csmFilter,_)||(t.csmFilter=_),_}),h("ngModelChange",function(){return t.onFilterChange()}),i(24,"option",7),a(25,"All CSMs"),r(),f(26,g0,2,1,"option",15),r()()(),i(27,"div",16)(28,"div",17)(29,"table",18)(30,"thead")(31,"tr")(32,"th",7),a(33,"Customer"),r(),i(34,"th",7),a(35,"Milestone"),r(),i(36,"th",7),a(37,"Owner"),r(),i(38,"th",7),a(39,"Due"),r(),i(40,"th",7),a(41,"Status"),r(),i(42,"th",7),a(43,"Linked Project"),r(),b(44,"th"),r()(),i(45,"tbody"),f(46,h0,27,11,"tr",19)(47,f0,3,0,"tr",20)(48,x0,3,0,"tr",20),r()()()()()()),n&2&&(l(12),c("ngIf",t.showTemplates),l(),c("ngIf",t.detail),l(2),c("ngForOf",t.kpis)("ngForTrackBy",t.trackByIndex),l(4),x("ngModel",t.customerFilter),l(3),c("ngForOf",t.customerOptions)("ngForTrackBy",t.trackByIndex),l(),x("ngModel",t.csmFilter),l(3),c("ngForOf",t.csmOptions)("ngForTrackBy",t.trackByIndex),l(20),c("ngForOf",t.filteredRows)("ngForTrackBy",t.trackByIndex),l(),c("ngIf",t.loading),l(
8),c("ngIf",!t.loading&&!t.rows.length))},dependencies:[j,W,N,X,ee,te,ot,Z,U,zt,H,Ve,De,Ae,Pe,Fe,L,qt],styles:["[_nghost-%COMP%]{display:block}"]})}}return o})();function y0(o,m){if(o&1&&(i(0,"div",14)(1,"div",15),a(2),r(),i(3,"div",16),a(4),r()()),o&2){let e=m.$implicit;l(2),g(e.value),l(2),g(e.label)}}function v0(o,m){if(o&1){let e=w();i(0,"tr")(1,"td")(2,"a",17),h("click",function(){let t=p(e).$implicit,s=d();return u(s.openRow(t))}),a(3),r()(),b(4,"td",18),i(5,"td"),a(6),r(),i(7,"td"),a(8),r(),i(9,"td")(10,"span",19),a(11),r()(),i(12,"td"),a(13),r(),i(14,"td")(15,"button",20),h("click",function(){let t=p(e).$implicit,s=d();return u(s.renewAction(t))}),a(16),r()(),i(17,"td",21)(18,"button",22),h("click",function(){let t=p(e).$implicit,s=d();return u(s.draftEmail(t))}),b(19,"i",23),r(),i(20,"button",24),h("click",function(){let t=p(e).$implicit,s=d();return u(s.cancelRenewal(t))}),b(21,"i",25),r()()()}if(o&2){let e=m.$implicit;D("crm-row-risk",e.risk),l(3),g(e.account),l(),c("innerHTML",e.value,it),l(2),g(e.renewalDate),l(2),g(e.daysOut),l(2),c("ngClass","renew
8al-health-pill-"+e.healthTone),l(),A(" ",e.health," "),l(2),g(e.owner),l(2),c("ngClass","btn-"+e.actionTone),l(),A(" ",e.action," ")}}function C0(o,m){o&1&&(i(0,"tr")(1,"td",26)(2,"div",27)(3,"div",28),b(4,"i",29),r(),i(5,"div",30),a(6,"No renewals scheduled"),r(),i(7,"div",31),a(8,"Renewal alerts appear here 180, 90, 60, and 30 days before contract end."),r()()()())}var Hi=(()=>{class o{ngOnInit(){this.api.getRenewalList({search:"",page:1,page_size:100}).subscribe({next:e=>{let n=e?.response?.data||[];this.viewRows=(Array.isArray(n)?n:[]).map(t=>this.mapRenewal(t)),this.computeBuckets()},error:()=>{this.viewRows=[]}})}mapRenewal(e){let n=Number(e.days_to_renewal??0),s=String(e.status||"").toLowerCase(),_="Renew",S="theme",T=!1;return s.includes("risk")?(_="At Risk",S="outline-danger",T=!0):s.includes("negoti")&&(_="Negotiate",S="outline-theme"),{id:e.id,account:e.account_name||"\u2014",value:this.money(e.contract_value),renewalDate:e.renewal_date?String(e.renewal_date).slice(0,10):"\u2014",daysOut:n,health:"\u2014",healthTone:"gray",owner:e.owner||"\u2014",action:_,actionTone:S,risk:T}}money(e){let n=Number(e);return e?Number.isNaN(n)?String(e):n>=1e7?"₹"+(n/1e7).toFixed(1).replace(/\.0$/,"")+" Cr":"₹"+Math.round(n/1e5)+" L":"\u2014"}computeBuckets(){let e=this.viewRows.map(t=>t.daysOut),n=t=>e.filter(s=>s>=0&&s<=t).length;this.buckets=[{value:n(30),label:"Next 30 days"},{value:n(60),label:"Next 60 days"},{value:n(90),label:"Next 90 days"},{value:n(180),label:"Next 180 days"}]}doSort(e){this.sortDir=this.sortKey===e&&this.sortDir===1?-1:1,this.sortKey=e;let n=this.sortDir;this.viewRows.sort((t,s)=>{let _=t[e],S=s[e];return typeof _=="number"&&typeof S=="number"?(_-S)*n:String(_).localeCompare(String(S),void 0,{numeric:!0})*n})}sortClass(e){return this.sortKey!==e?"crm-sort":this.sortDir===1?"crm-sort-asc":"crm-sort-desc"}constructor(e,n){this.toast=e,this.api=n,this.buckets=[{value:0,label:"Next 30 days"},{value:0,label:"Next 60 days"},{value:0,label:"Next 90 days"},{value:0,label:"Next 180 days"}],this.viewRows=[],this.sortKey=null,this.sortDir=1}trackByIndex(e){return e}renewAction(e){if(e.action==="At Risk"){this.toast.warning(`Escalation needed: ${e.account} is at risk.`);return}this.toast.info("Renewal actions \u2014 coming soon.")}openRow(e){this.toast.info("Renewal detail view \u2014 coming soon.")}draftEmail(e){this.toast.info("Renewal email composer \u2014 coming soon.")}cancelRenewal(e){this.toast.info("Cancelling a renewal \u2014 coming soon.")}static{this.\u0275fac=function(n){return new(n||o)(E(q),E(R))}}
8static{this.\u0275cmp=V({type:o,selectors:[["app-renewals"]],decls:33,vars:11,consts:[[1,"crm-page-body"],[1,"crm-page-header"],["appTranslate","",1,"crm-page-title"],["appTranslate","",1,"crm-page-subtitle"],[1,"renewal-bucket-row","mb-4"],["class","renewal-bucket",4,"ngFor","ngForOf","ngForTrackBy"],[1,"card"],[1,"card-body","p-0"],[1,"crm-table-wrapper","crm-table-wrapper-flush"],[1,"crm-data-table"],["appTranslate","",3,"click","ngClass"],["appTranslate",""],[3,"crm-row-risk",4,"ngFor","ngForOf","ngForTrackBy"],[4,"ngIf"],[1,"renewal-bucket"],[1,"renewal-bucket-value"],[1,"renewal-bucket-label"],[1,"crm-cell-primary",3,"click"],[3,"innerHTML"],[1,"renewal-health-pill",3,"ngClass"],["type","button",1,"btn","btn-sm",3,"click","ngClass"],[1,"text-right"],["type","button","aria-label","Draft email",1,"crm-btn-icon",3,"click"],[1,"ri-mail-line"],["type","button","aria-label","Cancel renewal",1,"crm-btn-icon",3,"click"],[1,"ri-more-2-fill"],["colspan","8",1,"text-center"],[1,"crm-empty-state","py-5"],[1,"crm-empty-state-icon"],[1,"ri-refresh-line"],["appTranslate","",1,"crm-empty-state-title"],["appTranslate","",1,"crm-empty-state-subtitle"]],template:function(n,t){n&1&&(i(0,"div",0)(1,"div",1)(2,"div")(3,"h1",2),a(4,"Renewals"),r(),i(5,"p",3),a(6,"Upcoming contract renewals"),r()()(),i(7,"div",4),f(8,y0,5,2,"div",5),r(),i(9,"div",6)(10,"div",7)(11,"div",8)(12,"table",9)(13,"thead")(14,"tr")(15,"th",10),h("click",function(){return t.doSort("account")}),a(16,"Account"),r(),i(17,"th",10),h("click",function(){return t.doSort("value")}),a(18,"Contract Value"),r(),i(19,"th",10),h("click",function(){return t.doSort("renewalDate")}),a(20,"Renewal Date"),r(),i(21,"th",10),h("click",function(){return t.doSort("daysOut")}),a(22,"Days Out"),r(),i(23,"th",10),h("click",function(){return t.doSort("health")}),a(24,"Health"),r(),i(25,"th",10),h("click",function(){return t.doSort("owner")}),a(26,"Owner"),r(),i(27,"th",11),a(28,"Action"),r(),b(29,"th"),r()(),i(30,"tbody"),f(31,v0,22,11,"tr",12)(32,C0,9,0,"tr",13),r()()()()()()),n&2&&(l(8),c("ngForOf",t.buckets)("ngForTrackBy",t.trackByIndex),l(7),c("ngClass",t.sortClass("account")),l(2),c("ngClass",t.sortClass("value")),l(2),c("ngClass",t.sortClass("renewalDate")),l(2),c("ngClass",t.sortClass("daysOut")),l(2),c("ngClass",t.sortClass("health")),l(2),c("ngClass",t.sortClass("owner")),l(6),c("ngForOf",t.viewRows)("ngForTrackBy",t.trackByIndex),l(),c("ngIf",!t.viewRows.length))},dependencies:[j,W,N,L],styles:["[_nghost-%COMP%]{display:block}.renewal-bucket-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:16px}.renewal-bucket[_ngcontent-%COMP%]{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:20px 24px;text-align:center;box-shadow:var(--shadow-sm)}.renewal-bucket-value[_ngcontent-%COMP%]{font-size:2rem;font-weight:800;color:var(--color-primary);letter-spacing:-1px;line-height:1.1}.renewal-bucket-label[_ngcontent-%COMP%]{font-size:.75rem;font-weight:600;color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.5px;margin-top:4px}.renewal-health-pill[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:38px;height:26px;border-radius:var(--radius-full);font-size:.75rem;font-weight:700;color:#fff}.renewal-health-pill-green[_ngcontent-%COMP%]{background:var(--color-success)}.renewal-health-pill-amber[_ngcontent-%COMP%]{background:var(--color-warning)}.renewal-health-pill-red[_ngcontent-%COMP%]{background:var(--color-error)}"]})}}return o})();var b0=(o,m)=>({"crm-stat-trend-up":o,"crm-stat-trend-down":m});function S0(o,m){o&1&&b(0,"i",20)}function w0(o,m){o&1&&b(0,"i",21)}function T0(o,m){if(o&1&&(i(0,"div",10)(1,"div",11)(2,"span",12),a(3),r(),i(4,"span",13),b(5,"i",14),r()(),b(6,"div",15),i(7,"div",16),f(8,S0,1,0,"i",17)(9,w0,1,0,"i",18),i(10,"span",19),a(11),r()()()),o&2){let e=m.$implicit;l(3),g(e.label),l(3),c("innerHTML",e.value,it),l(),c("ngClass",ke(6,b0,e.trendDir==="up",e.trendDir==="down")),l(),c("ngIf",e.trendDir==="up"),l(),c("ngIf",e.trendDir==="down"),l(2),g(e.trend)}}function k0(o,m){if(o&1){let e=w();i(0,"tr")(1,"td")(2,"a",33),h("click",function(){let t=p(e).$implicit,s=d(2);return u(s.openPromoter(t))}),a(3),r()(),i(4,"td"),a(5),r(),i(6,"td"),a(7),r(),i(8,"td")(9,"span",34),a(10),r()(),i(11,"td"),a(12),r(),i(13,"td")(14,"span",35),a(15),r()(),i(16,"td"),a(17),r(),i(18,"td",36)(19,"div",37)(20,"button",38),b(21,"i",39),r(),i(22,"div",40)(23,"button",41),h("click",function(){let t=p(e).$implicit,s=d(2);return u(s.editPromoter(t))}),b(24,"i",42),i(25,"span",26),a(26,"Edit"),r()(),i(27,"button",43),h("click",function(){let t=p(e).$implicit,s=d(2);return u(s.deletePromoter(t))}),b(28,"i",44),i(29,"span",26),a(30,"Remove"),r()()()()()()}if(o&2){let e=m.$implicit;l(3),g(e.name),l(2),g(e.account),l(2),g(e.role),l(3),g(e.nps),l(2),g(e.autoTagged),l(2),c("ngClass","crm-badge-"+e.referenceableTone),l(),A(" ",e.referenceable," "),l(2),g(e.lastSurvey)}}function E0(o,m){o&1&&(i(0,"tr")(1,"td",45),a(2,"No promoters identified yet."),r()())}function M0(o,m){if(o&1){let e=w();i(0,"div")(1,"div",22)(2,"div",23)(3,"div",24)(4,"select",25),v("ngModelChange",function(t){p(e);let s=d();return y(s.tierFilter,t)||(s.tierFilter=t),u(t)}),i(5,"option",26),a(6,"All Tiers"),r(),i(7,"option",26),a(8,"Strategic"),r(),i(9,"option",26),a(10,"Enterprise"),r(),i(11,"option",26),a(12,"Mid-market"),r()(),i(13,"select",25),v("ngModelChange",function(t){p(e);let s=d();return y(s.statusFilter,t)||(s.statusFilter=t),u(t)}),i(14,"option",26),a(15,"All Status"),r(),i(16,"option",26),a(17,"Reference-able"),r(),i(18,"option",26),a(19,"Case study WIP"),r(),i(20,"option",26),a(21,"Quiet"),r()()(),i(22,"button",27),h("click",function(){p(e);let t=d();return u(t.addPromoter())}),b(23,"i",28),i(24,"span",26),a(25,"Add Promoter"),r()()(),i(26,"div",29)(27,"div",30)(28,"table",31)(29,"thead")(30,"tr")(31,"th",26),a(32,"Promoter"),r(),i(33,"th",26),a(34,"Account"),r(),i(35,"th",26),a(36,"Role"),r(),i(37,"th",26),a(38,"NPS"),r(),i(39,"th",26),a(40,"Auto-tagged"),r(),i(41,"th",26),a(42,"Reference-able"),r(),i(43,"th",26),a(44,"Last Survey"),r(),b(45,"th"),r()(),i(46,"tbody"),f(47,k0,31,8,"tr",32)(48,E0,3,0,"tr",9),r()()()()()()}if(o&2){let e=d();l(4),x("ngModel",e.tierFilter),l(9),x("ngModel",e.statusFilter),l(34),c("ngForOf",e.promoters)("ngForTrackBy",e.trackByIndex),l(),c("ngIf",!e.promoters.length)}}function I0(o,m){if(o&1&&(P(0),b(1,"span",49),F()),o&2){let e=d().$implicit;l(),c("innerHTML",e.rewardOwed,it)}}function O0(o,m){o&1&&(P(0),a(1,"\u2014"),F())}function P0(o,m){if(o&1){let e=w();i(0,"tr")(1,"td"),a(2),r(),i(3,"td")(4,"a",33),h("click",function(){let t=p(e).$implicit,s=d(2);return u(s.openReferral(t))}),a(5),r()(),i(6,"td")(7,"span",35),a(8),r()(),b(9,"td",48),i(10,"td"),f(11,I0,2,1,"ng-container",9)(12,O0,2,0,"ng-container",9),r()()}if(o&2){let e=m.$implicit;l(2),g(e.referredBy),l(3),g(e.company),l(2),c("ngClass","crm-badge-"+e.statusTone),l(),g(e.status),l(),c("innerHTML",e.value,it),l(2),c("ngIf",e.rewardOwed!=="\u2014"),l(),c("ngIf",e.rewardOwed==="\u2014")}}function F0(o,m){o&1&&(i(0,"tr")(1,"td",50),a(2,"No referrals in pipeline."),r()())}function A0(o,m){if(o&1){let e=w();i(0,"div")(1,"div",22)(2,"div",23)(3,"div",46),a(4,"Referrals \u2014 Pipeline"),r(),i(5,"button",27),h("click",function(){p(e);let t=d();return u(t.addReferral())}),b(6,"i",47),i(7,"span",26),a(8,"Add Referral"),r()()(),i(9,"div",29)(10,"div",30)(11,"table",31)(12,"thead")(13,"tr")(14,"th",26),a(15,"Referred By"),r(),i(16,"th",26),a(17,"Referred Company"),r(),i(18,"th",26),a(19,"Status"),r(),i(20,"th",26),a(21,"Value"),r(),i(22,"th",26),a(23,"Reward Owed"),r()()(),i(24,"tbody"),f(25,P0,13,7,"tr",32)(26,F0,3,0,"tr",9),r()()()()()()}if(o&2){let e=d();l(25),c("ngForOf",e.referrals)("ngForTrackBy",e.trackByIndex),l(),c("ngIf",!e.referrals.length)}}function D0(o,m){if(o&1){let e=w();i(0,"tr")(1,"td")(2,"a",33),h("click",function(){let t=p(e).$implicit,s=d(2);return u(s.openCaseStudy(t))}),a(3),r()(),i(4,"td"),a(5),r(),i(6,"td")(7,"span",35),a(8),r()(),i(9,"td"),a(10),r(),i(11,"td"),a(12),r()()}if(o&2){let e=m.$implicit;l(3),g(e.title),l(2),g(e.account),l(2),c("ngClass","crm-badge-"+e.stageTone),l(),g(e.stage),l(2),g(e.owner),l(2),g(e.published)}}function V0(o,m){o&1&&(i(0,"tr")(1,"td",50),a(2,"No case studies yet."),r()())}function L0(o,m){if(o&1){let e=w();i(0,"div")(1,"div",22)(2,"div",23)(3,"div",46),a(4,"Case Studies"),r(),i(5,"button",27),h("click",function(){p(e);let t=d();return u(t.startCaseStudy())}),b(6,"i",47),i(7,"span",26),a(8,"Start Case Study"),r()()(),i(9,"div",29)(10,"div",30)(11,"table",31)(12,"thead")(13,"tr")(14,"th",26),a(15,"Title"),r(),i(16,"th",26),a(17,"Account"),r(),i(18,"th",26),a(19,"Stage"),r(),i(20,"th",26),a(21,"Owner"),r(),i(22,"th",26),a(23,"Published"),r()()(),i(24,"tbody"),f(25,D0,13,6,"tr",32)(26,V0,3,0,"tr",9),r()()()()()()}if(o&2){let e=d();l(25),c("ngForOf",e.caseStudies)("ngForTrackBy",e.trackByIndex),l(),c("ngIf",!e.caseStudies.length)}}var Ki=(()=>{class o{constructor(e,n,t,s,_,S){this.router=e,this.route=n,this.toast=t,this.modal=s,this.popup=_,this.api=S,this.tab="promoters",this.tierFilter="All Tiers",this.statusFilter="All Status",this.kpis=[{label:"Promoters (NPS 9\u201310)",value:"\u2014",trend:""},{label:"Active Referrals",value:"\u2014",trend:""},{label:"Case Studies Live",value:"\u2014",trend:""},{label:"Referral Influence",value:"\u2014",trend:""}],this.promoters=[],this.referrals=[],this.caseStudies=[]}ngOnInit(){this.loadDashboard(),this.loadPromoters(),this.loadReferrals(),this.loadCaseStudies()}loadDashboard(){this.api.getAdvocacyDashboard().subscribe({next:e=>{let n=e?.response?.data,t=n?.response||n;t&&(this.kpis=[{label:"Promoters (NPS 9\u201310)",value:String(t.promoters_nps_9_10??"\u2014"),trend:t.promoters_growth_this_quarter!=null?`+${t.promoters_growth_this_quarter} this quarter`:"",trendDir:"up"},{label:"Active Referrals",value:String(t.active_referrals??"\u2014"),trend:t.closed_won_referrals_ytd!=null?`${t.closed_won_referrals_ytd} closed-won YTD`:""},{label:"Case Studies Live",value:String(t.case_studies_live??"\u2014"),trend:t.case_studies_last_60d!=null?`+${t.case_studies_last_60d} last 60d`:"",trendDir:"up"},{label:"Referral Influence",value:this.formatMoney(t.referral_pipeline_influence),trend:"Pipeline from refs",trendDir:"up"}])},error:()=>{}})}formatMoney(e){let n=Number(e)||0;return n?n>=1e7?"₹"+(n/1e7).toFixed(1).replace(/\.0$/,"")+" Cr":"₹"+Math.round(n/1e5)+" L":"\u2014"}loadPromoters(){this.api.getPromoterList({search:"",page:1,page_size:100}).subscribe({next:e=>{this.promoters=this.rowsOf(e).map(n=>this.mapPromoter(n))},error:()=>{}})}loadReferrals(){this.api.getReferralList({search:"",page:1,page_size:100}).subscribe({next:e=>{this.referrals=this.rowsOf(e).map(n=>this.mapReferral(n))},error:()=>{}})}loadCaseStudies(){this.api.getCaseStudyList({search:"",page:1,page_size:100}).subscribe({next:e=>{this.caseStudies=this.rowsOf(e).map(n=>this.mapCaseStudy(n))},error:()=>{}})}rowsOf(e){let n=e?.response?.data;return Array.isArray(n)?n:n?.data||n?.results||n?.items||[]}mapPromoter(e){let n=e.referenceableStatus||"";return{id:e.id,name:e.contactName||"\u2014",account:e.account_name||"\u2014",role:e.role||"\u2014",nps:e.npsScore??0,autoTagged:this.fmtDate(e.autoTaggedDate||e.created_date),referenceable:n||"\u2014",referenceableTone:this.refTone(n),lastSurvey:this.fmtDate(e.lastSurveyDate)}}mapReferral(e){let n=e.referralStatus||"";return{referredBy:e.promoter_name||"\u2014",company:e.referredCompany||"\u2014",status:n||"\u2014",statusTone:this.statusTone(n),value:e.pipelineValue||"\u2014",rewardOwed:e.reward_owed||"\u2014"}}mapCaseStudy(e){let n=e.studyStatus||"";return{title:e.title||"\u2014",account:e.account_name||"\u2014",stage:n||"\u2014",stageTone:this.studyTone(n),owner:e.owner_name||"\u2014",published:this.fmtDate(e.publishedDate)}}refTone(e){let n=(e||"").toLowerCase();return n.startsWith("yes")?"green":n.includes("pending")?"amber":"gray"}statusTone(e){let n=(e||"").toLowerCase();return n.includes("won")?"green":n.includes("lost")||n.includes("dead")?"red":"blue"}studyTone(e){let n=(e||"").toLowerCase();return n.includes("live")||n.includes("publish")?"green":n.includes("draft")?"amber":"blue"}fmtDate(e){if(!e)return"\u2014";let n=new Date(e);return Number.isNaN(n.getTime())?String(e):Ee(n,"yyyy-MM-dd","en-US")}trackByIndex(e){return e}setTab(e){this.tab=e}openPromoter(e){if(e.id==null){this.toast.error("This promoter has no id and cannot be opened.");return}this.router.navigate(["advocacy",e.id],{relativeTo:this.route.parent})}editPromoter(e){return B(this,null,function*(){if(e.id==null){this.toast.info("No promoter to edit.");return}this.api.getPromoterView({id:e.id}).subscribe({next:n=>B(this,null,function*(){let t=n?.response?.data;if(!t){this.toast.error("Promoter not found.");return}let s=t.customerId!=null?Number(t.customerId):null,_=yield this.popup.open("add-promoter",{accounts:yield this.promoterAccounts(s),contact:t.contactName,role:t.role,nps:t.npsScore===10?"10 \u2014 Strong promoter":"9 \u2014 Promoter",referenceable:t.referenceableStatus,lastSurvey:t.lastSurveyDate,notes:t.notes,customerId:s});if(_===null)return;let S={id:e.id,contact_name:String(_.contact||"").trim()||t.contactName,role:_.role||"",nps_score:parseInt(String(_.nps||"").replace(/[^\d]/g,""),10)||0,referenceable_status:_.referenceable||"",last_survey_date:_.lastSurvey||"",notes:_.notes||""};_.customerId!=null&&(S.customer_id=Number(_.customerId)),this.api.updatePromoter(S).subscribe({next:T=>{T?.responseCode===200?(this.toast.success(T?.response?.message||"Promoter updated."),this.loadPromoters()):this.toast.error(T?.response?.message||"Failed to update promoter.")},error:()=>this.toast.error("Failed to update promoter.")})}),error:()=>this.toast.error("Failed to load promoter.")})})}deletePromoter(e){return B(this,null,function*(){if(yield this.modal.confirm({title:"Remove promoter?",body:`Remove "${e.name}" from advocacy.`,confirmTone:"danger",confirmLabel:"Remove"}
8)){if(e.id==null){this.toast.success("Promoter removed.");return}this.api.deletePromoter({id:e.id}).subscribe({next:t=>{t?.responseCode===200?(this.toast.success(t?.response?.message||"Promoter removed."),this.loadPromoters()):this.toast.error(t?.response?.message||"Failed to remove promoter.")},error:()=>this.toast.error("Failed to remove promoter.")})}})}addReferral(){return B(this,null,function*(){let e=yield this.popup.open("add-referral");if(e===null)return;let n=String(e.referredCompany||"").trim();if(!n){this.toast.error("Referred company is required.");return}let t={referred_company:n,contact_name:e.contactName||"",referral_status:e.referralStatus||"Active",pipeline_value:e.pipelineValue||"0.00",notes:e.notes||""};this.api.createReferral(t).subscribe({next:s=>{s?.responseCode===200?(this.toast.success(s?.response?.message||"Referral added."),this.loadReferrals()):this.toast.error(s?.response?.message||"Failed to add referral.")},error:()=>this.toast.error("Failed to add referral.")})})}promoterAccounts(e){return nt(this.api.getCustomerList({page:1,page_size:100}).pipe(we(n=>{let t=n?.response?.data||[];return(Array.isArray(t)?t:[]).filter(s=>String(s.status||s.customerStatus||"").trim().toLowerCase()!=="inactive"||e!=null&&s.id===e).map(s=>{let _=String(s.contactName||"").trim(),S=String(s.companyName||"").trim();return{id:s.id,label:[_,S].filter(Boolean).join(" \u2014 ")||"#"+s.id,contact:_,account:S}})}),de(()=>K([]))))}addPromoter(){return B(this,null,function*(){let e=yield this.popup.open("add-promoter",{accounts:yield this.promoterAccounts()});if(e===null)return;if(e.customerId==null){this.toast.error("Please pick an account.");return}let n=String(e.contact||"").trim();if(!n){this.toast.error("Contact name is required.");return}let t={customer_id:Number(e.customerId),contact_name:n,role:e.role||"",nps_score:parseInt(String(e.nps||"").replace(/[^\d]/g,""),10)||0,referenceable_status:e.referenceable||"",last_survey_date:e.lastSurvey||"",notes:e.notes||""};this.api.createPromoter(t).subscribe({next:s=>{s?.responseCode===200?(this.toast.success(s?.response?.message||"Promoter added."),this.loadPromoters()):this.toast.error(s?.response?.message||"Failed to add promoter.")},error:()=>this.toast.error("Failed to add promoter.")})})}openReferral(e){this.toast.info(`Open referral: ${e.company}`)}openCaseStudy(e){this.toast.info(`Open case study: ${e.title}`)}startCaseStudy(){return B(this,null,function*(){let e=yield this.popup.open("start-case-study");if(e===null)return;let n=String(e.title||"").trim();if(!n){this.toast.error("Title is required.");return}let t={title:n,summary:e.storyAngle||"",study_status:e.stage||"Draft",published_date:e.publishDate||""};e.customerId!=null&&(t.customer_id=Number(e.customerId)),this.api.createCaseStudy(t).subscribe({next:s=>{s?.responseCode===200?(this.toast.success(s?.response?.message||"Case study created."),this.loadCaseStudies()):this.toast.error(s?.response?.message||"Failed to create case study.")},error:()=>this.toast.error("Failed to create case study.")})})}static{this.\u0275fac=function(n){return new(n||o)(E($),E(Y),E(q),E(ue),E(xe),E(R))}}static{this.\u0275cmp=V({type:o,selectors:[["app-advocacy"]],decls:25,vars:14,consts:[[1,"crm-page-body"],[1,"crm-page-header"],["appTranslate","",1,"crm-page-title"],["appTranslate","",1,"crm-page-subtitle"],[1,"crm-stat-grid"],["class","crm-stat-card",4,"ngFor","ngForOf","ngForTrackBy"],[1,"crm-tabs-bar"],["appTranslateText","",1,"crm-tab-item",3,"click"],[1,"crm-tab-count"],[4,"ngIf"],[1,"crm-stat-card"],[1,"crm-stat-header"],[1,"crm-stat-label"],[1,"crm-stat-icon","crm-stat-icon-purple"],[1,"ri-heart-line"],[1,"crm-stat-value",3,"innerHTML"],[1,"crm-stat-trend",3,"ngClass"],["class","ri-arrow-up-s-line",4,"ngIf"],["class","ri-arrow-down-s-line",4,"ngIf"],[1,"crm-stat-trend-label"],[1,"ri-arrow-up-s-line"],[1,"ri-arrow-down-s-line"],[1,"card"],[1,"card-header"],[1,"d-flex","flex-wrap","gap-2","align-items-center"],[1,"crm-filter-select",3,"ngModelChange","ngModel"],["appTranslate",""],["type","button",1,"btn","btn-theme","btn-sm",3,"click"],[1,"ri-user-add-line"],[1,"card-body","p-0"],[1,"crm-table-wrapper","crm-table-wrapper-flush"],[1,"crm-data-table"],[4,"ngFor","ngForOf","ngForTrackBy"],[1,"crm-cell-primary",3,"click"],[1,"crm-badge","crm-badge-green"],[1,"crm-badge",3,"ngClass"],[1,"text-right"],["ngbDropdown","","container","body","placement","bottom-end",1,"d-inline-block"],["type","button","ngbDropdownToggle","","aria-label","Actions",1,"crm-btn-icon"],[1,"ri-more-2-fill"],["ngbDropdownMenu",""],["ngbDropdownItem","",3,"click"],[1,"ri-pencil-line","mr-2"],["ngbDropdownItem","",1,"text-danger",3,"click"],[1,"ri-delete-bin-line","mr-2"],["colspan","8","appTranslate","",1,"text-center"],["appTranslate","",1,"card-title"],[1,"ri-add-line"],[3,"innerHTML"],[1,"crm-badge","crm-badge-amber",3,"innerHTML"],["colspan","5","appTranslate","",1,"text-center"]],template:function(n,t){n&1&&(i(0,"div",0)(1,"div",1)(2,"div")(3,"h1",2),a(4,"Customer Advocacy"),r(),i(5,"p",3),a(6,"NPS 9\u201310 promoters \xB7 Referral pipeline \xB7 Case study production"),r()()(),i(7,"div",4),f(8,T0,12,9,"div",5),r(),i(9,"div",6)(10,"button",7),h("click",function(){return t.setTab("promoters")}),a(11," Promoters "),i(12,"span",8),a(13),r()(),i(14,"button",7),h("click",function(){return t.setTab("referrals")}),a(15," Referral Pipeline "),i(16,"span",8),a(17),r()(),i(18,"button",7),h("click",function(){return t.setTab("casestudies")}),a(19," Case Studies "),i(20,"span",8),a(21),r()()(),f(22,M0,49,5,"div",9)(23,A0,27,3,"div",9)(24,L0,27,3,"div",9),r()),n&2&&(l(8),c("ngForOf",t.kpis)("ngForTrackBy",t.trackByIndex),l(2),D("active",t.tab==="promoters"),l(3),g(t.promoters.length),l(),D("active",t.tab==="referrals"),l(3),g(t.referrals.length),l(),D("active",t.tab==="casestudies"),l(3),g(t.caseStudies.length),l(),c("ngIf",t.tab==="promoters"),l(),c("ngIf",t.tab==="referrals"),l(),c("ngIf",t.tab==="casestudies"))},dependencies:[j,W,N,X,ee,Z,U,H,Ve,De,Ae,Pe,Fe,L,Me],styles:["[_nghost-%COMP%]{display:block}"]})}}return o}
8)();function N0(o,m){if(o&1&&(i(0,"div",11)(1,"span",12),a(2),r(),i(3,"span",13),a(4,"Reference-able"),r()()),o&2){let e=d();l(),c("ngClass","crm-badge-"+e.referenceableTone),l(),g(e.referenceable)}}function B0(o,m){if(o&1&&(i(0,"span",12),a(1),r()),o&2){let e=d(2);c("ngClass","crm-badge-"+e.referenceableTone),l(),g(e.referenceable)}}function W0(o,m){o&1&&(i(0,"span"),a(1,"\u2014"),r())}function R0(o,m){o&1&&(i(0,"dt",18),a(1,"Tier"),r())}function q0(o,m){if(o&1&&(i(0,"dd"),a(1),r()),o&2){let e=d(2);l(),g(e.tier)}}function z0(o,m){if(o&1&&(i(0,"tr")(1,"td"),a(2),r(),i(3,"td")(4,"span",12),a(5),r()(),b(6,"td",50),i(7,"td"),a(8),r()()),o&2){let e=m.$implicit;l(2),g(e.company),l(2),c("ngClass","crm-badge-"+e.statusTone),l(),g(e.status),l(),c("innerHTML",e.value,it),l(2),g(e.reward)}}function j0(o,m){o&1&&(i(0,"tr")(1,"td",51),a(2,"No referrals from this promoter yet."),r()())}function U0(o,m){if(o&1&&(i(0,"div",30)(1,"div",31)(2,"div",32),a(3,"Advocacy Notes"),r()(),i(4,"div",33)(5,"p",52),a(6),r()()()),o&2){let e=d(2);l(6),g(e.notes)}}function H0(o,m){if(o&1&&(P(0),i(1,"div",5)(2,"div",31)(3,"div",32),a(4,"Promoter Overview"),r()(),i(5,"div",33)(6,"dl",45)(7,"dt",18),a(8,"Account"),r(),i(9,"dd"),a(10),r(),i(11,"dt",18),a(12,"Role"),r(),i(13,"dd"),a(14),r(),i(15,"dt",18),a(16,"NPS Score"),r(),i(17,"dd")(18,"span",12),a(19),r()(),i(20,"dt",18),a(21,"Reference-able"),r(),i(22,"dd"),f(23,B0,2,2,"span",42)(24,W0,2,0,"span",28),r(),i(25,"dt",18),a(26,"Last Survey"),r(),i(27,"dd"),a(28),r(),i(29,"dt",18),a(30,"Auto-tagged"),r(),i(31,"dd"),a(32),r(),f(33,R0,2,0,"dt",46)(34,q0,2,1,"dd",28),r()()(),i(35,"div",5)(36,"div",31)(37,"div",32),a(38,"Referrals"),r(),i(39,"span",47),a(40,"Leads and deals this promoter sent us"),r()(),i(41,"div",33)(42,"table",48)(43,"thead")(44,"tr")(45,"th",18),a(46,"Referred Company"),r(),i(47,"th",18),a(48,"Status"),r(),i(49,"th",18),a(50,"Value"),r(),i(51,"th",18),a(52,"Reward"),r()()(),i(53,"tbody"),f(54,z0,9,5,"tr",49)(55,j0,3,0,"tr",28),r()()()(),f(56,U0,7,1,"div",44),F()),o&2){let e=d();l(10),g(e.accountName||"\u2014"),l(4),g(e.role||"\u2014"),l(4),c("ngClass","crm-badge-"+e.npsTone),l(),g(e.npsScore),l(4),c("ngIf",e.referenceable),l(),c("ngIf",!e.referenceable),l(4),g(e.lastSurvey),l(4),g(e.autoTagged),l(),c("ngIf",e.tier),l(),c("ngIf",e.tier),l(20),c("ngForOf",e.referrals)("ngForTrackBy",e.trackByIndex),l(),c("ngIf",!e.referrals.length),l(),c("ngIf",e.notes)}}function K0(o,m){o&1&&(i(0,"p",56),a(1,"No activity yet."),r())}function Q0(o,m){if(o&1&&(i(0,"div",66)(1,"span",67),a(2),r(),i(3,"span",68),a(4),r()()),o&2){let e=m.$implicit;l(2),g(e.label),l(2),g(e.value)}}function G0(o,m){if(o&1&&(i(0,"div",64),f(1,Q0,5,2,"div",65),r()),o&2){let e=d().$implicit,n=d(2);l(),c("ngForOf",e.fields)("ngForTrackBy",n.trackByIndex)}}function J0(o,m){if(o&1&&(i(0,"div",57),b(1,"span",58),i(2,"div",59)(3,"div",60)(4,"span",61),a(5),r(),i(6,"span",62),a(7),r()(),f(8,G0,2,2,"div",63),r()()),o&2){let e=m.$implicit;l(),c("ngClass","crm-timeline-dot-"+e.tone),l(4),g(e.title),l(2),g(e.time),l(),c("ngIf",e.fields==null?null:e.fields.length)}}function Y0(o,m){if(o&1&&(P(0),i(1,"div",30)(2,"div",31)(3,"div",32),a(4,"Activity Timeline"),r(),i(5,"span",47),a(6,"Logged against this promoter's account"),r()(),i(7,"div",33),f(8,K0,2,0,"p",53),i(9,"div",54),f(10,J0,9,4,"div",55),r()()(),F()),o&2){let e=d();l(8),c("ngIf",!e.activities.length),l(2),c("ngForOf",e.activities)("ngForTrackBy",e.trackByIndex)}}function $0(o,m){if(o&1&&(i(0,"div",69),a(1),r()),o&2){let e=d();l(),g(e.email)}}function Z0(o,m){if(o&1&&(i(0,"div",10),a(1),r()),o&2){let e=d();l(),g(e.phone)}}function X0(o,m){o&1&&(i(0,"div",70),a(1,"No contact details on this promoter."),r())}function eu(o,m){if(o&1&&(i(0,"span",12),a(1),r()),o&2){let e=d();c("ngClass","crm-badge-"+e.caseStudyTone),l(),g(e.caseStudyStatus)}}function tu(o,m){o&1&&(i(0,"span",39),a(1,"None"),r())}function nu(o,m){o&1&&(i(0,"div",30)(1,"div",71),a(2,"This promoter could not be loaded."),r()())}var Qi=(()=>{class o{constructor(e,n,t,s,_){this.router=e,this.route=n,this.toast=t,this.popup=s,this.api=_,this.promoterId=null,this.promoter=null,this.loaded=!1,this.activeTab="details",this.activities=[],this.referrals=[],this.caseStudyStatus=""}
8ngOnInit(){let e=this.route.snapshot.paramMap.get("id");if(this.promoterId=e?Number(e):null,this.promoterId==null||Number.isNaN(this.promoterId)){this.loaded=!0,this.toast.error("No promoter id in the URL.");return}this.loadPromoter(),this.loadReferrals(),this.loadCaseStudy()}loadPromoter(){this.api.getPromoterView({id:this.promoterId}).subscribe({next:e=>{if(this.loaded=!0,this.promoter=e?.response?.data||null,!this.promoter){this.toast.error("Promoter not found.");return}this.loadActivities()},error:()=>{this.loaded=!0,this.toast.error("Failed to load promoter.")}})}loadActivities(){this.customerId!=null&&this.api.getCustomerActivities({customerId:this.customerId,activityType:"",page_size:100,page:1}).subscribe({next:e=>{let n=e?.response?.data?.all_activities||e?.response?.data||[];this.activities=(Array.isArray(n)?n:[]).map(t=>z({time:this.fmtDateTime(t?.created_date||t?.created_at),tone:"blue"},Je(t,"customer")))},error:()=>{}})}loadReferrals(){this.api.getReferralList({search:"",page:1,page_size:100}).subscribe({next:e=>{this.referrals=this.rowsOf(e).filter(n=>this.belongsToPromoter(n)).map(n=>this.mapReferral(n))},error:()=>{}})}loadCaseStudy(){this.api.getCaseStudyList({search:"",page:1,page_size:100}).subscribe({next:e=>{let n=this.rowsOf(e).find(t=>this.belongsToPromoter(t));this.caseStudyStatus=String(n?.studyStatus||n?.study_status||"").trim()},error:()=>{}})}belongsToPromoter(e){let n=Number(e?.promoterId??e?.promoter_id??e?.promoter);if(Number.isFinite(n)&&n>0)return n===this.promoterId;let t=String(e?.promoter_name??e?.promoterName??"").trim().toLowerCase(),s=this.contactName.trim().toLowerCase();return!!t&&!!s&&t===s}rowsOf(e){let n=e?.response?.data;return Array.isArray(n)?n:n?.data||n?.results||n?.items||[]}mapReferral(e){let n=e.referralStatus||e.referral_status||"";return{company:e.referredCompany||e.referred_company||"\u2014",status:n||"\u2014",statusTone:this.statusTone(n),value:e.pipelineValue||e.pipeline_value||"\u2014",reward:e.reward_owed||e.rewardOwed||"\u2014"}}statusTone(e){let n=(e||"").toLowerCase();return n.includes("won")?"green":n.includes("lost")||n.includes("dead")?"red":"blue"}get contactName(){return String(this.promoter?.contactName||this.promoter?.contact_name||"").trim()}get accountName(){return String(this.promoter?.account_name||this.promoter?.accountName||"").trim()}get role(){return String(this.promoter?.role||"").trim()}get notes(){return String(this.promoter?.notes||"").trim()}get referenceable(){return String(this.promoter?.referenceableStatus||this.promoter?.referenceable_status||"").trim()}get title(){return this.contactName||"Promoter"}get avatar(){return(this.title||"P").charAt(0).toUpperCase()}
8get subtitle(){return[this.accountName,this.role].filter(Boolean).join(" \xB7 ")}get npsScore(){let e=this.promoter?.npsScore??this.promoter?.nps_score;return e==null||e===""?"\u2014":String(e)}get npsTone(){let e=Number(this.promoter?.npsScore??this.promoter?.nps_score);return Number.isFinite(e)?e>=9?"green":e>=7?"amber":"red":"gray"}get referenceableTone(){let e=this.referenceable.toLowerCase();return e.startsWith("yes")?"green":e.includes("pending")?"amber":"gray"}get lastSurvey(){return this.fmtDate(this.promoter?.lastSurveyDate||this.promoter?.last_survey_date)}get autoTagged(){return this.fmtDate(this.promoter?.autoTaggedDate||this.promoter?.created_date)}get tier(){return String(this.promoter?.tier||"").trim()}get caseStudyTone(){let e=this.caseStudyStatus.toLowerCase();return e.includes("publish")||e.includes("live")?"green":e.includes("draft")?"gray":"amber"}get customerId(){let e=this.promoter?.customerId??this.promoter?.customer_id??this.promoter?.customer,n=Number(e);return Number.isFinite(n)&&n>0?n:null}get email(){return String(this.promoter?.contactEmail||this.promoter?.contact_email||this.promoter?.email||"").trim()}get phone(){return String(this.promoter?.contactPhoneNumber||this.promoter?.contact_phone||this.promoter?.phone||"").trim()}fmtDateTime(e){if(!e)return"";let n=new Date(e);return Number.isNaN(n.getTime())?String(e):Ee(n,"MMM dd, yyyy hh:mm a","en-US")}fmtDate(e){if(!e)return"\u2014";let n=new Date(e);return Number.isNaN(n.getTime())?String(e):Ee(n,"yyyy-MM-dd","en-US")}trackByIndex(e){return e}setTab(e){this.activeTab=e}back(){this.router.navigate(["advocacy"],{relativeTo:this.route.parent})}addNote(){return B(this,null,function*(){let e=yield this.popup.open("add-note");if(e===null)return;let n=String(e.note||"").trim();if(!n){this.toast.error("Note content is required.");return}let t=Array.isArray(e.attachmentFiles)?e.attachmentFiles.filter(s=>s instanceof File):[];this.api.uploadAttachments(t,"crm",this.customerId??void 0).subscribe({next:s=>{let _=s.filter(S=>!S.url).length;_&&this.toast.warning(`${_} attachment(s) could not be uploaded \u2014 the note was saved with the filename only.`),this.saveActivity("NOTE_ADDED",{note:n,attachments:s},"Note added successfully","Failed to add note")},error:()=>this.saveActivity("NOTE_ADDED",{note:n,attachments:[]},"Note added successfully","Failed to add note")})})}addTodo(){return B(this,null,function*(){let e=yield this.popup.open("to-do");if(e===null)return;let n=String(e.type||"").trim();if(!n){this.toast.error("Type is required.");return}this.saveActivity("TODO_CREATED",{type:n.toLowerCase(),follow:String(e.follow||"").toLowerCase(),note:String(e.note||"").trim(),start_date:e.startDate||"",end_date:e.endDate||""},"To-do added successfully","Failed to add to-do")})}addReminder(){return B(this,null,function*(){let e=yield this.popup.open("add-reminder");if(e===null)return;let n=String(e.reminder||"").trim();if(!n){this.toast.error("Reminder is required.");return}let t="",s="";if(e.datetime){let _=new Date(e.datetime);Number.isNaN(_.getTime())||(t=_.toISOString().split("T")[0],s=_.toTimeString().split(" ")[0])}this.saveActivity("REMINDER_ADDED",{remainder:n,reminder_date:t,reminder_time:s},"Reminder added successfully","Failed to add reminder")})}saveActivity(e,n,t,s){if(this.customerId==null){this.toast.error("This promoter has no linked account to log against.");return}this.api.addCustomerActivity({customer:this.customerId,activityType:e,activityJson:n}).subscribe({next:_=>{_?.responseCode===200?(this.toast.success(_?.response?.message||t),this.activeTab="activities",this.loadActivities()):this.toast.error(_?.response?.message||s)},error:()=>this.toast.error(s)})}addReferral(){return B(this,null,function*(){let e=yield this.popup.open("add-referral");if(e===null)return;let n=String(e.referredCompany||"").trim();if(!n){this.toast.error("Referred company is required.");return}let t={promoter_id:this.promoterId,referred_company:n,contact_name:e.contactName||"",referral_status:e.referralStatus||"Active",pipeline_value:e.pipelineValue||"0.00",notes:e.notes||""};this.api.createReferral(t).subscribe({next:s=>{s?.responseCode===200?(this.toast.success(s?.response?.message||"Referral added."),this.loadReferrals()):this.toast.error(s?.response?.message||"Failed to add referral.")},error:()=>this.toast.error("Failed to add referral.")})})}static{this.\u0275fac=function(n){return new(n||o)(E($),E(Y),E(q),E(xe),E(R))}}static{this.\u0275cmp=V({type:o,selectors:[["app-advocacy-detail
8s"]],decls:78,vars:28,consts:[[1,"crm-page-body"],["aria-label","Breadcrumb",1,"crm-breadcrumb","mb-2"],["appTranslate","",1,"crm-section-action",3,"click"],[1,"crm-text-muted","mx-1"],[1,"crm-text-muted"],[1,"card","mb-3"],[1,"card-body","d-flex","align-items-center","flex-wrap","gap-3"],[1,"crm-avatar","crm-avatar-lg","crm-avatar-purple"],[1,"flex-grow-1"],[1,"crm-fw-700","font-16"],[1,"crm-text-muted","crm-text-sm"],[1,"d-flex","flex-column","align-items-center"],[1,"crm-badge",3,"ngClass"],["appTranslate","",1,"crm-text-xs","crm-text-muted","mt-1"],["class","d-flex flex-column align-items-center",4,"ngIf"],[1,"d-flex","flex-wrap","gap-2","mb-3"],["type","button",1,"btn","btn-outline-theme","btn-sm",3,"click","disabled","title"],[1,"ri-sticky-note-line"],["appTranslate",""],[1,"ri-checkbox-circle-line"],[1,"ri-alarm-line"],["type","button",1,"btn","btn-outline-theme","btn-sm",3,"click"],[1,"ri-share-forward-line"],[1,"crm-grid","crm-grid-3-1"],[1,"crm-tabs-bar"],["appTranslate","",1,"crm-tab-item",3,"click"],["appTranslateText","",1,"crm-tab-item",3,"click"],[1,"crm-tab-count"],[4,"ngIf"],[1,"d-flex","flex-column","gap-3"],[1,"card"],[1,"card-header"],["appTranslate","",1,"card-title"],[1,"card-body"],[1,"crm-fw-700","crm-text-sm"],["class","crm-text-muted crm-text-sm mt-1",4,"ngIf"],["class","crm-text-muted crm-text-sm",4,"ngIf"],["class","crm-text-muted crm-text-sm mt-1","appTranslate","",4,"ngIf"],[1,"d-flex","align-items-center","justify-content-between"],["appTranslate","",1,"crm-text-sm","crm-text-muted"],[1,"crm-text-sm"],[1,"d-flex","align-items-center","justify-content-between","mt-2"],["class","crm-badge",3,"ngClass",4,"ngIf"],["class","crm-text-sm crm-text-muted","appTranslate","",4,"ngIf"],["class","card",4,"ngIf"],[1,"crm-meta-list"],["appTranslate","",4,"ngIf"],["appTranslate","",1,"crm-text-muted","crm-text-xs","ml-auto"],[1,"crm-data-table"],[4,"ngFor","ngForOf","ngForTrackBy"],[3,"innerHTML"],["colspan","4","appTranslate","",1,"text-center"],[1,"crm-text-sm","crm-text-muted","mb-0"],["class","crm-text-muted crm-text-sm","appTranslate","",4,"ngIf"],[1,"crm-timeline"],["class","crm-timeline-item crm-timeline-item--card",4,"ngFor","ngForOf","ngForTrackBy"],["appTranslate","",1,"crm-text-muted","crm-text-sm"],[1,"crm-timeline-item","crm-timeline-item--card"],[1,"crm-timeline-dot",3,"ngClass"],[1,"crm-timeline-card"],[1,"crm-timeline-card__head"],[1,"crm-timeline-card__title"],[1,"crm-timeline-card__time"],["class","crm-timeline-card__body",4,"ngIf"],[1,"crm-timeline-card__body"],["class","crm-timeline-field",4,"ngFor","ngForOf","ngForTrackBy"],[1,"crm-timeline-field"],[1,"crm-timeline-field__label"],[1,"crm-timeline-field__value"],[1,"crm-text-muted","crm-text-sm","mt-1"],["appTranslate","",1,"crm-text-muted","crm-text-sm","mt-1"],["appTranslate","",1,"card-body","crm-text-muted","text-center"]],template:function(n,t){n&1&&(i(0,"div",0)(1,"nav",1)(2,"a",2),h("click",function(){return t.back()}),a(3,"Advocacy"),r(),i(4,"span",3),a(5,"/"),r(),i(6,"span",4),a(7),r()(),i(8,"div",5)(9,"div",6)(10,"div",7),a(11),r(),i(12,"div",8)(13,"div",9),a(14),r(),i(15,"div",10),a(16),r()(),i(17,"div",11)(18,"span",12),a(19),r(),i(20,"span",13),a(21,"NPS score"),r()(),f(22,N0,5,2,"div",14),r()(),i(23,"div",15)(24,"button",16),h("click",function(){return t.addNote()}),b(25,"i",17),i(26,"span",18),a(27,"Add Note"),r()(),i(28,"button",16),h("click",function(){return t.addTodo()}),b(29,"i",19),i(30,"span",18),a(31,"To Do"),r()(),i(32,"button",16),h("click",function(){return t.addReminder()}),b(33,"i",20),i(34,"span",18),a(35,"Add Reminder"),r()(),i(36,"button",21),h("click",function(){return t.addReferral()}),b(37,"i",22),i(38,"span",18),a(39,"Log Referral"),r()()(),i(40,"div",23)(41,"div")(42,"div",24)(43,"button",25),h("click",function(){return t.setTab("details")}),a(44,"Details"),r(),i(45,"button",26),h("click",function(){return t.setTab("activities")}),a(46,"Activities "),i(47,"span",27),a(48),r()()(),f(49,H0,57,14,"ng-container",28)(50,Y0,11,3,"ng-container",28),r(),i(51,"div",29)(52,"div",30)(53,"div",31)(54,"div",32),a(55,"Contact"),r()(),i(56,"div",33)(57,"div",34),a(58),r(),f(59,$0,2,1,"div",35)(60,Z0,2,1,"div",36)(61,X0,2,0,"div",37),r()(),i(62,"div",30)(63,"div",31)(64,"div",32),a(65,"Advocacy"),r()(),i(66,"div",33)(67,"div",38)(68,"span",39),a(69,"Referrals logged"),r(),i(70,"strong",40),a(71),r()(),i(72,"div",41)(73,"span",39),a(74,"Case study"),r(),f(75,eu,2,2,"span",42)(76,tu,2,0,"span",43),r()()()()(),f(77,nu,3,0,"div",44),r()),n&2&&(l(7),g(t.title),l(4),g(t.avatar),l(3),g(t.title),l(2),g(t.subtitle),l(2),c("ngClass","crm-badge-"+t.npsTone),l(),g(t.npsScore),l(3),c("ngIf",t.referenceable),l(2),c("disabled",!t.customerId)("title",t.customerId?"":"This promoter has no linked account to log against."),l(4),c("disabled",!t.customerId)("title",t.customerId?"":"This promoter has no linked account to log against."),l(4),c("disabled",!t.customerId)("title",t.customerId?"":"This promoter has no linked account to log against."),l(11),D("active",t.activeTab==="details"),l(2),D("active",t.activeTab==="activities"),l(3),g(t.activities.length),l(),c("ngIf",t.activeTab==="details"),l(),c("ngIf",t.activeTab==="activities"),l(8),g(t.contactName||"\u2014"),l(),c("ngIf",t.email),l(),c("ngIf",t.phone),l(),c("ngIf",!t.email&&!t.phone),l(10),g(t.referrals.length),l(4),c("ngIf",t.caseStudyStatus),l(),c("ngIf",!t.caseStudyStatus),l(),c("ngIf",t.loaded&&!t.promoter))},dependencies:[j,W,N,L,Me],styles:["[_nghost-%COMP%]{display:block}"]})}}return o}
8)();var iu=()=>({standalone:!0});function ru(o,m){if(o&1&&(i(0,"span",37),a(1),r()),o&2){let e=d().$implicit;c("ngClass","crm-badge-"+e.categoryTone),l(),g(e.category)}}function ou(o,m){o&1&&(i(0,"span",49),a(1,"\u2014"),r())}function au(o,m){if(o&1){let e=w();P(0),i(1,"button",50),h("click",function(){p(e);let t=d().$implicit,s=d();return u(s.recordCsat(t))}),a(2,"Record CSAT"),r(),F()}}function su(o,m){if(o&1&&(P(0),i(1,"span",37),a(2),r(),F()),o&2){let e=d().$implicit;l(),c("ngClass","crm-badge-"+e.csatTone),l(),g(e.csatLabel)}}function lu(o,m){o&1&&(i(0,"span",49),a(1,"\u2014"),r())}function cu(o,m){if(o&1){let e=w();i(0,"button",44),h("click",function(){p(e);let t=d().$implicit,s=d();return u(s.reply(t))}),b(1,"i",51),i(2,"span",7),a(3,"Reply"),r()()}}function du(o,m){if(o&1){let e=w();i(0,"button",44),h("click",function(){p(e);let t=d().$implicit,s=d();return u(s.reassign(t))}),b(1,"i",52),i(2,"span",7),a(3,"Reassign"),r()()}}function mu(o,m){o&1&&b(0,"div",48)}function pu(o,m){if(o&1){let e=w();i(0,"button",44),h("click",function(){p(e);let t=d().$implicit,s=d();return u(s.markInProgress(t))}),b(1,"i",53),i(2,"span",7),a(3,"Mark In Progress"),r()()}}function uu(o,m){if(o&1){let e=w();i(0,"button",44),h("click",function(){p(e);let t=d().$implicit,s=d();return u(s.markWaiting(t))}),b(1,"i",54),i(2,"span",7),a(3,"Waiting for Customer"),r()()}}function gu(o,m){if(o&1){let e=w();i(0,"button",44),h("click",function(){p(e);let t=d().$implicit,s=d();return u(s.resolve(t))}),b(1,"i",55),i(2,"span",7),a(3,"Resolve"),r()()}}function _u(o,m){if(o&1){let e=w();i(0,"button",44),h("click",function(){p(e);let t=d().$implicit,s=d();return u(s.reopen(t))}),b(1,"i",56),i(2,"span",7),a(3,"Reopen"),r()()}}function hu(o,m){if(o&1){let e=w();i(0,"button",44),h("click",function(){p(e);let t=d().$implicit,s=d();return u(s.recordCsat(t))}),b(1,"i",57),i(2,"span",7),a(3,"Record CSAT"),r()()}}function fu(o,m){if(o&1){let e=w();i(0,"button",44),h("click",function(){p(e);let t=d().$implicit,s=d();return u(s.closeTicket(t))}),b(1,"i",58),i(2,"span",7),a(3,"Close ticket"),r()()}}function xu(o,m){if(o&1){let e=w();i(0,"tr")(1,"td")(2,"a",34),h("click",function(){let t=p(e).$implicit,s=d();return u(s.view(t))}),a(3),r()(),i(4,"td"),a(5),r(),i(6,"td"),a(7),r(),i(8,"td"),f(9,ru,2,2,"span",35)(10,ou,2,0,"span",36),r(),i(11,"td")(12,"span",37),a(13),r()(),i(14,"td")(15,"span",37),a(16),r()(),i(17,"td")(18,"span",38),a(19),r()(),i(20,"td"),a(21),r(),i(22,"td"),a(23),r(),i(24,"td"),f(25,au,3,0,"ng-container",32)(26,su,3,2,"ng-container",32)(27,lu,2,0,"span",36),r(),i(28,"td",39)(29,"div",40)(30,"button",41),b(31,"i",42),r(),i(32,"div",43)(33,"button",44),h("click",function(){let t=p(e).$implicit,s=d();return u(s.view(t))}),b(34,"i",45),i(35,"span",7),a(36,"View"),r()(),f(37,cu,4,0,"button",46)(38,du,4,0,"button",46)(39,mu,1,0,"div",47)(40,pu,4,0,"button",46)(41,uu,4,0,"button",46)(42,gu,4,0,"button",46)(43,_u,4,0,"button",46)(44,hu,4,0,"button",46),b(45,"div",48),f(46,fu,4,0,"button",46),r()()()()}if(o&2){let e=m.$implicit;D("crm-row-risk",e.slaTone==="red"&&e.sla!=="Closed"),l(3),g(e.id),l(2),g(e.subject),l(2),g(e.customer),l(2),c("ngIf",e.category),l(),c("ngIf",!e.category),l(2),c("ngClass","crm-badge-"+e.priorityTone),l(),g(e.priority),l(2),c("ngClass","crm-badge-"+e.statusTone),l(),g(e.status),l(2),c("ngClass","crm-badge-"+e.slaTone),l(),g(e.sla),l(2),g(e.assignedTo),l(2),g(e.created),l(2),c("ngIf",e.csatStatus==="send"),l(),c("ngIf",e.csatStatus==="sent"||e.csatStatus==="done"),l(),c("ngIf",!e.csatStatus),l(10),c("ngIf",e.status!=="Resolved"&&e.status!=="Closed"),l(),c("ngIf",e.status!=="Resolved"&&e.status!=="Closed"),l(),c("ngIf",e.status!=="Resolved"&&e.status!=="Closed"),l(),c("ngIf",e.status!=="Resolved"&&e.status!=="Closed"),l(),c("ngIf",e.status!=="Resolved"&&e.status!=="Closed"),l(),c("ngIf",e.status!=="Resolved"&&e.status!=="Closed"),l(),c("ngIf",e.status==="Resolved"||e.status==="Closed"),l(),c("ngIf",e.csatStatus==="send"),l(2),c("ngIf",e.status!=="Closed")}}function yu(o,m){o&1&&(i(0,"tr")(1,"td",59),a(2,"Loading tickets\u2026"),r()())}function vu(o,m){o&1&&(i(0,"tr")(1,"td",60),a(2,"No tickets in this view."),r()())}var Gi=(()=>{class o{constructor(e,n,t,s,_,S){this.router=e,this.route=n,this.toast=t,this.modal=s,this.popup=_,this.api=S,this.search="",this.loading=!1,this.totalCount=0,this.pageSize=10,this.pageIndex=0,this.pageSizeOptions=[5,10,25,50],this.rows=[],this.viewRows=[],this.sortKey=null,this.sortDir=1,this.searchInput$=new Ie,this.destroy$=new Ie,this.dash={}}ngOnInit(){this.searchInput$.pipe(Re(300),qe(),ze(this.destroy$)).subscribe(()=>this.loadTickets()),this.loadTickets(),this.loadDashboard()}loadDashboard(){this.api.getTicketDashboard().subscribe({next:e=>{let n=e?.response?.data;this.dash=n?.response||n||{}},error:()=>{}})}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}onSearchChange(){this.pageIndex=0,this.searchInput$.next(this.search)}onPageChange(e){this.pageIndex=e.pageIndex,this.pageSize=e.pageSize,this.loadTickets()}loadTickets(){this.loading=!0;let e={search:this.search?.trim()||"",page:this.pageIndex+1,page_size:this.pageSize};this.api.getTicketList(e).subscribe({next:n=>{if(n?.responseCode===200&&n?.response){let t=n.response.data||n.response.results||[];this.rows=t.map(s=>this.mapTicket(s)),this.totalCount=n.response.total_count??n.response.total??this.rows.length,n.response.current_page!=null&&(this.pageIndex=n.response.current_page-1),n.response.page_size!=null&&(this.pageSize=n.response.page_size)}else this.rows=[],this.totalCount=0,this.toast.error(n?.response?.message||"Failed to load tickets.");this.viewRows=[...this.rows],this.loading=!1},error:()=>{this.rows=[],this.viewRows=[],this.totalCount=0,this.loading=!1,this.toast.error("Failed to load tickets.")}})}mapTicket(e){let n=e.priority||"\u2014",t=e.status||"\u2014",s=e.isOverdue?"Overdue":e.slaTier||"\u2014",_=e.csatScore,S=String(e.category??e.ticketCategory??e.ticket_category??"").trim(),T={ticketId:e.id,id:e.ticketNumber||(e.id!=null?"TK-"+e.id:"\u2014"),subject:e.subject||"\u2014",customer:e.customer_name||"\u2014",category:S,categoryTone:this.categoryTone(S),priority:n,priorityTone:this.priorityTone(n),status:t,statusTone:this.statusTone(t),sla:s,slaTone:e.isOverdue?"red":this.slaTone(s),assignedTo:e.assigned_to_name||(e.assignedTo!=null?String(e.assignedTo):"\u2014"),assignedToId:e.assignedTo!=null?Number(e.assignedTo):null,created:e.created_date||""};return _!=null&&_!==""||e.csatSurveySubmitted===!0?(T.csatStatus="done",T.csatLabel=_!=null&&_!==""?`CSAT ${_}/5`:"CSAT received",T.csatTone=Number(_)>=4?"green":Number(_)>=3?"amber":"red"):e.csatSurveyTriggered===!0?(T.csatStatus="sent",T.csatLabel="Survey sent",T.csatTone="blue"):(t==="Resolved"||t==="Closed")&&(T.csatStatus="send"),T}priorityTone(e){return{High:"red",Medium:"amber",Low:"gray"}[e]??"gray"}categoryTone(e){return{Bug:"red",Incident:"amber","Feature Request":"purple",Task:"blue",Other:"gray"}[e]??"gray"}statusTone(e){return{New:"blue","In Progress":"blue","Waiting Customer":"amber",Resolved:"green",Closed:"green"}[e]??"blue"}slaTone(e){return/overdue/i.test(e)?"red":/closed/i.test(e)?"green":"amber"}doSort(e){this.sortDir=this.sortKey===e&&this.sortDir===1?-1:1,this.sortKey=e;let n=this.sortDir;this.viewRows.sort((t,s)=>{let _=t[e],S=s[e];return typeof _=="number"&&typeof S=="number"?(_-S)*n:String(_).localeCompare(String(S),void 0,{numeric:!0})*n})}sortClass(e){return this.sortKey!==e?"crm-sort":this.sortDir===1?"crm-sort-asc":"crm-sort-desc"}trackByIndex(e){return e}view(e){this.router.navigate(["tickets",e.ticketId],{relativeTo:this.route.parent})}reply(e){this.view(e)}markInProgress(e){return B(this,null,function*(){let n=yield this.popup.open("ticket-in-progress");if(n===null)return;let t=n.assignee!=null&&n.assignee!==""?Number(n.assignee):null;this.setStatus(e,"In Progress",n.internalNote,`Ticket ${e.id} marked In Progress.`,t)})}markWaiting(e){return B(this,null,function*(){let n=yield this.popup.open("ticket-waiting");n!==null&&this.setStatus(e,"Waiting for Customer",n.message,`Ticket ${e.id} marked Waiting for Customer.`)})}resolve(e){return B(this,null,function*(){let n=yield this.popup.open("ticket-resolved");n!==null&&this.setStatus(e,"Resolved",n.summary||n.rootCause,`Ticket ${e.id} resolved.`)})}reopen(e){return B(this,null,function*(){let n=yield this.popup.open("ticket-reopen");n!==null&&this.setStatus(e,"Reopened",n.newContext,`Ticket ${e.id} reopened.`)})}reassign(e){this.view(e)}setStatus(e,n,t,s,_=null){this.api.updateTicketStatus({ticket_id:e.ticketId,updated_status:n,notes:String(t||"")}).subscribe({next:S=>{if(S?.responseCode!==200){this.toast.error(S?.response?.message||"Failed to update status.");return}this.toast.success(S?.response?.message||s),_!=null&&Number.isFinite(_)&&_!==e.assignedToId?this.api.reassignTicket({ticket_id:e.ticketId,assigned_to:_}).subscribe({next:()=>this.loadTickets(),error:()=>{this.toast.error("Status updated, but reassign failed."),this.loadTickets()}}):this.loadTickets()},error:()=>this.toast.error("Failed to update status.")})}newTicket(){return B(this,null,function*(){let e=yield this.popup.open("new-ticket");if(e===null)return;if(e.customerId==null){this.toast.error("Please pick a customer.");return}let n=String(e.subject||"").trim();if(!n){this.toast.error("Subject is required.");return}let t=e.assignTo!=null&&e.assignTo!==""?Number(e.assignTo):null,s=Array.isArray(e.attachmentFiles)?e.attachmentFiles.filter(S=>S instanceof File):[],_={customer_id:Number(e.customerId),priority:e.priority||"",category:e.category||"",subject:n,description:e.description||""};t!=null&&(_.assign_to=t),this.api.createTicket(_).subscribe({next:S=>{let T=Number(S?.responseCode??0);if(T===200||T===201){let M=S?.response?.data||{},I=Number(M.id??M.ticket_id??M.ticketId??0),k=()=>{this.toast.success(S?.response?.message||"Ticket created."),this.loadTickets()};s.length&&Number.isFinite(I)&&I>0?this.api.addTicketAttachments({ticket_id:I,files:s}).subscribe({next:()=>{this.linkAttachments(I,s),k()},error:()=>{this.toast.warning("Ticket created, but some attachments could not be uploaded."),this.loadTickets()}}):k()}else this.toast.error(S?.response?.message||"Failed to create ticket.")},error:()=>this.toast.error("Failed to create ticket.")})})}linkAttachments(e,n){this.api.uploadAttachments(n,"crm",e).subscribe({next:t=>{let s=t.filter(_=>_.url).map(_=>
8({name:_.name,url:_.url}));s.length&&this.api.addTicketActivity({ticket_id:e,activity_type:"ATTACHMENT_ADDED",meta:{attachments:s}}).subscribe({error:()=>{}})},error:()=>{}})}recordCsat(e){e.csatStatus==="send"&&this.view(e)}closeTicket(e){return B(this,null,function*(){(yield this.modal.confirm({title:"Close ticket?",body:`Close ${e.id}?`,confirmTone:"success",confirmLabel:"Close"}))&&this.api.updateTicketStatus({ticket_id:e.ticketId,updated_status:"Closed"}).subscribe({next:t=>{t?.responseCode===200?(this.toast.success(`Ticket ${e.id} closed.`),this.loadTickets()):this.toast.error(t?.response?.message||"Failed to close ticket.")},error:()=>this.toast.error("Failed to close ticket.")})})}static{this.\u0275fac=function(n){return new(n||o)(E($),E(Y),E(q),E(ue),E(xe),E(R))}}static{this.\u0275cmp=V({type:o,selectors:[["app-tickets"]],decls:84,vars:24,consts:[[1,"crm-page-body"],[1,"crm-page-header"],["appTranslate","",1,"crm-page-title"],["appTranslate","",1,"crm-page-subtitle"],[1,"crm-page-actions"],["type","button",1,"btn","btn-theme","btn-sm",3,"click"],[1,"ri-add-line"],["appTranslate",""],[1,"crm-stat-grid"],[1,"crm-stat-card"],[1,"crm-stat-header"],["appTranslate","",1,"crm-stat-label"],[1,"crm-stat-icon","crm-stat-icon-blue"],[1,"ri-ticket-2-line"],[1,"crm-stat-value"],[1,"crm-stat-icon","crm-stat-icon-red"],[1,"ri-alarm-warning-line"],[1,"crm-stat-icon","crm-stat-icon-green"],[1,"ri-checkbox-circle-line"],[1,"crm-stat-icon","crm-stat-icon-purple"],[1,"ri-star-smile-line"],[1,"card"],[1,"card-header"],["appTranslate","",1,"crm-text-sm","crm-text-muted"],[1,"crm-search-wrap"],[1,"ri-search-line"],["type","search","placeholder","Search tickets\u2026",1,"crm-search-input",3,"ngModelChange","ngModel","ngModelOptions"],[1,"card-body","p-0"],[1,"crm-table-wrapper","crm-table-wrapper-flush"],[1,"crm-data-table"],["appTranslate","",3,"click","ngClass"],[3,"crm-row-risk",4,"ngFor","ngForOf","ngForTrackBy"],[4,"ngIf"],["showFirstLastButtons","",3,"page","length","pageSize","pageIndex","pageSizeOptions"],[1,"crm-cell-primary",3,"click"],["class","crm-badge",3,"ngClass",4,"ngIf"],["class","crm-text-muted",4,"ngIf"],[1,"crm-badge",3,"ngClass"],[1,"crm-badge","crm-badge-dot",3,"ngClass"],[1,"text-right"],["ngbDropdown","","container","body","placement","bottom-end",1,"d-inline-block"],["type","button","ngbDropdownToggle","","aria-label","Actions",1,"crm-btn-icon","crm-actions-toggle"],[1,"ri-more-2-fill"],["ngbDropdownMenu",""],["ngbDropdownItem","",3,"click"],[1,"ri-eye-line","mr-2"],["ngbDropdownItem","",3,"click",4,"ngIf"],["class","dropdown-divider",4,"ngIf"],[1,"dropdown-divider"],[1,"crm-text-muted"],["type","button","appTranslate","",1,"btn","btn-outline-theme","btn-sm",3,"click"],[1,"ri-reply-line","mr-2"],[1,"ri-user-shared-line","mr-2"],[1,"ri-play-circle-line","mr-2"],[1,"ri-time-line","mr-2"],[1,"ri-check-double-line","mr-2"],[1,"ri-restart-line","mr-2"],[1,"ri-star-smile-line","mr-2"],[1,"ri-close-circle-line","mr-2"],["colspan","11","appTranslate","",1,"text-center","py-4"],["colspan","11","appTranslate","",1,"text-center","crm-text-muted"]],template:function(n,t){if(n&1&&(i(0,"div",0)(1,"div",1)(2,"div")(3,"h1",2),a(4,"Support Tickets"),r(),i(5,"p",3),a(6,"Customer issues with SLA tracking"),r()(),i(7,"div",4)(8,"button",5),h("click",function(){return t.newTicket()}),b(9,"i",6),i(10,"span",7),a(11,"New Ticket"),r()()()(),i(12,"div",8)(13,"div",9)(14,"div",10)(15,"span",11),a(16,"Open"),r(),i(17,"span",12),b(18,"i",13),r()(),i(19,"div",14),a(20),r()(),i(21,"div",9)(22,"div",10)(23,"span",11),a(24,"Overdue"),r(),i(25,"span",15),b(26,"i",16),r()(),i(27,"div",14),a(28),r()(),i(29,"div",9)(30,"div",10)(31,"span",11),a(32,"Resolved Today"),r(),i(33,"span",17),b(34,"i",18),r()(),i(35,"div",14),a(36),r()(),i(37,"div",9)(38,"div",10)(39,"span",11),a(40,"Avg CSAT"),r(),i(41,"span",19),b(42,"i",20),r()(),i(43,"div",14),a(44),r()()(),i(45,"div",21)(46,"div",22)(47,"span",23),a(48,"CSAT survey is auto-triggered on ticket resolution per SLA-tier configuration."),r(),i(49,"div",4)(50,"div",24),b(51,"i",25),i(52,"input",26),v("ngModelChange",function(_){return y(t.search,_)||(t.search=_),_}),h("ngModelChange",function(){return t.onSearchChange()}),r()()()(),i(53,"div",27)(54,"div",28)(55,"table",29)(56,"thead")(57,"tr")(58,"th",30),h("click",function(){return t.doSort("id")}),a(59,"ID"),r(),i(60,"th",30),h("click",function(){return t.doSort("subject")}),a(61,"Subject"),r(),i(62,"th",30),h("click",function(){return t.doSort("customer")}),a(63,"Customer"),r(),i(64,"th",30),h("click",function(){return t.doSort("category")}),a(65,"Category"),r(),i(66,"th",30),h("click",function(){return t.doSort("priority")}),a(67,"Priority"),r(),i(68,"th",30),h("click",function(){return t.doSort("status")}),a(69,"Status"),r(),i(70,"th",30),h("click",function(){return t.doSort("sla")}),a(71,"SLA"),r(),i(72,"th",30),h("click",function(){return t.doSort("assignedTo")}),a(73,"Assigned"),r(),i(74,"th",30),h("click",function(){return t.doSort("created")}),a(75,"Created"),r(),i(76,"th",7),a(77,"Survey"),r(),b(78,"th"),r()(),i(79,"tbody"),f(80,xu,47,27,"tr",31)(81,yu,3,0,"tr",32)(82,vu,3,0,"tr",32),r()()(),i(83,"mat-paginator",33),h("page",function(_){return t.onPageChange(_)}),r()()()()),n&2){let s,_,S;l(20),g((s=t.dash.open_tickets)!==null&&s!==void 0?s:"\u2014"),l(8),g((_=t.dash.overdue_tickets)!==null&&_!==void 0?_:"\u2014"),l(8),g((S=t.dash.resolved_today)!==null&&S!==void 0?S:"\u2014"),l(8),g(t.dash.avg_csat!=null?t.dash.avg_csat+"/5":"\u2014"),l(8),x("ngModel",t.search),c("ngModelOptions",C(23,iu)),l(6),c("ngClass",t.sortClass("id")),l(2),c("ngClass",t.sortClass("subject")),l(2),c("ngClass",t.sortClass("customer")),l(2),c("ngClass",t.sortClass("category")),l(2),c("ngClass",t.sortClass("priority")),l(2),c("ngClass",t.sortClass("status")),l(2),c("ngClass",t.sortClass("sla")),l(2),c("ngClass",t.sortClass("assignedTo")),l(2),c("ngClass",t.sortClass("created")),l(6),c("ngForOf",t.viewRows)("ngForTrackBy",t.trackByIndex),l(),c("ngIf",t.loading),l(
8),c("ngIf",!t.loading&&!t.viewRows.length),l(),c("length",t.totalCount)("pageSize",t.pageSize)("pageIndex",t.pageIndex)("pageSizeOptions",t.pageSizeOptions)}},dependencies:[j,W,N,te,U,H,at,Ve,De,Ae,Pe,Fe,L],styles:["[_nghost-%COMP%]{display:block}.crm-actions-toggle.dropdown-toggle[_ngcontent-%COMP%]:after{display:none}"]})}}return o})();var Ji=o=>({"crm-stat-value-red":o}),tn=()=>({standalone:!0});function Cu(o,m){if(o&1&&(i(0,"span",58),a(1),r()),o&2){let e=d(2);l(),A("\xB7 ",e.slaTier," tier")}}function bu(o,m){if(o&1&&(i(0,"div",54),b(1,"i",55),i(2,"div")(3,"span",56),a(4),r(),f(5,Cu,2,1,"span",57),r()()),o&2){let e=d();c("ngClass",e.isOverdue?"crm-alert-error":"crm-alert-warning"),l(4),g(e.isOverdue?"SLA overdue":"SLA on track"),l(),c("ngIf",e.slaTier!=="\u2014")}}function Su(o,m){if(o&1&&(i(0,"span"),a(1),r()),o&2){let e=d();l(),A(" \xB7 Created ",e.createdDisplay,"")}}function wu(o,m){if(o&1){let e=w();i(0,"div",59)(1,"button",60),h("click",function(){p(e);let t=d();return u(t.markInProgress())}),a(2,"Mark In Progress"),r(),i(3,"button",60),h("click",function(){p(e);let t=d();return u(t.markWaiting())}),a(4,"Waiting on Customer"),r(),i(5,"button",60),h("click",function(){p(e);let t=d();return u(t.resolve())}),a(6,"Mark Resolved"),r(),i(7,"button",60),h("click",function(){p(e);let t=d();return u(t.closeTicket())}),a(8,"Close Ticket"),r(),i(9,"button",61),h("click",function(){p(e);let t=d();return u(t.reopen())}),a(10,"Reopen"),r()()}if(o&2){let e=d();l(),c("disabled",e.isClosed)("title",e.closedHint),l(2),c("disabled",e.isClosed)("title",e.closedHint),l(2),c("disabled",e.isClosed)("title",e.closedHint),l(2),c("disabled",e.isClosed)("title",e.closedHint)}}function Tu(o,m){o&1&&(i(0,"span",62),b(1,"i",63),i(2,"span",22),a(3,"Closed \u2014 read-only. Reopen the ticket to make changes."),r()())}function ku(o,m){if(o&1&&(i(0,"div",73)(1,"div",74)(2,"strong"),a(3),r(),i(4,"span",75),a(5),r()(),i(6,"div",76),a(7),r()()),o&2){let e=m.$implicit;c("ngClass",e.side==="customer"?"td-conv-msg-customer":"td-conv-msg-agent"),l(3),g(e.author),l(2),g(e.meta),l(2),g(e.body)}}function Eu(o,m){if(o&1){let e=w();i(0,"div",38)(1,"div",41)(2,"div",64),f(3,ku,8,4,"div",65),r(),i(4,"div",66)(5,"label",67),a(6,"Reply to customer"),r(),i(7,"textarea",68),v("ngModelChange",function(t){p(e);let s=d();return y(s.replyDraft,t)||(s.replyDraft=t),u(t)}),r(),i(8,"div",69)(9,"button",70),h("click",function(){p(e);let t=d();return u(t.sendReply())}),a(10,"Send Reply"),r(),i(11,"button",71),h("click",function(){p(e);let t=d();return u(t.markWaiting())}),a(12,"Send & Mark Waiting"),r(),i(13,"button",71),h("click",function(){p(e);let t=d();return u(t.saveDraft())}),a(14,"Save as draft"),r(),i(15,"span",72)(16,"span",22),a(17,"AI suggests:"),r(),i(18,"a",2),h("click",function(){p(e);let t=d();return u(t.applyAiSuggestion())}),a(19,'"Engineering ETA + retry instructions"'),r()()()()()()}if(o&2){let e=d();l(3),c("ngForOf",e.conversation)("ngForTrackBy",e.trackByIndex),l(4),c("disabled",e.isClosed)("title",e.closedHint),x("ngModel",e.replyDraft),c("ngModelOptions",C(12,tn)),l(2),c("disabled",e.isClosed)("title",e.closedHint),l(2),c("disabled",e.isClosed)("title",e.closedHint),l(2),c("disabled",e.isClosed)("title",e.closedHint)}}function Mu(o,m){if(o&1&&(i(0,"span"),a(1),r()),o&2){let e=d(2);l(),A(" \u2014 ",e.reporterEmail,"")}}function Iu(o,m){if(o&1&&(i(0,"span"),a(1),r()),o&2){let e=d(2);l(),A(" \u2014 ",e.reporterPhone,"")}}function Ou(o,m){o&1&&(i(0,"p",82),a(1,"No attachments."),r())}function Pu(o,m){if(o&1){let e=w();i(0,"img",92),h("error",function(){p(e);let t=d(2).$implicit,s=d(3);return u(s.onAttachmentError(t))}),r()}if(o&2){let e=d(2).$implicit;c("src",e.url,me)("alt",e.name)}}function Fu(o,m){if(o&1&&(i(0,"span"),b(1,"i",93),a(2),r()),o&2){let e=d(2).$implicit;l(2),A(" ",e.name,"")}}function Au(o,m){if(o&1){let e=w();
8i(0,"span",87)(1,"a",88),f(2,Pu,1,2,"img",89)(3,Fu,3,1,"span",12),r(),i(4,"button",90),h("click",function(){p(e);let t=d().$implicit,s=d(3);return u(s.downloadAttachment(t))}),b(5,"i",91),r()()}if(o&2){let e=d().$implicit,n=d(3);l(),D("td-attachment-image",n.isImageAttachment(e)),c("href",e.url,me),pe("title",e.name),l(),c("ngIf",n.isImageAttachment(e)),l(),c("ngIf",!n.isImageAttachment(e)),l(),pe("title","Download "+e.name)("aria-label","Download "+e.name)}}function Du(o,m){if(o&1&&(i(0,"span",94),b(1,"i",95),a(2),r()),o&2){let e=d().$implicit;l(2),A(" ",e.name," ")}}function Vu(o,m){if(o&1&&(P(0),f(1,Au,6,8,"span",85)(2,Du,3,1,"span",86),F()),o&2){let e=m.$implicit;l(),c("ngIf",e.url),l(),c("ngIf",!e.url)}}function Lu(o,m){if(o&1&&(i(0,"div",83),f(1,Vu,3,2,"ng-container",84),r()),o&2){let e=d(2);l(),c("ngForOf",e.attachments)("ngForTrackBy",e.trackByIndex)}}function Nu(o,m){if(o&1&&(i(0,"div",38)(1,"div",41)(2,"dl",77)(3,"dt",22),a(4,"Subject"),r(),i(5,"dd"),a(6),r(),i(7,"dt",22),a(8,"Category"),r(),i(9,"dd"),a(10),r(),i(11,"dt",22),a(12,"Priority"),r(),i(13,"dd"),a(14),r(),i(15,"dt",22),a(16,"Status"),r(),i(17,"dd"),a(18),r(),i(19,"dt",22),a(20,"Reporter"),r(),i(21,"dd"),a(22),f(23,Mu,2,1,"span",12)(24,Iu,2,1,"span",12),r(),i(25,"dt",22),a(26,"Full Description"),r(),i(27,"dd"),a(28),r()(),b(29,"div",78),i(30,"div",79),a(31,"Attachments"),r(),f(32,Ou,2,0,"p",80)(33,Lu,2,2,"div",81),r()()),o&2){let e=d();l(6),g(e.subject),l(4),g(e.category),l(4),g(e.priority),l(4),g(e.status),l(4),g(e.reporterName),l(),c("ngIf",e.reporterEmail!=="\u2014"),l(),c("ngIf",e.reporterPhone!=="\u2014"),l(4),g(e.description),l(4),c("ngIf",!e.attachments.length),l(),c("ngIf",e.attachments.length)}}function Bu(o,m){o&1&&(i(0,"p",100),a(1,"No activity yet."),r())}function Wu(o,m){if(o&1&&(i(0,"div",111)(1,"span",112),a(2),r(),i(3,"span",113),a(4),r()()),o&2){let e=m.$implicit;l(2),g(e.label),l(2),g(e.value)}}function Ru(o,m){if(o&1){let e=w();i(0,"img",92),h("error",function(){p(e);let t=d().$implicit,s=d(5);return u(s.onNoteAttachmentError(t))}),r()}if(o&2){let e=d().$implicit;c("src",e.url,me)("alt",e.name)}}function qu(o,m){if(o&1&&(i(0,"span"),b(1,"i",93),a(2),r()),o&2){let e=d().$implicit;l(2),A(" ",e.name,"")}}function zu(o,m){if(o&1&&(i(0,"a",116),f(1,Ru,1,2,"img",89)(2,qu,3,1,"span",12),r()),o&2){let e=m.$implicit,n=d(5);D("td-attachment-image",n.isImageNoteAttachment(e)),pe("href",e.url||null,me)("target",e.url?"_blank":null)("title",e.name),l(),c("ngIf",n.isImageNoteAttachment(e)),l(),c("ngIf",!n.isImageNoteAttachment(e))}}function ju(o,m){if(o&1&&(i(0,"div",114),f(1,zu,3,7,"a",115),r()),o&2){let e=d(2).$implicit,n=d(2);l(),c("ngForOf",e.attachments)("ngForTrackBy",n.trackByIndex)}}function Uu(o,m){if(o&1&&(i(0,"div",108),f(1,Wu,5,2,"div",109)(2,ju,2,2,"div",110),r()),o&2){let e=d().$implicit,n=d(2);l(),c("ngForOf",e.fields)("ngForTrackBy",n.trackByIndex),l(),c("ngIf",e.attachments==null?null:e.attachments.length)}}function Hu(o,m){if(o&1&&(i(0,"div",101),b(1,"span",102),i(2,"div",103)(3,"div",104)(4,"span",105),a(5),r(),i(6,"span",106),a(7),r()(),f(8,Uu,3,3,"div",107),r()()),o&2){let e=m.$implicit;l(),c("ngClass","crm-timeline-dot-"+e.tone),l(4),g(e.title),l(2),g(e.time),l(),c("ngIf",(e.fields==null?null:e.fields.length)||(e.attachments==null?null:e.attachments.length))}}function Ku(o,m){if(o&1&&(i(0,"div",38)(1,"div",39)(2,"strong",40),a(3,"Activity Timeline"),r(),i(4,"span",96),a(5,"Status changes \xB7 Assignments \xB7 SLA events \xB7 Internal notes"),r()(),i(6,"div",41),f(7,Bu,2,0,"p",97),i(8,"div",98),f(9,Hu,9,4,"div",99),r()()()),o&2){let e=d();l(7),c("ngIf",!e.timeline.length),l(2),c("ngForOf",e.timeline)("ngForTrackBy",e.trackByIndex)}}function Qu(o,m){if(o&1){let e=w();i(0,"div",119)(1,"div",50)(2,"a",120),h("click",function(){let t=p(e).$implicit,s=d(2);return u(s.attachKb(t))}),a(3),r()(),i(4,"div",121),a(5),r()()}if(o&2){let e=m.$implicit;l(3),g(e.title),l(2),g(e.meta)}}function Gu(o,m){if(o&1&&(i(0,"div",38)(1,"div",39)(2,"strong",40),a(3,"AI-suggested Knowledge Base articles"),r()(),i(4,"div",41),f(5,Qu,6,2,"div",117),i(6,"div",118),a(7," AI suggests articles based on ticket content + customer's recent activity. Suggestions update live as the agent investigates. "),r()()()),o&2){let e=d();l(5),c("ngForOf",e.kbSuggestions)("ngForTrackBy",e.trackByIndex)}}function Ju(o,m){o&1&&(i(0,"p",100),a(1,"No internal notes yet."),r())}function Yu(o,m){if(o&1){let e=w();i(0,"img",92),h("error",function(){p(e);let t=d().$implicit,s=d(4);return u(s.onNoteAttachmentError(t))}),r()}if(o&2){let e=d().$implicit;c("src",e.url,me)("alt",e.name)}}function $u(o,m){if(o&1&&(i(0,"span"),b(1,"i",93),a(2),r()),o&2){let e=d().$implicit;l(2),A(" ",e.name,"")}}function Zu(o,m){if(o&1&&(i(0,"a",116),f(1,Yu,1,2,"img",89)(2,$u,3,1,"span",12),r()),o&2){let e=m.$implicit,n=d(4);D("td-attachment-image",n.isImageNoteAttachment(e)),pe("href",e.url||null,me)("target",e.url?"_blank":null)("title",e.name),l(),c("ngIf",n.isImageNoteAttachment(e)),l(),c("ngIf",!n.isImageNoteAttachment(e))}}function Xu(o,m){if(o&1&&(i(0,"div",125),f(1,Zu,3,7,"a",115),r()),o&2){let e=d().$implicit,n=d(2);l(),c("ngForOf",e.attachments)("ngForTrackBy",n.trackByIndex)}}function eg(o,m){if(o&1&&(i(0,"div",6)(1,"div",41)(2,"div",123)(3,"span",50),a(4),r(),i(5,"span",52),a(6),r()(),i(7,"div",82),a(8),r(),f(9,Xu,2,2,"div",124),r()()),o&2){let e=m.$implicit;l(4),g(e.title),l(2),g(e.meta),l(2),g(e.body),l(),c("ngIf",e.attachments==null?null:e.attachments.length)}}function tg(o,m){if(o&1&&(i(0,"div",38)(1,"div",39)(2,"strong",40),a(3,"Internal Notes"),r()(),i(4,"div",41),f(5,Ju,2,0,"p",97)(6,eg,10,4,"div",122),r()()),o&2){let e=d();l(5),c("ngIf",!e.internalNotes.length),l(),c("ngForOf",e.internalNotes)("ngForTrackBy",e.trackByIndex)}}function ng(o,m){if(o&1&&(i(0,"option",126),a(1),r()),o&2){let e=m.$implicit;
8c("ngValue",e.id),l(),g(e.name)}}function ig(o,m){if(o&1){let e=w();i(0,"div",38)(1,"div",39)(2,"strong",40),a(3,"Record CSAT"),r()(),i(4,"div",41)(5,"select",46),v("ngModelChange",function(t){p(e);let s=d();return y(s.csatScore,t)||(s.csatScore=t),u(t)}),i(6,"option",127),a(7,"Score\u2026"),r(),i(8,"option",128),a(9,"5 \u2014 Very satisfied"),r(),i(10,"option",129),a(11,"4 \u2014 Satisfied"),r(),i(12,"option",130),a(13,"3 \u2014 Neutral"),r(),i(14,"option",131),a(15,"2 \u2014 Dissatisfied"),r(),i(16,"option",132),a(17,"1 \u2014 Very dissatisfied"),r()(),i(18,"textarea",133),v("ngModelChange",function(t){p(e);let s=d();return y(s.csatComment,t)||(s.csatComment=t),u(t)}),r(),i(19,"button",134),h("click",function(){p(e);let t=d();return u(t.submitCsat())}),a(20,"Submit CSAT"),r()()()}if(o&2){let e=d();l(5),x("ngModel",e.csatScore),c("ngModelOptions",C(5,tn)),l(13),x("ngModel",e.csatComment),c("ngModelOptions",C(6,tn)),l(),c("disabled",!e.csatScore)}}function rg(o,m){if(o&1){let e=w();i(0,"div",38)(1,"div",39)(2,"strong",40),a(3,"Linked Account"),r()(),i(4,"div",41)(5,"a",135),h("click",function(){p(e);let t=d();return u(t.openAccount())}),a(6),r(),i(7,"button",136),h("click",function(){p(e);let t=d();return u(t.openAccount())}),i(8,"span",22),a(9,"Open Account"),r(),b(10,"i",137),r()()()}if(o&2){let e=d();l(6),g(e.customerName)}}function og(o,m){if(o&1&&(i(0,"div",38)(1,"div",39)(2,"strong",138)(3,"span",22),a(4,"SLA"),r(),a(5),r()(),i(6,"div",41)(7,"dl",77)(8,"dt",22),a(9,"First response due"),r(),i(10,"dd"),a(11),Ke(12,"slice"),r(),i(13,"dt",22),a(14,"Resolution due"),r(),i(15,"dd",139),a(16),r()()()()),o&2){let e=d();l(5),g(e.slaTier!=="\u2014"?" \u2014 "+e.slaTier:""),l(6),g(e.ticket!=null&&e.ticket.firstResponseDueAt?Lt(12,4,e.ticket.firstResponseDueAt,0,16):"\u2014"),l(4),c("ngClass",He(8,Ji,e.isOverdue)),l(),g(e.slaDueLabel)}}function ag(o,m){if(o&1){let e=w();i(0,"div",140)(1,"a",135),h("click",function(){let t=p(e).$implicit,s=d();return u(s.viewRelated(t))}),a(2),r(),i(3,"div",121),a(4),r()()}if(o&2){let e=m.$implicit;l(2),g(e.id),l(2),g(e.summary)}}var Yi=(()=>{class o{constructor(e,n,t,s,_){this.router=e,this.route=n,this.toast=t,this.popup=s,this.api=_,this.ticketId=null,this.ticket=null,this.assignees=[],this.reassignTo=null,this.csatScore="",this.csatComment="",this.attachments=[],this.activeTab="conversation",this.statusMenuOpen=!1,this.replyDraft="",this.conversation=[],this.timeline=[],this.internalNotes=[],this.kbSuggestions=[],this.relatedTickets=[],this.attachmentLinks=[],this.ticketLoaded=!1,this.activitiesLoaded=!1}ngOnInit(){let e=this.route.snapshot.paramMap.get("id");this.ticketId=e?Number(e):null,this.ticketId!=null&&!Number.isNaN(this.ticketId)&&(this.loadTicket(),this.loadActivities(),this.loadAssignees(),this.loadThread(),this.loadRelated(),this.loadKbSuggestions())}loadAssignees(){this.api.getAssigneeUsers({user_type:"SELLER",search:"",perPage:100,pageNumber:1}).subscribe({next:e=>{this.assignees=e?.response?.data?.users??[]},error:()=>{}})}loadThread(){this.api.getTicketThread({ticket_id:this.ticketId}).subscribe({next:e=>{let n=e?.response?.data||[];this.conversation=(Array.isArray(n)?n:[]).map(t=>{let s=t.author||"\u2014";return{side:s===this.reporterName||s===this.customerName?"customer":"agent",author:s,meta:`${this.fmtDate(t.created_date)}${t.activity_type?" \xB7 "+t.activity_type:""}`,body:t.message||""}})},error:()=>{}})}loadRelated(){this.api.getTicketRelated({ticket_id:this.ticketId}).subscribe({next:e=>{let n=e?.response?.data||[];this.relatedTickets=(Array.isArray(n)?n:[]).map(t=>({id:t.ticket_number||"TK-"+t.id,ticketId:t.id,summary:[t.subject,t.status].filter(Boolean).join(" \xB7 ")}))},error:()=>{}})}loadKbSuggestions(){this.api.getTicketKbSuggestions({ticket_id:this.ticketId}).subscribe({next:e=>{let n=e?.response?.data||[];this.kbSuggestions=(Array.isArray(n)?n:[]).map(t=>({title:t.title||"\u2014",meta:[t.category,t.views!=null?t.views+" views":"",t.summary].filter(Boolean).join(" \xB7 ")}))},error:()=>{}})}get showCsat(){let e=this.status;return(e==="Resolved"||e==="Closed")&&!this.ticket?.csatSurveySubmitted&&!this.ticket?.csatScore}loadTicket(){this.api.getTicketView({ticket_id:this.ticketId}).subscribe({next:e=>{e?.responseCode===200&&(this.ticket=e.response?.data||null,this.attachments=this.mapAttachments(this.ticket?.attachments),this.ticketLoaded=!0,this.applyAttachmentLinks(),this.repairMissingLinks())},error:()=>{}})}mapAttachments(e){return(Array.isArray(e)?e:[]).map(t=>{let s=t?.filePath||t?.filepath||t?.file_path||"";return{id:t?.id,name:t?.fileName||t?.file_name||t?.name||"Attachment",filePath:s,generatedName:t?.fileGeneratedName||t?.file_gen_name||t?.fileGenName||"",url:this.resolveAttachmentUrl(t,s)}})}resolveAttachmentUrl(e,n){let t=e?.fileViewPath||e?.file_view_path||e?.fileUrl||e?.file_url||e?.viewPath||e?.ViewImagePath||e?.imageViewPath||e?.url||e?.pathViewPath||e?.path_view_path||e?.viewUrl||e?.view_url||"",s=String(t).trim();return s?/^(https?:)?\/\//i.test(s)||s.startsWith("data:")||s.startsWith("blob:")?this.linkExpired(s)?"":s:s.startsWith("/")?Oe.apiUrl.replace(/\/+$/,"")+s:"":""}linkExpired(e){let n=String(e||"").split("?")[1];if(!n)return!1;let t=new URLSearchParams(n),s=t.get("X-Goog-Date")||t.get("X-Amz-Date")||"",_=Number(t.get("X-Goog-Expires")||t.get("X-Amz-Expires")||0);if(s&&_>0){let T=/^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})Z$/.exec(s);if(!T)return!1;let M=Date.UTC(+T[1],+T[2]-1,+T[3],+T[4],+T[5],+T[6]);return Date.now()>M+_*1e3}let S=Number(t.get("Expires")||0);return S>0?Date.now()>S*1e3:!1}collectAttachmentLinks(e){let n=[];for(let t of e||[]){let s=t?.meta||t?.activityJson||{},_=Array.isArray(s.attachments)?s.attachments:[];for(let S of _){let T=String(S?.name||S?.file_name||"").trim(),M=String(S?.url||S?.fileViewPath||S?.file_view_path||"").trim();T&&M&&!this.linkExpired(M)&&n.push({name:T,url:M})}}return n}applyAttachmentLinks(){if(!this.attachmentLinks.length)return;let e=t=>this.attachmentLinks.find(s=>s.name.toLowerCase()===String(t||"").toLowerCase())?.url||"";this.attachments=this.attachments.map(t=>t.url?t:se(z({},t),{url:e(t.name)}));let n=new Set(this.attachments.map(t=>String(t.name||"").toLowerCase()));for(let t of this.attachmentLinks)n.has(t.name.toLowerCase())||(n.add(t.name.toLowerCase()),this.attachments=this.attachments.concat({i
8d:0,name:t.name,filePath:"",generatedName:"",url:t.url}))}repairMissingLinks(){if(!this.ticketLoaded||!this.activitiesLoaded)return;let e=this.attachments.filter(n=>!n.url&&n.name&&!n.looked);e.length&&this.lookupAndPublish(e)}lookupAndPublish(e){for(let n of e)n.looked=!0;We(e.map(n=>this.api.searchDriveFiles({query:n.name,pageLength:50}).pipe(we(t=>{let s=t?.response?.data;return{att:n,url:this.pickDriveUrl(Array.isArray(s)?s:[],n)}}),de(()=>K({att:n,url:""}))))).subscribe(n=>{let t=n.filter(s=>!!s.url);if(t.length){for(let s of t)s.att.url=s.url;this.publishAttachmentLinks(t.map(s=>({name:s.att.name,url:s.url})))}})}publishAttachmentLinks(e){if(this.ticketId==null)return;let n=new Set(this.attachmentLinks.map(s=>s.name.trim().toLowerCase())),t=e.filter(s=>s.name&&s.url&&!n.has(s.name.trim().toLowerCase()));t.length&&this.api.addTicketActivity({ticket_id:this.ticketId,activity_type:"ATTACHMENT_ADDED",meta:{attachments:t}}).subscribe({next:()=>{this.attachmentLinks=this.attachmentLinks.concat(t)},error:()=>{}})}pickDriveUrl(e,n){let t=M=>String(M?.pathViewPath||M?.viewUrl||M?.fileViewPath||"").trim(),s=String(n.filePath||"").trim().toLowerCase(),_=String(n.name||"").trim().toLowerCase(),S=s&&e.find(M=>String(M?.filepath||M?.filePath||"").toLowerCase()===s);if(S&&t(S))return t(S);let T=e.find(M=>String(M?.fileName||M?.file_name||M?.name||"").trim().toLowerCase()===_&&t(M));return T?t(T):""}isImageAttachment(e){return e?.url?/\.(png|jpe?g|gif|webp|bmp|svg)(\?|#|$)/i.test(e.name||"")||/\.(png|jpe?g|gif|webp|bmp|svg)(\?|#|$)/i.test(e.url):!1}loadActivities(){this.api.getTicketActivities({ticket_id:this.ticketId,page:1,page_size:100}).subscribe({next:e=>{let n=e?.response?.data,t=Array.isArray(n)?n:n?.all_activities||n?.results||n?.items||[];this.timeline=(t||[]).map(s=>this.mapActivity(s)),this.attachmentLinks=this.collectAttachmentLinks(t),this.activitiesLoaded=!0,this.applyAttachmentLinks(),this.repairMissingLinks(),this.internalNotes=(t||[]).filter(s=>/note/i.test(s?.activity_type||s?.activityType||s?.type||"")).map(s=>this.mapNote(s)),this.resolveAttachmentLinks(this.internalNotes.reduce((s,_)=>s.concat(_.attachments||[]),[]).concat(this.timeline.reduce((s,_)=>s.concat(_.attachments||[]),[])))},error:()=>{}})}mapActivity(e){let n=e?.activityType||"Activity",t=Je(e,"ticket");return{time:this.fmtDate(e?.created_date),tone:this.activityTone(n),title:t.title,fields:t.fields,attachments:this.attachmentsFrom(e)}}mapNote(e){let n=e?.activityJson||e?.meta||{};return{title:et(e?.activityType)||"Note",meta:`${e?.performed_by_name||"\u2014"} \xB7 ${this.fmtDate(e?.created_date)}`,body:String(n.note||n.body||n.message||""),attachments:this.attachmentsFrom(e)}}activityTone(e){let n=(e||"").toLowerCase();return n.includes("resolve")||n.includes("close")||n.includes("assign")?"green":n.includes("wait")||n.includes("todo")||n.includes("remind")?"amber":"blue"}fmtDate(e){if(!e)return"";let n=new Date(e);return Number.isNaN(n.getTime())?String(e):Ee(n,"yyyy-MM-dd HH:mm","en-US")}get ticketCode(){return this.ticket?.ticketNumber||(this.ticket?.id!=null?"TK-"+this.ticket.id:"\u2014")}get subject(){return this.ticket?.subject||"\u2014"}get ticketTitleLine(){return`${this.ticketCode} \u2014 ${this.subject}`}get customerName(){return this.ticket?.customer_name||"\u2014"}get reporterName(){return this.ticket?.reporter_name||this.ticket?.created_by_name||"\u2014"}get reporterEmail(){return this.ticket?.reporter_email||"\u2014"}get reporterPhone(){return this.ticket?.reporter_phone||"\u2014"}get category(){return this.ticket?.category||"\u2014"}get description(){return this.ticket?.description||"\u2014"}get priority(){return this.ticket?.priority||"\u2014"}get priorityTone(){return{High:"red",Medium:"amber",Low:"gray"}[this.priority]??"gray"}get status(){return this.ticket?.status||"\u2014"}get statusTone(){return{New:"blue","In Progress":"blue","Waiting for Customer":"amber",Resolved:"green",Closed:"green"}[this.status]??"blue"}get isClosed(){return String(this.ticket?.status||"").trim().toLowerCase()==="closed"}get closedHint(){return this.isClosed?"This ticket is closed. Reopen it to make changes.":""}blockedByClosed(){return this.isClosed?(this.toast.warning("This ticket is closed. Reopen it to make further changes."),!0):!1}get createdDisplay(){return this.fmtDate(this.ticket?.created_date)}get assignedName(){return this.ticket?.assigned_to_name||"\u2014"}get slaTier(){return this.ticket?.slaTier||"\u2014"}get isOverdue(){return this.ticket?.isOverdue===!0}get slaDueLabel(){return this.isOverdue?"Overdue":this.ticket?.slaDueAt?this.fmtDate(this.ticket.slaDueAt):"\u2014"}trackByIndex(e){return e}back(){this.router.navigate(["tickets"],{relativeTo:this.route.parent})}openAccount(){let e=this.ticket?.customerId;if(e==null){this.toast.info("No linked account.");return}this.router.navigate(["accounts",e],{relativeTo:this.route.parent})}goToSetup(){this.router.navigate(["setup"],{relativeTo:this.route.parent})}viewRelated(e){this.router.navigate(["tickets",e.ticketId],{relativeTo:this.route.parent})}reassign(){if(!this.blockedByClosed()){if(this.reassignTo==null){this.toast.warning("Pick an assignee first.");return}this.ticketId!=null&&this.applyReassign(Number(this.reassignTo))}}applyReassign(e){this.ticketId!=null&&this.api.reassignTicket({ticket_id:this.ticketId,assigned_to:e}).subscribe({next:n=>{n?.responseCode===200?(this.toast.success(n?.response?.message||"Ticket reassigned."),this.reassignTo=null,this.loadTicket(),this.loadActivities()):this.toast.error(n?.response?.message||"Failed to reassign.")},error:()=>this.toast.error("Failed to reassign.")})}submitCsat(){if(!this.csatScore){this.toast.warning("Pick a score first.");return}this.ticketId!=null&&this.api.submitTicketCsat({ticket_id:this.ticketId,csat_score:this.csatScore,csat_comment:this.csatComment||""}).subscribe({next:e=>{e?.responseCode===200?(this.toast.success(e?.response?.message||"CSAT submitted."),this.csatScore="",this.csatComment="",this.loadTicket()):this.toast.error(e?.response?.message||"Failed to submit CSAT.")},error:()=>this.toast.error("Failed to submit CSAT.")})}editTicket(){return B(this,null,function*(){if(this.blockedByClosed())return;if(this.ticketId==null){this.toast.info("No ticket to edit.");return}let e=this.ticket?.assignedTo!=null?Number(this.ticket.assignedTo):null,n=this.status,t=yield this.popup.open("edit-ticket",{titleSuffix:this.ticketCode,customerName:this.customerName,subject:this.subject,description:this.description,category:this.category,priority:this.priority,assignTo:e,status:n});if(t===null)return;let s=t.assignTo!=null&&t.assignTo!==""?Number(t.assignTo):null,_=String(t.status||"").trim(),S=String(t.note||"").trim(),T=s!=null&&Number.isFinite(s)&&s!==e,M=!!_&&_!==n;if(!T&&!M){this.toast.info("Nothing to update.");return}M?this.api.updateTicketStatus({ticket_id:this.ticketId,updated_status:_,notes:S}).subscribe({next:I=>{if(I?.responseCode!==200){this.toast.error(I?.response?.message||"Failed to update status.");return}this.toast.success(I?.response?.message||"Ticket updated."),T?this.applyReassign(s):(this.loadTicket(),this.loadActivities())},error:()=>this.toast.error("Failed to update status.")}):this.applyReassign(s)})}applyAiSuggestion(){this.replyDraft="Hi Anika, Engineering has confirmed the ETA is 60\u201390 minutes for the v2 schema validator fix. Please hold off on a rollback and retry one POST to /orders once we confirm the deploy. I'll update here immediately."}saveDraft(){this.blockedByClosed()||this.toast.info("Draft saved.")}downloadAttachment(e){if(!e?.url){this.toast.warning(`"${e?.name||"This file"}" was uploaded, but no viewable link was recorded for it. Ask whoever uploaded it to open this ticket once \u2014 that restores the link for everyone.`);return}fetch(e.url).then(n=>n.blob()).then(n=>{let t=window.URL.createObjectURL(n),s=document.createElement("a");s.href=t,s.download=e.name||"attachment",document.body.appendChild(s),s.click(),document.body.removeChild(s),window.URL.revokeObjectURL(t)}).catch(()=>window.open(e.url,"_blank","noopener"))}onAttachmentError(e){!e||e.looked||(e.url="",this.lookupAndPublish([e]))}sendReply(){if(this.blockedByClosed())return;let e=this.replyDraft.trim();if(!e){this.toast.warning("Type a reply first.");return}if(this.ticketId==null){this.replyDraft="",this.toast.success("Reply sent.");return}this.api.replyTicket({ticket_id:this.ticketId,message:e}).subscribe({next:n=>{n?.responseCode===200?(this.replyDraft="",this.toast.success(n?.response?.message||"Reply sent."),this.loadThread(),this.loadActivities()):this.toast.error(n?.response?.message||"Failed to send reply.")},error:()=>this.toast.error("Failed to send reply.")})}attachKb(e){this.blockedByClosed()||this.toast.success(`KB article "${e.title}" attached.`)}escalate(){this.toast.warning("Ticket escalated.")}markInProgress(){return B(this,null,function*(){if(this.statusMenuOpen=!1,this.blockedByClosed())return;let e=yield this.popup.open("ticket-in-progress");if(e===null)return;this.updateStatus("In Progress",e.internalNote,"Marked In Progress.");let n=e.assignee!=null&&e.assignee!==""?Number(e.assignee):null;n!=null&&Number.isFinite(n)&&n!==Number(this.ticket?.assignedTo)&&this.applyReassign(n)})}
8markWaiting(){return B(this,null,function*(){if(this.statusMenuOpen=!1,this.blockedByClosed())return;let e=yield this.popup.open("ticket-waiting");e!==null&&this.updateStatus("Waiting for Customer",e.message,"Marked Waiting on Customer.","warning")})}resolve(){return B(this,null,function*(){if(this.statusMenuOpen=!1,this.blockedByClosed())return;let e=yield this.popup.open("ticket-resolved");e!==null&&this.updateStatus("Resolved",e.summary||e.rootCause,"Ticket resolved.")})}closeTicket(){return B(this,null,function*(){if(this.statusMenuOpen=!1,this.blockedByClosed())return;let e=yield this.popup.open("ticket-closed");if(e!==null){if(this.ticketId==null){this.toast.success("Ticket closed."),this.back();return}this.api.updateTicketStatus({ticket_id:this.ticketId,updated_status:"Closed",notes:e.finalNote||""}).subscribe({next:n=>{n?.responseCode===200?(this.toast.success(n?.response?.message||"Ticket closed."),this.back()):this.toast.error(n?.response?.message||"Failed to close ticket.")},error:()=>this.toast.error("Failed to close ticket.")})}})}reopen(){return B(this,null,function*(){this.statusMenuOpen=!1;let e=yield this.popup.open("ticket-reopen");e!==null&&this.updateStatus("Reopened",e.newContext,"Ticket reopened.","warning")})}updateStatus(e,n,t,s="success"){if(this.ticketId==null){this.toast[s](t);return}this.api.updateTicketStatus({ticket_id:this.ticketId,updated_status:e,notes:String(n||"")}).subscribe({next:_=>{_?.responseCode===200?(this.toast[s](_?.response?.message||t),this.loadTicket(),this.loadActivities()):this.toast.error(_?.response?.message||"Failed to update status.")},error:()=>this.toast.error("Failed to update status.")})}addNote(){return B(this,null,function*(){if(this.blockedByClosed())return;let e=yield this.popup.open("add-note");if(e===null)return;let n=String(e.note||"").trim();if(!n){this.toast.error("Note content is required.");return}let t=Array.isArray(e.attachmentFiles)?e.attachmentFiles.filter(s=>s instanceof File):[];this.api.uploadAttachments(t,"crm",this.ticketId??void 0).subscribe({next:s=>this.commitNote(n,s),error:()=>this.commitNote(n,[])})})}commitNote(e,n){let t=n.filter(s=>!s.url).length;t&&this.toast.warning(`${t} attachment(s) could not be uploaded \u2014 the note was saved with the filename only.`),this.saveActivity({activity_type:"NOTE_ADDED",note:e,attachments:n,meta:{attachments:n}},"Note added successfully","Failed to add note")}addTodo(){return B(this,null,function*(){if(this.blockedByClosed())return;let e=yield this.popup.open("to-do");if(e===null)return;let n=String(e.type||"").trim();if(!n){this.toast.error("Type is required.");return}this.saveActivity({activity_type:"TODO_CREATED",todo_type:n,follow:e.follow||"",note:String(e.note||"").trim(),start_date:e.startDate||"",end_date:e.endDate||""},"To-do added successfully","Failed to add to-do")})}addReminder(){return B(this,null,function*(){if(this.blockedByClosed())return;let e=yield this.popup.open("add-reminder");if(e===null)return;let n=String(e.reminder||"").trim();if(!n){this.toast.error("Reminder is required.");return}this.saveActivity({activity_type:"REMINDER_ADDED",reminder_text:n,reminder_at:e.datetime||""},"Reminder added successfully","Failed to add reminder")})}saveActivity(e,n,t){if(this.ticketId==null){this.toast.info("No ticket to update.");return}this.api.addTicketActivity(z({ticket_id:this.ticketId},e)).subscribe({next:s=>{s?.responseCode===200?(this.toast.success(s?.response?.message||n),this.loadActivities()):this.toast.error(s?.response?.message||t)},error:()=>this.toast.error(t)})}attachmentsFrom(e){let n=[e?.activityJson,e?.activity_json,e?.meta,e?.payload,e].map(t=>this.attachmentPayload(t)).filter(Boolean);for(let t of n){let s=t.attachments??t.files??t.attachment??this.attachmentPayload(t.meta)?.attachments,_=this.attachmentRows(s);if(_.length)return _}return[]}attachmentRows(e){let n=[];if(Array.isArray(e))n=e;else if(typeof e=="string"&&e.trim().startsWith("["))try{let t=JSON.parse(e);n=Array.isArray(t)?t:[]}catch{n=[]}return n.map(t=>{let s=t&&typeof t=="object"?t:{name:String(t??""),url:String(t??"")};return{name:this.displayNoteFileName(s),size:Number(s?.size||0),type:String(s?.type||""),url:this.attachmentUrl(s),path:String(s?.filepath||s?.filePath||s?.file_path||s?.n
8ame||"")}})}attachmentPayload(e){if(e&&typeof e=="object"&&!Array.isArray(e))return e;if(typeof e=="string"&&e.trim().startsWith("{"))try{return JSON.parse(e)}catch{return null}return null}attachmentUrl(e){let n=String(e?.url||e?.fileViewPath||e?.file_view_path||e?.pathViewPath||e?.path_view_path||e?.viewUrl||"").trim();return n?/^(https?:)?\/\//i.test(n)||n.startsWith("data:")||n.startsWith("blob:")?this.linkExpired(n)?"":n:n.startsWith("/")?Oe.apiUrl.replace(/\/+$/,"")+n:"":""}resolveAttachmentLinks(e){for(let n of(e||[]).filter(t=>t&&!t.url&&t.name&&!t.looked))n.looked=!0,this.api.searchDriveFiles({query:n.name,pageLength:50}).subscribe({next:t=>{let s=Array.isArray(t?.response?.data)?t.response.data:[],_=this.pickNoteDriveUrl(s,n);_&&(n.url=_)},error:()=>{}})}pickNoteDriveUrl(e,n){let t=k=>String(k?.pathViewPath||k?.viewUrl||k?.fileViewPath||"").trim(),s=k=>String(k||"").trim().toLowerCase().split("/").pop()||"",_=s(n.path),S=this.bareName(n.name),T=_&&e.find(k=>s(k?.filepath||k?.filePath)===_&&t(k));if(T)return t(T);let M=S&&e.find(k=>this.bareName(String(k?.fileName||k?.file_name||k?.name||k?.fileGenName||""))===S&&t(k));if(M)return t(M);let I=S&&e.find(k=>s(k?.filepath||k?.filePath).endsWith("_"+S)&&t(k));return I?t(I):""}bareName(e){return String(e||"").trim().replace(/^[0-9a-f]{16,40}[_-]/i,"").toLowerCase()}displayNoteFileName(e){let n=String(e?.name||e?.file_name||"").trim();return n.replace(/^[0-9a-f]{16,40}[_-]/i,"")||n}isImageNoteAttachment(e){if(!e?.url)return!1;if(String(e.type||"").toLowerCase().startsWith("image/"))return!0;let n=/\.(png|jpe?g|gif|webp|bmp|svg)(\?|#|$)/i;return n.test(e.name||"")||n.test(e.path||"")||n.test(e.url||"")}onNoteAttachmentError(e){!e||e.looked||(e.url="",this.resolveAttachmentLinks([e]))}static{this.\u0275fac=function(n){return new(n||o)(E($),E(Y),E(q),E(xe),E(R))}}static{this.\u0275cmp=V({type:o,selectors:[["app-ticket-detail"]],decls:130,vars:60,consts:[[1,"crm-page-body"],["aria-label","Breadcrumb",1,"td-breadcrumb","mb-2"],["appTranslate","",1,"crm-section-action",3,"click"],[1,"crm-text-muted","mx-1"],[1,"crm-text-muted"],["class","crm-alert mb-3",3,"ngClass",4,"ngIf"],[1,"card","mb-3"],[1,"card-body","td-header-body"],[1,"crm-avatar","crm-avatar-lg","crm-avatar-blue"],[1,"td-header-info"],[1,"td-ticket-title"],[1,"crm-text-muted","crm-text-sm","mt-1"],[4,"ngIf"],[1,"d-flex","align-items-center","gap-2"],[1,"crm-badge",3,"ngClass"],[1,"td-status-wrap"],["type","button","aria-label","Change ticket status",1,"td-status-trigger",3,"click"],["appTranslate","",1,"crm-text-muted","crm-text-xs","ml-1"],["class","td-status-menu",4,"ngIf"],[1,"td-action-bar","mb-3"],["type","button",1,"btn","btn-light","btn-sm",3,"click","disabled","title"],[1,"ri-sticky-note-line"],["appTranslate",""],[1,"ri-checkbox-circle-line"],[1,"ri-alarm-line"],[1,"ri-edit-line"],["class","crm-text-muted crm-text-xs d-inline-flex align-items-center ml-2",4,"ngIf"],[1,"crm-stat-grid","mb-3"],[1,"crm-stat-card"],[1,"crm-stat-header"],["appTranslate","",1,"crm-stat-label"],[1,"crm-stat-value",3,"ngClass"],[1,"crm-stat-value"],[1,"crm-grid","crm-grid-2-1"],[1,"crm-tabs-bar"],["appTranslate","",1,"crm-tab-item",3,"click"],["class","card",4,"ngIf"],[1,"d-flex","flex-column","gap-3"],[1,"card"],[1,"card-header"],["appTranslate","",1,"card-title"],[1,"card-body"],[1,"crm-people-cell","mb-3"],[1,"crm-avatar","crm-avatar-sm","crm-avatar-blue"],[1,"crm-people-name"],["appTranslate","",1,"crm-people-sub"],[1,"crm-filter-select","w-100","mb-2",3,"ngModelChange","ngModel","ngModelOptions"],["appTranslate","",3,"ngValue"],[3,"ngValue",4,"ngFor","ngForOf","ngForTrackBy"],["type","button","appTranslate","",1,"btn","btn-light","btn-sm","w-100",3,"click","disabled","title"],[1,"crm-fw-600","crm-text-sm"],[1,"crm-text-muted","crm-text-xs","mt-2"],[1,"crm-text-muted","crm-text-xs"],["class","td-related-ticket",4,"ngFor","ngForOf","ngForTrackBy"],[1,"crm-alert","mb-3",3,"ngClass"],[1,"ri-alarm-warning-line"],[1,"crm-alert-title"],["class","crm-alert-text ml-2",4,"ngIf"],[1,"crm-alert-text","ml-2"],[1,"td-status-menu"],["type","button","appTranslate","",3,"click","disabled","title"],["type","button","appTranslate","",3,"click"],[1,"crm-text-muted","crm-text-xs","d-inline-flex","align-items-center","ml-2"],[1,"ri-lock-line","mr-1"],[1,"td-conv-thread"],["class","td-conv-msg",3,"ngClass",4,"ngFor","ngForOf","ngForTrackBy"],[1,"td-reply-box","mt-3"],["appTranslate","",1,"crm-form-label"],["rows","4","placeholder","Draft your reply\u2026",1,"crm-form-textarea",3,"ngModelChange","disabled","title","ngModel","ngModelOptions"],[1,"d-flex","align-items-center","gap-2","mt-2","flex-wrap"],["type","button","appTranslate","",1,"btn","btn-theme","btn-sm",3,"click","disabled","title"],["type","button","appTranslate","",1,"btn","btn-light","btn-sm",3,"click","disabled","title"],[1,"crm-text-muted","crm-text-xs","ml-auto"],[1,"td-conv-msg",3,"ngClass"],[1,"td-conv-msg-head"],[1,"crm-text-muted","crm-text-xs","ml-2"],[1,"td-conv-msg-body"],[1,"crm-meta-list"],[1,"crm-divider","mt-3","mb-2"],[1,"crm-section-title","mb-2"],["class","crm-text-muted crm-text-sm",4,"ngIf"],["class","td-attachments",4,"ngIf"],[1,"crm-text-muted","crm-text-sm"],[1,"td-attachments"],[4,"ngFor","ngForOf","ngForTrackBy"],["class","td-attachment-item",4,"ngIf"],["class","td-attachment td-attachment-missing","t
8itle","Uploaded, but no viewable link was recorded for this file. Ask whoever uploaded it to open this ticket once \u2014 that restores the link for everyone.",4,"ngIf"],[1,"td-attachment-item"],["target","_blank","rel","noopener",1,"td-attachment",3,"href"],["loading","lazy",3,"src","alt","error",4,"ngIf"],["type","button",1,"td-attachment-action",3,"click"],[1,"ri-download-2-line"],["loading","lazy",3,"error","src","alt"],[1,"ri-attachment-2"],["title","Uploaded, but no viewable link was recorded for this file. Ask whoever uploaded it to open this ticket once \u2014 that restores the link for everyone.",1,"td-attachment","td-attachment-missing"],[1,"ri-error-warning-line"],["appTranslate","",1,"crm-text-muted","crm-text-xs"],["class","crm-text-muted crm-text-sm","appTranslate","",4,"ngIf"],[1,"crm-timeline"],["class","crm-timeline-item crm-timeline-item--card",4,"ngFor","ngForOf","ngForTrackBy"],["appTranslate","",1,"crm-text-muted","crm-text-sm"],[1,"crm-timeline-item","crm-timeline-item--card"],[1,"crm-timeline-dot",3,"ngClass"],[1,"crm-timeline-card"],[1,"crm-timeline-card__head"],[1,"crm-timeline-card__title"],[1,"crm-timeline-card__time"],["class","crm-timeline-card__body",4,"ngIf"],[1,"crm-timeline-card__body"],["class","crm-timeline-field",4,"ngFor","ngForOf","ngForTrackBy"],["class","td-attachments mt-1",4,"ngIf"],[1,"crm-timeline-field"],[1,"crm-timeline-field__label"],[1,"crm-timeline-field__value"],[1,"td-attachments","mt-1"],["class","td-attachment","rel","noopener",3,"td-attachment-image",4,"ngFor","ngForOf","ngForTrackBy"],["rel","noopener",1,"td-attachment"],["class","td-kb-suggest",4,"ngFor","ngForOf","ngForTrackBy"],["appTranslate","",1,"crm-text-muted","crm-text-xs","mt-3"],[1,"td-kb-suggest"],[1,"crm-section-action",3,"click"],[1,"crm-text-muted","crm-text-xs","mt-1"],["class","card mb-3",4,"ngFor","ngForOf","ngForTrackBy"],[1,"d-flex","justify-content-between","mb-2"],["class","td-attachments mt-2",4,"ngIf"],[1,"td-attachments","mt-2"],[3,"ngValue"],["value","","appTranslate",""],["value","5","appTranslate",""],["value","4","appTranslate",""],["value","3","appTranslate",""],["value","2","appTranslate",""],["value","1","appTranslate",""],["rows","2","placeholder","Comment (optional)",1,"crm-form-textarea","w-100","mb-2",3,"ngModelChange","ngModel","ngModelOptions"],["type","button","appTranslate","",1,"btn","btn-theme","btn-sm","w-100",3,"click","disabled"],[1,"crm-cell-primary",3,"click"],["type","button",1,"btn","btn-light","btn-sm","w-100","mt-3",3,"click"],[1,"ri-external-link-line"],[1,"card-title"],[3,"ngClass"],[1,"td-related-ticket"]],template:function(n,t){n&1&&(i(0,"div",0)(1,"nav",1)(2,"a",2),h("click",function(){return t.back()}),a(3,"Tickets"),r(),i(4,"span",3),a(5,"/"),r(),i(6,"span",4),a(7),r()(),f(8,bu,6,3,"div",5),i(9,"div",6)(10,"div",7)(11,"div",8),a(12,"T"),r(),i(13,"div",9)(14,"div",10),a(15),r(),i(16,"div",11),a(17),f(18,Su,2,1,"span",12),r()(),i(19,"div",13)(20,"span",14),a(21),r(),i(22,"div",15)(23,"button",16),h("click",function(){return t.statusMenuOpen=!t.statusMenuOpen}),i(24,"span",14),a(25),r(),i(26,"span",17),a(27,"Change \u25BE"),r()(),f(28,wu,11,8,"div",18),r()()()(),i(29,"div",19)(30,"button",20),h("click",function(){return t.addNote()}),b(31,"i",21),i(32,"span",22),a(33,"Add Note"),r()(),i(34,"button",20),h("click",function(){return t.addTodo()}),b(35,"i",23),i(36,"span",22),a(37,"To Do"),r()(),i(38,"button",20),h("click",function(){return t.addReminder()}),b(39,"i",24),i(40,"span",22),a(41,"Reminder"),r()(),i(42,"button",20),h("click",function(){return t.editTicket()}),b(43,"i",25),i(44,"span",22),a(45,"Edit"),r()(),f(46,Tu,4,0,"span",26),r(),i(47,"div",27)(48,"div",28)(49,"div",29)(50,"span",30),a(51,"SLA Due"),r()(),i(52,"div",31),a(53),r()(),i(54,"div",28)(55,"div",29)(56,"span",30),a(57,"Priority"),r()(),i(58,"div",32),a(59),r()(),i(60,"div",28)(61,"div",29)(62,"span",30),a(63,"Customer Tier"),r()(),i(64,"div",32),a(65),r()(),i(66,"div",28)(67,"div",29)(68,"span",30),a(69,"Created"),r()(),i(70,"div",32),a(71),r()()(),i(72,"div",33)(73,"div")(74,"div",34)(75,"button",35),h("click",function(){return t.activeTab="conversation"}),a(76,"Conversation"),r(),i(77,"button",35),h("click",function(){return t.activeTab="details"}),a(78,"Details"),r(),i(79,"button",35),h("click",function(){return t.activeTab="activity"}),a(80,"Activity"),r(),i(81,"button",35),h("click",function(){return t.activeTab="kb"}),a(82,"Linked Articles"),r(),i(83,"button",35),h("click",function(){return t.activeTab="notes"}),a(84,"Notes"),r()(),f(85,Eu,20,13,"div",36)(86,Nu,34,10,"div",36)(87,Ku,10,3,"div",36)(88,Gu,8,2,"div",36)(89,tg,7,3,"div",36),r(),i(90,"div",37)(91,"div",38)(92,"div",39)(93,"strong",40),a(94,"Assigned"),r()(),i(95,"div",41)(96,"div",42)(97,"div",43),a(98),r(),i(99,"div")(100,"div",44),a(101),r(),i(102,"div",45),a(103,"Support Agent"),r()()(),i(104,"select",46),v("ngModelChange",function(_){return y(t.reassignTo,_)||(t.reassignTo=_),_}),i(105,"option",47),a(106,"Reassign to\u2026"),r(),f(107,ng,2,2,"option",48),r(),i(108,"button",49),h("click",function(){return t.reassign()}),a(109,"Reassign"),r()()(),f(110,ig,21,7,"div",36),i(111,"div",38)(112,"div",39)(113,"strong",40),a(114,"Reporter"),r()(),i(115,"div",41)(116,"div",50),a(117),r(),i(118,"div",51),a(119),r(),i(120,"div",52),a(121),r()()(),f(122,rg,11,1,"div",36)(123,og,17,10,"div",36),i(124,"div",38)(125,"div",39)(126,"strong",40),a(127,"Related Tickets"),r()(),i(128,"div",41),f(129,ag,5,2,"div",53),r()()()()()),n&2&&(l(7),g(t.ticketCode),l(),c("ngIf",(t.ticket==null?null:t.ticket.slaTier)||(t.ticket==null?null:t.ticket.slaDueAt)),l(7),g(t.ticketTitleLine),l(2),Ye(" ",t.customerName," \xB7 Reporter: ",t.reporterName,""),l(),c("ngIf",t.createdDisplay),l(2),c("ngClass","crm-badge-"+t.priorityTone),l(),g(t.priority),l(3),c("ngClass","crm-badge-"+t.statusTone),l(),g(t.
8status),l(3),c("ngIf",t.statusMenuOpen),l(2),c("disabled",t.isClosed)("title",t.closedHint),l(4),c("disabled",t.isClosed)("title",t.closedHint),l(4),c("disabled",t.isClosed)("title",t.closedHint),l(4),c("disabled",t.isClosed)("title",t.closedHint),l(4),c("ngIf",t.isClosed),l(6),c("ngClass",He(57,Ji,t.isOverdue)),l(),g(t.slaDueLabel),l(6),g(t.priority),l(6),g(t.slaTier),l(6),g(t.createdDisplay||"\u2014"),l(4),D("active",t.activeTab==="conversation"),l(2),D("active",t.activeTab==="details"),l(2),D("active",t.activeTab==="activity"),l(2),D("active",t.activeTab==="kb"),l(2),D("active",t.activeTab==="notes"),l(2),c("ngIf",t.activeTab==="conversation"),l(),c("ngIf",t.activeTab==="details"),l(),c("ngIf",t.activeTab==="activity"),l(),c("ngIf",t.activeTab==="kb"),l(),c("ngIf",t.activeTab==="notes"),l(9),g((t.assignedName||"?").charAt(0)),l(3),g(t.assignedName),l(3),x("ngModel",t.reassignTo),c("ngModelOptions",C(59,tn)),l(),c("ngValue",null),l(2),c("ngForOf",t.assignees)("ngForTrackBy",t.trackByIndex),l(),c("disabled",t.isClosed||t.reassignTo==null)("title",t.closedHint),l(2),c("ngIf",t.showCsat),l(7),g(t.reporterName),l(2),g(t.reporterEmail),l(2),g(t.reporterPhone),l(),c("ngIf",t.customerName!=="\u2014"),l(),c("ngIf",t.slaTier!=="\u2014"||(t.ticket==null?null:t.ticket.slaDueAt)),l(6),c("ngForOf",t.relatedTickets)("ngForTrackBy",t.trackByIndex))},dependencies:[j,W,N,X,ee,te,Z,U,H,L,qt],styles:["[_nghost-%COMP%]{display:block}.td-breadcrumb[_ngcontent-%COMP%]{display:flex;align-items:center;font-size:.8125rem}.td-ticket-title[_ngcontent-%COMP%]{font-size:1rem;font-weight:700}.td-header-body[_ngcontent-%COMP%]{display:flex;align-items:center;gap:16px;flex-wrap:wrap}.td-header-info[_ngcontent-%COMP%]{flex:1;min-width:0}.td-status-wrap[_ngcontent-%COMP%]{position:relative}.td-status-trigger[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px;background:transparent;border:none;padding:0;cursor:pointer}.td-status-menu[_ngcontent-%COMP%]{position:absolute;right:0;top:calc(100% + 6px);background:#fff;border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-md);min-width:180px;z-index:400;overflow:hidden}.td-status-menu[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{display:block;width:100%;text-align:left;padding:10px 16px;font-size:.8125rem;color:var(--color-text-secondary);background:transparent;border:none;cursor:pointer}.td-status-menu[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{background:var(--color-primary-50);color:var(--color-primary)}.td-action-bar[_ngcontent-%COMP%]{display:flex;gap:8px;flex-wrap:wrap}.crm-stat-value-red[_ngcontent-%COMP%]{color:var(--color-error)}.td-conv-thread[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px}.td-conv-msg[_ngcontent-%COMP%]{border-radius:var(--radius-md);padding:14px 16px;font-size:.8125rem;line-height:1.6}.td-conv-msg-customer[_ngcontent-%COMP%]{background:var(--color-primary-50);border:1px solid var(--color-border)}.td-conv-msg-agent[_ngcontent-%COMP%]{background:var(--color-accent-50);border:1px solid var(--color-accent-light)}.td-conv-msg-head[_ngcontent-%COMP%]{display:flex;align-items:baseline;gap:8px;margin-bottom:6px;font-size:.8125rem}.td-kb-suggest[_ngcontent-%COMP%]{padding:12px 0;border-bottom:1px solid var(--color-border-light)}.td-kb-suggest[_ngcontent-%COMP%]:last-child{border-bottom:none}.td-related-ticket[_ngcontent-%COMP%]{padding:10px 0;border-bottom:1px solid var(--color-border-light)}.td-related-ticket[_ngcontent-%COMP%]:last-child{border-bottom:none}.td-reply-box[_ngcontent-%COMP%]{border-top:1px solid var(--color-border-light);padding-top:16px}.td-attachments[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px}.td-attachment[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px;max-width:100%;padding:4px 10px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);color:inherit;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.td-attachment[_ngcontent-%COMP%]:hover{text-decoration:none}a.td-attachment[_ngcontent-%COMP%]:hover{border-color:var(--color-accent)}.td-attachment-image[_ngcontent-%COMP%]{padding:0;border-radius:var(--radius-md);overflow:hidden}.td-attachment-image[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{display:block;width:120px;height:90px;object-fit:cover}.td-attachment-item[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px;max-width:100%}.td-attachment-action[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;padding:4px 6px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);color:inherit;font-size:13px;line-height:1;cursor:pointer}.td-attachment-action[_ngcontent-%COMP%]:hover{border-color:var(--color-accent);color:var(--color-accent)}.td-attachment-missing[_ngcontent-%COMP%]{color:var(--color-text-muted, #6b7280);cursor:not-allowed}"]})}}return o}
8)();var ut=()=>({standalone:!0});function sg(o,m){if(o&1&&(i(0,"option",35),a(1),r()),o&2){let e=m.$implicit;c("ngValue",e.key?+e.key:null),l(),g(e.label)}}function lg(o,m){if(o&1){let e=w();i(0,"div",36)(1,"div",37)(2,"div",15)(3,"div",16),a(4,"Add category"),r()(),i(5,"div",5)(6,"label",26),a(7,"Category name"),r(),i(8,"input",38),v("ngModelChange",function(t){p(e);let s=d(2);return y(s.newCategoryName,t)||(s.newCategoryName=t),u(t)}),r(),i(9,"div",6)(10,"button",39),h("click",function(){p(e);let t=d(2);return u(t.addCategoryFromModal())}),a(11,"Save"),r(),i(12,"button",33),h("click",function(){p(e);let t=d(2);return u(t.cancelAddCategoryModal())}),a(13,"Cancel"),r()()()()()}if(o&2){let e=d(2);l(8),x("ngModel",e.newCategoryName),c("ngModelOptions",C(3,ut)),l(2),c("disabled",e.savingCategory)}}function cg(o,m){if(o&1){let e=w();i(0,"div",4)(1,"div",15)(2,"div",24),a(3),r()(),i(4,"div",5)(5,"div",25)(6,"div")(7,"label",26),a(8,"Title"),r(),i(9,"input",27),v("ngModelChange",function(t){p(e);let s=d();return y(s.form.title,t)||(s.form.title=t),u(t)}),r()(),i(10,"div")(11,"label",26),a(12,"Category"),r(),i(13,"select",28),v("ngModelChange",function(t){p(e);let s=d();return y(s.form.category_id,t)||(s.form.category_id=t),u(t)}),h("ngModelChange",function(t){p(e);let s=d();return u(s.onCategoryChange(t))}),i(14,"option",29),a(15,"Select category\u2026"),r(),i(16,"option",30),a(17,"+ Add category name here"),r(),f(18,sg,2,2,"option",31),r()()(),i(19,"div",25)(20,"div")(21,"label",26),a(22,"Visibility"),r(),i(23,"select",28),v("ngModelChange",function(t){p(e);let s=d();return y(s.form.visibility,t)||(s.form.visibility=t),u(t)}),i(24,"option",19),a(25,"Customer-facing"),r(),i(26,"option",19),a(27,"Internal only"),r()()(),i(28,"div")(29,"label",26),a(30,"Status"),r(),i(31,"select",28),v("ngModelChange",function(t){p(e);let s=d();return y(s.form.status,t)||(s.form.status=t),u(t)}),i(32,"option",19),a(33,"Draft"),r(),i(34,"option",19),a(35,"Published"),r()()()(),i(36,"label",26),a(37,"Body"),r(),i(38,"textarea",32),v("ngModelChange",function(t){p(e);let s=d();return y(s.form.body,t)||(s.form.body=t),u(t)}),r(),i(39,"div",6)(40,"button",17),h("click",function(){p(e);let t=d();return u(t.saveArticle())}),a(41),r(),i(42,"button",33),h("click",function(){p(e);let t=d();return u(t.cancelForm())}),a(43,"Cancel"),r()(),f(44,lg,14,4,"div",34),r()()}if(o&2){let e=d();l(3),g(e.editingId?"Edit Article":"New Article"),l(6),x("ngModel",e.form.title),c("ngModelOptions",C(17,ut)),l(4),x("ngModel",e.form.category_id),c("ngModelOptions",C(18,ut)),l(),c("ngValue",null),l(2),c("ngValue","add-category"),l(2),c("ngForOf",e.categories)("ngForTrackBy",e.trackByIndex),l(5),x("ngModel",e.form.visibility),c("ngModelOptions",C(19,ut)),l(8),x("ngModel",e.form.status),c("ngModelOptions",C(20,ut)),l(7),x("ngModel",e.form.body),c("ngModelOptions",C(21,ut)),l(3),g(e.editingId?"Update":"Create"),l(3),c("ngIf",e.showAddCategoryModal)}}function dg(o,m){if(o&1&&(i(0,"span"),a(1),r()),o&2){let e=d(2);l(),A(" \xB7 ",e.reader.status,"")}}function mg(o,m){if(o&1&&(i(0,"span"),a(1),r()),o&2){let e=d(2);l(),A(" \xB7 ",e.reader.visibility,"")}}function pg(o,m){if(o&1){let e=w();i(0,"div",4)(1,"div",15)(2,"div",24),a(3),r(),i(4,"button",40),h("click",function(){p(e);let t=d();return u(t.closeReader())}),b(5,"i",41),r()(),i(6,"div",5)(7,"div",42),a(8),f(9,dg,2,1,"span",23)(10,mg,2,1,"span",23),r(),i(11,"p",43),a(12),r(),i(13,"div",44)(14,"span",45),a(15,"Was this helpful?"),r(),i(16,"button",46),h("click",function(){p(e);let t=d();return u(t.sendFeedback(!0))}),b(17,"i",47),i(18,"span",19),a(19,"Yes"),r()(),i(20,"button",46),h("click",function(){p(e);let t=d();return u(t.sendFeedback(!1))}),b(21,"i",48),i(22,"span",19),a(23,"No"),r()()()()()}if(o&2){let e=d();l(3),g(e.reader.title),l(5),A(" ",e.reader.category_name||"",""),l(),c("ngIf",e.reader.status),l(),c("ngIf",e.reader.visibility),l(2),g(e.reader.body)}}function ug(o,m){if(o&1){let e=w();i(0,"div")(1,"div",49),h("click",function(){let t=p(e).$implicit,s=d();return u(s.selectCategory(t.key))}),i(2,"div",5)(3,"div",50)(4,"span",51),b(5,"i",52),r(),i(6,"span",53),a(7),r()(),i(8,"div",54),a(9),r()()()()}if(o&2){let e=m.$implicit,n=d();l(),D("active",n.category===e.key),l(3),c("ngClass","crm-stat-icon-"+e.tone),l(),c("ngClass",e.icon),l(2),g(e.label),l(2),A("",e.count," articles")}}function gg(o,m){if(o&1){let e=w();i(0,"tr")(1,"td")(2,"a",55),h("click",function(){let t=p(e).$implicit,s=d();return u(s.openArticle(t))}),a(3),r()(),i(4,"td")(5,"span",56),a(6),r()(),i(7,"td"),a(8),r(),i(9,"td"),a(10),r(),i(11,"td"),a(12),r(),i(13,"td")(14,"div",57)(15,"button",58),b(16,"i",59),r(),i(17,"div",60)(18,"button",61),h("click",function(){let t=p(e).$implicit,s=d();return u(s.openArticle(t))}),b(19,"i",62),a(20,"Read"),r(),i(21,"button",61),h("click",function(){let t=p(e).$implicit,s=d();return u(s.editArticle(t))}),b(22,"i",63),a(23,"Edit"),r(),i(24,"button",64),h("click",function(){let t=p(e).$implicit,s=d();return u(s.deleteArticle(t))}),b(25,"i",65),a(26,"Delete"),r()()()()()}if(o&2){let e=m.$implicit;l(3),g(e.title),l(2),c("ngClass","crm-badge-"+e.tone),l(),g(e.category),l(2),g(e.views),l(2),A("",e.helpful,"%"),l(2),g(e.updated)}}function _g(o,m){o&1&&(i(0,"tr")(1,"td",66),a(2,"Loading articles\u2026"),r()())}function hg(o,m){o&1&&(i(0,"tr")(1,"td",67),a(2,"No articles match this filter."),r()())}var nn="Internal only",$i=(()=>{class o{constructor(e,n,t){this.toast=e,this.modal=n,this.api=t,this.search="",this.category="all",this.categories=[],this.articles=[],this.loading=!1,this.catTones=["green","blue","purple","amber","teal"],this.catIcons=["ri-rocket-line","ri-bill-line","ri-plug-line","ri-tools-line","ri-book-2-line"],this.formOpen=!1,this.editingId=null,this.form={t
8itle:"",category_id:null,visibility:nn,status:"Draft",body:""},this.showAddCategoryModal=!1,this.newCategoryName="",this.savingCategory=!1,this.reader=null}ngOnInit(){this.loadCategories(),this.loadArticles()}loadCategories(e){this.api.getKbCategoryList({}).subscribe({next:n=>{if(n?.responseCode===200&&n?.response){let t=n.response.data,s=Array.isArray(t)?t:t?.items||t?.results||(t?Object.values(t):[]);this.categories=s.map((_,S)=>({key:String(_.id),label:_.name||_.label||"\u2014",count:Number(_.article_count??_.count??0),tone:this.catTones[S%this.catTones.length],icon:this.catIcons[S%this.catIcons.length]}))}else this.categories=[];e!=null&&this.categories.some(t=>+t.key===e)&&(this.form.category_id=e)},error:()=>{this.categories=[]}})}loadArticles(){this.loading=!0;let e={search:this.search?.trim()||"",page:1,page_size:100};this.category!=="all"&&(e.category_id=Number(this.category)),this.api.getKbArticleList(e).subscribe({next:n=>{if(n?.responseCode===200&&n?.response){let t=n.response.data||n.response.results||[];this.articles=t.map(s=>this.mapArticle(s))}else this.articles=[];this.loading=!1},error:()=>{this.articles=[],this.loading=!1}})}mapArticle(e){return{id:e.id,title:e.title||"\u2014",category:e.category_name||e.category||"\u2014",tone:"blue",views:e.views!=null?Number(e.views).toLocaleString("en-IN"):e.view_count!=null?String(e.view_count):"0",helpful:Number(e.helpful_percent??e.helpful??0),updated:e.updated_at||e.updated_date||e.updated||"\u2014"}}trackByIndex(e){return e}selectCategory(e){this.category=this.category===e?"all":e,this.loadArticles()}doSearch(){this.loadArticles()}newArticle(){this.editingId=null,this.form={title:"",category_id:null,visibility:nn,status:"Draft",body:""},this.reader=null,this.formOpen=!0}editArticle(e){if(e.id==null){this.toast.info("No article to edit.");return}this.editingId=e.id,this.reader=null,this.api.getKbArticleView({id:e.id}).subscribe({next:n=>{let t=n?.response?.data||{};this.form={title:t.title||e.title||"",category_id:t.categoryId??t.category_id??null,visibility:t.visibility||nn,status:t.status||"Draft",body:t.body||""},this.formOpen=!0},error:()=>{this.form={title:e.title,category_id:null,visibility:nn,status:"Draft",body:""},this.formOpen=!0}})}cancelForm(){this.formOpen=!1,this.editingId=null}onCategoryChange(e){if(e==="add-category"){this.newCategoryName="",this.form.category_id=null,this.showAddCategoryModal=!0;return}this.form.category_id=e}addCategoryFromModal(){let e=(this.newCategoryName||"").trim();if(!e){this.toast.error("Category name is required.");return}this.savingCategory=!0,this.api.createKbCategory({name:e}).subscribe({next:n=>{if(this.savingCategory=!1,n?.responseCode!==200){this.toast.error(n?.response?.message||"Failed to add category.");return}let t=n?.response?.data||{},s=Number(t.id??t.categoryId);this.toast.success(n?.response?.message||"Category added."),this.showAddCategoryModal=!1,this.newCategoryName="",this.loadCategories(Number.isFinite(s)?s:void 0)},error:n=>{this.savingCategory=!1,this.toast.error(n?.error?.response?.message||"Failed to add category.")}})}cancelAddCategoryModal(){this.showAddCategoryModal=!1,this.newCategoryName="",this.form.category_id=null}saveArticle(){let e=this.form.title.trim();if(!e){this.toast.error("Title is required.");return}if(this.form.category_id==null){this.toast.error("Pick a category.");return}if(!this.categories.some(n=>+n.key===Number(this.form.category_id))){this.toast.error("Pick a category from the list.");return}if(!this.form.body.trim()){this.toast.error("Body is required.");return}if(this.editingId!=null)this.api.updateKbArticle({id:this.editingId,title:e,category_id:this.form.category_id,visibility:this.form.visibility,status:this.form.status,body:this.form.body}).subscribe({next:n=>this.afterSave(n,"Article updated."),error:n=>this.toast.error(n?.error?.response?.message||"Failed to update article.")});else{let n=new FormData;n.append("title",e),n.append("category_id",String(this.form.category_id)),n.append("visibility",this.form.visibility),n.append("status",this.form.status),n.append("body",this.form.body),this.api.createKbArticle(n).subscribe({next:t=>this.afterSave(t,"Article created."),error:t=>this.toast.error(t?.error?.response?.message||"Failed to create article.")})}}afterSave(e,n){e?.responseCode===200?(this.toast.success(e?.response?.message||n),this.cancelForm(
8),this.loadArticles(),this.loadCategories()):this.toast.error(e?.response?.message||"Failed to save article.")}openArticle(e){e.id!=null&&(this.formOpen=!1,this.api.getKbArticleView({id:e.id}).subscribe({next:n=>{this.reader=n?.response?.data||null,this.reader||this.toast.error("Article not found.")},error:()=>this.toast.error("Failed to load article.")}))}closeReader(){this.reader=null}sendFeedback(e){let n=this.reader?.id;n!=null&&this.api.submitKbFeedback({id:n,helpful:e}).subscribe({next:t=>{t?.responseCode===200?this.toast.success("Thanks for the feedback."):this.toast.error(t?.response?.message||"Failed to send feedback.")},error:()=>this.toast.error("Failed to send feedback.")})}deleteArticle(e){return B(this,null,function*(){if(yield this.modal.confirm({title:"Delete article?",body:`Remove "${e.title}".`,confirmTone:"danger",confirmLabel:"Delete"})){if(e.id==null){this.toast.success("Article deleted.");return}this.api.deleteKbArticle({id:e.id}).subscribe({next:t=>{t?.responseCode===200?(this.toast.success("Article deleted."),this.loadArticles()):this.toast.error(t?.response?.message||"Failed to delete article.")},error:()=>this.toast.error("Failed to delete article.")})}})}static{this.\u0275fac=function(n){return new(n||o)(E(q),E(ue),E(R))}}static{this.\u0275cmp=V({type:o,selectors:[["app-knowledge-base"]],decls:47,vars:11,consts:[[1,"crm-page-body"],[1,"crm-page-header"],["appTranslate","",1,"crm-page-title"],["appTranslate","",1,"crm-page-subtitle"],[1,"card","mb-3"],[1,"card-body"],[1,"d-flex","gap-2"],[1,"crm-search-wrap","kb-search-wrap"],[1,"ri-search-line"],["type","search","placeholder","Search articles, FAQs, runbooks\u2026",1,"crm-search-input",3,"ngModelChange","ngModel","ngModelOptions"],["type","button","appTranslate","",1,"btn","btn-theme","btn-sm",3,"click"],["class","card mb-3",4,"ngIf"],[1,"crm-grid","crm-grid-4","mb-3"],[4,"ngFor","ngForOf","ngForTrackBy"],[1,"card"],[1,"card-header"],["appTranslate","",1,"card-title"],["type","button",1,"btn","btn-theme","btn-sm",3,"click"],[1,"ri-add-line"],["appTranslate",""],[1,"card-body","p-0"],[1,"crm-table-wrapper","crm-table-wrapper-flush"],[1,"crm-data-table"],[4,"ngIf"],[1,"card-title"],[1,"crm-grid","crm-grid-2","mb-2"],["appTranslate","",1,"crm-form-label"],["type","text","placeholder","Article title",1,"crm-search-input","w-100",3,"ngModelChange","ngModel","ngModelOptions"],[1,"crm-filter-select","w-100",3,"ngModelChange","ngModel","ngModelOptions"],["disabled","","appTranslate","",3,"ngValue"],["appTranslate","",3,"ngValue"],[3,"ngValue",4,"ngFor","ngForOf","ngForTrackBy"],["rows","6","placeholder","Article content\u2026",1,"crm-form-textarea","w-100","mb-2",3,"ngModelChange","ngModel","ngModelOptions"],["type","button","appTranslate","",1,"btn","btn-light","btn-sm",3,"click"],["class","kb-add-modal-backdrop",4,"ngIf"],[3,"ngValue"],[1,"kb-add-modal-backdrop"],[1,"kb-add-modal","card"],["placeholder","Category name",1,"crm-search-input","w-100","mb-2",3,"ngModelChange","ngModel","ngModelOptions"],["type","button","appTranslate","",1,"btn","btn-theme","btn-sm",3,"click","disabled"],["type","button","aria-label","Close",1,"crm-btn-icon",3,"click"],[1,"ri-close-line"],[1,"crm-text-muted","crm-text-xs","mb-2"],[1,"crm-text-sm",2,"white-space","pre-wrap"],[1,"d-flex","align-items-center","gap-2","mt-3"],["appTranslate","",1,"crm-text-xs","crm-text-muted"],["type","button",1,"btn","btn-light","btn-xs",3,"click"],[1,"ri-thumb-up-line"],[1,"ri-thumb-down-line"],[1,"card","kb-cat-card",3,"click"],[1,"d-flex","align-items-center","gap-2","mb-1"],[1,"crm-stat-icon",3,"ngClass"],[3,"ngClass"],[1,"crm-fw-700","crm-text-sm"],[1,"crm-text-muted","crm-text-xs"],[1,"crm-cell-primary",3,"click"],[1,"crm-badge",3,"ngClass"],["ngbDropdown","","container","body","placement","bottom-end",1,"d-inline-block"],["type","button","ngbDropdownToggle","","aria-label","Actions",1,"crm-btn-icon"],[1,"ri-more-2-fill"],["ngbDropdownMenu",""],["ngbDropdownItem","",3,"click"],[1,"ri-eye-line","mr-2"],[1,"ri-pencil-line","mr-2"],["ngbDropdownItem","",1,"text-danger",3,"click"],[1,"ri-delete-bin-line","mr-2"],["colspan","6","appTranslate","",1,"text-center","py-4"],["colspan","6","appTranslate","",1,"text-center","crm-text-muted"]],template:function(n,t){n&1&&(i(0,"div",0)(1,"div",1)(2,"div")(3,"h1",2),a(4,"Knowledge Base"),r(),i(5,"p",3),a(6,"Internal + customer-facing articles"),r()()(),i(7,"div",4)(8,"div",5)(9,"div",6)(10,"div",7),b(11,"i",8),i(12,"input",9),v("ngModelChange",function(_){return y(t.search,_)||(t.search=_),_}),r()(),i(13,"button",10),h("click",function(){return t.doSearch()}),a(14,"Search"),r()()()(),f(15,cg,45,22,"div",11)(16,pg,24,5,"div",11),i(17,"div",12),f(18,ug,10,6,"div",13),r(),i(19,"div",14)(20,"div",15)(21,"div",16),a(22,"Recent Articles"),r(),i(23,"button",17),h("click",function(){return t.newArticle()}),b(24,"i",18),i(25,"span",19),a(26,"New Article"),r()()(),i(27,"div",20)(28,"div",21)(29,"table",22)(30,"thead")(31,"tr")(32,"th",19),a(33,"Title"),r(),i(34,"th",19),a(35,"Category"),r(),i(36,"th",19),a(37,"Views"),r(),i(38,"th",19),a(39,"Helpful %"),r(),i(40,"th",19),a(41,"Updated"),r(),b(42,"th"),r()(),i(43,"tbody"),f(44,gg,27,6,"tr",13)(45,_g,3,0,"tr",23)(46,hg,3,0,"tr",23),r()()()()()()),n&2&&(l(12),x("ngModel",t.search),c("ngModelOptions",C(10,ut)),l(3),c("ngIf",t.formOpen),l(),c("ngIf",t.reader),l(2),c("ngForOf",t.categories)("ngForTrackBy",t.trackByIndex),l(26),c("ngForOf",t.articles)("ngForTrackBy",t.trackByIndex),l(),c("ngIf",t.loading),l(
8),c("ngIf",!t.loading&&!t.articles.length))},dependencies:[j,W,N,X,ee,te,Z,U,H,Ve,De,Ae,Pe,Fe,L],styles:["[_nghost-%COMP%]{display:block}.kb-search-wrap[_ngcontent-%COMP%]{flex:1;max-width:500px}.kb-cat-card[_ngcontent-%COMP%]{cursor:pointer;transition:box-shadow var(--transition-fast),border-color var(--transition-fast)}.kb-cat-card[_ngcontent-%COMP%]:hover{box-shadow:var(--shadow-md);border-color:var(--color-accent)}.kb-cat-card.active[_ngcontent-%COMP%]{border-color:var(--color-accent);background:var(--color-accent-50)}.kb-add-modal-backdrop[_ngcontent-%COMP%]{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:#0f172a73;z-index:1200}.kb-add-modal[_ngcontent-%COMP%]{width:100%;max-width:520px;border-radius:8px;box-shadow:0 8px 24px #0f172a2e}"]})}}return o})();var Zi=()=>({standalone:!0});function fg(o,m){if(o&1){let e=w();i(0,"tr")(1,"td")(2,"a",20),h("click",function(){let t=p(e).$implicit,s=d();return u(s.open(t))}),a(3),r()(),i(4,"td"),a(5),r(),i(6,"td"),a(7),r(),i(8,"td"),a(9),r(),i(10,"td")(11,"span",21),a(12),r()(),i(13,"td")(14,"button",22),h("click",function(){let t=p(e).$implicit,s=d();return u(s.rowMenu(t))}),b(15,"i",23),r()()()}if(o&2){let e=m.$implicit;l(3),g(e.name),l(2),g(e.type),l(2),g(e.size),l(2),g(e.updated),l(2),c("ngClass","crm-badge-"+e.statusTone),l(),g(e.status)}}function xg(o,m){o&1&&(i(0,"tr")(1,"td",24),a(2,"No documents yet."),r()())}function yg(o,m){if(o&1){let e=w();i(0,"div",25),h("click",function(){p(e);let t=d();return u(t.showUploadModal=!1)}),r()}}function vg(o,m){if(o&1){let e=w();i(0,"div",26)(1,"div",27),h("click",function(t){return p(e),u(t.stopPropagation())}),i(2,"div",28)(3,"div",29)(4,"h5",30)(5,"span",7),a(6,"Import \u2014"),r(),a(7),r(),i(8,"button",31),h("click",function(){p(e);let t=d();return u(t.showUploadModal=!1)}),i(9,"span",32),a(10,"\xD7"),r()()(),i(11,"div",33)(12,"div",34)(13,"div",35)(14,"div",36)(15,"div",37),a(16,"1"),r(),i(17,"div",38),a(18,"Configure Import"),r()(),b(19,"div",39),r(),i(20,"div",35)(21,"div",36)(22,"div",40),a(23,"2"),r(),i(24,"div",41),a(25,"Map Fields"),r()()()(),i(26,"div",42),b(27,"i",43),i(28,"div",44),a(29,"Drop xlsx / xls / pdf file here \xB7 max 10 MB"),r(),i(30,"button",45),h("click",function(){p(e);let t=d();return u(t.chooseFile())}),a(31,"Choose file"),r()(),i(32,"div",46)(33,"label",47)(34,"input",48),v("ngModelChange",function(t){p(e);let s=d();return y(s.headerRow,t)||(s.headerRow=t),u(t)}),r(),i(35,"span",7),a(36,"Enable Header Row"),r()()()(),i(37,"div",49)(38,"button",50),h("click",function(){p(e);let t=d();return u(t.showUploadModal=!1)}),a(39,"Cancel"),r(),i(40,"button",51),h("click",function(){p(e);let t=d();return u(t.nextMapFields())}),a(41,"Next: Map Fields"),r()()()()()}if(o&2){let e=d();l(7),A(" ",e.uploadKind,""),l(27),x("ngModel",e.headerRow),c("ngModelOptions",C(3,Zi))}}var Xi=(()=>{class o{constructor(e){this.toast=e,this.search="",this.showUploadModal=!1,this.uploadKind="",this.headerRow=!0,this.rows=[]}trackByIndex(e){return e}open(e){this.toast.info(`Open document: ${e.name}`)}rowMenu(e){this.toast.info(`Actions for ${e.name}`)}download(e){this.toast.info("Document download \u2014 coming soon.")}share(e){this.toast.info(`Share ${e.name}.`)}uploadLeads(){this.toast.info("Leads file import \u2014 coming soon.")}uploadDeals(){this.toast.info("Deals file import \u2014 coming soon.")}chooseFile(){this.toast.info("File import \u2014 coming soon.")}nextMapFields(){this.showUploadModal=!1,this.toast.info("Field mapping \u2014 coming soon.")}deleteRow(e){this.toast.info("Deleting documents \u2014 coming soon.")}static{this.\u0275fac=function(n){return new(n||o)(E(q))}}static{this.\u0275cmp=V({type:o,selectors:[["app-my-documents"]],decls:42,vars:8,consts:[[1,"crm-page-body"],[1,"crm-page-header"],["appTranslate","",1,"crm-page-title"],["appTranslate","",1,"crm-page-subtitle"],[1,"crm-page-actions"],["type","button",1,"btn","btn-theme","btn-sm",3,"click"],[1,"ri-upload-2-line"],["appTranslate",""],[1,"card"],[1,"card-header"],[1,"crm-search-wrap"],[1,"ri-search-line"],["type","search","placeholder","Search documents\u2026",1,"crm-search-input",3,"ngModelChange","ngModel","ngModelOptions"],[1,"card-body","p-0"],[1,"crm-table-wrapper","crm-table-wrapper-flush"],[1,"crm-data-table"],[4,"ngFor","ngForOf","ngForTrackBy"],[4,"ngIf"],["class","modal-backdrop fade show",3,"click",4,"ngIf"],["class","modal fade show d-block","tabindex","-1","role","dialog",4,"ngIf"],[1,"crm-cell-primary",3,"click"],[1,"crm-badge",3,"ngClass"],["type","button","aria-label","Actions",1,"crm-btn-icon",3,"click"],[1,"ri-more-2-fill"],["colspan","6","appTranslate","",1,"text-center","crm-text-muted"],[1,"modal-backdrop","fade","show",3,"click"],["tabindex","-1","role","dialog",1,"modal","fade","show","d-block"],["role","document",1,"modal-dialog","modal
8-dialog-centered","modal-dialog-scrollable","modal-lg",3,"click"],[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button",1,"close",3,"click"],["aria-hidden","true"],[1,"modal-body"],[1,"crm-step-progress","mb-4"],[1,"crm-step-item"],[1,"crm-step-wrapper"],[1,"crm-step-circle","crm-step-circle-active"],["appTranslate","",1,"crm-step-label","crm-step-label-active"],[1,"crm-step-connector"],[1,"crm-step-circle"],["appTranslate","",1,"crm-step-label"],[1,"doc-dropzone"],[1,"ri-upload-cloud-2-line","doc-dropzone-icon"],["appTranslate","",1,"crm-fw-600","crm-text-sm","mb-1"],["type","button","appTranslate","",1,"btn","btn-light","btn-sm","mt-2",3,"click"],[1,"mt-3"],[1,"d-flex","align-items-center","gap-2","crm-text-sm"],["type","checkbox",3,"ngModelChange","ngModel","ngModelOptions"],[1,"modal-footer"],["type","button","appTranslate","",1,"btn","btn-light",3,"click"],["type","button","appTranslate","",1,"btn","btn-theme",3,"click"]],template:function(n,t){n&1&&(i(0,"div",0)(1,"div",1)(2,"div")(3,"h1",2),a(4,"My Documents"),r(),i(5,"p",3),a(6,"Imports, exports and attachments"),r()(),i(7,"div",4)(8,"button",5),h("click",function(){return t.uploadLeads()}),b(9,"i",6),i(10,"span",7),a(11,"Upload Leads File"),r()(),i(12,"button",5),h("click",function(){return t.uploadDeals()}),b(13,"i",6),i(14,"span",7),a(15,"Upload Deals File"),r()()()(),i(16,"div",8)(17,"div",9)(18,"div",10),b(19,"i",11),i(20,"input",12),v("ngModelChange",function(_){return y(t.search,_)||(t.search=_),_}),r()()(),i(21,"div",13)(22,"div",14)(23,"table",15)(24,"thead")(25,"tr")(26,"th",7),a(27,"File"),r(),i(28,"th",7),a(29,"Type"),r(),i(30,"th",7),a(31,"Size"),r(),i(32,"th",7),a(33,"Uploaded"),r(),i(34,"th",7),a(35,"Status"),r(),b(36,"th"),r()(),i(37,"tbody"),f(38,fg,16,6,"tr",16)(39,xg,3,0,"tr",17),r()()()()(),f(40,yg,1,0,"div",18)(41,vg,42,4,"div",19),r()),n&2&&(l(20),x("ngModel",t.search),c("ngModelOptions",C(7,Zi)),l(18),c("ngForOf",t.rows)("ngForTrackBy",t.trackByIndex),l(),c("ngIf",!t.rows.length),l(),c("ngIf",t.showUploadModal),l(),c("ngIf",t.showUploadModal))},dependencies:[j,W,N,te,Qe,U,H,L],styles:["[_nghost-%COMP%]{display:block}.doc-dropzone[_ngcontent-%COMP%]{border:2px dashed var(--color-border);border-radius:var(--radius-lg);padding:32px 24px;text-align:center;background:var(--color-primary-50);transition:border-color var(--transition-fast),background var(--transition-fast)}.doc-dropzone[_ngcontent-%COMP%]:hover{border-color:var(--color-accent);background:var(--color-accent-50)}.doc-dropzone-icon[_ngcontent-%COMP%]{font-size:2.5rem;color:var(--color-text-muted);display:block;margin-bottom:8px}"]})}}return o})();var Cg=()=>({standalone:!0}),bg=(o,m)=>({"crm-stat-trend-up":o,"crm-stat-trend-down":m});function Sg(o,m){if(o&1&&(i(0,"option",32),a(1),r()),o&2){let e=m.$implicit;c("value",e.key),l(),g(e.label)}}function wg(o,m){o&1&&b(0,"i",42)}function Tg(o,m){o&1&&b(0,"i",43)}function kg(o,m){if(o&1&&(i(0,"div",38),f(1,wg,1,0,"i",39)(2,Tg,1,0,"i",40),i(3,"span",41),a(4),r()()),o&2){let e=d().$implicit;c("ngClass",ke(4,bg,e.trendDir==="up",e.trendDir==="down")),l(),c("ngIf",e.trendDir==="up"),l(),c("ngIf",e.trendDir==="down"),l(2),g(e.footnote)}}function Eg(o,m){if(o&1&&(i(0,"div",33)(1,"div",34)(2,"span",35),a(3),r()(),i(4,"div",36),a(5),r(),f(6,kg,5,7,"div",37),r()),o&2){let e=m.$implicit;l(3),g(e.label),l(2),g(e.value),l(),c("ngIf",e.footnote)}}function Mg(o,m){if(o&1&&b(0,"app-crm-chart",44),o&2){let e=d();c("type","column")("options",e.pipelineChart)("height",220)}}function Ig(o,m){o&1&&(i(0,"div",45),a(1,"No pipeline trend for this period. "),r())}function Og(o,m){if(o&1&&(i(0,"span",46),a(1),i(2,"span",12),a(3,"accounts"),r()()),o&2){let e=d();l(),A(" ",e.healthTotalAccounts," ")}}function Pg(o,m){if(o&1&&(i(0,"div",51),a(1),r()),o&2){let e=d(2);l(),g(e.healthCenterDisplay)}}function Fg(o,m){if(o&1&&(i(0,"div",52),b(1,"span",53),a(2),r()),o&2){let e=m.$implicit;l(),ct("background",e.color),l(),Le(" ",e.label," \u2014 ",e.count," (",e.percent,"%) ")}}function Ag(o,m){if(o&1&&(i(0,"div",47),b(1,"app-crm-chart",44),i(2,"div",48),f(3,Pg,2,1,"div",49)(4,Fg,3,5,"div",50),r()()),o&2){let e=d();l(),c("type","pie")("options",e.healthChart)("height",200),l(2),c("ngIf",e.healthCenterDisplay),l(),c("ngForOf",e.healthLegend
8)("ngForTrackBy",e.trackByIndex)}}function Dg(o,m){o&1&&(i(0,"div",45),a(1,"No health distribution for this period."),r())}function Vg(o,m){if(o&1&&(i(0,"div",54),b(1,"app-crm-chart",44),r()),o&2){let e=d();l(),c("type","pie")("options",e.winLossChart)("height",180)}}function Lg(o,m){if(o&1&&(i(0,"div",55)(1,"span",56),a(2),r(),i(3,"span",57),a(4," win rate"),r()()),o&2){let e=d();l(2),g(e.winLossCenterDisplay||e.winRatePercent+"%")}}function Ng(o,m){if(o&1&&(i(0,"tr")(1,"td"),a(2),r(),i(3,"td"),a(4),r(),i(5,"td"),a(6),r(),i(7,"td"),a(8),r()()),o&2){let e=m.$implicit;l(2),g(e.reason),l(2),g(e.count),l(2),g(e.value),l(2),g(e.competitor)}}function Bg(o,m){if(o&1&&(i(0,"div",58)(1,"table",59)(2,"thead")(3,"tr")(4,"th",12),a(5,"Reason"),r(),i(6,"th",12),a(7,"Count"),r(),i(8,"th",12),a(9,"Value Lost"),r(),i(10,"th",12),a(11,"Top Competitor"),r()()(),i(12,"tbody"),f(13,Ng,9,4,"tr",60),r()()()),o&2){let e=d();l(13),c("ngForOf",e.lossReasons)("ngForTrackBy",e.trackByIndex)}}function Wg(o,m){o&1&&(i(0,"div",45),a(1,"No loss reasons recorded for this period."),r())}function Rg(o,m){if(o&1&&b(0,"app-crm-chart",44),o&2){let e=d();c("type","column")("options",e.forecastChart)("height",180)}}function qg(o,m){if(o&1&&(i(0,"span",46),a(1),r()),o&2){let e=d().$implicit;l(),A(" \xB7 ",e.tag,"")}}function zg(o,m){if(o&1&&(i(0,"span",62),a(1),r()),o&2){let e=d().$implicit;c("ngClass","crm-badge-"+e.tone),l(),g(e.status)}}function jg(o,m){if(o&1&&(i(0,"tr")(1,"td"),a(2),f(3,qg,2,1,"span",22),r(),i(4,"td"),a(5),r(),i(6,"td"),a(7),r(),i(8,"td"),a(9),r(),i(10,"td"),f(11,zg,2,2,"span",61),r()()),o&2){let e=m.$implicit;l(2),A(" ",e.name," "),l(),c("ngIf",e.tag),l(2),g(e.submitted),l(2),g(e.actual),l(2),g(e.accuracy),l(2),c("ngIf",e.status)}}function Ug(o,m){if(o&1&&(i(0,"div",58)(1,"table",59)(2,"thead")(3,"tr")(4,"th",12),a(5,"Rep"),r(),i(6,"th",12),a(7,"Submitted"),r(),i(8,"th",12),a(9,"Actual"),r(),i(10,"th",12),a(11,"Accuracy"),r(),i(12,"th",12),a(13,"Status"),r()()(),i(14,"tbody"),f(15,jg,12,6,"tr",60),r()()()),o&2){let e=d();l(15),c("ngForOf",e.repAccuracy)("ngForTrackBy",e.trackByIndex)}}function Hg(o,m){o&1&&(i(0,"div",45),a(1,"No rep forecast accuracy for this period."),r())}function Kg(o,m){if(o&1&&(i(0,"span",56)(1,"span",12),a(2,"Team accuracy:"),r(),a(3),r()),o&2){let e=d(2);l(3),A(" ",e.forecastSummaryAccuracy,"% ")}}function Qg(o,m){if(o&1&&(i(0,"div",63),b(1,"i",64),i(2,"div"),f(3,Kg,4,1,"span",65),i(4,"span"),a(5),r()()()),o&2){let e=d();c("ngClass",e.forecastMeetsTarget?"crm-alert-success":"crm-alert-warning"),l(3),c("ngIf",e.forecastSummaryAccuracy!==null),l(2),A(" ",e.forecastSummaryMessage,"")}}var er=(()=>{class o{ngOnInit(){this.rangeOptions=[...this.FALLBACK_RANGE_OPTIONS],this.load()}load(){this.api.getAnalyticsDashboard(this.rangeBody()).subscribe({next:e=>{let n=e?.response?.data;if(!n)return;let t=Array.isArray(n.range_options)?n.range_options:[];if(this.rangeOptions=t.length?t:[...this.FALLBACK_RANGE_OPTIONS],!this.rangeAdopted){this.rangeAdopted=!0;let s=t.length?t[0]?.key:this.DEFAULT_RANGE_KEY;if(s&&s!==this.period){this.period=s,this.load();return}}this.kpis=(n.count_info||[]).map(s=>({label:s.title||"\u2014",value:s.value_display??(s.value!=null?String(s.value):"\u2014"),footnote:s.subtitle||void 0})),this.applyPipelineTrend(n.pipeline_trend),this.applyHealthDistribution(n.health_distribution),this.applyWinLoss(n.win_loss_analysis),this.applyForecastAccuracy(n.forecast_accuracy)},error:()=>{}})}onRangeChange(){this.load()}rangeBody(){if(!this.period)return{};if(this.period===this.TODAY_KEY){let e=this.isoToday();return{from_date:e,to_date:e}}return{range_type:this.period}}isoToday(){let e=new Date,n=t=>String(t).padStart(2,"0");return`${e.getFullYear()}-${n(e.getMonth()+1)}-${n(e.getDate())}`}constructor(e,n){this.toast=e,this.api=n,this.period="",this.rangeOptions=[],this.rangeAdopted=!1,this.FALLBACK_RANGE_OPTIONS=[{key:"TODAY",label:"Today"},{key:"WEEK",label:"This Week"},{key:"MONTH",label:"This Month"},{key:"QUARTER",label:"This Quarter"},{key:"YEAR",label:"This Year"},{key:"ALL",label:"All Time"}],this.DEFAULT_RANGE_KEY="MONTH",this.TODAY_KEY="TODAY",this.kpis=[],this.pipelineChart=null,this.healthChart=null,this.healthLegend=[],this.healthCenterDisplay="",this.healthAvgPercent=null,this.healthTotalAccounts=null,this.winLossChart=null,this.winRatePercent=null,this.winLossCenterDisplay="",this.lossReasons=[],this.forecastChart=null,this.repAccuracy=[],this.forecastSummaryMessage="",this.forecastSummaryAccuracy=null,this.forecastMeetsTarget=!1}trackByIndex(e){return e}exportReport(){this.toast.info("Analytics export \u2014 coming soon.")}
8applyPipelineTrend(e){let n=Array.isArray(e)?e:[];if(!n.length){this.pipelineChart=null;return}this.pipelineChart={xAxis:{categories:n.map(t=>t.month??t.month_key??"")},tooltip:{pointFormat:"<b>{point.valueDisplay}</b>"},legend:{enabled:!1},series:[{type:"column",name:"Pipeline",data:n.map(t=>({y:typeof t.value=="number"?t.value:0,valueDisplay:t.value_display??""}))}]}}applyHealthDistribution(e){let n=Array.isArray(e?.segments)?e.segments:[];this.healthCenterDisplay=e?.center_display??"",this.healthAvgPercent=typeof e?.avg_percent=="number"?e.avg_percent:null,this.healthTotalAccounts=typeof e?.total_accounts=="number"?e.total_accounts:null,this.healthLegend=n.map(t=>({label:t.label??t.band??"\u2014",count:typeof t.count=="number"?t.count:0,percent:typeof t.percent=="number"?t.percent:0,color:t.color??""})),this.healthChart=n.length?{legend:{enabled:!1},tooltip:{pointFormat:"<b>{point.y}</b> accounts ({point.percentValue}%)"},series:[{type:"pie",name:"Accounts",data:n.map(t=>({name:t.label??t.band??"\u2014",y:typeof t.count=="number"?t.count:0,color:t.color||void 0,percentValue:typeof t.percent=="number"?t.percent:0}))}]}:null}applyWinLoss(e){let n=Array.isArray(e?.segments)?e.segments:[],t=Array.isArray(e?.loss_reasons)?e.loss_reasons:[];this.winRatePercent=typeof e?.win_rate_percent=="number"?e.win_rate_percent:null,this.winLossCenterDisplay=e?.center_display??"",this.winLossChart=n.length?{legend:{enabled:!0,align:"right",layout:"vertical",verticalAlign:"middle"},tooltip:{pointFormat:"<b>{point.y}%</b>"},plotOptions:{pie:{showInLegend:!0}},series:[{type:"pie",name:"Deals",data:n.map(s=>({name:s.label??"\u2014",y:typeof s.percent=="number"?s.percent:0}))}]}:null,this.lossReasons=t.map(s=>({reason:s.reason??"\u2014",count:typeof s.count=="number"?s.count:0,value:s.value_display??"\u2014",competitor:s.competitor??"\u2014"}))}applyForecastAccuracy(e){let n=Array.isArray(e?.quarters)?e.quarters:[],t=Array.isArray(e?.rep_accuracy)?e.rep_accuracy:[],s=e?.team_summary;this.forecastChart=n.length?{xAxis:{categories:n.map(_=>_.label??"")},yAxis:{max:100,labels:{format:"{value}%"}},legend:{enabled:!1},tooltip:{pointFormat:"Accuracy <b>{point.y}%</b><br/>Submitted: {point.submittedDisplay}<br/>Actual: {point.actualDisplay}"},series:[{type:"column",name:"Accuracy %",data:n.map(_=>({y:typeof _.accuracy_percent=="number"?_.accuracy_percent:0,submittedDisplay:_.submitted_display??"\u2014",actualDisplay:_.actual_display??"\u2014"}))}]}:null,this.repAccuracy=t.map(_=>({name:_.name??"\u2014",submitted:_.submitted_display??"\u2014",actual:_.actual_display??"\u2014",accuracy:typeof _.accuracy_percent=="number"?`${_.accuracy_percent}%`:"\u2014",status:_.status??"",tone:this.toneForStatus(_.status),tag:_.tag||void 0})),this.forecastSummaryMessage=s?.message??"",this.forecastSummaryAccuracy=typeof s?.accuracy_percent=="number"?s.accuracy_percent:null,this.forecastMeetsTarget=s?.meets_target===!0}toneForStatus(e){let n=typeof e=="string"?e.toLowerCase():"";return n?/(risk|below|poor|low|miss)/.test(n)?"red":/(watch|warn|near|caution|border)/.test(n)?"amber":/(on ?track|accurate|good|strong|meet|above)/.test(n)?"green":"gray":"gray"}static{this.\u0275fac=function(n){return new(n||o)(E(q),E(R))}}static{this.\u0275cmp=V({type:o,selectors:[["app-analytics"]],decls:63,vars:20,consts:[["noLossReasons",""],["noRepAccuracy",""],[1,"crm-page-body"],[1,"crm-page-header"],["appTranslate","",1,"crm-page-title"],["appTranslate","",1,"crm-page-subtitle"],[1,"crm-page-actions"],[1,"crm-filter-select",3,"ngModelChange","ngModel","ngModelOptions"],["value","","disabled","","hidden","","appTranslate",""],[3,"value",4,"ngFor","ngForOf","ngForTrackBy"],["type","button","title","Analytics export \u2014 coming soon",1,"btn","btn-outline-theme",3,"click"],[1,"ri-download-line"],["appTranslate",""],[1,"crm-stat-grid","mb-4"],["class","crm-stat-card",4,"ngFor","ngForOf","ngForTrackBy"],[1,"crm-grid","crm-grid-2","mb-4"],[1,"card"],[1,"card-header"],["appTranslate","",1,"card-title"],[1,"card-body"],[3,"type","options","height",4,"ngIf"],["class","crm-text-muted crm-text-sm","appTranslate","",4,"ngIf"],["class","crm-text-muted crm-text-xs",4,"ngIf"],["class","d-flex align-items-center gap-3 flex-wrap",4,"ngIf"],[1,"crm-grid","crm-grid-2"],["appTranslate","",1,"crm-text-muted","crm-text-xs"],["class","d-flex align-items-center gap-3 mb-4 flex-wrap",4,"ngIf"],["class","crm-text-sm mb-3",4,"ngIf"],["appTranslate","",1,"crm-section-title","mb-2"],["class","crm-table-wrapper",4,"ngIf","ngIfElse"],["appTranslate","",1,"crm-section-title","mb-2","mt-3"],["class","crm-alert mt-3",3,"ngClass",4,"ngIf"],[3,"value"],[1,"crm-stat-card"],[1,"crm-stat-header"],[1,"crm-stat-label"],[1,"crm-stat-value"],["class","crm-stat-trend",3,"ngClass",4,"ngIf"],[1,"crm-stat-trend",3,"ngClass"],["class","ri-arrow-up-line",4,"ngIf"],["class","ri-arrow-down-line",4,"ngIf"],[1,"crm-stat-trend-label"],[1,"ri-arrow-up-line"],[1,"ri-arrow-down-line"],[3,"type","options","height"],["appTranslate","",1,"crm-text-muted","crm-text-sm"],[1,"crm-text-muted","crm-text-xs"],[1,"d-flex","align-items-center","gap-3","flex-wrap"],[1,"crm-text-sm"],["class","crm-fw-700 mb-2",4,"ngIf"],["class","d-flex align-items-center gap-2 mb-1",4,"ngFor","ngForOf","ngForTrackBy"],[1,"crm-fw-700","mb-2"],[1,"d-flex","align-items-center","gap-2","mb-1"],[1,"an-swatch"],[1,"d-flex","align-items-center","gap-3","mb-4","flex-wrap"],[1,"crm-text-sm","mb-3"],[1,"crm-fw-700"],["appTranslate","",1,"crm-text-muted"],[1,"crm-table-wrapper"],[1,"crm-data-table"],[4,"ngFor","ngForOf","ngForTrackBy"],["class","crm-badge",3,"ngClass",4,"ngIf"],[1,"crm-badge",3,"ngClass"],[1,"crm-alert","mt-3",3,"ngClass"],[1,"ri-information-line"],["class","crm-fw-700",4,"ngIf"]],template:function(n,t){if(n&1){let s=w();i(0,"div",2)(1,"div",3)(2,"div")(3,"h1",4),a(4,"Analytics"),r(),i(5,"p",5),a(6,"CRM KPIs and trends"),r()(),i(7,"div",6)(8,"select",7),v("ngModelChange",function(S){return p(s),y(t.period,S)||
8(t.period=S),u(S)}),h("ngModelChange",function(){return p(s),u(t.onRangeChange())}),i(9,"option",8),a(10,"Select period\u2026"),r(),f(11,Sg,2,2,"option",9),r(),i(12,"button",10),h("click",function(){return p(s),u(t.exportReport())}),b(13,"i",11),i(14,"span",12),a(15,"Export"),r()()()(),i(16,"div",13),f(17,Eg,7,3,"div",14),r(),i(18,"div",15)(19,"div",16)(20,"div",17)(21,"div",18),a(22,"Pipeline Trend"),r()(),i(23,"div",19),f(24,Mg,1,3,"app-crm-chart",20)(25,Ig,2,0,"div",21),r()(),i(26,"div",16)(27,"div",17)(28,"div",18),a(29,"Customer Health Distribution"),r(),f(30,Og,4,1,"span",22),r(),i(31,"div",19),f(32,Ag,5,6,"div",23)(33,Dg,2,0,"div",21),r()()(),i(34,"div",24)(35,"div",16)(36,"div",17)(37,"div",18),a(38,"Win / Loss Analysis"),r(),i(39,"span",25),a(40,"By competitor & reason"),r()(),i(41,"div",19),f(42,Vg,2,3,"div",26)(43,Lg,5,1,"div",27),i(44,"div",28),a(45,"Top Loss Reasons"),r(),f(46,Bg,14,2,"div",29)(47,Wg,2,0,"ng-template",null,0,Ce),r()(),i(49,"div",16)(50,"div",17)(51,"div",18),a(52,"Forecast Accuracy"),r(),i(53,"span",25),a(54,"Submitted vs. actual closed"),r()(),i(55,"div",19),f(56,Rg,1,3,"app-crm-chart",20),i(57,"div",30),a(58,"Forecast Accuracy by Rep"),r(),f(59,Ug,16,2,"div",29)(60,Hg,2,0,"ng-template",null,1,Ce)(62,Qg,6,3,"div",31),r()()()()}if(n&2){let s=le(48),_=le(61);l(8),x("ngModel",t.period),c("ngModelOptions",C(19,Cg)),l(3),c("ngForOf",t.rangeOptions)("ngForTrackBy",t.trackByIndex),l(6),c("ngForOf",t.kpis)("ngForTrackBy",t.trackByIndex),l(7),c("ngIf",t.pipelineChart),l(),c("ngIf",!t.pipelineChart),l(5),c("ngIf",t.healthTotalAccounts!==null),l(2),c("ngIf",t.healthChart),l(),c("ngIf",!t.healthChart),l(9),c("ngIf",t.winLossChart),l(),c("ngIf",t.winLossCenterDisplay||t.winRatePercent!==null),l(3),c("ngIf",t.lossReasons.length)("ngIfElse",s),l(10),c("ngIf",t.forecastChart),l(3),c("ngIf",t.repAccuracy.length)("ngIfElse",_),l(3),c("ngIf",t.forecastSummaryMessage)}},dependencies:[j,W,N,X,ee,Z,U,H,L,ft],styles:["[_nghost-%COMP%]{display:block}.an-swatch[_ngcontent-%COMP%]{display:inline-block;width:10px;height:10px;border-radius:2px;flex-shrink:0}.an-swatch-blue[_ngcontent-%COMP%]{background:var(--color-accent)}.an-swatch-red[_ngcontent-%COMP%]{background:var(--color-error)}.an-swatch-amber[_ngcontent-%COMP%]{background:var(--color-warning)}.an-swatch-gray[_ngcontent-%COMP%]{background:var(--color-primary-300)}"]})}}return o})();function Gg(o,m){if(o&1){let e=w();i(0,"tr")(1,"td")(2,"span",20),a(3),r()(),i(4,"td"),a(5),r(),i(6,"td"),a(7),r(),i(8,"td"),a(9),r(),i(10,"td"),a(11),r(),i(12,"td")(13,"button",21),h("click",function(){let t=p(e).$implicit,s=d(3);return u(s.editTerritory(t))}),a(14,"Edit"),r()()()}if(o&2){let e=m.$implicit;l(3),g(e.name),l(2),g(e.type),l(2),g(e.rep),l(2),g(e.accounts),l(2),g(e.pipeline)}}function Jg(o,m){if(o&1){let e=w();P(0),i(1,"div",9)(2,"div")(3,"span",10),a(4,"Territories"),r(),i(5,"div",11),a(6,"Assign reps by geography, industry vertical, or named-account."),r()(),i(7,"button",12),h("click",function(){p(e);let t=d(2);return u(t.addTerritory())}),b(8,"i",13),i(9,"span",14),a(10,"Add Territory"),r()()(),i(11,"div",15)(12,"div",16)(13,"table",17)(14,"thead")(15,"tr")(16,"th",18),h("click",function(){p(e);let t=d(2);return u(t.doSort("territories","name"))}),a(17,"Territory"),r(),i(18,"th",18),h("click",function(){p(e);let t=d(2);return u(t.doSort("territories","type"))}),a(19,"Type"),r(),i(20,"th",18),h("click",function(){p(e);let t=d(2);return u(t.doSort("territories","rep"))}),a(21,"Assigned Rep"),r(),i(22,"th",18),h("click",function(){p(e);let t=d(2);return u(t.doSort("territories","accounts"))}),a(23,"Accounts"),r(),i(24,"th",18),h("click",function(){p(e);let t=d(2);return u(t.doSort("territories","pipeline"))}),a(25,"Pipeline"),r(),b(26,"th"),r()(),i(27,"tbody"),f(28,Gg,15,5,"tr",19),r()()()(),F()}if(o&2){let e=d(2);l(16),c("ngClass",e.sortClass("territories","name")),l(2),c("ngClass",e.sortClass("territories","type")),l(2),c("ngClass",e.sortClass("territories","rep")),l(2),c("ngClass",e.sortClass("territories","accounts")),l(2),c("ngClass",e.sortClass("territories","pipeline")),l(4),c("ngForOf",e.terrRows)("ngForTrackBy",e.trackByIndex)}}function Yg(o,m){if(o&1){let e=w();i(0,"tr")(1,"td"),a(2),r(),i(3,"td")(4,"span",20),a(5),r()(),i(6,"td"),a(7),r(),i(8,"td"),a(9),r(),i(10,"td"),a(11),r(),i(12,"td")(13,"button",21),h("click",function(){let t=p(e).$implicit,s=d(3);return u(s.editStage(t))}),a(14,"Edit"),r()()()}if(o&2){let e=m.$implicit;l(2),g(e.order),l(3),g(e.name),l(2),A("",e.probability,"%"),l(2),g(e.requiredFields),l(2),g(e.criteria)}}function $g(o,m){if(o&1){let e=w();P(0),i(1,"div",9)(2,"div")(3,"span",10),a(4,"Pipeline Stages"),r(),i(5,"div",11),a(6,"Used by Opportunity / Pipeline / Forecast. Reorder by drag."),r()(),i(7,"button",12),h("click",function(){p(e);let t=d(2);return u(t.addStage())}),b(8,"i",13),i(9,"span",14),a(10,"Add Stage"),r()()(),i(11,"div",15)(12,"div",16)(13,"table",17)(14,"thead")(15,"tr")(16,"th",22),h("click",function(){p(e);let t=d(2);return u(t.doSort("pipeline","order"))}),a(17,"#"),r(),i(18,"th",18),h("click",function(){p(e);let t=d(2);return u(t.doSort("pipeline","name"))}),a(19,"Stage"),r(),i(20,"th",18),h("click",function(){p(e);let t=d(2);return u(t.doSort("pipeline","probability"))}),a(21,"Probability %"),r(),i(22,"th",18),h("click",function(){p(e);let t=d(2);return u(t.doSort("pipeline","requiredFields"))}),a(23,"Required Fields"),r(),i(24,"th",18),h("click",function(){p(e);let t=d(2);return u(t.doSort("pipeline","criteria"))}),a(25,"Win/Loss Criteria"),r(),b(26,"th"),r()(),i(27,"tbody"),f(28,Yg,15,5,"tr",19),r()()()(),F()}if(o&2){let e=d(2);l(16),c("ngClass",e.sortClass("pipeline","order")),l(2),c("ngClass",e.sortClass("pipeline","name")),l(2),c("ngClass",e.sortClass("pipeline","probability")),l(2),c("ngClass",e.sortClass("pipeline","requiredFields")),l(2),c("ngClass",e.sortClass("pipeline","criteria")),l(4),c("ngForOf",e.stageRows)("ngForTrackBy",e.trackByIndex)}}function Zg(o,m){if(o&1){let e=w();i(0,"tr")(1,"td")(2,"code",23),a(3),r()(),i(4,"td")(5,"span",20),a(6),r()(),i(7,"td"),a(8),r(),i(9,"td")(10,"span",24),a(11),r()(),i(12,"td"),a(13),r(),i(14,"td")(15,"button",21),h("click",function(){let t=p(e).$implicit,s=d(3);return u(s.editSource(t))}),a(16,"Edit"),r()()()}if(o&2){let e=m.$implicit;l(3),g(e.code),l(3),g(e.displayName),l(2),g(e.channel),l(2),c("ngClass","crm-badge-"+e.activeTone),l(),g(e.activeLabel),l(2),g(e.ytdLeads)}}function Xg(o,m){if(o&1){let e=w();P(0),i(1,"div",9)(2,"div")(3,"span",10),a(4,"Lead Sources"),r(),i(5,"div",11),a(6,"Inbound channel codes used in Lead create wizard and analytics."),r()(),i(7,"button",12),h("click",function(){p(e);let t=d(2);return u(t.addSource())}),b(8,"i",13),i(9,"span",14),a(10,"Add Source"),r()()(),i(11,"div",15)(12,"div",16)(13,"table",17)(14,"thead")(15,"tr")(16,"th",18),h("click",function(){p(e);let t=d(2);return u(t.doSort("lead-sources","code"))}),a(17,"Code"),r(),i(18,"th",18),h("click",function(){p(e);let t=d(2);return u(t.doSort("lead-sources","displayName"))}),a(19,"Display Name"),r(),i(20,"th",18),h("click",function(){p(e);let t=d(2);return u(t.doSort("lead-sources","channel"))}),a(21,"Channel"),r(),i(22,"th",18),h("click",function(){p(e);let t=d(2);return u(t.doSort("lead-sources","activeLabel"))}),a(23,"Active"),r(),i(24,"th",18),h("click",function(){p(e);let t=d(2);return u(t.doSort("lead-sources","ytdLeads"))}),a(25,"YTD Leads"),r(),b(26,"th"),r()(),i(27,"tbody"),f(28,Zg,17,6,"tr",19),r()()()(),F()}if(o&2){let e=d(2);l(16),c("ngClass",e.sortClass("lead-sources","code")),l(2),c("ngClass",e.sortClass("lead-sources","displayName")),l(2),c("ngClass",e.sortClass("lead-sources","channel")),l(2),c("ngClass",e.sortClass("lead-sources","activeLabel")),l(2),c("ngClass",e.sortClass("lead-sources","ytdLeads")),l(4),c("ngForOf",e.sourceRows)("ngForTrackBy",e.trackByIndex)}}function e_(o,m){if(o&1){let e=w();P(0),i(1,"div",9)(2,"div")(3,"span",10),a(4,"Marketplace Catalog Linkage"),r(),i(5,"div",11),a(6,"Products and services pulled from Vip
8ani Marketplace are used in Lead, Opportunity, and Quote wizards."),r()(),i(7,"button",21),h("click",function(){p(e);let t=d(2);return u(t.manageMarketplace())}),i(8,"span",14),a(9,"Manage in Marketplace"),r(),b(10,"i",25),r()(),i(11,"div",26)(12,"div",27)(13,"div",28)(14,"div",29)(15,"span",30),a(16,"Linked Products"),r()(),i(17,"div",31),a(18,"412"),r(),i(19,"div",32),b(20,"i",33),i(21,"span",34),a(22,"+18 this quarter"),r()()(),i(23,"div",28)(24,"div",29)(25,"span",30),a(26,"Linked Services"),r()(),i(27,"div",31),a(28,"63"),r(),i(29,"div",32),b(30,"i",33),i(31,"span",34),a(32,"+4 this quarter"),r()()(),i(33,"div",28)(34,"div",29)(35,"span",30),a(36,"Last Sync"),r()(),i(37,"div",31),a(38,"12 min ago"),r(),i(39,"div",35),a(40,"Auto every 15 min"),r()(),i(41,"div",28)(42,"div",29)(43,"span",30),a(44,"Sync Status"),r()(),i(45,"div",31)(46,"span",36),a(47,"Healthy"),r()(),i(48,"div",35),a(49,"0 errors"),r()()(),i(50,"div",37),b(51,"i",38),i(52,"div",14),a(53,"Pricing tiers, GST rates, and availability flow from Marketplace. Changes here only affect CRM-side display labels and search aliases \u2014 pricing rules live in the Marketplace module."),r()()(),F()}}function t_(o,m){if(o&1){let e=w();i(0,"tr")(1,"td")(2,"span",20),a(3),r()(),i(4,"td"),a(5),r(),i(6,"td"),a(7),r(),i(8,"td"),a(9),r(),i(10,"td"),a(11),r(),i(12,"td")(13,"button",21),h("click",function(){let t=p(e).$implicit,s=d(3);return u(s.editSla(t))}),a(14,"Edit"),r()()()}if(o&2){let e=m.$implicit;l(3),g(e.tier),l(2),g(e.firstResponse),l(2),g(e.resolution),l(2),g(e.businessHours),l(2),g(e.accounts)}}function n_(o,m){if(o&1){let e=w();P(0),i(1,"div",9)(2,"div")(3,"span",10),a(4,"SLA Tiers"),r(),i(5,"div",11),a(6,"Response and resolution commitments per customer tier \u2014 enforced by Support module."),r()(),i(7,"button",12),h("click",function(){p(e);let t=d(2);return u(t.addSla())}),b(8,"i",13),i(9,"span",14),a(10,"Add Tier"),r()()(),i(11,"div",15)(12,"div",16)(13,"table",17)(14,"thead")(15,"tr")(16,"th",18),h("click",function(){p(e);let t=d(2);return u(t.doSort("sla","tier"))}),a(17,"Tier"),r(),i(18,"th",18),h("click",function(){p(e);let t=d(2);return u(t.doSort("sla","firstResponse"))}),a(19,"First Response"),r(),i(20,"th",18),h("click",function(){p(e);let t=d(2);return u(t.doSort("sla","resolution"))}),a(21,"Resolution"),r(),i(22,"th",18),h("click",function(){p(e);let t=d(2);return u(t.doSort("sla","businessHours"))}),a(23,"Business Hours"),r(),i(24,"th",18),h("click",function(){p(e);let t=d(2);return u(t.doSort("sla","accounts"))}),a(25,"Accounts"),r(),b(26,"th"),r()(),i(27,"tbody"),f(28,t_,15,5,"tr",19),r()()()(),F()}if(o&2){let e=d(2);l(16),c("ngClass",e.sortClass("sla","tier")),l(2),c("ngClass",e.sortClass("sla","firstResponse")),l(2),c("ngClass",e.sortClass("sla","resolution")),l(2),c("ngClass",e.sortClass("sla","businessHours")),l(2),c("ngClass",e.sortClass("sla","accounts")),l(4),c("ngForOf",e.slaRows)("ngForTrackBy",e.trackByIndex)}}function i_(o,m){if(o&1){let e=w();P(0),i(1,"div",6)(2,"div",7)(3,"button",8),h("click",function(){p(e);let t=d();return u(t.setTab("territories"))}),a(4,"Sales Territories"),r(),i(5,"button",8),h("click",function(){p(e);let t=d();return u(t.setTab("pipeline"))}),a(6,"Pipeline Stages"),r(),i(7,"button",8),h("click",function(){p(e);let t=d();return u(t.setTab("lead-sources"))}),a(8,"Lead Sources"),r(),i(9,"button",8),h("click",function(){p(e);let t=d();return u(t.setTab("catalog"))}),a(10,"Catalog Linkage"),r(),i(11,"button",8),h("click",function(){p(e);let t=d();return u(t.setTab("sla"))}),a(12,"SLA Tiers"),r()(),f(13,Jg,29,7,"ng-container",5)(14,$g,29,7,"ng-container",5)(15,Xg,29,7,"ng-container",5)(16,e_,54,0,"ng-container",5)(17,n_,29,7,"ng-container",5),r(),F()}if(o&2){let e=d();l(3),D("active",e.activeTab==="territories"),l(2),D("active",e.activeTab==="pipeline"),l(2),D("active",e.activeTab==="lead-sources"),l(2),D("active",e.activeTab==="catalog"),l(2),D("active",e.activeTab==="sla"),l(2),c("ngIf",e.activeTab==="territories"),l(),c("ngIf",e.activeTab==="pipeline"),l(),c("ngIf",e.activeTab==="lead-sources"),l(),c("ngIf",e.activeTab==="catalog"),l(),c("ngIf",e.activeTab==="sla")}}var tr=(()=>{class o{constructor(e){this.toast=e,this.activeTab="territories",this.territories=[{name:"South India \u2014 Auto OEM",type:"Geography + Industry",rep:"Priya Menon",accounts:42,pipeline:"\u20B93.6 Cr"},{name:"West India \u2014 Manufacturing",type:"Geography + Industry",rep:"Rohit Sharma",accounts:38,pipeline:"\u20B94.1 Cr"},{name:"Strategic \u2014 Tata Group",type:"Named Account",rep:"Karthik Iyer",accounts:11,pipeline:"\u20B96.8 Cr"},{name:"North India \u2014 Mid-market",type:"Geography",rep:"TV Sindhu",accounts:64,pipeline:"\u20B91.9 Cr"},{name:"Strategic \u2014 Mahindra Group",type:"Named Account",rep:"Hruthick Gunda",accounts:9,pipeline:"\u20B95.2 Cr"}],this.pipelineStages=[{order:1,name:"New",probability:10,requiredFields:"Title, Amount, Owner",criteria:"\u2014"},{order:2,name:"Proposal Sent",probability:30,requiredFields:"Products, Sent date, Expiry",criteria:"\u2014"},{order:3,name:"Negotiation",probability:55,requiredFields:"Quote ID, Sent date",criteria:"\u2014"},{order:4,name:"Decision Pending",probability:75,requiredFields:"Quote ID",criteria:"\u2014"},{order:5,name:"Won",probability:100,requiredFields:"Bank details, Shipping, Payment mode",criteria:"Triggers AR invoice"},{order:6,name:"Lost",probability:0,requiredFields:"Reason",criteria:"Closed \u2014 Lost"}],this.leadSources=[{code:"web",displayName:"Website Form",channel:"Inbound \u2014 Digital",activeLabel:"Active",activeTone:"green",ytdLeads:312},{code:"referral",displayName:"Customer Referral",channel:"Inbound \u2014 Network",activeLabel:"Active",activeTone:"green",ytdLeads:87},{code:"event",displayName:"Trade Event",channel:"Inbound \u2014 Field",activeLabel:"Active",activeTone:"green",ytdLeads:54},{code:"outbound",displayName:"Outbound Prospecting",channel:"Outbound",activeLabel:"Active",activeTone:"green",ytdLeads:198},{code:"partner",displayName:"Channel Partner",channel:"Partner",activeLabel:"Active",activeTone:"green",ytdLeads:41},{code:"linkedin",displayName:"LinkedIn CSV Import",channel:"Outbound \u2014 Social",activeLabel:"Paused",activeTone:"amber",ytdLeads:12}],this.slaTiers=[{tier:"Strategic",firstResponse:"15 min",resolution:"4 hrs",businessHours:"24\xD77",accounts:"14"},{tier:"Enterprise",firstResponse:"30 min",resolution:"8 hrs",businessHours:"24\xD75",accounts:"62"},{tier:"Mid-market",firstResponse:"2 hrs",resolution:"24 hrs",businessHours:"9\xD75",accounts:"148"},{tier:"SMB",firstResponse:"4 hrs",resolution:"2 business days",businessHours:"9\xD75",accounts:"231"},{tier:"Transactional",firstResponse:"1 business day",resolution:"Best effort",businessHours:"9\xD75",accounts:"\u2014"}],this.terrRows=[...this.territories],this.stageRows=[...this.pipelineStages],this.sourceRows=[...this.leadSources],this.slaRows=[...this.slaTiers],this.sortState={}}trackByIndex(e){return e}rowsFor(e){switch(e){case"territories":return this.terrRows;case"pipeline":return this.stageRows;case"lead-sources":return this.sourceRows;case"sla":return this.slaRows;default:return[]}}doSort(e,n){let t=this.sortState[e],s=t&&t.key===n&&t.dir===1?-1:1;this.sortState[e]={key:n,dir:s},this.rowsFor(e).sort((_,S)=>{let T=_[n],M=S[n];return typeof T=="number"&&typeof M=="number"?(T-M)*s:String(T).localeCompare(String(M),void 0,{numeric:!0})*s})}sortClass(e,n){let t=this.sortState[e];return!t||t.key!==n?"crm-sort":t.dir===1?"crm-sort-asc":"crm-sort-desc"}setTab(e){this.activeTab=e}addTerritory(){this.toast.info("Add territory.")}editTerritory(e){this.toast.info(`Edit territory: ${e.name}`)}addStage(){this.toast.info("Add pipeline stage.")}editStage(e){this.toast.info(`Edit stage: ${e.name}`)}addSource(){this.toast.info("Add lead source.")}editSource(e){this.toast.info(`Edit source: ${e.code}`)}manageMarketplace(){this.toast.info("Open Marketplace module.")}addSla(){this.toast.info("Add SLA tier.")}editSla(e){this.toast.info(`Edit SLA tier: ${e.tier}`)}saveAll(){this.toast.info("Saving CRM setup \u2014 coming soon.")}static{this.\u0275fac=function(n){return new(n||o)(E(q))}}static{this.\u0275cmp=V({type:o,selectors:[["app-setup"]],decls:9,vars:1,consts:[[1,"crm-page-body"],[1,"crm-page-header"],["appTranslate","",1,"crm-page-title"],["appTranslate","",1,"crm-page-subtitle"],["icon","ri-settings-3-line","title","Coming Soon","subtitle","CRM configuration is on the way. Check back shortly."],[4,"ngIf"],[1,"card"],[1,"crm-tabs-bar","px-3","pt-1"],["appTranslate","",1,"crm-tab-item",3,"click"],[1,"card-header"],["appTranslate","",1,"crm-fw-700","crm-text-sm"],["appTranslate","",1,"crm-text-muted","crm-text-xs","mt-1"],["type","button",1,"btn","btn-theme","btn-sm",3,"click"],[1,"ri-add-line"],["appTranslate",""],[1,"card-body","p-0"],[1,"crm-table-wrapper","crm-table-wrapper-flush"],[1,"crm-data-table"],["appTranslate","",3,"click","ngClass"],[4,"ngFor","ngForOf","ngForTrackBy"],[1,"crm-cell-primary"],["type","button",1,"btn","btn-light","btn-sm",3,"click"],[3,"click","ngClass"],[1,"setup-code"],[1,"crm-badge",3,"ngClass"],[1,"ri-external-link-line"],[1,"card-body"],[1,"crm-stat-grid","mb-3"],[1,"crm-stat-card"],[1,"crm-stat-header"],["appTranslate","",1,"crm-stat-label"],[1,"crm-stat-value"],[1,"crm-stat-trend","crm-stat-trend-up"],[1,"ri-arrow-up-line"],["appTranslate","",1,"crm-stat-trend-label"],["appTranslate","",1,"crm-stat-trend","crm-stat-trend-label"],["appTranslate","",1,"crm-badge","crm-badge-green"],[1,"crm-alert","crm-alert-info"],[1,"ri-information-line"]],template:function(n,t){n&1&&(i(0,"div",0)(1,"div",1)(2,"div")(3,"h1",2),a(4,"Setup"),r(),i(5,"p",3),a(6,"Configure territories, pipeline stages, lead sources, catalog linkage, and SLA tiers"),r()()(),b(7,"app-crm-empty-state",4),f(8,i_,18,15,"ng-container",5),r()),n&2&&(l(8),c("ngIf",!1))},dependencies:[j,W,N,L,st],styles:["[_nghost-%COMP%]{display:block}.setup-code[_ngcontent-%COMP%]{font-family:Courier New,monospace;font-size:.75rem;background:var(--color-primary-50);border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:2px 6px;color:var(--color-primary-600)}"]})}}return o}
8)();var nr=(()=>{class o{static{this.\u0275fac=function(n){return new(n||o)}}static{this.\u0275mod=At({type:o})}static{this.\u0275inj=Ft({providers:[ue,q,Ge,ht,xe],imports:[Mn,St,Bn,Wn,On,jn,Zn,Xn,Rn,Yn,qn,$n,Un,Ln,Vn,Hn,ni,ii,ai,Qn,Jn,zn,li,Kn,oi]})}}return o})();var r_=[{path:"",component:_i,children:[{path:"",redirectTo:"dashboard/sales-manager",pathMatch:"full"},{path:"dashboard/ae",component:ki},{path:"dashboard/csm",component:Ei},{path:"dashboard/sales-manager",component:Mi},{path:"dashboard/support",component:Ii},{path:"dashboard/health",component:Oi},{path:"leads",component:Fi},{path:"leads/new",component:gn},{path:"leads/:id/edit",component:gn},{path:"leads/:id",component:Ai},{path:"accounts",component:Vi},{path:"accounts/new",component:_n},{path:"accounts/:id/edit",component:_n},{path:"accounts/:id",component:Li},{path:"opportunities",component:Wi},{path:"opportunities/new",component:fn},{path:"opportunities/:id/edit",component:fn},{path:"opportunities/:id",component:Ri},{path:"pipeline",component:qi},{path:"forecast",component:zi},{path:"ebr",component:ji},{path:"onboarding",component:Ui},{path:"renewals",component:Hi},{path:"advocacy",component:Ki},{path:"advocacy/:id",component:Qi},{path:"tickets",component:Gi},{path:"tickets/:id",component:Yi},{path:"knowledge-base",component:$i},{path:"my-documents",component:Xi},{path:"analytics",component:er},{path:"setup",component:tr}]}],Ux=(()=>{class o{static{this.\u0275fac=function(n){return new(n||o)}}static{this.\u0275mod=At({type:o})}static{this.\u0275inj=Ft({imports:[nr,St.forChild(r_),St]})}}return o})();export{Ux as CrmV2RoutingModule};
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.