1"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[878],{39067(t,e,i){i.d(e,{default:()=>h});var a=i(17243),o=i(20188),r=i(19184),n=i(42249),s=i(54266);const c=["opportunity","opportunity"],d=["sale","saleDocument"],l=["dataRepository","range"],p=["dataRepository","make"];class u extends o.A{constructor(...t){super(...t),this.objectDescription={opportunity:{location:c,field:[],customFields:!0},saleDocument:{location:d,field:[]},quoteLine:{location:"sale/quoteLine",field:[]}},this.userService=null,this.apiClient=null,this._apiCartService=new r.A}async initialize(){if(super.initialize(),this.userService=this._serviceHandler.getUserService(),this._apiCartService.setUserService(this.userService),this.apiClient=this.userService.getApiClient(),this._userToken=this.userService.getUserToken(),this._userToken){const e=this._serviceHandler.getTwigHelper();e.register(this._data.templates);const i=this._serviceHandler.getTemplateHelper();this._root.addClass("loading"),await this.getData();const o=this._serviceHandler.getDependencyHolder();this._renderData={data:a.get(this,"_data.opportunity"),status:o.getConfigurableChoicesItem("opportunityStatus").values,templates:a.get(this,"_data.templates"),options:a.get(this,"_data.options"),format:this.format.bind(this),encodeUrlParam:i.encodeUrlParam.bind(i),getObjectTitle:i.getObjectTitle.bind(i),stringifyAttribute:i.stringifyAttribute.bind(i),round:i.round.bind(i)};var t=this.renderTwig(e,"OpportunityView",this._renderData,this._translations);this._root.removeClass("loading"),this._root.find(".js-twig-ctn").append(t);const r=this.trans("opportunity.view.opportunity")+" #"+this.format("opportunity","reference",a.get(this,"_data.opportunity.reference"));i.addBreadCrumbLastStep(r),this.setupEvents()}else this.userService.loginRedirect(window.location)}setupEvents(){const t=this._serviceHandler.getTemplateHelper();window.blg.getServiceOnLoad("pdfViewer",t=>{t.setupEvents()}),a.get(this._data,"options.backToTop")&&this._root.find(".js-back-to-top").off("click").on("click",t.scrollToTop),window.blg.getServiceOnLoad("formModal",t=>{t.setupEvents()}),this._root.find(".blgModFormFormModal").off("needRefresh").on("needRefresh",this._refresh.bind(this)),this._root.find(".js-go-checkout").off("click").on("click",t=>{this._goToCheckout(t.currentTarget.getAttribute("js-go-checkout-id"))}),this._root.find(".js-sale-archive-modal").off("click").on("click",t=>{this._saleToDelete=t.currentTarget.getAttribute("js-archive-sale-id")}),this._root.find(".js-sale-duplicate-modal").off("click").on("click",t=>{this._saleToDuplicate=t.currentTarget.getAttribute("js-duplicate-sale-id")}),this._root.find(".js-validate-sale-toggle").off("click").on("click",t=>{const e=t.currentTarget.getAttribute("js-validate-sale-id");a.debounce(()=>this._toggleValidatedSale(e),500)}),this._root.find(".js-opportunity-duplicate-modal").off("click").on("click",()=>{this._root.find("#duplicate-opportunity-modal .js-form-ctn div").length||(s("#form_opportunity_duplicate").trigger("buildForm"),s(".blgModFormForm.opportunityDuplicate").appendTo("#duplicate-opportunity-modal .js-form-ctn")),setTimeout(()=>{this._root.find("#form_opportunity_duplicate_relation_company").click()},500)}),this._root.find(".js-sale-archive").off("click").on("click",this._archiveSale.bind(this)),this._root.find(".js-sale-duplicate").off("click").on("click",async t=>{const e=s(t.currentTarget);e.addClass("processing"),await this._duplicateSale(this._saleToDuplicate,this._data.opportunity,!0),this._root.find("#duplicate-sale-modal").modal("hide"),e.removeClass("processing"),s("#form_opportunity_duplicate").trigger("destroyForm")}),this._root.find(".js-opportunity-duplicate").off("click").on("click",async t=>{const e=s(t.currentTarget);e.addClass("processing"),await this._duplicateOpportunity(),this._root.find("#duplicate-opportunity-modal").modal("hide"),e.removeClass("processing")}),this._root.find(".js-create-sale-document").off("click").on("click",async()=>{await this._createSaleDocument()})}async _toggleValidatedSale(t){const e=this._serviceHandler.getApiClient(),i=this._data.opportunity.relationQuote.find(e=>e.id===t);if(i.tag.includes("validated_sale")){const a=i.tag.filter(t=>"validated_sale"!==t);(await e.patchObject(d,t,{tag:a}
1)).getStatusCode()<300&&(i.tag=a,this._updateValidatedSaleDisplay(t,!1))}else{const a=i.tag.concat(["validated_sale"]);(await e.patchObject(d,t,{tag:a})).getStatusCode()<300&&(i.tag=a,this._updateValidatedSaleDisplay(t,!0))}}_updateValidatedSaleDisplay(t,e){this._root.find(`[js-validate-sale-id=${t}] .js-validated`).toggleClass("hidden",!e),this._root.find(`[js-validate-sale-id=${t}] .js-not-validated`).toggleClass("hidden",e)}async getData(){const t=this._serviceHandler.getApiClient(),e=a.get(this,"_data.options.itemId");this._data.opportunity=await t.getObject(c,e);const i=this._serviceHandler.getCustomFieldsHelper();await i.setCustomFields(this._data.opportunityCustomFieldGroups||[],this._data.opportunity,["opportunity"]);const o={filter:{id:{$in:a.map(this._data.opportunity.relationQuote,"id")}},field:["id","orderedBy","reference","status","quote","title","tag","lastUpdate"],order:["createdAt","desc"]};this._data.opportunity.relationQuote=await t.listObjects("sale/saleDocument",o);const r=a.chain(a.get(this._data.opportunity,"products",[])).map("concurrentModel.range.@id").compact().uniq().value();if(r.length){const e=await t.listObjects(l,{filter:{id:{$in:r}}});for(const t of this._data.opportunity.products)a.set(t,"concurrentModel.range",a.find(e,{id:a.get(t,"concurrentModel.range.@id")}))}const n=a.chain(a.get(this._data.opportunity,"products",[])).map("concurrentModel.make.@id").compact().uniq().value();if(n.length){const e=await t.listObjects(p,{filter:{id:{$in:n}}});for(const t of this._data.opportunity.products)a.set(t,"concurrentModel.make",a.find(e,{id:a.get(t,"concurrentModel.make.@id")}))}}format(t,e,i,a){let o=c;return"sale"===t&&(o=d),this._serviceHandler.getApiFormater().format(o,e,i,a||null)}_goToCheckout(t){a.isNil(t)?console.error("ID invalid for checkout"):window.location.href="/checkout?step=configurator_summary&sale="+t+"&opp="+this._data.opportunity.id}_findCustomerCompany(t){const e=this.userService.getUserInfo();return a.find(t.relationCompany,t=>t.id!==e.company.id)}async _createPreparationLine(t,e,i){const a=await this.apiClient.getObject("sale/saleDocument",t,{join:["quote"]}),o={article:null,quantity:1,type:"empty",reference:e,label:i,data:{internalEmptyLineType:"preparation"},internalTransferType:{"@id":3},quote:{"@id":a.quote.id}},r=new n.A(this._serviceHandler),s=await r.processApiPatch("empty",o,{sale:a});await this.apiClient.putObject("sale/quoteLine",s)}async _createSaleDocument(){const t=this.userService.getUserInfo(),e=this._findCustomerCompany(this._data.opportunity),i={emitterContactId:t.contact.id,emitterCompanyId:t.company.id,orderedBy:a.get(e,"id")||t.company.id,relationContactId:a.get(this._data,"opportunity.relationContact[0].id"),siteName:this._data.siteName,saleDocumentTitle:"Devis (Configurateur)",status:"quote"},o=await this._apiCartService.createSaleDocument(i);try{await this._createPreparationLine(o,"PREPARATION","Préparation"),await this._createPreparationLine(o,"TRANSPORT","Transport"),await this._createPreparationLine(o,"DEP_GARANTIE","Déplacement garantie")}catch(t){console.warn("Could not create default preparation lines.",t)}const r={relationQuote:{$push:[{id:o}]}};await this.apiClient.patchObject(c,a.get(this._data,"opportunity.id"),r),a.isNil(o)?console.error("ID invalid for checkout"):window.location.href="/checkout?sale="+o+"&opp="+this._data.opportunity.id}async _archiveSale(){const t=this._serviceHandler.getApiClient(),e=a.find(this._data.opportunity.relationQuote,{id:this._saleToDelete}),i=t.batchOperation,o={[`moveQuote${e.id}`]:i.patchObject("sale/quote/all",e.quote.id,{internalTag:"archive"}),[`moveQuoteDocument${e.id}`]:i.patchObject("sale/saleDocument/all",e.id,{internalTag:"archive"},{dependency:[`moveQuote${e.id}`]})};try{await t.patchObject("opportunity/opportunity",this._data.opportunity.id,{relationQuote:{$pull:[{"@id":e.id}]}}),await t.batch(o,{breakOnError:!0,veryDangerousNotSafe:!0}),await this._refresh()}catch(t){console.warn("POST ERROR :",t)}}async _duplicateSale(t,e,i,o=!1){const r=this._serviceHandler.getApiClient(),n=await r.getObject(d,t,{field:["billing","currency","delivery","emitter","emitterContact","equipments","internalTransferType","orderedBy","payer","status","stopped","tag","type","title","quote"],join:["orderedBy","delivery","billing","payer","emitter"]});
1n.emitterContact={"@id":this._serviceHandler.getUserService().getUserInfo().contact.id};const s={filter:{quote:{id:n.quote.id},label:{$ne:"Support - demande acceptée"}}},c=await r.listObjects("sale/quoteLine",s);if(delete n.quote,n.extranetDiffusion=!0,o){const t=this._findCustomerCompany(e);n.emitter={"@id":e.ownerCompany.id},n.orderedBy={"@id":t.id},n.billing={"@id":t.id},n.payer={"@id":t.id},n.delivery={"@id":t.id}}const l=r.batchOperation,p={putSaleDocument:l.putObject("sale/saleDocument",n),patchOpportunity:l.patchObject("opportunity/opportunity",e.id,{relationQuote:{$push:[{"@id":{"#value":"putSaleDocument.id"}}]}})};for(let t=0;t<c.length;t++){delete c[t].quote,c[t].quote={"@documentId":{"#value":"putSaleDocument.id"}},delete c[t].id;for(const e of Object.keys(c[t]))null===c[t][e]&&delete c[t][e];p["duplicateLine"+t]=l.putObject("sale/quoteLine",c[t])}const u=await r.batch(p,{veryDangerousNotSafe:!0,fullResponse:!0});a.every(u,t=>t.status<400)?i&&await this._refresh():console.warn(u)}async _duplicateOpportunity(){const t=this._serviceHandler.getApiClient(),e=a.omit(this._data.opportunity,["id","createdAt","creator","internalTag","lastEditor","lastUpdate","ownerCompany","reference","relationQuote","relationCompany"]);e.ownerCompany=this._serviceHandler.getUserService().getUserInfo().company;const i=JSON.parse(this._root.find("#form_opportunity_duplicate_relation_company").attr("js-value")),o=JSON.parse(this._root.find("#form_opportunity_duplicate_relation_contact").attr("js-value"));e.relationCompany=[e.ownerCompany,i[0]],e.relationContact=o||[],e.dateEndExpected=new Date(Date.now()),e.dateEndExpected.setMonth(e.dateEndExpected.getMonth()+1),e.dateEndExpected=e.dateEndExpected.toISOString().split("T")[0];for(const t of e.products)delete t.id;const r=await t.putObject(c,a.omit(e,"quote"));Object.assign(r,e);const n=[];for(const t of this._data.opportunity.relationQuote)n.push(this._duplicateSale(t.id,r,!1,!0));await Promise.all(n),s("#form_opportunity_duplicate").trigger("destroyForm"),document.location.href="/opportunity/"+r.id}async _refresh(){await this.getData(),a.set(this._renderData,"data",a.get(this,"_data.opportunity"));const t=this._serviceHandler.getTwigHelper();var e=this.renderTwig(t,"OpportunityView",this._renderData,this._translations);this._root.find(".js-twig-ctn").empty(),this._root.find(".js-twig-ctn").append(e),this.setupEvents()}}a.set(window,["blg","Extranet","OpportunityView"],u);const h=u}}]); 2//# sourceMappingURL=Extranet-OpportunityView-js-OpportunityView-js.js.map
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.