public without sharing class OrderDivisionController { public static Boolean OrderDivision = false; // 链接地址 public String baseUrl { get; set; } public String rtUrl { get; set; } // 合同ID、画面项目 public Id odrId {get;set;} public Order odr {get;set;} public List lineinfo {get;set;} public boolean is_IE {get;set;} public Decimal sh_o {get;set;} public Decimal sh_d {get;set;} private Decimal total; private Decimal total_o; private Decimal total_d; public Boolean specialDealer { get; set; } //public String testlog {get;set;} public OrderDivisionController() { // 基础Url baseUrl = URL.getSalesforceBaseUrl().toExternalForm(); String path = URL.getCurrentRequestUrl().getPath(); if (path.indexOf('/apex') > 0) { baseUrl += path.substring(0,path.indexOf('/apex')); } else if (path.indexOf('production/') > 0) { baseUrl += '/production'; } // 返回地址url rtUrl = System.currentPageReference().getParameters().get('retURL'); if (rtUrl == null || rtUrl == 'null') { rtUrl = ''; } // 合同ID if (odrId == null) { odrId = System.currentPageReference().getParameters().get('odrId'); } // 画面项目初始化 lineinfo = new List(); } public OrderDivisionController(ApexPages.StandardController controller) { this(); } public void init() { // 合同ID检查 if (odrId == null) { ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '合同不存在。')); return; } // 取得合同信息 Schema.DescribeSobjectResult d_odr = Order.sObjectType.getDescribe(); Map d_odr_map = d_odr.fields.getMap(); String soql_odr = 'select '; String fields_odr = ''; for (String field : d_odr_map.keySet()) { if (fields_odr.length() > 0) { fields_odr += ', '; } fields_odr += field; } fields_odr += ', Opportunity.IE_ShippingHandling__c'; soql_odr += fields_odr; soql_odr += ' from Order where Id = \'' + odrId + '\''; //List odrList = [select Id, OpportunityId, QuoteId from Order where Id = :odrId]; List odrList = Database.query(soql_odr); if (odrList.size() == 0) { ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '合同不存在。')); return; } odr = odrList[0]; specialDealer = IfspecialDealer(odr.DealerId__c); is_IE = false; sh_o = 0; sh_d = 0; total = 0; if (odr.ProductSegment__c == 'IE' || odr.ProductSegment__c == 'RVI'|| odr.ProductSegment__c == 'NDT'|| odr.ProductSegment__c == 'ANI') { is_IE =true; sh_o = odr.Opportunity.IE_ShippingHandling__c == null ? 0 : odr.Opportunity.IE_ShippingHandling__c; total = odr.TotalAmount; System.debug(total+'@@@@@@@@@@@'+sh_o); } // 取得合同产品 List oiList = new List(); List dqList = new List(); if(odr.ProductSegment__c != 'BS'){ oiList = [select Id, QuoteLineItemId, Description, Quantity, PricebookEntry.Product2.Name,PricebookEntry.Product2.ProductCode,PricebookEntry.Product2.Product_ECCode__c,UnitPrice from OrderItem where OrderId = :odrId order by Id]; }else{ oiList = [select Id, QuoteLineItemId, Description, Quantity, PricebookEntry.Product2.Name,PricebookEntry.Product2.ProductCode,PricebookEntry.Product2.Product_ECCode__c,UnitPrice from OrderItem where OrderId = :odrId and ODISingleProduct__c = true order by Id]; dqList = [select Id,Name,OwnerId, DecideProductSet__c,DecideProductSetCount__c,DecideProductSetDiscount__c,DecideProductSetName__c,DecideProductSetUnivalence__c,DecideProductSetCode__c from DecideQuoteProductSet__c where DecideOrder__c = :odrId order by Id]; } System.debug(dqList); if (oiList.size() == 0 && odr.ProductSegment__c != 'BS') { ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '合同产品不存在。')); return; }else if(odr.ProductSegment__c == 'BS' && oiList.size() == 0 && dqList.size() == 0 ){ ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '合同产品不存在。')); return; } // 画面项目做成 Integer lineno = 0; if(odr.ProductSegment__c != 'BS'){ for (OrderItem oi : oiList) { lineno += 1; LineInfo li = new LineInfo(lineno, oi); lineinfo.add(li); } }else{ if(dqList.size() > 0){ for (DecideQuoteProductSet__c dqp : dqList){ lineno += 1; LineInfo li = new LineInfo(lineno,dqp); LineInfo.add(li); } } if(oiList.size() > 0){ for (OrderItem oi : oiList) { lineno += 1; LineInfo li = new LineInfo(lineno, oi); lineinfo.add(li); } } } } public PageReference saveBtn() { tes(); // 是否分割 boolean divideFlg = false; total_o = 0; total_d = 0; List setIDList = new List(); if (sh_o < sh_d) { ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '拆分运保费不正确。')); return null; } for (LineInfo li : lineinfo) { if (li.divideCnt != null && li.divideCnt > 0) { if (li.divideCnt > li.oi.Quantity) { ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '拆分产品数量不正确,行:' + li.lineNo + ',数量:' + li.divideCnt)); return null; } divideFlg = true; } if(li.isSet){ setIDList.add(li.dqps.DecideProductSet__c); } if(!li.isSet){ Decimal dcnt = li.divideCnt != null && li.divideCnt > 0 ? li.divideCnt : 0; total_o += (li.oi.Quantity - dcnt) * li.oi.UnitPrice; total_d += dcnt * li.oi.UnitPrice; } } if (divideFlg == false) { ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '没有拆分合同。')); return null; } // 取得原询价、询价产品、询价联系人 Opportunity opp = null; List oliList = null; List ocrList = null; Schema.DescribeSobjectResult d_opp = Opportunity.sObjectType.getDescribe(); Map d_opp_map = d_opp.fields.getMap(); String soql_opp = 'select '; String fields_opp = ''; for (String field : d_opp_map.keySet()) { if (fields_opp.length() > 0) { fields_opp += ', '; } fields_opp += field; } soql_opp += fields_opp; soql_opp += ' from Opportunity where Id = \'' + odr.OpportunityId + '\''; //List oppList = [select Id, SyncedQuoteId from Opportunity where Id = :odr.OpportunityId]; List oppList = Database.query(soql_opp); if (oppList.size() > 0) { opp = oppList[0]; oliList = [select Id, PricebookEntryId, Product_Search__c, Product_Search__r.Id, Product_Search__r.Product__c from OpportunityLineItem where OpportunityId = :odr.OpportunityId]; ocrList = [select Id, OpportunityId, ContactId, Role, IsPrimary from OpportunityContactRole where OpportunityId = :odr.OpportunityId]; } Map psMap = new Map(); if (oliList.size() > 0) { for (OpportunityLineItem oli : oliList) { psMap.put(oli.PricebookEntryId, oli.Product_Search__r); } } // 取得原报价、报价产品 Quote quo = null; List qliList = null; Map qliMap = new Map(); Schema.DescribeSobjectResult d_quo = Quote.sObjectType.getDescribe(); Map d_quo_map = d_quo.fields.getMap(); String soql_quo = 'select '; String fields_quo = ''; for (String field : d_quo_map.keySet()) { if (fields_quo.length() > 0) { fields_quo += ', '; } fields_quo += field; } soql_quo += fields_quo; soql_quo += ' from Quote where Id = \'' + (odr.QuoteId == null ? '' : odr.QuoteId) + '\''; //List quoList = [select Id from Quote where Id = :odr.QuoteId]; List quoList = Database.query(soql_quo); if (quoList.size() > 0) { quo = quoList[0]; qliList = [select Id, Set__c, Description, Quantity, Discount, ListPrice, PricebookEntryId, QuoteId, UnitPrice, Custom_Price__c,SetName__c from QuoteLineItem where QuoteId = :odr.QuoteId]; for (QuoteLineItem qli : qliList) { qliMap.put(qli.Id, qli); } } //获取产品配套 List pSetItemList = new List(); Map> productSetMap = new Map>(); Map> set_qliMap = new Map>(); if(setIDList.size() > 0){ pSetItemList = [select id,Count__c,product__c,productSet__r.Name from productSetItem__c where productSet__c in : setIDList order by productSet__c]; for(productSetItem__c psi : pSetItemList){ if(productSetMap.size() != 0 && productSetMap.containsKey(psi.productSet__c)){ productSetMap.get(psi.productSet__r.Name).add(psi); }else{ productSetMap.put(psi.productSet__r.Name, new List()); productSetMap.get(psi.productSet__r.Name).add(psi); } } List tempList = qliMap.values(); System.debug(tempList); for(QuoteLineItem qli : tempList){ System.debug(qli.SetName__c); if(set_qliMap.size() !=0 && set_qliMap.containsKey(qli.SetName__c)){ set_qliMap.get(qli.SetName__c).add(qli); }else{ set_qliMap.put(qli.SetName__c, new List()); set_qliMap.get(qli.SetName__c).add(qli); } } } System.debug(set_qliMap); // 分割保存开始 Savepoint sp = Database.setSavepoint(); Map old = new Map(); Map newd = new Map(); Map qOld = new Map(); Map qnew = new Map(); // 跳过询价状态写入限制 StaticParameter.StageProgressBarUpdate = true; OrderDivisionController.OrderDivision = true; try { // 复制询价 Opportunity ins_opp = opp.clone(); opp.Is_Decided__c = false; if (is_IE) { Decimal tmp = opp.IE_Custom_Price__c == null ? 0 : opp.IE_Custom_Price__c * total_o / total; opp.IE_Custom_Price__c = tmp.setScale(2, System.RoundingMode.HALF_UP); tmp = opp.IE_local_cost__c == null ? 0 : opp.IE_local_cost__c * total_o / total; opp.IE_local_cost__c = tmp.setScale(2, System.RoundingMode.HALF_UP); opp.IE_ShippingHandling__c = sh_o - sh_d; System.debug(tmp+'@@@@@'+sh_d); } update opp; System.debug('=====update opp'); ins_opp.Id = null; ins_opp.SyncedQuoteId = null; ins_opp.Is_Decided__c = false; ins_opp.org_opportunity__c = opp.Id; if (is_IE) { Decimal tmp = ins_opp.IE_Custom_Price__c == null ? 0 : ins_opp.IE_Custom_Price__c * total_d / total; ins_opp.IE_Custom_Price__c = tmp.setScale(2, System.RoundingMode.HALF_UP); tmp = ins_opp.IE_local_cost__c == null ? 0 : ins_opp.IE_local_cost__c * total_d / total; ins_opp.IE_local_cost__c = tmp.setScale(2, System.RoundingMode.HALF_UP); ins_opp.IE_ShippingHandling__c = sh_d; } insert ins_opp; System.debug('=====ins_opp'); // 复制询价联系人 List ins_ocrList = new List(); for (OpportunityContactRole ocr : ocrList) { OpportunityContactRole ins_ocr = ocr.clone(); ins_ocr.Id = null; ins_ocr.OpportunityId = ins_opp.Id; ins_ocrList.add(ins_ocr); } if (ins_ocrList.size() > 0) insert ins_ocrList; System.debug('=====ins_ocrList'); // 复制报价 Quote ins_quo = null; if (quo != null) { ins_quo = quo.clone(); ins_quo.Id = null; ins_quo.OpportunityId = ins_opp.Id; ins_quo.Is_Decided__c = false; for (Integer i = 1; i < = 30; i++) { Decimal qty = (Decimal) ins_quo.get('SetQty' + i + '__c'); if (qty > 1) { ins_quo.put('SetQty' + i + '__c', 1); } } } if (ins_quo != null) insert ins_quo; System.debug('=====ins_quo'); // 如果复制报价,分割报价产品 List upd_qliList = new List(); List del_qliList = new List(); List ins_qliList = new List(); Integer setNum = 1; Integer allNum = 1; if (ins_quo != null) { Decimal oldSum = 0; Decimal newSum = 0; for (LineInfo li : lineinfo) { if(li.isSet == false){ // 全部分割 if (li.divideCnt == li.oi.Quantity) { // 删除原报价产品 QuoteLineItem del_qli = new QuoteLineItem(Id = li.oi.QuoteLineItemId); del_qliList.add(del_qli); // 全部分割到新报价 QuoteLineItem ins_qli = qliMap.get(li.oi.QuoteLineItemId).clone(); ins_qli.Id = null; ins_qli.QuoteId = ins_quo.Id; ins_qliList.add(ins_qli); newSum += ins_qli.Quantity * ins_qli.UnitPrice; // 部分分割 } else if (li.divideCnt > 0 && li.divideCnt <= li.oi.Quantity) { // 更新原报价产品数量 QuoteLineItem upd_qli = qliMap.get(li.oi.QuoteLineItemId); upd_qli.Quantity = upd_qli.Quantity - li.divideCnt; upd_qli.Custom_Price__c = upd_qli.Custom_Price__c == null ? 0 : upd_qli.Custom_Price__c * upd_qli.Quantity / (upd_qli.Quantity + li.divideCnt); upd_qliList.add(upd_qli); oldSum += upd_qli.Quantity * upd_qli.UnitPrice; // 部分分割到新报价 QuoteLineItem ins_qli = qliMap.get(li.oi.QuoteLineItemId).clone(); ins_qli.Id = null; ins_qli.QuoteId = ins_quo.Id; ins_qli.Custom_Price__c = ins_qli.Custom_Price__c * li.divideCnt / ins_qli.Quantity; ins_qli.Quantity = li.divideCnt; ins_qliList.add(ins_qli); newSum += ins_qli.Quantity * ins_qli.UnitPrice; // 未分割 } else{ // 不做处理 QuoteLineItem upd_qli = qliMap.get(li.oi.QuoteLineItemId); oldSum += upd_qli.Quantity * upd_qli.UnitPrice; } }else{ // 全部分割 if (li.divideCnt == li.dqps.DecideProductSetCount__c){ List tempList = set_qliMap.get(li.productName); System.debug(li.productName+'-----'+tempList); for(QuoteLineItem tempqli : tempList){ QuoteLineItem del_qli = new QuoteLineItem(Id = tempqli.Id); del_qliList.add(del_qli); QuoteLineItem ins_qli = qliMap.get(tempqli.Id).clone(); ins_qli.Id = null; ins_qli.SetName__c = li.productName; ins_qli.Set__c = 'set'+ (setNum>9?''+setNum:'0'+setNum); ins_qli.QuoteId = ins_quo.Id; ins_qli.SingleProduct__c = false; ins_qliList.add(ins_qli); newSum += ins_qli.Quantity * ins_qli.UnitPrice; } newd.put(setNum,li.productName); qnew.put(li.productName,li.divideCnt); setNum++; } else if (li.divideCnt > 0 && li.divideCnt <= li.dqps.DecideProductSetCount__c) { List tempList = set_qliMap.get(li.productName); System.debug(li.productName); for(QuoteLineItem tempqli : tempList){ // 更新原报价产品数量 QuoteLineItem upd_qli = qliMap.get(tempqli.Id); upd_qli.Quantity = upd_qli.Quantity - li.divideCnt; upd_qli.Custom_Price__c = upd_qli.Custom_Price__c == null ? 0 : upd_qli.Custom_Price__c * upd_qli.Quantity / (upd_qli.Quantity + li.divideCnt); upd_qli.Set__c = 'set'+ (allNum>9?''+allNum:'0'+allNum); upd_qliList.add(upd_qli); oldSum += upd_qli.Quantity * upd_qli.UnitPrice; // 部分分割到新报价 QuoteLineItem ins_qli = qliMap.get(tempqli.Id).clone(); ins_qli.Id = null; ins_qli.SingleProduct__c = false; ins_qli.SetName__c = li.productName; ins_qli.Set__c = 'set'+ (setNum>9?''+setNum:'0'+setNum); ins_qli.QuoteId = ins_quo.Id; ins_qli.Custom_Price__c = ins_qli.Custom_Price__c * li.divideCnt / ins_qli.Quantity; ins_qli.Quantity = li.divideCnt; ins_qliList.add(ins_qli); newSum += ins_qli.Quantity * ins_qli.UnitPrice; } newd.put(setNum,li.productName); qnew.put(li.productName,li.divideCnt); old.put(allNum,li.productName); qOld.put(li.productName,li.dqps.DecideProductSetCount__c-li.divideCnt); setNum++; allNum++; } else{ List tempList = set_qliMap.get(li.productName); System.debug(li.productName); for(QuoteLineItem tempqli : tempList){ QuoteLineItem upd_qli = qliMap.get(tempqli.Id); upd_qli.Set__c = 'set'+ (allNum>9?''+allNum:'0'+allNum); oldSum += upd_qli.Quantity * upd_qli.UnitPrice; } old.put(allNum,li.productName); qOld.put(li.productName,li.dqps.DecideProductSetCount__c); allNum++; } } System.debug(upd_qliList); System.debug(del_qliList); System.debug(ins_qliList); } Decimal oldCustomPrice = quo.Custom_Price_Total_Text__c == null ? 0 : quo.Custom_Price_Total_Text__c * oldSum / quo.Subtotal; Decimal newCustomPrice = quo.Custom_Price_Total_Text__c == null ? 0 : quo.Custom_Price_Total_Text__c * newSum / quo.Subtotal; if (upd_qliList.size() > 0) update upd_qliList; if (del_qliList.size() > 0) delete del_qliList; if (ins_qliList.size() > 0) insert ins_qliList; System.debug('=====ins_qliList'); for (Integer i = 1; i < = 30; i++) { if(old.containsKey(i)){ String temp = old.get(i); quo.put('SetName' + i + '__c', temp); quo.put('SetQty' + i + '__c', qOld.get(temp)); }else{ quo.put('SetName' + i + '__c', ''); quo.put('SetQty' + i + '__c', null); } if(newd.containsKey(i)){ String temp = newd.get(i); ins_quo.put('SetName' + i + '__c', temp); ins_quo.put('SetQty' + i + '__c', qnew.get(temp)); }else{ ins_quo.put('SetName' + i + '__c', ''); ins_quo.put('SetQty' + i + '__c', null); } } quo.Custom_Price_Total_Text__c = oldCustomPrice; quo.Is_Decided__c = false; update quo; ins_quo.Custom_Price_Total_Text__c = newCustomPrice; update ins_quo; System.debug('=====update quo'); ins_opp.SyncedQuoteId = ins_quo.Id; update ins_opp; System.debug('=====update ins_opp'); } else { List ins_oliList1 = new List(); List ins_oliList2 = new List(); for (LineInfo li : lineinfo) { if (li.divideCnt == li.oi.Quantity) { OpportunityLineItem ins_oli2 = new OpportunityLineItem(); ins_oli2.Description = li.oi.Description; ins_oli2.DescriptionD__c = li.oi.Description; ins_oli2.Quantity = li.divideCnt; ins_oli2.QuantityD__c = li.divideCnt; ins_oli2.PricebookEntryId = li.oi.PricebookEntryId; ins_oli2.UnitPrice = li.oi.UnitPrice; ins_oli2.UnitPriceD__c = li.oi.UnitPrice; ins_oli2.OpportunityId = ins_opp.Id; ins_oli2.IsNew__c = false; ins_oli2.Discount = ins_opp.Quote_Discount__c; ins_oli2.Product_Search__c = psMap.get(li.oi.PricebookEntryId).Id; ins_oli2.DealerSelectProduct__c = psMap.get(li.oi.PricebookEntryId).Product__c; ins_oliList2.add(ins_oli2); } else if (li.divideCnt > 0 && li.divideCnt <= li.oi.Quantity) { OpportunityLineItem ins_oli1 = new OpportunityLineItem(); ins_oli1.Description = li.oi.Description; ins_oli1.DescriptionD__c = li.oi.Description; ins_oli1.Quantity = li.oi.Quantity - li.divideCnt; ins_oli1.QuantityD__c = li.oi.Quantity - li.divideCnt; ins_oli1.PricebookEntryId = li.oi.PricebookEntryId; ins_oli1.UnitPrice = li.oi.UnitPrice; ins_oli1.UnitPriceD__c = li.oi.UnitPrice; ins_oli1.OpportunityId = opp.Id; ins_oli1.IsNew__c = false; ins_oli1.Discount = opp.Quote_Discount__c; ins_oli1.Product_Search__c = psMap.get(li.oi.PricebookEntryId).Id; ins_oli1.DealerSelectProduct__c = psMap.get(li.oi.PricebookEntryId).Product__c; ins_oliList1.add(ins_oli1); OpportunityLineItem ins_oli2 = new OpportunityLineItem(); ins_oli2.Description = li.oi.Description; ins_oli2.DescriptionD__c = li.oi.Description; ins_oli2.Quantity = li.divideCnt; ins_oli2.QuantityD__c = li.divideCnt; ins_oli2.PricebookEntryId = li.oi.PricebookEntryId; ins_oli2.UnitPrice = li.oi.UnitPrice; ins_oli2.UnitPriceD__c = li.oi.UnitPrice; ins_oli2.OpportunityId = ins_opp.Id; ins_oli2.IsNew__c = false; ins_oli2.Discount = ins_opp.Quote_Discount__c; ins_oli2.Product_Search__c = psMap.get(li.oi.PricebookEntryId).Id; ins_oli2.DealerSelectProduct__c = psMap.get(li.oi.PricebookEntryId).Product__c; ins_oliList2.add(ins_oli2); } else { OpportunityLineItem ins_oli1 = new OpportunityLineItem(); ins_oli1.Description = li.oi.Description; ins_oli1.DescriptionD__c = li.oi.Description; ins_oli1.Quantity = li.oi.Quantity; ins_oli1.QuantityD__c = li.oi.Quantity; ins_oli1.PricebookEntryId = li.oi.PricebookEntryId; ins_oli1.UnitPrice = li.oi.UnitPrice; ins_oli1.UnitPriceD__c = li.oi.UnitPrice; ins_oli1.OpportunityId = opp.Id; ins_oli1.IsNew__c = false; ins_oli1.Discount = opp.Quote_Discount__c; ins_oli1.Product_Search__c = psMap.get(li.oi.PricebookEntryId).Id; ins_oli1.DealerSelectProduct__c = psMap.get(li.oi.PricebookEntryId).Product__c; ins_oliList1.add(ins_oli1); } } if (oliList.size() > 0) delete oliList; if (ins_oliList1.size() > 0) insert ins_oliList1; if (ins_oliList2.size() > 0) insert ins_oliList2; System.debug('=====ins_oliList1'); } // 同步代理商的数量字段 List upd_oli = new List(); List oliList2 = [select Id, Quantity, QuantityD__c from OpportunityLineItem where OpportunityId = :opp.Id]; for (OpportunityLineItem oli : oliList2) { if (oli.Quantity != oli.QuantityD__c) { oli.QuantityD__c = oli.Quantity; upd_oli.add(oli); } } if (upd_oli.size() > 0) update upd_oli; System.debug('=====update upd_oli'); // 复制合同 Opportunity ins_opp_view = [select Id,Quote_Discount__c,Quote_Subtotal__c,Quote_TotalPrice__c,Quote_CustomPrice__c, SyncedQuoteId,SyncedQuote.Discount,SyncedQuote.Subtotal,SyncedQuote.TotalPrice,SyncedQuote.Custom_Price_Total__c, SyncedQuote.Custom_Price_Total_Text__c,IE_local_cost__c from Opportunity where Id = :ins_opp.Id]; Order ins_odr = odr.clone(); ins_odr.Id = null; ins_odr.OpportunityId = ins_opp.Id; if (ins_quo != null) { ins_odr.QuoteId = ins_quo.Id; } ins_odr.org_order__c = odr.Id; ins_odr.Name = null; ins_odr.ContractCode__c = null; ins_odr.Split_Approved__c = false; //ins_odr.product_approval__c = false; ins_odr.PDF_Is_True__c = false; ins_odr.Is_Already_Splited__c = true; Decimal quoteDiscount = ins_opp_view.Quote_Discount__c; ins_odr.Discount__c = quoteDiscount.setScale(4, System.RoundingMode.HALF_UP);//ins_opp_view.Quote_Discount__c; ins_odr.Discount_D__c = quoteDiscount.setScale(4, System.RoundingMode.HALF_UP); Decimal quoteSubtotal = ins_opp_view.Quote_Subtotal__c; ins_odr.Olympus_Price_BeforeDiscount__c = quoteSubtotal.setScale(2, System.RoundingMode.HALF_UP);//ins_opp_view.Quote_Subtotal__c; ins_odr.Olympus_Price_BeforeDiscount_D__c = quoteSubtotal.setScale(2, System.RoundingMode.HALF_UP); Decimal quoteTotalPrice = ins_opp_view.Quote_TotalPrice__c; if(odr.ProductSegment__c != 'NDT' && odr.ProductSegment__c != 'ANI'){ ins_odr.OlympusContractPrices__c = quoteTotalPrice.setScale(0, System.RoundingMode.HALF_UP);//ins_opp_view.Quote_TotalPrice__c; ins_odr.OlympusContractPricesD__c = quoteTotalPrice.setScale(0, System.RoundingMode.HALF_UP); }else{ ins_odr.OlympusContractPrices__c = quoteTotalPrice;//ins_opp_view.Quote_TotalPrice__c; ins_odr.OlympusContractPricesD__c = quoteTotalPrice; } Decimal quoteCustomPrice = ins_opp_view.Quote_CustomPrice__c; ins_odr.CustomerContractPrice__c = quoteCustomPrice.setScale(2, System.RoundingMode.HALF_UP);//ins_opp_view.Quote_CustomPrice__c; ins_odr.CustomerContractPriceD__c = quoteCustomPrice.setScale(2, System.RoundingMode.HALF_UP); if (is_IE) { Decimal oppCost = ins_opp_view.IE_local_cost__c == null ? 0 : ins_opp_view.IE_local_cost__c; ins_odr.Cost__c = oppCost.setScale(2, System.RoundingMode.HALF_UP); ins_odr.Cost_D__c = oppCost.setScale(2, System.RoundingMode.HALF_UP); } if (ins_odr.ApproveStatus__c == 'Submit') { ins_odr.ApproveStatus__c = 'Draft'; } else if (ins_odr.ApproveStatus__c == 'OrderSubmit') { ins_odr.ApproveStatus__c = 'OrderDraft'; } else { // 保持状态 } ins_odr.IsUpload__c = false; insert ins_odr; System.debug('=====ins_odr'); List upd_oiList = new List(); List del_oiList = new List(); //List ins_oiList = new List(); if(odr.ProductSegment__c == 'BS'){ List tempList = [select Id, QuoteId, Description, Quantity, PricebookEntryId, UnitPrice from QuoteLineItem where QuoteId = :quo.Id]; for( QuoteLineItem qli : tempList){ OrderItem oi = new OrderItem(); oi.Description = qli.Description; oi.Quantity = qli.Quantity; oi.PricebookEntryId = qli.PricebookEntryId; oi.UnitPrice = qli.UnitPrice; oi.OrderId = odr.Id; oi.QuoteLineItemId = qli.Id; upd_oiList.add(oi); } del_oiList = [select Id from OrderItem where OrderId = :odr.Id]; }else{ for (LineInfo li : lineinfo) { if (li.divideCnt == li.oi.Quantity) { // OrderItem del_oi = new OrderItem(Id = li.oi.Id); del_oiList.add(del_oi); // /*OrderItem ins_oi = li.oi.clone(); ins_oi.Id = null; ins_oi.OrderId = ins_odr.Id; ins_oiList.add(ins_oi);*/ } else if (li.divideCnt > 0 && li.divideCnt <= li.oi.Quantity) { // OrderItem upd_oi = li.oi; upd_oi.Quantity = upd_oi.Quantity - li.divideCnt; upd_oiList.add(upd_oi); // /*OrderItem ins_oi = li.oi.clone(); ins_oi.Id = null; ins_oi.OrderId = ins_odr.Id; ins_oi.Quantity = li.divideCnt; ins_oiList.add(ins_oi);*/ } else { // 不做处理 } } } List del_dqpList = new List(); List ins_dqpList = new List(); List upd_dqpList = new List(); for (LineInfo li : lineinfo) { if(li.isSet == true){ // 全部分割 if (li.divideCnt == li.dqps.DecideProductSetCount__c) { // 删除原报价产品 DecideQuoteProductSet__c del_dqp = new DecideQuoteProductSet__c(Id = li.dqps.Id); del_dqpList.add(del_dqp); // 全部分割到新报价 DecideQuoteProductSet__c ins_dqp = li.dqps.clone(); ins_dqp.Id = null; ins_dqp.DecideQuote__c = ins_quo.Id; ins_dqp.DecideOrder__c = ins_odr.Id; ins_dqp.DecideOpportunity__c = ins_opp.Id; ins_dqpList.add(ins_dqp); // 部分分割 } else if (li.divideCnt > 0 && li.divideCnt <= li.dqps.DecideProductSetCount__c) { // 更新原报价产品数量 DecideQuoteProductSet__c upd_dqp = li.dqps; upd_dqp.DecideProductSetCount__c = upd_dqp.DecideProductSetCount__c - li.divideCnt; upd_dqp.DecideProductSetTotalprice__c = upd_dqp.DecideProductSetUnivalence__c * upd_dqp.DecideProductSetCount__c; upd_dqpList.add(upd_dqp); // 部分分割到新报价 DecideQuoteProductSet__c ins_dqp = li.dqps.clone(); ins_dqp.Id = null; ins_dqp.DecideQuote__c = ins_quo.Id; ins_dqp.DecideOrder__c = ins_odr.Id; ins_dqp.DecideOpportunity__c = ins_opp.Id; ins_dqp.DecideProductSetCount__c = li.divideCnt; ins_dqp.DecideProductSetTotalprice__c = ins_dqp.DecideProductSetUnivalence__c * ins_dqp.DecideProductSetCount__c; ins_dqpList.add(ins_dqp); // 未分割 } else{ // 不做处理 } } } System.debug(ins_dqpList); System.debug(upd_dqpList); System.debug(del_dqpList); if(ins_dqpList.size() > 0 ) insert ins_dqpList; if(upd_dqpList.size() > 0 ) update upd_dqpList; if(del_dqpList.size() > 0 ) delete del_dqpList; /* if (upd_oiList.size() > 0) update upd_oiList; if (del_oiList.size() > 0) delete del_oiList; //if (ins_oiList.size() > 0) insert ins_oiList; System.debug('=====ins_oiList');*/ Opportunity opp_view = [select Id,Quote_Discount__c,Quote_Subtotal__c,Quote_TotalPrice__c,Quote_CustomPrice__c,IE_local_cost__c from Opportunity where Id = :opp.Id]; odr.Split_Approved__c = false; //odr.product_approval__c = false; odr.PDF_Is_True__c = false; odr.Is_Already_Splited__c = true; Decimal quoteDiscount1 = opp_view.Quote_Discount__c; odr.Discount__c = quoteDiscount1.setScale(4, System.RoundingMode.HALF_UP);//opp_view.Quote_Discount__c; odr.Discount_D__c = quoteDiscount1.setScale(4, System.RoundingMode.HALF_UP); Decimal quoteSubtotal1 = opp_view.Quote_Subtotal__c; odr.Olympus_Price_BeforeDiscount__c = quoteSubtotal1.setScale(2, System.RoundingMode.HALF_UP);//opp_view.Quote_Subtotal__c; odr.Olympus_Price_BeforeDiscount_D__c = quoteSubtotal1.setScale(2, System.RoundingMode.HALF_UP); Decimal quoteTotalPrice1 = opp_view.Quote_TotalPrice__c; if(odr.ProductSegment__c != 'NDT' && odr.ProductSegment__c != 'ANI'){ odr.OlympusContractPrices__c = quoteTotalPrice1.setScale(0, System.RoundingMode.HALF_UP);//opp_view.Quote_TotalPrice__c; odr.OlympusContractPricesD__c = quoteTotalPrice1.setScale(0, System.RoundingMode.HALF_UP); }else{ odr.OlympusContractPrices__c = quoteTotalPrice1;//opp_view.Quote_TotalPrice__c; odr.OlympusContractPricesD__c = quoteTotalPrice1; } Decimal quoteCustomPrice1 = opp_view.Quote_CustomPrice__c; odr.CustomerContractPrice__c = quoteCustomPrice1.setScale(2, System.RoundingMode.HALF_UP);//opp_view.Quote_CustomPrice__c; odr.CustomerContractPriceD__c = quoteCustomPrice1.setScale(2, System.RoundingMode.HALF_UP); if (is_IE) { Decimal oppCost = opp_view.IE_local_cost__c == null ? 0 : opp_view.IE_local_cost__c; odr.Cost__c = oppCost.setScale(2, System.RoundingMode.HALF_UP); odr.Cost_D__c = oppCost.setScale(2, System.RoundingMode.HALF_UP); } if (odr.ApproveStatus__c == 'Submit') { odr.ApproveStatus__c = 'Draft'; } else if (odr.ApproveStatus__c == 'OrderSubmit') { odr.ApproveStatus__c = 'OrderDraft'; } else { // 保持状态 } update odr; System.debug('=====update odr'); if (upd_oiList.size() > 0 && odr.ProductSegment__c == 'BS'){ System.debug('upd_oilist' + upd_oiList); insert upd_oiList; }else if(upd_oiList.size() > 0) { update upd_oiList; } if (del_oiList.size() > 0) delete del_oiList; //if (ins_oiList.size() > 0) insert ins_oiList; System.debug('=====ins_oiList'); //OrderWebService.updItems(odr.OpportunityId, odr.Id); //王鹏伟 开始 合同分割同步分割贸易管理客户申请表 if(ins_odr!=null && ins_odr.Id!=null){ Schema.DescribeSobjectResult tradeFields = TradeCustomerManager__c.sObjectType.getDescribe(); Map tradeFields_map = tradeFields.fields.getMap(); String tradeList_sql = 'select '; String fields_trade = ''; for (String field : tradeFields_map.keySet()) { if (fields_trade.length() > 0) { fields_trade += ', '; } fields_trade += field; } tradeList_sql += fields_trade; tradeList_sql += ' from TradeCustomerManager__c where order__c = \'' + odr.Id + '\''; List tradeList = Database.query(tradeList_sql); if(tradeList!=null && tradeList.size()!=0){ TradeCustomerManager__c newTrade = tradeList[0].clone(); newTrade.Id = null; newTrade.OrderIdSave__c = ins_odr.Id; newTrade.order__c = ins_odr.Id; insert newTrade; } } //王鹏伟 结束 String url = baseUrl; url += '\\' + ins_odr.Id; return new Pagereference(url); //Database.rollback(sp); //return null; } catch (Exception ex) { Database.rollback(sp); System.debug('=====Exception:' + ex.getMessage() + ' | Line:' + ex.getLineNumber()); ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, ex.getMessage() + ' | Line:' + ex.getLineNumber())); return null; } return null; } public static Boolean IfspecialDealer(String oppDealerId) { if (String.isBlank(oppDealerId)) { return false; } return StaticParameter.specialDealerMap.containsKey(oppDealerId.substring(0, 15)) && UserInfo.getUserType() == 'PowerPartner'; } public PageReference BackBtn() { String url = baseUrl; if (rtUrl != null && rtUrl.length() > 0) { url += rtUrl.replace('/production', ''); } else { url += '\\' + odrId; } return new Pagereference(url); } public class LineInfo { public Integer lineNo { get; set; } public String productName { get; set; } public String ProductCode { get; set; } public String ECCode { get; set; } public OrderItem oi { get; set; } public Integer divideCnt { get; set; } //产品配套 public DecideQuoteProductSet__c dqps {get; set; } public Boolean isSet {get; set;} public LineInfo(Integer in_i, OrderItem in_oi) { lineNo = in_i; productName = in_oi.PricebookEntry.Product2.Name; ProductCode = in_oi.PricebookEntry.Product2.ProductCode; ECCode = in_oi.PricebookEntry.Product2.Product_ECCode__c; oi = in_oi; divideCnt = 0; isSet = false; } public LineInfo(Integer in_i,DecideQuoteProductSet__c in_dqps){ lineNo = in_i; productName = in_dqps.DecideProductSetName__c; ProductCode = in_dqps.DecideProductSetCode__c; ECCode = ''; dqps = in_dqps; divideCnt = 0; isSet = true; } } private void tes(){ Integer i = 0; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; } }