高章伟
2023-03-03 d8dc84a3d56df839895f1c417a4d9cbee763d262
force-app/main/default/classes/QuoteTrialController.cls
@@ -20,8 +20,8 @@
          Map<String,QuoteLineItem> map1 = new Map<String,QuoteLineItem>();
          string sql = 'select ';
          String props = CommonUtils.GetSqlToPorps(QuoteLineItem.SObjectType);
          sql += props;
          sql +=' ,Product2.Intra_Trade_List_RMB__c,Product2.Intra_Trade_Service_RMB__c,Product2.Foreign_Trade_List_US__c,Product2.NoDiscount_Foreign__c,Product2.MDM_Model_No__c ';
          sql += props;//SWAG-CFZAKE【委托】报价计算二期 fy start Product2.Dealer_Object__c,Product2.ENG_DeaerProFlag__c
          sql +=' ,Product2.Intra_Trade_List_RMB__c,Product2.Intra_Trade_Service_RMB__c,Product2.Foreign_Trade_List_US__c,Product2.NoDiscount_Foreign__c,Product2.MDM_Model_No__c,Product2.Dealer_Object__c,Product2.ENG_DeaerProFlag__c ';
          sql += ' from QuoteLineItem where Quoteid = :IdParam ';
          List<QuoteLineItem> arrays = Database.query(sql);
          for(QuoteLineItem pspsc :arrays){
@@ -69,11 +69,63 @@
    public  static string GetPromotionPromotionSearch(Integer page, Integer pageLimit,String search,String sortOrder,String sortPlus) {
     QuoteTrialService dao =  new QuoteTrialService();
       String[] arrTest = new String[] {'PromotionNo__cEqual','NameLike'}; 
       PagePlus pages = dao.GetPromotionPromotionSearchFn(page,pageLimit,search,sortOrder,sortPlus,arrTest);
       PagePlus pages = dao.GetPromotionPromotionSearchFn(page,pageLimit,search,sortOrder,sortPlus,arrTest);
       //SWAG-CFZAKE【委托】报价计算二期 fy start
       List<SObject> pagesRecordsList = pages.getRecords();
       pagesRecordsList=screenPromotionHeadc(pagesRecordsList);
       pages.setRecords(pagesRecordsList);
       //SWAG-CFZAKE【委托】报价计算二期 fy end
       return JSON.serialize(pages);
     // return DataBasePlus.Mysql;
    }
    //SWAG-CFZAKE【委托】报价计算二期 fy start
    //筛选促销方案方法
    public static List<SObject> screenPromotionHeadc(List<SObject> pagesRecordsList){
          List<Id> PromotionHeadIdList=new List<Id>();
          // List<SObject> pagesRecordsList = pages.getRecords();
          for(SObject item:pagesRecordsList){
          PromotionHeadIdList.add(item.Id);
          }
          List<PromotionProduct__c> PromotionProductList=[select Id,Asset_Model_No__c,PromotionHead__c from PromotionProduct__c where PromotionHead__c in:PromotionHeadIdList ];
          system.debug('测试报价计算二期1==='+PromotionProductList);
          List<String> PromotionProductIdList=new List<String>();
          Map<String,List<Id>> PromotionProductMap = new Map<String,List<Id>>();
          for(PromotionProduct__c item2:PromotionProductList){
          PromotionProductIdList.add(item2.Asset_Model_No__c);
          if(PromotionProductMap.containsKey(item2.Asset_Model_No__c)){
               List<Id> prodh2 = new List<Id>();
               prodh2 = PromotionProductMap.get(item2.Asset_Model_No__c);
               prodh2.add(item2.PromotionHead__c);
               PromotionProductMap.put(item2.Asset_Model_No__c, prodh2);
          }else{
               List<Id> prodh = new List<Id>();
               prodh.add(item2.PromotionHead__c);
               PromotionProductMap.put(item2.Asset_Model_No__c, prodh);
          }
          }
          List<Product2> Product2List=[select Id,MDM_Model_No__c,Dealer_Object__c from Product2 where MDM_Model_No__c in:PromotionProductIdList ];
          Set<Id> PromotionHeadMatchingSet = new Set<Id>();
          for(Product2 item3:Product2List){
               if(item3.Dealer_Object__c){
               if(PromotionProductMap.containsKey(item3.MDM_Model_No__c)){
                    List<Id> prodh3 = new List<Id>();
                    prodh3 = PromotionProductMap.get(item3.MDM_Model_No__c);
                    for(Id PromoID :prodh3){
                         PromotionHeadMatchingSet.add(PromoID);
                    }
               }
               }
          }
          List<SObject> pagesRecordsList2 = new List<SObject>();
          for(SObject item4:pagesRecordsList){
          if(!PromotionHeadMatchingSet.contains(item4.Id)){
               pagesRecordsList2.add(item4);
          }
          }
          // pages.setRecords(pagesRecordsList2);
          return pagesRecordsList2;
    }
    //SWAG-CFZAKE【委托】报价计算二期 fy end
   //获取 固定资产 
//    @AuraEnabled
//    public static  List<PromotionHead__c>  GetPromotionNormalProduct() {
@@ -92,12 +144,19 @@
       String[] arrTest = new String[] {'PromotionNo__cEqual','NameLike'}; 
       PagePlus pages = dao.GetNormalProductSearchFn(page,pageLimit,search,sortOrder,sortPlus,arrTest);  
     //   pages=screenPromotionHeadc(pages);
       //SWAG-CFZAKE【委托】报价计算二期 fy start
       List<SObject> pagesRecordsList = pages.getRecords();
       pagesRecordsList=screenPromotionHeadc(pagesRecordsList);
       pages.setRecords(pagesRecordsList);
       //SWAG-CFZAKE【委托】报价计算二期 fy end
       
       QueryWrapper query = new QueryWrapper(PromotionHead__c.SObjectType);
       query.eq('recordtype.developername', 'NormalProduct');
       List<PromotionHead__c> arrays = DataBasePlus.listPlus(query);
      //SWAG-CFZAKE【委托】报价计算二期 fy start
      arrays=screenPromotionHeadc(arrays);
      //SWAG-CFZAKE【委托】报价计算二期 fy end
       return JSON.serialize(pages) + '--' + JSON.serialize(arrays);
     // return DataBasePlus.Mysql;
    }
