global class NewQuoteEntryWebService { WebService static List getProduct2(List ids) { List p2 = [select Id, Name, SFDA_Status__c, Intra_Trade_Cost_RMB__c, Intra_Trade_List_RMB__c, Foreign_Trade_Cost_US__c, Foreign_Trade_List_US__c, Sales_Possibility__c, Estimation_Entry_Possibility__c, StorageStatus__c // 多年保修 start , GuranteeType__c , Entend_gurantee_period_all__c //, Foreign_Trade_Gurantee_US__c , Intra_Trade_Gurantee_RMB__c //, If_Consumable__c , Intra_Trade_Service_RMB__c ,Maintenance_Price_Year__c //外贸多年保 检索外贸字段 精琢技术 wql 2021/01/29 start ,NoDiscount_Foreign__c ,Intra_Trade_Foreign_RMB__c ,Repair_Contract_USD__c //外贸多年保 检索外贸字段 精琢技术 wql 2021/01/29 start // 多年保修 end FROM Product2 Where Id in :ids]; return p2; } WebService static List getQuoteLineItem(String quoId) { System.debug(Logginglevel.ERROR, 'NewQuoteEntryWebService getQuoteLineItem Start ' + quoId); // 印刷日がある場合、かつ変更がある場合、確認メッセージを出す List items = new List(); if (String.isBlank(quoId) == false) { items = [Select Quote.Quote_Date__c, Quote.BidAnnounce__c, PricebookEntry.Product2.Packing_list_manual__c, PricebookEntryId, SFDA_Status__c, Cost__c, UnitPrice__c, ListPrice__c, Quantity, Qty_Unit__c, Id, ProductCode__c, Asset_Model_No__c, Name__c, Subtotal, AgencySubtotal__c , AgencyUnitPrice__c, Present__c // CHAN-B4YAB8 2018/11/09 业务机会产品的赠送、经销商小计、单价 // 多年保修 start , multiYearWarranty__c , GuaranteePeriod__c,warrantyType__c, NoDiscountTotal__c // 多年保修 end From QuoteLineItem where Quoteid = :quoId Order by Item_Order__c]; } return items; } WebService static Boolean selectQuotation(String oppId, String quoId) { Boolean rt = false; // 可以选择,没有被取消过的报价 List quotes = [select Id, Estimation_List_Price__c, Dealer_Final_Price__c, Agency1__c, Agency1_Profit__c, Agency1_Profit_Rate__c, Agency2__c, Agent1_Agent2_Price__c, Agency2_Profit__c, Agency2_Profit_Rate__c, Stocking_Price__c, Quote_No__c, Name, OCM_Sales_Forecast__c, OCM_Agent1_Price__c, Opportunity.RecordType.DeveloperName, TotalPrice__c from Quote where Id = :quoId and Cancel_Decide__c = false]; List qlis = [select Id, Id__c, SFDA_Status__c, Name__c, ListPrice__c, Quantity, UnitPrice__c, Qty_Unit__c, Cost__c, BSS_Category__c, Subtotal__c, PricebookEntryId from QuoteLineItem where Quoteid = :quoId Order by Item_Order__c, Id]; Savepoint sp = Database.setSavepoint(); try { if (quotes.size() > 0) { Quote quo = quotes[0]; Opportunity o = New Opportunity(); List os = New List(); os = [select Id, Estimation_List_Price__c, Dealer_Final_Price__c, Estimation_List_Price_Without_Tax__c, Agency1__c, OCM_Agent1_Price__c, Agency1_Profit__c, Agency1_Profit_Rate__c, Stocking_Price__c, Agency2__c, Agent1_Agent2_Price__c, Agency2_Profit__c, Agency2_Profit_Rate__c From Opportunity Where Id = :oppid]; if (os.size() > 0) { o = os[0]; o.Estimation_List_Price__c = quo.Estimation_List_Price__c; o.Wholesale_Price__c = quo.OCM_Sales_Forecast__c; o.Dealer_Final_Price__c = quo.Dealer_Final_Price__c; o.Agency1__c = quo.Agency1__c; o.OCM_Agent1_Price__c = quo.OCM_Agent1_Price__c; o.Agency1_Profit__c = quo.Agency1_Profit__c; o.Agency1_Profit_Rate__c = quo.Agency1_Profit_Rate__c; o.Agency2__c = quo.Agency2__c; o.Agent1_Agent2_Price__c = quo.Agent1_Agent2_Price__c; o.Agency2_Profit__c = quo.Agency2_Profit__c; o.Agency2_Profit_Rate__c = quo.Agency2_Profit_Rate__c; o.Stocking_Price__c = quo.Stocking_Price__c; o.Estimation_No__c = quo.Quote_No__c; o.Estimation_Name__c = quo.Name; o.Estimation_Id__c = quo.Id; ControllerUtil.updOpp(o); List ols = New List(); OpportunityLineItem ol = New OpportunityLineItem(); ols = [select Id from OpportunityLineItem Where OpportunityId = :oppid]; if (ols.size() > 0) { //delete ControllerUtil.delOppLine(ols); } Integer i = 1; ols = New List(); if (qlis.size() > 0) { for (QuoteLineItem ql : qlis) { if (ql.PricebookEntryId != null) { ol = New OpportunityLineItem(); ol.OpportunityId = oppId; ol.Id__c = ql.Id__c; ol.SFDA_Status__c = ql.SFDA_Status__c; ol.Name__c = ql.Name__c; ol.ListPrice__c = ql.ListPrice__c; ol.Quantity = ql.Quantity; ol.UnitPrice = 0; ol.UnitPrice__c = ql.UnitPrice__c; ol.Qty_Unit__c = ql.Qty_Unit__c; //コストは小計済を登録 ol.Cost__c = ql.Cost__c; ol.BSS_Category__c = ql.BSS_Category__c; //OCM売上予測金額 * (小計/見積合計) if (ql.Subtotal__c != null && quo.OCM_Sales_Forecast__c != null && quo.TotalPrice__c != null) { if (ql.Subtotal__c > 0 && quo.TotalPrice__c > 0) { ol.OCM_Sales_Forecast__c = quo.OCM_Sales_Forecast__c * (ql.Subtotal__c / quo.TotalPrice__c); } } //価格表 ol.PricebookEntryId = ql.PricebookEntryId; //並び順 ol.Item_Order__c = i; ols.add(ol); i++; } } ControllerUtil.insOppLine(ols); } rt = true; } } } catch (DmlException de) { Database.rollback(sp); throw de; } catch (Exception e) { Database.rollback(sp); throw e; } return rt; } //SWAG-C3BAVY 【委托】询价新旧code 替换 精琢技术 wql 20210607 start //用于报价单条替换产品otcode WebService static Boolean updateOTCode(String tempQuoId){ Boolean successFlag = true; //定义询价id String tempOppId = ''; //存放所有报价行 产品id List product2Ids = new List(); //产品list List Product2List = new List(); //key:旧的产品型号;value:对应的新产品id Map newProIdsMap = new Map(); //key:新产品id;value:新价格手册id Map newPriceBookIdMap = new Map(); //list封装类 用此封装类 跳过 不能直接更新行项目上产品 List activities; //clone报价行 List QuoteLineItemCloneList = new List(); //clone询价行 List OpportunityLineItemCloneList = new List(); /* ----------------------------------------前期数据准备 wql start ----------------------------------------- */ //先获取询价id List quoteList= [select OpportunityId from quote where id =:tempQuoId]; if(quoteList.size()>0){ tempOppId = quoteList[0].OpportunityId; } //获取所有报价行 (该sql作为直接insert克隆用 最好不要添加其他会有影响的字段) List QuoteLineItemList = [Select id,Asset_Model_No__c,ProductCode__c,PricebookEntry.Product2Id, PricebookEntry.Product2.SFDA_Status__c,SFDA_Status__c, BSS_Category__c,Qty_Unit__c, Cost__c, UnitPrice__c,UnitPrice, ListPrice__c, Quantity, PricebookEntryId, UnitPrice_Page__c,AgencyUnitPrice__c, AgencySubtotal__c, Present__c, multiYearWarranty__c , If_Cancel_Guarantee__c , GuaranteePeriod__c, ServicePrice__c , GuranteePrice__c, ProductEntend_gurantee_period_all__c,ProductGuranteePrice__c, GuranteeType__c,warrantyType__c, productServicePrice__c, NoDiscountTotal__c, provistonPeriod__c, Maintenance_Price_Year__c,Quoteid,Id__c,OCM_Sales_Forecast__c,NameForPrint__c,NameForPrintDelimiter__c,Asset_Model_No_forPrint__c,Cost_Subtotal__c,Name__c,Subtotal__c,Quantity__c,ProductSetName__c,CanNotCancelFlag__c From QuoteLineItem where Quoteid =:tempQuoId Order by Item_Order__c, Id]; //判断是否有行项目 if(QuoteLineItemList.size()>0){ for(QuoteLineItem qli :QuoteLineItemList){ Product2Ids.add(qli.PricebookEntry.Product2Id ); } } /* ---------------这部分其实需要用两次 但是webservice没办法写共通 wql start ------------------------ */ //如果产品id有值 if(product2Ids.size()>0){ //根据现有的产品id 查询产品型号和对应新的产品id Product2List = [select ProductCode,Correspond_Code__c from Product2 where id in:product2Ids and Correspond_Code__c !=null]; } //存放key:旧的产品型号;value:对应的新产品id if(Product2List.size()>0){ for(Product2 p :Product2List){ newProIdsMap.put(p.ProductCode,p.Correspond_Code__c); } } //根据新产品id,获取价格手册id 这里因为每个产品对应两条价格手册 CNY / USD ,先直接默认取CNY的价格手册 List priceBookList = [SELECT Id,Product2Id FROM PriceBookEntry WHERE Product2Id in:newProIdsMap.values() and CurrencyIsoCode ='CNY']; if(priceBookList.size()>0){ for(PriceBookEntry pbe:priceBookList){ newPriceBookIdMap.put(pbe.Product2Id,pbe.Id); } } /* ---------------这部分其实需要用两次 但是webservice没办法写共通 wql end ------------------------ */ /* ----------------------------------------前期数据准备 wql end ----------------------------------------- */ /* ------------------------------- 报价行 全删全增 替换产品otcode wql start ------------------------------------- */ activities =new List(); if(QuoteLineItemList.size()>0){ for(QuoteLineItem q :QuoteLineItemList){ QELine c = null; if(q.PricebookEntry.Product2.SFDA_Status__c =='停止'){ System.debug('111:'); System.debug('newProIdsMap:'+newProIdsMap); System.debug('newPriceBookIdMap:'+newPriceBookIdMap); System.debug('q.Asset_Model_No__c'); c = new QELine(q,'需要替换',newProIdsMap.get(q.ProductCode__c),newPriceBookIdMap.get(newProIdsMap.get(q.ProductCode__c))); }else{ System.debug('222:'); c = new QELine(q,'',newProIdsMap.get(q.ProductCode__c),newPriceBookIdMap.get(newProIdsMap.get(q.ProductCode__c))); } System.debug('C::'+c); activities.add(c); } } try { //报价行先删后增 start if(QuoteLineItemList.size()>0){ delete QuoteLineItemList; } if(activities.size()>0){ for(QELine qe:activities){ //new 行项目 QuoteLineItem quo = new QuoteLineItem(); //复制报价行 quo = qe.pageObject; //addlist QuoteLineItemCloneList.add(quo); } } system.debug('QuoteLineItemCloneList:'+QuoteLineItemCloneList); //报价行先删后增 start if(QuoteLineItemCloneList.size()>0){ insert QuoteLineItemCloneList; } //报价行先删后增 end } catch (Exception e) { successFlag = false; } /* ------------------------------- 报价行 全删全增 替换产品otcode wql end ------------------------------------- */ /* ------------------------------- 询价行 全删全增 替换产品otcode wql start ------------------------------------- */ List OpportunityLineItemList=[Select id,OpportunityId,PricebookEntry.Product2Id, Asset_Model_No__c,PricebookEntry.Product2.SFDA_Status__c, SFDA_Status__c, Name__c, ProductCode__c,Qty_Unit__c, Cost__c, ListPrice__c, Quantity, BSS_Category__c, TotalPrice,Product_Cost__c, Product_ListPrice__c,PricebookEntryId,UnitPrice__c, TotalPrice__c, AgencyUnitPrice__c, AgencySubtotal__c, Present__c, multiYearWarranty__c , If_Cancel_Guarantee__c , GuaranteePeriod__c,ServicePrice__c , GuranteePrice__c,ProductEntend_gurantee_period_all__c,ProductGuranteePrice__c, GuranteeType__c,warrantyType__c, productServicePrice__c,NoDiscountTotal__c, provistonPeriod__c, Maintenance_Price_Year__c,OCM_Sales_Forecast__c,NumberOfObjective_146P__c,Id__c,OCM_man_province_txt__c,Objective_146P__c,Important_Rroduct__c,If_170Pro__c,If_EP_T1_F__c,If_AHPro__c,Is_DangerousChemicals__c,CanNotCancelFlag__c,Item_Order__c,target__c,Register_alleffective__c,strategyProductText__c From OpportunityLineItem Where OpportunityId =:tempOppId Order by Item_Order__c, Id]; //判断是否有行项目 Product2Ids = new List(); Product2List = new List(); newProIdsMap.clear(); newPriceBookIdMap.clear(); priceBookList = new List(); if(OpportunityLineItemList.size()>0){ for(OpportunityLineItem oli :OpportunityLineItemList){ Product2Ids.add(oli.PricebookEntry.Product2Id ); } } /* ---------------这部分其实需要用两次 但是webservice没办法写共通 wql start ------------------------ */ //如果产品id有值 if(product2Ids.size()>0){ //根据现有的产品id 查询产品型号和对应新的产品id Product2List = [select ProductCode,Correspond_Code__c from Product2 where id in:product2Ids and Correspond_Code__c !=null]; } //存放key:旧的产品型号;value:对应的新产品id if(Product2List.size()>0){ for(Product2 p :Product2List){ newProIdsMap.put(p.ProductCode,p.Correspond_Code__c); } } //根据新产品id,获取价格手册id 这里因为每个产品对应两条价格手册 CNY / USD ,先直接默认取CNY的价格手册 priceBookList = [SELECT Id,Product2Id FROM PriceBookEntry WHERE Product2Id in:newProIdsMap.values() and CurrencyIsoCode ='CNY']; if(priceBookList.size()>0){ for(PriceBookEntry pbe:priceBookList){ newPriceBookIdMap.put(pbe.Product2Id,pbe.Id); } } /* ---------------这部分其实需要用两次 但是webservice没办法写共通 wql end ------------------------ */ activities =new List(); System.debug('最开始的:OpportunityLineItemList:'+OpportunityLineItemList); System.debug('最开始的数量:'+OpportunityLineItemList.size()); if(OpportunityLineItemList.size()>0){ for(OpportunityLineItem opp :OpportunityLineItemList){ QELine c = null; if(opp.PricebookEntry.Product2.SFDA_Status__c =='停止'){ System.debug('zzzzz:'); System.debug('newProIdsMap:'+newProIdsMap); System.debug('opp.ProductCode__c:'+opp.ProductCode__c); c = new QELine(opp,'需要替换',newProIdsMap.get(opp.ProductCode__c),newPriceBookIdMap.get(newProIdsMap.get(opp.ProductCode__c))); }else{ c = new QELine(opp,'',newProIdsMap.get(opp.ProductCode__c),newPriceBookIdMap.get(newProIdsMap.get(opp.ProductCode__c))); } System.debug('C::'+c); activities.add(c); } } try { //询价行先删后增 start if(OpportunityLineItemList.size()>0){ delete OpportunityLineItemList; } system.debug('询价行的行数:'+activities.size()); //询价行先删后增 end if(activities.size()>0){ for(QELine ql:activities){ //new 行项目 OpportunityLineItem oppli = new OpportunityLineItem(); //询价报价行 oppli = ql.pageOppObject; //addlist OpportunityLineItemCloneList.add(oppli); } } system.debug('OpportunityLineItemCloneList:'+OpportunityLineItemCloneList); //报价行先删后增 start if(OpportunityLineItemCloneList.size()>0){ insert OpportunityLineItemCloneList; } } catch (Exception e) { successFlag = false; } /* ------------------------------- 询价行 全删全增 替换产品otcode wql end ------------------------------------- */ return successFlag; } //报价替换产品code 封装类 public class QELine { //报价行 public QuoteLineItem pageObject; //询价行 public OpportunityLineItem pageOppObject; //有参构造 public QELine(QuoteLineItem qli,String otcode,String proId,String tempPriceBookEntryId){ this.pageObject = qli.clone(); //替换产品和价格手册 System.debug('333:'); if(String.isNotBlank(otcode)){ System.debug('444:'); if(tempPriceBookEntryId!=null){ this.pageObject.PricebookEntryId=tempPriceBookEntryId ; } // if(proId!=null){ // System.debug('555:'); // this.pageObject.PricebookEntry.Product2Id=proId ; // } } } //询价行遍历 public QELine(OpportunityLineItem oli,String otcode,String proId,String tempPriceBookEntryId){ this.pageOppObject = oli.clone(); //insert 报价不需要id // this.Id = qli.Id; //替换产品和价格手册 if(String.isNotBlank(otcode)){ if(tempPriceBookEntryId!=null){ this.pageOppObject.PricebookEntryId=tempPriceBookEntryId ; } // if(proId!=null){ // this.pageOppObject.PricebookEntry.Product2Id=proId ; // } } } } //SWAG-C3BAVY 【委托】询价新旧code 替换 精琢技术 wql 20210607 end }