@@ -386,13 +445,22 @@
           if(psp!=null){
               insert psp ;
           }
               Quote quote = new Quote();
               // SWAG-CCY65A 2022-04-19 ssm start
               // 在报价计算保存之后,按照报价上的保存逻辑给报价行和询价产品行重新计算一次预测金额
               // Quote quote = new Quote();
               // quote.Id=QuoteId;
               Quote quote = [select Id,
                                   TotalPrice__c,                   // 总价
                                   Estimation_List_Price__c,        // 标准List价格
                                   MultiYearWarrantyTotalPrice__c   // 多年保合计
                              from Quote where Id = :QuoteId];
               quote.OCM_Sales_Forecast__c=ContractPrice;
               System.debug('quote:' + quote);
               Opportunity opportunity = new Opportunity();
               opportunity.Id=OpportunityId;
               System.debug('OpportunityId==='+OpportunityId);
               quote.Id=QuoteId;
               quote.OCM_Sales_Forecast__c=ContractPrice;
               opportunity.Wholesale_Price__c=ContractPrice;
               System.debug('opportunity:'+opportunity);
               if(SalesRootc.equals('販売店')){
                    //赋值给下面的 合同金额 并置灰不可编辑
                    quote.OCM_Agent1_Price_Page__c=ContractPrice;
@@ -420,6 +488,79 @@
               if(opportunity!=null){
                    update opportunity;
               }
               // 更新报价行和询价产品行
               //OCM売上予測金額(税込) = OCM成約予測金額(税込み) * (小計 / 見積合計)
               System.debug('opportunity.Wholesale_Price__c != null: ' + (opportunity.Wholesale_Price__c != null));
               System.debug('quote.TotalPrice__c  != null: ' + (quote.TotalPrice__c  != null));
               System.debug('quote.TotalPrice__c  > 0: ' + (quote.TotalPrice__c  > 0));
               System.debug('quote:' + quote);
               System.debug('update flag:' + (opportunity.Wholesale_Price__c != null && quote.TotalPrice__c  != null && quote.TotalPrice__c  > 0));
               if (opportunity.Wholesale_Price__c != null && quote.TotalPrice__c  != null && quote.TotalPrice__c  > 0) {
                    System.debug('进入更新行项目操作');
                    // 获取报价行并重新计算报价行的预测金额
                    List<QuoteLineItem> quo_lines = [SELECT
                                                  Id,
                                                  TotalPrice__c,          // 总计 ((最新产品定价 + NoDiscount) * 数量)
                                                  OCM_Sales_Forecast__c,  // OCSM売上予測金額(税込み)
                                                  AgencySubtotal__c,      // 经销商小计
                                                  AgencyUnitPrice__c,     // 经销商单价
                                                  GuranteePrice__c,       // 计提金额
                                                  Product_ListPrice__c,   // 最新产品定价
                                                  NoDiscountTotal__c,     // NoDiscount小计
                                                  Quantity                // 数量
                                                FROM
                                                  QuoteLineItem
                                                WHERE
                                                  QuoteId = :quote.Id
                                                AND
                                                  TotalPrice__c > 0];
                    System.debug('quo_lines:' + quo_lines);
                    if (quo_lines != null && quo_lines.size() > 0) {
                         // 更新报价行上的各种值
                         for(QuoteLineItem item : quo_lines) {
                              // 预测成交金额 = 合同总金额 * (行总价 / 报价总价)
                              item.OCM_Sales_Forecast__c = opportunity.Wholesale_Price__c * (item.TotalPrice__c / quote.TotalPrice__c);
                              // 经销商小计 = (合同总金额 - 多年保合计) * (行最新定价总金额 / 标准定价总额) + NoDiscount小计
                              Decimal NoDiscountTotal = item.NoDiscountTotal__c != null ? item.NoDiscountTotal__c : 0;
                              item.AgencySubtotal__c = (opportunity.Wholesale_Price__c - quote.MultiYearWarrantyTotalPrice__c) * (item.Product_ListPrice__c * item.Quantity / quote.Estimation_List_Price__c) + NoDiscountTotal;
                              // 经销商单价 = 经销商小计 / 数量
                              item.AgencyUnitPrice__c = item.Quantity > 0 ? item.AgencySubtotal__c / item.Quantity : item.AgencyUnitPrice__c;
                         }
                         update quo_lines;
                    }
                    // 获取询价产品行并重新计算预测金额
                    List<OpportunityLineItem> opp_lines = [SELECT
                                                  Id,
                                                  TotalPrice__c,             // 总计
                                                  ListPrice_total_price__c,  // 最新ListPrice总额(不含NoDiscount的金额)
                                                  OCM_Sales_Forecast__c,     // OCSM预测成交金额
                                                  AgencySubtotal__c,         // 经销商小计
                                                  AgencyUnitPrice__c,        // 经销商单价
                                                  GuranteePriceSum__c,       // 计提金额合计
                                                  NoDiscountTotal__c,        // NoDiscount小计
                                                  Quantity                   // 数量
                                                FROM
                                                  OpportunityLineItem
                                                WHERE
                                                  OpportunityId = :opportunity.Id
                                                AND
                                                  TotalPrice__c > 0];
                    System.debug('opp_lines:' + opp_lines);
                    if (opp_lines != null && opp_lines.size() > 0) {
                         // 再更新询价行上的各种值
                         for (OpportunityLineItem item : opp_lines) {
                              // 预测成交金额 = 合同总金额 * (行总价 / 报价总价)
                              item.OCM_Sales_Forecast__c = opportunity.Wholesale_Price__c * (item.TotalPrice__c / quote.TotalPrice__c);
                              // 经销商小计 = (合同总金额 - 多年保合计) * (行最新定价总金额 / 标准定价总额) + NoDiscount小计
                              Decimal NoDiscountTotal = item.NoDiscountTotal__c != null ? item.NoDiscountTotal__c : 0;
                              item.AgencySubtotal__c = (opportunity.Wholesale_Price__c - quote.MultiYearWarrantyTotalPrice__c) * (item.ListPrice_total_price__c / quote.Estimation_List_Price__c) + NoDiscountTotal;
                              // 经销商单价 = 经销商小计 / 数量
                              item.AgencyUnitPrice__c = item.Quantity > 0 ? item.AgencySubtotal__c / item.Quantity : item.AgencyUnitPrice__c;
                         }
                         update opp_lines;
                    }
               }
               // SWAG-CCY65A 2022-04-19 ssm end
           System.debug('psp'+psp);
          //  String TempStr = Json.serialize(goodsList);
          // return TempStr;