19626
2023-09-13 196df4d4bf1941546d349cadbf343655578ec280
force-app/main/default/classes/PCLLostReportController.cls
@@ -19,645 +19,713 @@
   public integer topNum {get; set;}
   public integer secondNum {get; set;}
   // add tcm 20211122 end
   public Decimal InclusionUltrasound {get; set;}     //20230506 lt DB202304618804  包含超声 add
   // 竞争对手对照关系表,key是品牌名字,value是ID
   public map<string,id> CompetitionMap;
   public PCLLostReportController(ApexPages.StandardController controller) {
      this();
     this();
   }
   public PCLLostReportController(){
      oppId =
         ApexPages.currentPage().getParameters().get('oppId') == null ? ''
         : ApexPages.currentPage().getParameters().get('oppId');
      lostReportId =
         ApexPages.currentPage().getParameters().get('Id') == null ? ''
         : ApexPages.currentPage().getParameters().get('Id');
      pageStatus =
         ApexPages.currentPage().getParameters().get('pageStatus') == null ? ''
         : ApexPages.currentPage().getParameters().get('pageStatus');
      lostType =
         ApexPages.currentPage().getParameters().get('lostType') == null ? ''
         : ApexPages.currentPage().getParameters().get('lostType');
      submitFlag = ApexPages.currentPage().getParameters().get('submitFlag') == null ? ''
          : ApexPages.currentPage().getParameters().get('submitFlag');
     oppId =
      ApexPages.currentPage().getParameters().get('oppId') == null ? ''
      : ApexPages.currentPage().getParameters().get('oppId');
     lostReportId =
      ApexPages.currentPage().getParameters().get('Id') == null ? ''
      : ApexPages.currentPage().getParameters().get('Id');
     pageStatus =
      ApexPages.currentPage().getParameters().get('pageStatus') == null ? ''
      : ApexPages.currentPage().getParameters().get('pageStatus');
     lostType =
      ApexPages.currentPage().getParameters().get('lostType') == null ? ''
      : ApexPages.currentPage().getParameters().get('lostType');
     submitFlag = ApexPages.currentPage().getParameters().get('submitFlag') == null ? ''
        : ApexPages.currentPage().getParameters().get('submitFlag');
   }
   // 初始化
   public void init(){
      if(string.isblank(pageStatus)) {
         ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '页面出错,请刷新后重试!'));
         // 这里需要报错没有传参数
         return;
     if(string.isblank(pageStatus)) {
      ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '页面出错,请刷新后重试!'));
      // 这里需要报错没有传参数
      return;
     }
     else if(pageStatus.equals('Create')) {
      if(string.isBlank(oppId)) {
        // 这里报错创建时候必须有询价
        ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '创建失单报告时,请重询价页面创建'));
        return;
      }
      else if(pageStatus.equals('Create')) {
         if(string.isBlank(oppId)) {
            // 这里报错创建时候必须有询价
            ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '创建失单报告时,请重询价页面创建'));
            return;
         }
         list<opportunity> opplist =
         [select id,Name,
          Sales_assistant_ID__c,
          Sales_manager_departmentID__c,Sales_owner_buchangID__c
          from opportunity
          where id =: oppId
                     limit 1];
         if( opplist.size() == 0) {
            ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '您没有询价的查看权限,无法创建失单报告!'));
            pageStatus = null;
            return;
         }
         Schema.DescribeSObjectResult s = Lost_cancel_report__c.sObjectType.getDescribe();
         if( !s.isCreateable()) {
            ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '您不能创建失单/部分失单报告!'));
            return;
         }
         Lost_cancel_report__c tempLostReport =
            new Lost_cancel_report__c(LostType__c= lostType,
                                      Opportunity__c = oppId,
                                      Sales_assistant__c = opplist[0].Sales_assistant_ID__c,
                                      Manager_sales__c = opplist[0].Sales_manager_departmentID__c,
                                      Buchang_sales__c = opplist[0].Sales_owner_buchangID__c,
                                      Submit_Day__c = date.today(),
                                      Report_Status__c = '草案');
         LostReport = new LostReport(tempLostReport);
         brandCount = 1;
      list<opportunity> opplist =
      [select id,Name,
       Sales_assistant_ID__c,
       Sales_manager_departmentID__c,Sales_owner_buchangID__c
       from opportunity
       where id =: oppId
               limit 1];
      if( opplist.size() == 0) {
        ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '您没有询价的查看权限,无法创建失单报告!'));
        pageStatus = null;
        return;
      }
      else if(pageStatus.equals('View') ||  pageStatus.equals('Edit')) {
         system.debug('edit1');
         if(string.isBlank(lostReportId)) {
            ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '您没有查看这个失单/部分失单报告的权限!'));
            pageStatus = null;
            return;
         }
         system.debug('edit2');
         list<Lost_cancel_report__c> lostReportList =
         [select id,of_lost_system_processor__c,
          Lost_reason_main__c,
          Lost_Reason_Sub__c,Lost_By_Company__c,
          LostTotalAmount__c,LostType__c,
          Report_Status__c,Sales_assistant__c,
          Opportunity__c, Opportunity__r.Sales_assistant_ID__c,
          Opportunity__r.Sales_manager_departmentID__c,
          Manager_sales__c,recordtypeid,recordtype.DeveloperName
          from Lost_cancel_report__c
          where id =: lostReportId limit 1];
         if(lostReportList.size() == 0) {
            ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '您没有查看这个失单/部分失单报告的权限!'));
            pageStatus = null;
            return;
         }
         lostReportList[0].Sales_assistant__c =
            lostReportList[0].Opportunity__r.Sales_assistant_ID__c;
         lostReportList[0].Manager_sales__c =
            lostReportList[0].Opportunity__r.Sales_manager_departmentID__c;
         if(lostReportList[0].recordtype.DeveloperName.equals('PCL_Lost_report')) {
            lostReportList[0].LostType__c ='失单';
         }else if(lostReportList[0].recordtype.DeveloperName.equals('PCL_PartLost_report')) {
            lostReportList[0].LostType__c ='部分失单';
         }
         // 权限,如果当前状态不是草案中,那么需要跳转到只读页面
         if(!'草案'.equals(lostReportList[0].Report_Status__c) && userinfo.getProfileId() != (ID) '00e10000000Y3o5AAC') {
            pageStatus = 'View';
         }
         oppId = lostReportList[0].Opportunity__c;
         system.debug('edit3');
         list<PCLLostBrand__c> selectlostBrandList =
         [
            select id, LostPrice__c, Lost_By_Company__c,
            Lost_reason_main__c,Lost_Reason_Sub__c,Name,Agency__c, AgencyMannual__c,
            // ProductCategory__c,ProductClass__c,
            Lost_cancel_report__c,Lost_By_Company_Mannual__c,
            ( select id,PCLLostBrand__c,LostProduct__c,
              LostProductMannual__c,            //SWAG-C6P9PX lt 20210913 add
              ProductCategory__c,ProductClass__c, //add tcm 20211123
              Quantity__c,Name, LostBrandName__c
              from PCLLostBrand__c.PCLLostBrandProduct__r)
            from PCLLostBrand__c
            where Lost_cancel_report__c =: lostReportId
         ];
         if(selectlostBrandList.size() == 0 ) {
            LostReport = new LostReport(lostReportList[0]);
            brandCount = 1;
         }else{
            system.debug('edit4:'+selectlostBrandList[0]);
            brandCount = 0;
            list<LostBrand> LostBrandList = new list<LostBrand>();
            for(PCLLostBrand__c templostBrand : selectlostBrandList) {
               list<PCLLostProducts> tempProductList = new list<PCLLostProducts>();
               integer productCount = 0;
               system.debug('check products:'+ (templostBrand.PCLLostBrandProduct__r != null) + '|' + (templostBrand.PCLLostBrandProduct__r.size() > 0));
               if (templostBrand.PCLLostBrandProduct__r != null && templostBrand.PCLLostBrandProduct__r.size() > 0) {
                  for( PCLLostProduct__c tempProduct: templostBrand.PCLLostBrandProduct__r) {
                     tempProductList.add(new PCLLostProducts(productCount,tempProduct));
                     productCount++;
                  }
               } else {
                  PCLLostProducts newProduct = new PCLLostProducts();
                  if ('其他'.equals(templostBrand.Lost_By_Company__c) &&
                     templostBrand.Lost_By_Company_Mannual__c != null &&
                     !''.equals(templostBrand.Lost_By_Company_Mannual__c)) {
                        newProduct.LostProductss.LostBrandName__c = templostBrand.Lost_By_Company_Mannual__c;
                     } else {
                        newProduct.LostProductss.LostBrandName__c = templostBrand.Lost_By_Company__c;
                     }
                     system.debug('aaa4+++'+templostBrand.Lost_By_Company_Mannual__c);
                  tempProductList.add(newProduct);
                  productCount++;
               }
               LostBrandList.add( new LostBrand(brandCount,tempProductList, templostBrand));
               brandCount++;
      Schema.DescribeSObjectResult s = Lost_cancel_report__c.sObjectType.getDescribe();
      if( !s.isCreateable()) {
        ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '您不能创建失单/部分失单报告!'));
        return;
      }
      Lost_cancel_report__c tempLostReport =
        new Lost_cancel_report__c(LostType__c= lostType,
                           Opportunity__c = oppId,
                           Sales_assistant__c = opplist[0].Sales_assistant_ID__c,
                           Manager_sales__c = opplist[0].Sales_manager_departmentID__c,
                           Buchang_sales__c = opplist[0].Sales_owner_buchangID__c,
                           Submit_Day__c = date.today(),
                           Report_Status__c = '草案');
      LostReport = new LostReport(tempLostReport);
      brandCount = 1;
     }
     else if(pageStatus.equals('View') ||  pageStatus.equals('Edit')) {
      system.debug('edit1');
      if(string.isBlank(lostReportId)) {
        ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '您没有查看这个失单/部分失单报告的权限!'));
        pageStatus = null;
        return;
      }
      system.debug('edit2');
      list<Lost_cancel_report__c> lostReportList =
      [select id,of_lost_system_processor__c,
       Lost_reason_main__c,
       Lost_Reason_Sub__c,Lost_By_Company__c,
       LostTotalAmount__c,LostType__c,
       TotalAmountLost__c, //20230215 lt DB202302247719
       InclusionUltrasound__c, //20230506 lt DB202304618804  包含超声
       ModifyAfterApproval__c,Approved_Day__c,//20230814 lt DB202308068183 失单报告审批节点增加助理审批节点 add
       Report_Status__c,Sales_assistant__c,
       Opportunity__c, Opportunity__r.Sales_assistant_ID__c,
       Opportunity__r.Sales_manager_departmentID__c,
       Manager_sales__c,recordtypeid,recordtype.DeveloperName
       from Lost_cancel_report__c
       where id =: lostReportId limit 1];
      if(lostReportList.size() == 0) {
        ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '您没有查看这个失单/部分失单报告的权限!'));
        pageStatus = null;
        return;
      }
      InclusionUltrasound = lostReportList[0].InclusionUltrasound__c; //20230506 lt DB202304618804  包含超声
      lostReportList[0].Sales_assistant__c =
        lostReportList[0].Opportunity__r.Sales_assistant_ID__c;
      lostReportList[0].Manager_sales__c =
        lostReportList[0].Opportunity__r.Sales_manager_departmentID__c;
      if(lostReportList[0].recordtype.DeveloperName.equals('PCL_Lost_report')) {
        lostReportList[0].LostType__c ='失单';
      }else if(lostReportList[0].recordtype.DeveloperName.equals('PCL_PartLost_report')) {
        lostReportList[0].LostType__c ='部分失单';
      }
      // 权限,如果当前状态不是草案中,那么需要跳转到只读页面
      // 20230814 lt DB202308068183 失单报告审批节点增加助理审批节点 strat 改if条件
      //原:!'草案'.equals(lostReportList[0].Report_Status__c) && userinfo.getProfileId() != (ID) '00e10000000Y3o5AAC'
      if(
         !('草案'.equals(lostReportList[0].Report_Status__c)
         || userinfo.getProfileId() == (ID) '00e10000000Y3o5AAC'
         ||('批准'.equals(lostReportList[0].Report_Status__c) &&
            System.Label.PCLReportProfileId.contains(userinfo.getProfileId()))
         )
        ) {
      // 20230814 lt DB202308068183 失单报告审批节点增加助理审批节点 end 改if条件
        pageStatus = 'View';
      }
      oppId = lostReportList[0].Opportunity__c;
      system.debug('edit3');
      list<PCLLostBrand__c> selectlostBrandList =
      [
        select id, LostPrice__c, Lost_By_Company__c,
        LostPrices_ThousandY__c,  //20230215 lt DB202302247719
        Lost_reason_main__c,Lost_Reason_Sub__c,Name,Agency__c, AgencyMannual__c,
        // ProductCategory__c,ProductClass__c,
        Lost_cancel_report__c,Lost_By_Company_Mannual__c,
        ( select id,PCLLostBrand__c,LostProduct__c,
         LostProductMannual__c,            //SWAG-C6P9PX lt 20210913 add
         ProductCategory__c,ProductClass__c, //add tcm 20211123
         Quantity__c,Name, LostBrandName__c
         from PCLLostBrand__c.PCLLostBrandProduct__r)
        from PCLLostBrand__c
        where Lost_cancel_report__c =: lostReportId
      ];
      if(selectlostBrandList.size() == 0 ) {
        LostReport = new LostReport(lostReportList[0]);
        brandCount = 1;
      }else{
        system.debug('edit4:'+selectlostBrandList[0]);
        brandCount = 0;
        list<LostBrand> LostBrandList = new list<LostBrand>();
        for(PCLLostBrand__c templostBrand : selectlostBrandList) {
         list<PCLLostProducts> tempProductList = new list<PCLLostProducts>();
         integer productCount = 0;
         system.debug('check products:'+ (templostBrand.PCLLostBrandProduct__r != null) + '|' + (templostBrand.PCLLostBrandProduct__r.size() > 0));
         if (templostBrand.PCLLostBrandProduct__r != null && templostBrand.PCLLostBrandProduct__r.size() > 0) {
           for( PCLLostProduct__c tempProduct: templostBrand.PCLLostBrandProduct__r) {
            tempProductList.add(new PCLLostProducts(productCount,tempProduct));
            productCount++;
           }
         } else {
           PCLLostProducts newProduct = new PCLLostProducts();
           if ('其他'.equals(templostBrand.Lost_By_Company__c) &&
            templostBrand.Lost_By_Company_Mannual__c != null &&
            !''.equals(templostBrand.Lost_By_Company_Mannual__c)) {
              newProduct.LostProductss.LostBrandName__c = templostBrand.Lost_By_Company_Mannual__c;
            } else {
              newProduct.LostProductss.LostBrandName__c = templostBrand.Lost_By_Company__c;
            }
            LostReport = new LostReport(lostReportList[0],LostBrandList);
            system.debug('LostReport.LostBrands:'+LostReport.LostBrands);
            system.debug('aaa4+++'+templostBrand.Lost_By_Company_Mannual__c);
           tempProductList.add(newProduct);
           productCount++;
         }
         LostBrandList.add( new LostBrand(brandCount,tempProductList, templostBrand));
         brandCount++;
        }
        LostReport = new LostReport(lostReportList[0],LostBrandList);
        system.debug('LostReport.LostBrands:'+LostReport.LostBrands);
      }
      brandNo = 0;
      // 读取竞争对手品牌
      // BrandmapSet();
      if(string.isNotEmpty(submitFlag)) {
         ApexPages.addmessage(new ApexPages.message(ApexPages.severity.CONFIRM,
                                                    '提交成功!'));
      }
     }
     brandNo = 0;
     // 读取竞争对手品牌
     // BrandmapSet();
     if(string.isNotEmpty(submitFlag)) {
      ApexPages.addmessage(new ApexPages.message(ApexPages.severity.CONFIRM,
                                       '提交成功!'));
     }
   }
   // 编辑 只有系统管理员或者草案中可以编辑
   public PageReference edit2(){
      if( userinfo.getProfileId() == (ID) '00e10000000Y3o5AAC' ||
          '草案'.equals(LostReport.LostReport.Report_Status__c)
          ) {
         pageStatus = 'Edit';
         init();
      }
      else{
         ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '只有在草案中才能进行编辑!'));
      }
      return null;
     //20230814 lt DB202308068183 失单报告审批节点增加助理审批节点 start
     if( userinfo.getProfileId() == (ID) '00e10000000Y3o5AAC' ||
        '草案'.equals(LostReport.LostReport.Report_Status__c) ||
        ('批准'.equals(LostReport.LostReport.Report_Status__c) &&
         System.Label.PCLReportProfileId.contains(userinfo.getProfileId())
        )
      ) {
      //20230814 lt DB202308068183 失单报告审批节点增加助理审批节点 end
      pageStatus = 'Edit';
      init();
     }
     else{
      ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '只有在草案中才能进行编辑!'));
     }
     return null;
   }
   // 设置品牌
   public void setBrand(){
      list<LostBrand> LostBrandlist =  LostReport.LostBrands;
      LostBrand tempBrand = LostBrandlist.get(setBrandNo);
      string brandName = tempBrand.lostBrand.Lost_By_Company__c;
      // fy SWAG-CCC6F6 start
      if(!'其他'.equals(tempBrand.lostBrand.Lost_By_Company_Mannual__c)){
         tempBrand.lostBrand.Lost_By_Company_Mannual__c = null;
      }
      system.debug('aaa5+++'+tempBrand.lostBrand.Lost_By_Company_Mannual__c);
      // fy SWAG-CCC6F6 end
      // ID compID = CompetitionMap.get(brandName);
      for(PCLLostProducts tempLostProduct : tempBrand.LostProducts ) {
         // test
         // tempLostProduct.LostProductss.Competitor__c = compID;
         tempLostProduct.LostProductss.LostBrandName__c = brandName;
         tempLostProduct.LostProductss.LostProduct__c = null;
         tempLostProduct.LostProductss.LostProductMannual__c = null;
         tempLostProduct.LostProductss.Quantity__c = null;
         tempLostProduct.LostProductss.ProductClass__c = null;
         tempLostProduct.LostProductss.ProductCategory__c = null;
         tempLostProduct.bool=false;
      }
     list<LostBrand> LostBrandlist =  LostReport.LostBrands;
     LostBrand tempBrand = LostBrandlist.get(setBrandNo);
     string brandName = tempBrand.lostBrand.Lost_By_Company__c;
     // fy SWAG-CCC6F6 start
     if(!'其他'.equals(tempBrand.lostBrand.Lost_By_Company_Mannual__c)){
      tempBrand.lostBrand.Lost_By_Company_Mannual__c = null;
     }
     system.debug('aaa5+++'+tempBrand.lostBrand.Lost_By_Company_Mannual__c);
     // fy SWAG-CCC6F6 end
     // ID compID = CompetitionMap.get(brandName);
     for(PCLLostProducts tempLostProduct : tempBrand.LostProducts ) {
      // test
      // tempLostProduct.LostProductss.Competitor__c = compID;
      tempLostProduct.LostProductss.LostBrandName__c = brandName;
      tempLostProduct.LostProductss.LostProduct__c = null;
      tempLostProduct.LostProductss.LostProductMannual__c = null;
      tempLostProduct.LostProductss.Quantity__c = null;
      tempLostProduct.LostProductss.ProductClass__c = null;
      tempLostProduct.LostProductss.ProductCategory__c = null;
      tempLostProduct.bool=false;
     }
   }
   // 设置品牌
   public void setbrandmannual(){
      list<LostBrand> LostBrandlist =  LostReport.LostBrands;
      LostBrand tempBrand = LostBrandlist.get(setBrandNo);
      string brandName = tempBrand.lostBrand.Lost_By_Company__c;
      String brandNameMannual = tempBrand.lostBrand.Lost_By_Company_Mannual__c;
      // ID compID = CompetitionMap.get(brandName);
      for(PCLLostProducts tempLostProduct : tempBrand.LostProducts ) {
         // test
         // tempLostProduct.LostProductss.Competitor__c = compID;
         system.debug('aaaa3++'+brandNameMannual);
         if ('其他'.equals(brandName) && brandNameMannual != null && !''.equals(brandNameMannual)) {
            tempLostProduct.LostProductss.LostBrandName__c = brandNameMannual;
            // tempLostProduct.LostProductss.LostProduct__c = null;
            // tempLostProduct.LostProductss.LostProductMannual__c = null;
            // tempLostProduct.LostProductss.Quantity__c = null;
            // tempLostProduct.LostProductss.ProductClass__c = null;
            // tempLostProduct.LostProductss.ProductCategory__c = null;
            // tempLostProduct.bool=false;
         }
     list<LostBrand> LostBrandlist =  LostReport.LostBrands;
     LostBrand tempBrand = LostBrandlist.get(setBrandNo);
     string brandName = tempBrand.lostBrand.Lost_By_Company__c;
     String brandNameMannual = tempBrand.lostBrand.Lost_By_Company_Mannual__c;
     // ID compID = CompetitionMap.get(brandName);
     for(PCLLostProducts tempLostProduct : tempBrand.LostProducts ) {
      // test
      // tempLostProduct.LostProductss.Competitor__c = compID;
      system.debug('aaaa3++'+brandNameMannual);
      if ('其他'.equals(brandName) && brandNameMannual != null && !''.equals(brandNameMannual)) {
        tempLostProduct.LostProductss.LostBrandName__c = brandNameMannual;
        // tempLostProduct.LostProductss.LostProduct__c = null;
        // tempLostProduct.LostProductss.LostProductMannual__c = null;
        // tempLostProduct.LostProductss.Quantity__c = null;
        // tempLostProduct.LostProductss.ProductClass__c = null;
        // tempLostProduct.LostProductss.ProductCategory__c = null;
        // tempLostProduct.bool=false;
      }
     }
   }
   // 保存
   public PageReference save(){
      if(!DataCheck()) {
         return null;
      }
      if(!dataEntry()) {
         return null;
      }
      brandCount = LostReport.LostBrands.size();
      pageStatus = 'View';
      ApexPages.addmessage(new ApexPages.message(ApexPages.severity.CONFIRM, '保存成功!'));
     if(!DataCheck()) {
      return null;
     }
     if(!dataEntry()) {
      return null;
     }
     brandCount = LostReport.LostBrands.size();
     pageStatus = 'View';
     ApexPages.addmessage(new ApexPages.message(ApexPages.severity.CONFIRM, '保存成功!'));
     return null;
   }
   //读取并构建竞争对手品牌
   // public void BrandmapSet(){
   //    CompetitionMap = new map<string, id>();
   //    list <Competition_Company__c> competitionList
   //        =  [select id,name from Competition_Company__c];
   //    for(Competition_Company__c tempComp : competitionList ) {
   //       CompetitionMap.put(tempComp.name, tempComp.id);
   //    }
   //   CompetitionMap = new map<string, id>();
   //   list <Competition_Company__c> competitionList
   //       =  [select id,name from Competition_Company__c];
   //   for(Competition_Company__c tempComp : competitionList ) {
   //     CompetitionMap.put(tempComp.name, tempComp.id);
   //   }
   // }
   // 数据检查
   public boolean DataCheck(){
      boolean dataCheck = true;
      if(string.isBlank(LostReport.LostReport.LostType__c))
      {
         LostReport.LostReport.LostType__c.addError('必须填写失单类型!');
     boolean dataCheck = true;
     if(string.isBlank(LostReport.LostReport.LostType__c))
     {
      LostReport.LostReport.LostType__c.addError('必须填写失单类型!');
      dataCheck = false;
     }
     for(LostBrand tempLostBrand : LostReport.LostBrands ) {
      system.debug('aaaa1++'+tempLostBrand.lostBrand.Lost_By_Company_Mannual__c);
      if(string.isblank(tempLostBrand.lostBrand.Lost_By_Company__c)) {
        tempLostBrand.lostBrand.Lost_By_Company__c.addError('请填写失单品牌!');
        dataCheck = false;
      }// fy SWAG-CCC6F6 start
      else if('其他'.equals(tempLostBrand.lostBrand.Lost_By_Company__c)&&string.isblank(tempLostBrand.lostBrand.Lost_By_Company_Mannual__c)){
        tempLostBrand.lostBrand.Lost_By_Company_Mannual__c.addError('请填写失单品牌(手动)!');
        dataCheck = false;
      }// fy SWAG-CCC6F6 end
      system.debug('aaaa2++'+tempLostBrand.lostBrand.Lost_By_Company_Mannual__c);
      if(tempLostBrand.lostBrand.LostPrice__c == null) {
        tempLostBrand.lostBrand.LostPrice__c.addError('失单金额必填!');
        dataCheck = false;
      }
      if(string.isblank(tempLostBrand.lostBrand.Lost_reason_main__c )) {
        tempLostBrand.lostBrand.Lost_reason_main__c.addError('失单理由(主)必填!');
        dataCheck = false;
      }
      if(string.isblank(tempLostBrand.lostBrand.Agency__c )) {
        tempLostBrand.lostBrand.Agency__c.addError('中标经销商必填!');
        dataCheck = false;
      }
      // 检查是否有超过1个有数的产品
      integer productCount = 0;
      for( PCLLostProducts temlostProduct : tempLostBrand.LostProducts) {
        if (temlostProduct.LostProductss.LostProduct__c != null || temlostProduct.LostProductss.LostProductMannual__c != null) {
         System.debug('失单型号' + temlostProduct.LostProductss.LostProduct__c);
         System.debug('失单型号手动' + temlostProduct.LostProductss.LostProductMannual__c);
         productCount ++;
        }
        // update tcm 20211123 start
        if((temlostProduct.LostProductss.LostProduct__c!=null || temlostProduct.LostProductss.LostProductMannual__c!=null)&&(temlostProduct.LostProductss.Quantity__c==null || temlostProduct.LostProductss.Quantity__c ==0)) {
         temlostProduct.LostProductss.Quantity__c.addError('请填写失单数量!');
         dataCheck = false;
        }
        if((temlostProduct.LostProductss.LostProduct__c!=null || temlostProduct.LostProductss.LostProductMannual__c!=null)&&temlostProduct.LostProductss.ProductCategory__c==null) {
         if (temlostProduct.LostProductss.ProductClass__c==null) {
           temlostProduct.LostProductss.ProductClass__c.addError('失单产品类别必填!');
           temlostProduct.LostProductss.ProductCategory__c.addError('失单产品必填!');
         }else {
           temlostProduct.LostProductss.ProductCategory__c.addError('失单产品必填!');
         }
         dataCheck = false;
        }
        // 当失单品牌名为其他时,报错字段为失单对手型号(手动) thh 2022-01-17 start
        if ((temlostProduct.LostProductss.LostProduct__c==null && temlostProduct.LostProductss.LostProductMannual__c==null)&&(temlostProduct.LostProductss.ProductCategory__c!=null||temlostProduct.LostProductss.Quantity__c!=null)) {
         if(tempLostBrand.lostBrand.Lost_By_Company__c != '其他'){
           temlostProduct.LostProductss.LostProduct__c.addError('失单对手型号或失单对手型号(手动)必填!');
         } else{
           temlostProduct.LostProductss.LostProductMannual__c.addError('失单对手型号或失单对手型号(手动)必填!');
         }
         dataCheck = false;
        }
        // 当失单品牌名为其他时,报错字段为失单对手型号(手动) thh 2022-01-17 end
        // update tcm 20211123 end
        // 20230418 ljh DB202304320022 start
        String LostBrandNameS = tempLostBrand.lostBrand.Lost_By_Company__c != '其他'?tempLostBrand.lostBrand.Lost_By_Company__c:tempLostBrand.lostBrand.Lost_By_Company_Mannual__c;
        String LostBrandName = temlostProduct.LostProductss.LostBrandName__c;
        if(LostBrandNameS != LostBrandName){
         temlostProduct.LostProductss.LostBrandName__c.addError('失单品牌名不一致,请确认');
         dataCheck = false;
        }
        // 20230418 ljh DB202304320022 end
      }
      for(LostBrand tempLostBrand : LostReport.LostBrands ) {
         system.debug('aaaa1++'+tempLostBrand.lostBrand.Lost_By_Company_Mannual__c);
         if(string.isblank(tempLostBrand.lostBrand.Lost_By_Company__c)) {
            tempLostBrand.lostBrand.Lost_By_Company__c.addError('请填写失单品牌!');
            dataCheck = false;
         }// fy SWAG-CCC6F6 start
         else if('其他'.equals(tempLostBrand.lostBrand.Lost_By_Company__c)&&string.isblank(tempLostBrand.lostBrand.Lost_By_Company_Mannual__c)){
            tempLostBrand.lostBrand.Lost_By_Company_Mannual__c.addError('请填写失单品牌(手动)!');
            dataCheck = false;
         }// fy SWAG-CCC6F6 end
         system.debug('aaaa2++'+tempLostBrand.lostBrand.Lost_By_Company_Mannual__c);
         if(tempLostBrand.lostBrand.LostPrice__c == null) {
            tempLostBrand.lostBrand.LostPrice__c.addError('失单金额必填!');
            dataCheck = false;
         }
         if(string.isblank(tempLostBrand.lostBrand.Lost_reason_main__c )) {
            tempLostBrand.lostBrand.Lost_reason_main__c.addError('失单理由(主)必填!');
            dataCheck = false;
         }
         if(string.isblank(tempLostBrand.lostBrand.Agency__c )) {
            tempLostBrand.lostBrand.Agency__c.addError('中标经销商必填!');
            dataCheck = false;
         }
         // 检查是否有超过1个有数的产品
         integer productCount = 0;
         for( PCLLostProducts temlostProduct : tempLostBrand.LostProducts) {
            if (temlostProduct.LostProductss.LostProduct__c != null || temlostProduct.LostProductss.LostProductMannual__c != null) {
               System.debug('失单型号' + temlostProduct.LostProductss.LostProduct__c);
               System.debug('失单型号手动' + temlostProduct.LostProductss.LostProductMannual__c);
               productCount ++;
            }
            // update tcm 20211123 start
            if((temlostProduct.LostProductss.LostProduct__c!=null || temlostProduct.LostProductss.LostProductMannual__c!=null)&&(temlostProduct.LostProductss.Quantity__c==null || temlostProduct.LostProductss.Quantity__c ==0)) {
               temlostProduct.LostProductss.Quantity__c.addError('请填写失单数量!');
               dataCheck = false;
            }
            if((temlostProduct.LostProductss.LostProduct__c!=null || temlostProduct.LostProductss.LostProductMannual__c!=null)&&temlostProduct.LostProductss.ProductCategory__c==null) {
               if (temlostProduct.LostProductss.ProductClass__c==null) {
                  temlostProduct.LostProductss.ProductClass__c.addError('失单产品类别必填!');
                  temlostProduct.LostProductss.ProductCategory__c.addError('失单产品必填!');
               }else {
                  temlostProduct.LostProductss.ProductCategory__c.addError('失单产品必填!');
               }
               dataCheck = false;
            }
            // 当失单品牌名为其他时,报错字段为失单对手型号(手动) thh 2022-01-17 start
            if ((temlostProduct.LostProductss.LostProduct__c==null && temlostProduct.LostProductss.LostProductMannual__c==null)&&(temlostProduct.LostProductss.ProductCategory__c!=null||temlostProduct.LostProductss.Quantity__c!=null)) {
               if(tempLostBrand.lostBrand.Lost_By_Company__c != '其他'){
                  temlostProduct.LostProductss.LostProduct__c.addError('失单对手型号或失单对手型号(手动)必填!');
               } else{
                  temlostProduct.LostProductss.LostProductMannual__c.addError('失单对手型号或失单对手型号(手动)必填!');
               }
               dataCheck = false;
            }
            // 当失单品牌名为其他时,报错字段为失单对手型号(手动) thh 2022-01-17 end
            // update tcm 20211123 end
         }
         // 当失单品牌名为其他时,报错字段为失单对手型号(手动) thh 2022-01-17 start
         if (productCount == 0 && tempLostBrand.LostProducts != null && tempLostBrand.LostProducts.size() > 0) {
            if(tempLostBrand.lostBrand.Lost_By_Company__c != '其他'){
               tempLostBrand.LostProducts[0].LostProductss.LostProduct__c.addError('至少录入1条失单对手型号信息!');
            }else{
               tempLostBrand.LostProducts[0].LostProductss.LostProductMannual__c.addError('至少录入1条失单对手型号信息!');
            }
            dataCheck = false;
         }
         // 当失单品牌名为其他时,报错字段为失单对手型号(手动) thh 2022-01-17 end
      // 当失单品牌名为其他时,报错字段为失单对手型号(手动) thh 2022-01-17 start
      if (productCount == 0 && tempLostBrand.LostProducts != null && tempLostBrand.LostProducts.size() > 0) {
        if(tempLostBrand.lostBrand.Lost_By_Company__c != '其他'){
         tempLostBrand.LostProducts[0].LostProductss.LostProduct__c.addError('至少录入1条失单对手型号信息!');
        }else{
         tempLostBrand.LostProducts[0].LostProductss.LostProductMannual__c.addError('至少录入1条失单对手型号信息!');
        }
        dataCheck = false;
      }
      return dataCheck;
      // 当失单品牌名为其他时,报错字段为失单对手型号(手动) thh 2022-01-17 end
     }
     return dataCheck;
   }
   public list<LostBrand> brandcopy(){
      list<LostBrand> tempbrands = new list<LostBrand>();
      for(LostBrand tempbrand: LostReport.LostBrands) {
         LostBrand LostBrand =
            new LostBrand(tempbrand.lineNo,tempbrand.LostProducts );
         LostBrand.lostBrand = tempbrand.lostBrand.clone();
         LostBrand.lostBrand.id = tempbrand.lostBrand.id;
         tempbrands.add(LostBrand);
      }
      return tempbrands;
     list<LostBrand> tempbrands = new list<LostBrand>();
     for(LostBrand tempbrand: LostReport.LostBrands) {
      LostBrand LostBrand =
        new LostBrand(tempbrand.lineNo,tempbrand.LostProducts );
      LostBrand.lostBrand = tempbrand.lostBrand.clone();
      LostBrand.lostBrand.id = tempbrand.lostBrand.id;
      tempbrands.add(LostBrand);
     }
     return tempbrands;
   }
   // 数据录入
   public boolean dataEntry(){
      system.debug('save---start:');
      Savepoint sp = Database.setSavepoint();
      Lost_cancel_report__c templostReport = LostReport.lostReport.clone();
      templostReport.id = LostReport.lostReport.id;
      list<LostBrand> tempBrands = brandcopy();
      try{
         // 待完成,这里需要把第一个品牌的信息赋值到这个失单报告上去,还有需要把各个品牌金额汇总加起来;
         //system.debug('LostReport.LostBrands:'+LostReport.LostBrands);
         // 设置记录类型
         LostReport.lostReport.recordTypeID  =  LostReport.lostReport.LostType__c== '失单'?Schema.SObjectType.Lost_cancel_report__c.getRecordTypeInfosByDeveloperName().get('PCL_Lost_report').getRecordTypeId() : Schema.SObjectType.Lost_cancel_report__c.getRecordTypeInfosByDeveloperName().get('PCL_PartLost_report').getRecordTypeId();
         LostReport.lostReport.LostTotalAmount__c    = 0;
         LostReport.lostReport.of_lost_system_processor__c   = 0;
         LostReport.lostReport.Lost_reason_main__c = null;
         LostReport.lostReport.Lost_Reason_Sub__c  = null;
         LostReport.lostReport.Lost_By_Company__c = null;
         for(LostBrand tempLostBrand : LostReport.LostBrands) {
            if(string.isNotBlank(tempLostBrand.lostBrand.Lost_By_Company__c)) {
               LostReport.lostReport.LostTotalAmount__c += tempLostBrand.lostBrand.LostPrice__c;
               LostReport.lostReport.Lost_reason_main__c =
                  LostReport.lostReport.Lost_reason_main__c == null
                  ? tempLostBrand.lostBrand.Lost_reason_main__c
                  : LostReport.lostReport.Lost_reason_main__c;
               LostReport.lostReport.Lost_Reason_Sub__c  =
                  LostReport.lostReport.Lost_Reason_Sub__c == null
                  ? tempLostBrand.lostBrand.Lost_Reason_Sub__c
                  : LostReport.lostReport.Lost_Reason_Sub__c;
               LostReport.lostReport.Lost_By_Company__c =
                  LostReport.lostReport.Lost_By_Company__c == null
                  ? tempLostBrand.lostBrand.Lost_By_Company__c
                  : LostReport.lostReport.Lost_By_Company__c;
               for( PCLLostProducts tempLostProduct : tempLostBrand.LostProducts) {
                  if(tempLostProduct.LostProductss.Quantity__c !=null && tempLostProduct.LostProductss.Quantity__c >0) {
                     LostReport.lostReport.of_lost_system_processor__c   += tempLostProduct.LostProductss.Quantity__c;
                  }
               }
            }
         }
         upsert LostReport.lostReport;
         // 需要插入更新的失单品牌
         map<integer,PCLLostBrand__c> upsertLostBrandMap = new map<integer,PCLLostBrand__c>();
         // 需要删掉的失单品牌
         map<integer,PCLLostBrand__c> deleteLostBrandMap = new map<integer,PCLLostBrand__c>();
         // 需要插入更新的失单型号,key是品牌编号+型号编号,value是需要更新的失单型号
         map<string,PCLLostProduct__c> upsertLostProductMap = new map<string,PCLLostProduct__c>();
         // 需要删掉的失单品牌
         list<PCLLostProduct__c> deleteLostProductList = new list<PCLLostProduct__c>();
         for(LostBrand tempLostBrand : LostReport.LostBrands ) {
            // 如果有失单品牌,那么就要插入更新;
            system.debug('tempLostBrand.lostBrand.Lost_By_Company__c:'+tempLostBrand.lostBrand.Lost_By_Company__c);
            if(string.isNotBlank(tempLostBrand.lostBrand.Lost_By_Company__c)) {
               upsertLostBrandMap.put(tempLostBrand.lineNo,tempLostBrand.lostBrand);
               tempLostBrand.lostBrand.Lost_cancel_report__c = LostReport.lostReport.id;
               tempLostBrand.lostBrand.Name = tempLostBrand.lostBrand.Lost_By_Company__c;
               integer tempNo = 0;
               for( PCLLostProducts tempLostProduct : tempLostBrand.LostProducts) {
                  system.debug('Name:'+ tempLostProduct.LostProductss.Name );
                  if(tempLostProduct.LostProductss.Quantity__c !=null && tempLostProduct.LostProductss.Quantity__c >0) {
                     tempLostProduct.LostProductss.Name = tempLostBrand.lostBrand.Name + tempLostProduct.LostProductss.Quantity__c;
                     upsertLostProductMap.put(tempLostBrand.lineNo +':'+ tempNo,tempLostProduct.LostProductss);
                  }else if(string.isNotBlank(tempLostProduct.LostProductss.id)) {
                     deleteLostProductList.add(tempLostProduct.LostProductss);
                  }
                  tempNo++;
               }
            }
            // 如果没有品牌,但是有id, 这样数据需要删除
            else if(string.isNotBlank(tempLostBrand.lostBrand.id)) {
               deleteLostBrandMap.put(tempLostBrand.lineNo,tempLostBrand.lostBrand);
               // 这里可能需要也判断一下失单型号有没有需要删掉
            }
         }
         if(upsertLostBrandMap.size()>0) {
            upsert upsertLostBrandMap.values();
         }
         for( string productNo :upsertLostProductMap.keyset()) {
            PCLLostProduct__c tempLostProduct = upsertLostProductMap.get(productNo);
            integer brandNo = integer.valueof(productNo.split(':')[0]);
            tempLostProduct.PCLLostBrand__c = upsertLostBrandMap.get(brandNo).id;
         }
         if(upsertLostProductMap.size()>0) {
            upsert upsertLostProductMap.values();
         }
         if(deleteLostBrandMap.size()>0) {
            delete deleteLostBrandMap.values();
            for(PCLLostBrand__c pcl: deleteLostBrandMap.values()) {
               pcl.id = null;
            }
         }
         if(deleteLostProductList.size()>0) {
            delete deleteLostProductList;
            for(PCLLostProduct__c pclp: deleteLostProductList) {
               pclp.id = null;
            }
         }
         if(deleteBrandIDSet.size() > 0) {
            list<id> tempdeleteIDlist = new list<id>();
            tempdeleteIDlist.addall(deleteBrandIDSet);
            database.delete(tempdeleteIDlist);
         }
         for(integer brandNumber =0; brandNumber< LostReport.LostBrands.size(); brandNumber++) {
            LostBrand tempLostBrand = LostReport.LostBrands.get(brandNumber);
            if(tempLostBrand.lostBrand.Id == null) {
               LostReport.LostBrands.remove(brandNumber);
               brandNumber--;
               continue;
            }
            for(integer productNumber = 0; productNumber< tempLostBrand.LostProducts.size(); productNumber++) {
               PCLLostProducts tempLostProduct = tempLostBrand.LostProducts.get(productNumber);
               if(tempLostProduct.LostProductss.Id == null) {
                  tempLostBrand.LostProducts.remove(productNumber);
                  productNumber--;
                  continue;
               }
            }
         }
         lostReportId = LostReport.lostReport.id;
         system.debug('save---end:');
      }catch (Exception ex) {
         Database.rollback(sp);
         LostReport.lostReport = templostReport;
         LostReport.LostBrands = tempBrands;
         // 这里需要写一些报错信息
         ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error,ex.getMessage()));
         return false;
     system.debug('save---start:');
     Savepoint sp = Database.setSavepoint();
     Lost_cancel_report__c templostReport = LostReport.lostReport.clone();
     templostReport.id = LostReport.lostReport.id;
     list<LostBrand> tempBrands = brandcopy();
     try{
      // 待完成,这里需要把第一个品牌的信息赋值到这个失单报告上去,还有需要把各个品牌金额汇总加起来;
      //system.debug('LostReport.LostBrands:'+LostReport.LostBrands);
      // 设置记录类型
      LostReport.lostReport.recordTypeID  =  LostReport.lostReport.LostType__c== '失单'?Schema.SObjectType.Lost_cancel_report__c.getRecordTypeInfosByDeveloperName().get('PCL_Lost_report').getRecordTypeId() : Schema.SObjectType.Lost_cancel_report__c.getRecordTypeInfosByDeveloperName().get('PCL_PartLost_report').getRecordTypeId();
      LostReport.lostReport.LostTotalAmount__c    = 0;
      LostReport.lostReport.TotalAmountLost__c    = 0;  //20230215 lt DB202302247719
      LostReport.lostReport.of_lost_system_processor__c   = 0;
      LostReport.lostReport.Lost_reason_main__c = null;
      LostReport.lostReport.Lost_Reason_Sub__c  = null;
      LostReport.lostReport.Lost_By_Company__c = null;
      //20230814 lt DB202308068183 失单报告审批节点增加助理审批节点 start
      //批准日不为空时给修改后再批准赋值
      if(LostReport.lostReport.Approved_Day__c != null){
         LostReport.lostReport.ModifyAfterApproval__c = true;
      }
      return true;
      //20230814 lt DB202308068183 失单报告审批节点增加助理审批节点 end
      for(LostBrand tempLostBrand : LostReport.LostBrands) {
        if(string.isNotBlank(tempLostBrand.lostBrand.Lost_By_Company__c)) {
         LostReport.lostReport.LostTotalAmount__c += tempLostBrand.lostBrand.LostPrice__c;
         //20230215 lt DB202302247719  start
         Decimal med = tempLostBrand.lostBrand.LostPrice__c/1.13/1000;
         Decimal med1 = med.setScale(2);
         // System.debug('---lt123不含税数值(人工)Decimal---'+med);
         // System.debug('---lt123不含税数值(人工)Decimal两位小数---'+med1);
         LostReport.lostReport.TotalAmountLost__c += med1;
         //LostReport.lostReport.TotalAmountLost__c += tempLostBrand.lostBrand.LostPrices_ThousandY__c;  //20230215 lt DB202302247719
         // LostReport.lostReport.TotalAmountLost__c += tempLostBrand.lostBrand.LostPrice__c/1.13/1000;  //20230215 lt DB202302247719
         //20230215 lt DB202302247719  en
         LostReport.lostReport.Lost_reason_main__c =
           LostReport.lostReport.Lost_reason_main__c == null
           ? tempLostBrand.lostBrand.Lost_reason_main__c
           : LostReport.lostReport.Lost_reason_main__c;
         LostReport.lostReport.Lost_Reason_Sub__c  =
           LostReport.lostReport.Lost_Reason_Sub__c == null
           ? tempLostBrand.lostBrand.Lost_Reason_Sub__c
           : LostReport.lostReport.Lost_Reason_Sub__c;
         LostReport.lostReport.Lost_By_Company__c =
           LostReport.lostReport.Lost_By_Company__c == null
           ? tempLostBrand.lostBrand.Lost_By_Company__c
           : LostReport.lostReport.Lost_By_Company__c;
         for( PCLLostProducts tempLostProduct : tempLostBrand.LostProducts) {
           if(tempLostProduct.LostProductss.Quantity__c !=null && tempLostProduct.LostProductss.Quantity__c >0) {
            LostReport.lostReport.of_lost_system_processor__c   += tempLostProduct.LostProductss.Quantity__c;
           }
         }
        }
      }
      upsert LostReport.lostReport;
      // 需要插入更新的失单品牌
      map<integer,PCLLostBrand__c> upsertLostBrandMap = new map<integer,PCLLostBrand__c>();
      // 需要删掉的失单品牌
      map<integer,PCLLostBrand__c> deleteLostBrandMap = new map<integer,PCLLostBrand__c>();
      // 需要插入更新的失单型号,key是品牌编号+型号编号,value是需要更新的失单型号
      map<string,PCLLostProduct__c> upsertLostProductMap = new map<string,PCLLostProduct__c>();
      // 需要删掉的失单品牌
      list<PCLLostProduct__c> deleteLostProductList = new list<PCLLostProduct__c>();
      for(LostBrand tempLostBrand : LostReport.LostBrands ) {
        // 如果有失单品牌,那么就要插入更新;
        system.debug('tempLostBrand.lostBrand.Lost_By_Company__c:'+tempLostBrand.lostBrand.Lost_By_Company__c);
        if(string.isNotBlank(tempLostBrand.lostBrand.Lost_By_Company__c)) {
         upsertLostBrandMap.put(tempLostBrand.lineNo,tempLostBrand.lostBrand);
         tempLostBrand.lostBrand.Lost_cancel_report__c = LostReport.lostReport.id;
         tempLostBrand.lostBrand.Name = tempLostBrand.lostBrand.Lost_By_Company__c;
         integer tempNo = 0;
         for( PCLLostProducts tempLostProduct : tempLostBrand.LostProducts) {
           system.debug('Name:'+ tempLostProduct.LostProductss.Name );
           if(tempLostProduct.LostProductss.Quantity__c !=null && tempLostProduct.LostProductss.Quantity__c >0) {
            tempLostProduct.LostProductss.Name = tempLostBrand.lostBrand.Name + tempLostProduct.LostProductss.Quantity__c;
            upsertLostProductMap.put(tempLostBrand.lineNo +':'+ tempNo,tempLostProduct.LostProductss);
           }else if(string.isNotBlank(tempLostProduct.LostProductss.id)) {
            deleteLostProductList.add(tempLostProduct.LostProductss);
           }
           tempNo++;
         }
        }
        // 如果没有品牌,但是有id, 这样数据需要删除
        else if(string.isNotBlank(tempLostBrand.lostBrand.id)) {
         deleteLostBrandMap.put(tempLostBrand.lineNo,tempLostBrand.lostBrand);
         // 这里可能需要也判断一下失单型号有没有需要删掉
        }
      }
      if(upsertLostBrandMap.size()>0) {
        upsert upsertLostBrandMap.values();
      }
      for( string productNo :upsertLostProductMap.keyset()) {
        PCLLostProduct__c tempLostProduct = upsertLostProductMap.get(productNo);
        integer brandNo = integer.valueof(productNo.split(':')[0]);
        tempLostProduct.PCLLostBrand__c = upsertLostBrandMap.get(brandNo).id;
      }
      if(upsertLostProductMap.size()>0) {
        upsert upsertLostProductMap.values();
      }
      if(deleteLostBrandMap.size()>0) {
        delete deleteLostBrandMap.values();
        for(PCLLostBrand__c pcl: deleteLostBrandMap.values()) {
         pcl.id = null;
        }
      }
      if(deleteLostProductList.size()>0) {
        delete deleteLostProductList;
        for(PCLLostProduct__c pclp: deleteLostProductList) {
         pclp.id = null;
        }
      }
      if(deleteBrandIDSet.size() > 0) {
        list<id> tempdeleteIDlist = new list<id>();
        tempdeleteIDlist.addall(deleteBrandIDSet);
        database.delete(tempdeleteIDlist);
      }
      for(integer brandNumber =0; brandNumber< LostReport.LostBrands.size(); brandNumber++) {
        LostBrand tempLostBrand = LostReport.LostBrands.get(brandNumber);
        if(tempLostBrand.lostBrand.Id == null) {
         LostReport.LostBrands.remove(brandNumber);
         brandNumber--;
         continue;
        }
        for(integer productNumber = 0; productNumber< tempLostBrand.LostProducts.size(); productNumber++) {
         PCLLostProducts tempLostProduct = tempLostBrand.LostProducts.get(productNumber);
         if(tempLostProduct.LostProductss.Id == null) {
           tempLostBrand.LostProducts.remove(productNumber);
           productNumber--;
           continue;
         }
        }
      }
      lostReportId = LostReport.lostReport.id;
      system.debug('save---end:');
     }catch (Exception ex) {
      Database.rollback(sp);
      LostReport.lostReport = templostReport;
      LostReport.LostBrands = tempBrands;
      // 这里需要写一些报错信息
      System.debug('---lt123---'+ex.getLineNumber());
      ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error,ex.getMessage()));
      return false;
     }
     return true;
   }
   // 取消
   public PageReference cancel(){
      PageReference page = new PageReference('/'+oppId);
      page.setRedirect(true);
      return page;
     PageReference page = new PageReference('/'+oppId);
     page.setRedirect(true);
     return page;
   }
   // 提交
   public PageReference submit(){
      if(!'草案'.equals(LostReport.LostReport.Report_Status__c) ) {
         ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '只有在草案中才能提交申请!'));
         return null;
      }
     //20230814 lt DB202308068183 失单报告审批节点增加助理审批节点  update
     //&& LostReport.LostReport.ModifyAfterApproval__c == false
     if(!'草案'.equals(LostReport.LostReport.Report_Status__c) && LostReport.LostReport.ModifyAfterApproval__c == false) {
      ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '只有在草案中才能提交申请!'));
      return null;
     }
      Savepoint sp = Database.setSavepoint();
      try{
         LostReport.lostReport.Report_Status__c = '提交';
         update LostReport.lostReport;
         Approval.ProcessSubmitRequest psr = new Approval.ProcessSubmitRequest();
         psr.setObjectId(lostReportId);
         Approval.ProcessResult submitResult = Approval.process(psr);
         PageReference page = new PageReference('/apex/PCLLostReportPage');
         page.getParameters().put('Id', lostReportId);
         page.getParameters().put('pageStatus', 'View');
         page.getParameters().put('submitFlag', '1');
         page.setRedirect(true);
         return page;
      }catch(exception ex) {
         Database.rollback(sp);
         ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error,ex.getMessage()));
         return null;
      }
     // 20230629 wkx DB202306242764  start
     //20230814 lt DB202308068183 失单报告审批节点增加助理审批节点 add lcrlist1
     //DB202308068183 add (不等于当前失单报告,批准后再修改用)
     list<Lost_cancel_report__c> lcrlist1=[select id,Opportunity__c from Lost_cancel_report__c where Opportunity__c=:oppid and id!=:lostReportId limit 1];
     list<opportunity> opplist1=[select id,cnt_lost_cancel_report__c,cnt_lost_cancel_draft__c from Opportunity where id=:oppid limit 1];
     if (opplist1[0].cnt_lost_cancel_report__c - opplist1[0].cnt_lost_cancel_draft__c > 0  && lcrlist1.size() > 0) {
        ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '已存在 询价失单/取消 报告!'));
        return null;
     }
     // 20230629 wkx DB202306242764  end
     Savepoint sp = Database.setSavepoint();
     try{
      LostReport.lostReport.Report_Status__c = '提交';
      update LostReport.lostReport;
      //20230814 lt DB202308068183 失单报告审批节点增加助理审批节点 start 注释
      //DB202308068183 进 进程生成器
      // Approval.ProcessSubmitRequest psr = new Approval.ProcessSubmitRequest();
      // psr.setObjectId(lostReportId);
      // Approval.ProcessResult submitResult = Approval.process(psr);
      //20230814 lt DB202308068183 失单报告审批节点增加助理审批节点 end 注释
      PageReference page = new PageReference('/apex/PCLLostReportPage');
      page.getParameters().put('Id', lostReportId);
      page.getParameters().put('pageStatus', 'View');
      page.getParameters().put('submitFlag', '1');
      page.setRedirect(true);
      return page;
     }catch(exception ex) {
      Database.rollback(sp);
      ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error,ex.getMessage()));
      return null;
     }
   }
   // 添加品牌
   public PageReference addBrand(){
      LostReport.LostBrands.add(new LostBrand(LostReport.LostBrands.size()));
      brandCount = LostReport.LostBrands.size();
      return null;
     LostReport.LostBrands.add(new LostBrand(LostReport.LostBrands.size()));
     brandCount = LostReport.LostBrands.size();
     return null;
   }
   // 删除品牌 这个有参数brandNo,才知道是删除那个品牌
   public PageReference Remove(){
      system.debug('RemoveBrandNo:'+RemoveBrandNo);
      list<LostBrand> tempLostBrands = new List<lostBrand>();
      Integer i = 0;
      for(integer j = 0; j< LostReport.LostBrands.size(); j++ ) {
         LostBrand templostBrand  = LostReport.LostBrands.get(j);
         if(j != RemoveBrandNo) {
            templostBrand.lineNo = i;
            tempLostBrands.add(templostBrand);
            i++;
         }else if(!string.isBlank(templostBrand.lostBrand.id)) {
            deleteBrandIDSet.add(templostBrand.lostBrand.id);
         }
     system.debug('RemoveBrandNo:'+RemoveBrandNo);
     list<LostBrand> tempLostBrands = new List<lostBrand>();
     Integer i = 0;
     for(integer j = 0; j< LostReport.LostBrands.size(); j++ ) {
      LostBrand templostBrand  = LostReport.LostBrands.get(j);
      if(j != RemoveBrandNo) {
        templostBrand.lineNo = i;
        tempLostBrands.add(templostBrand);
        i++;
      }else if(!string.isBlank(templostBrand.lostBrand.id)) {
        deleteBrandIDSet.add(templostBrand.lostBrand.id);
      }
      LostReport.LostBrands =  tempLostBrands;
      brandCount = LostReport.LostBrands.size();
      return null;
     }
     LostReport.LostBrands =  tempLostBrands;
     brandCount = LostReport.LostBrands.size();
     return null;
   }
   // 添加型号, 这个有参数brandNo,才知道是添加到那个品牌
   // update tcm 20211125 添加型号时自动带出品牌 start
   public PageReference addProduct(){
      system.debug('brandNo:'+brandNo);
      LostBrand tempLostBrand = LostReport.LostBrands.get(brandNo);
      // PCLLostProduct__c plp = new PCLLostProduct__c(Competitor__c=CompetitionMap.get(LostReport.LostBrands[brandNo].lostBrand.Lost_By_Company__c));
      string brandName = tempLostBrand.lostBrand.Lost_By_Company__c;
      PCLLostProduct__c plp = new PCLLostProduct__c();
      plp.LostBrandName__c = brandName;
      tempLostBrand.LostProducts.add(new PCLLostProducts(tempLostBrand.LostProducts.size(),plp));
      tempLostBrand.ProductSize = tempLostBrand.LostProducts.size();
      return null;
     system.debug('brandNo:'+brandNo);
     LostBrand tempLostBrand = LostReport.LostBrands.get(brandNo);
     // PCLLostProduct__c plp = new PCLLostProduct__c(Competitor__c=CompetitionMap.get(LostReport.LostBrands[brandNo].lostBrand.Lost_By_Company__c));
     // 20230418 ljh DB202304320022 start
     // string brandName = tempLostBrand.lostBrand.Lost_By_Company__c;
     string brandName = tempLostBrand.lostBrand.Lost_By_Company__c != '其他'?tempLostBrand.lostBrand.Lost_By_Company__c:tempLostBrand.lostBrand.Lost_By_Company_Mannual__c;
     // 20230418 ljh DB202304320022 end
     PCLLostProduct__c plp = new PCLLostProduct__c();
     plp.LostBrandName__c = brandName;
     tempLostBrand.LostProducts.add(new PCLLostProducts(tempLostBrand.LostProducts.size(),plp));
     tempLostBrand.ProductSize = tempLostBrand.LostProducts.size();
     return null;
   }
   // update tcm 20211125 添加型号时自动带出品牌 end
   // 页面的数据结构
   public class LostReport {
      public Lost_cancel_report__c lostReport { get; set; }
      public list<LostBrand> LostBrands { get; set; }
      public LostReport(){
         lostReport = new Lost_cancel_report__c();
         LostBrands = new list<LostBrand> {new LostBrand(0)};
      }
      public LostReport(Lost_cancel_report__c lostReport){
         this.lostReport = lostReport;
         LostBrands = new list<LostBrand> {new LostBrand(0)};
      }
      public LostReport(Lost_cancel_report__c lostReport,  list<LostBrand> LostBrands){
         this.lostReport = lostReport;
         this.LostBrands = LostBrands;
      }
     public Lost_cancel_report__c lostReport { get; set; }
     public list<LostBrand> LostBrands { get; set; }
     public LostReport(){
      lostReport = new Lost_cancel_report__c();
      LostBrands = new list<LostBrand> {new LostBrand(0)};
     }
     public LostReport(Lost_cancel_report__c lostReport){
      this.lostReport = lostReport;
      LostBrands = new list<LostBrand> {new LostBrand(0)};
     }
     public LostReport(Lost_cancel_report__c lostReport,  list<LostBrand> LostBrands){
      this.lostReport = lostReport;
      this.LostBrands = LostBrands;
     }
   }
   public class LostBrand {
      public PCLLostBrand__c lostBrand { get; set; }
      public Integer lineNo { get; set; }
      public list<PCLLostProducts> LostProducts { get; set; }
      public Integer ProductSize {get; set;}
      public LostBrand( integer lineNo ){
         lostBrand = new PCLLostBrand__c();
         this.lineNo = lineNo;
         LostProducts = new list<PCLLostProducts> {new PCLLostProducts()};
         ProductSize = 1;
         lostBrand = new PCLLostBrand__c();
      }
      public LostBrand( integer lineNo, list<PCLLostProducts> LostProducts ){
         lostBrand = new PCLLostBrand__c();
         this.lineNo = lineNo;
         this.LostProducts = LostProducts;
         ProductSize = LostProducts.size();
      }
      public LostBrand( integer lineNo, list<PCLLostProducts> LostProducts,  PCLLostBrand__c lostBrand){
         this.lostBrand = lostBrand;
         this.lineNo = lineNo;
         this.LostProducts = LostProducts;
         ProductSize = LostProducts.size();
      }
     public PCLLostBrand__c lostBrand { get; set; }
     public Integer lineNo { get; set; }
     public list<PCLLostProducts> LostProducts { get; set; }
     public Integer ProductSize {get; set;}
     public LostBrand( integer lineNo ){
      lostBrand = new PCLLostBrand__c();
      this.lineNo = lineNo;
      LostProducts = new list<PCLLostProducts> {new PCLLostProducts()};
      ProductSize = 1;
      lostBrand = new PCLLostBrand__c();
     }
     public LostBrand( integer lineNo, list<PCLLostProducts> LostProducts ){
      lostBrand = new PCLLostBrand__c();
      this.lineNo = lineNo;
      this.LostProducts = LostProducts;
      ProductSize = LostProducts.size();
     }
     public LostBrand( integer lineNo, list<PCLLostProducts> LostProducts,  PCLLostBrand__c lostBrand){
      this.lostBrand = lostBrand;
      this.lineNo = lineNo;
      this.LostProducts = LostProducts;
      ProductSize = LostProducts.size();
     }
   }
   // add tcm 20211119 start
   public class PCLLostProducts {
      public Integer lineNo2 { get; set; }
      public PCLLostProduct__c LostProductss { get; set; }
      public Boolean bool { get; set; }
      public PCLLostProducts() {
         this.lineNo2 = 0;
         this.LostProductss=new PCLLostProduct__c();
     public Integer lineNo2 { get; set; }
     public PCLLostProduct__c LostProductss { get; set; }
     public Boolean bool { get; set; }
     public PCLLostProducts() {
      this.lineNo2 = 0;
      this.LostProductss=new PCLLostProduct__c();
     }
     public PCLLostProducts(Integer lineNo2) {
      this.lineNo2 = lineNo2;
      this.LostProductss=new PCLLostProduct__c();
     }
     public PCLLostProducts(Integer lineNo2,PCLLostProduct__c LostProductss) {
      this.lineNo2 = lineNo2;
      this.LostProductss=LostProductss;
      if (LostProductss.LostProduct__c != null) {
        this.bool = true;
      }
      public PCLLostProducts(Integer lineNo2) {
         this.lineNo2 = lineNo2;
         this.LostProductss=new PCLLostProduct__c();
      }
      public PCLLostProducts(Integer lineNo2,PCLLostProduct__c LostProductss) {
         this.lineNo2 = lineNo2;
         this.LostProductss=LostProductss;
         if (LostProductss.LostProduct__c != null) {
            this.bool = true;
         }
      }
     }
   }
   // add tcm 20211119 end
   // add tcm 20211118 start
   public void search() {
      if (LostReport.LostBrands[topNum].LostProducts[secondNum].LostProductss.LostProduct__c==null) {
         LostReport.LostBrands[topNum].LostProducts[secondNum].LostProductss.ProductClass__c=null;
         LostReport.LostBrands[topNum].LostProducts[secondNum].LostProductss.ProductCategory__c=null;
         LostReport.LostBrands[topNum].LostProducts[secondNum].bool=false;
     if (LostReport.LostBrands[topNum].LostProducts[secondNum].LostProductss.LostProduct__c==null) {
      LostReport.LostBrands[topNum].LostProducts[secondNum].LostProductss.ProductClass__c=null;
      LostReport.LostBrands[topNum].LostProducts[secondNum].LostProductss.ProductCategory__c=null;
      LostReport.LostBrands[topNum].LostProducts[secondNum].bool=false;
     }else {
      Product2 prd = [select Id,ProductClass__c, ProductCategory__c from Product2 where Id =:LostReport.LostBrands[topNum].LostProducts[secondNum].LostProductss.LostProduct__c];
      if (prd.ProductCategory__c!=null) {
        LostReport.LostBrands[topNum].LostProducts[secondNum].LostProductss.ProductClass__c=prd.ProductClass__c;
        LostReport.LostBrands[topNum].LostProducts[secondNum].LostProductss.ProductCategory__c=prd.ProductCategory__c;
        LostReport.LostBrands[topNum].LostProducts[secondNum].bool=true;
      }else {
         Product2 prd = [select Id,ProductClass__c, ProductCategory__c from Product2 where Id =:LostReport.LostBrands[topNum].LostProducts[secondNum].LostProductss.LostProduct__c];
         if (prd.ProductCategory__c!=null) {
            LostReport.LostBrands[topNum].LostProducts[secondNum].LostProductss.ProductClass__c=prd.ProductClass__c;
            LostReport.LostBrands[topNum].LostProducts[secondNum].LostProductss.ProductCategory__c=prd.ProductCategory__c;
            LostReport.LostBrands[topNum].LostProducts[secondNum].bool=true;
         }else {
            LostReport.LostBrands[topNum].LostProducts[secondNum].LostProductss.ProductClass__c=null;
            LostReport.LostBrands[topNum].LostProducts[secondNum].LostProductss.ProductCategory__c=null;
            LostReport.LostBrands[topNum].LostProducts[secondNum].bool=false;
         }
        LostReport.LostBrands[topNum].LostProducts[secondNum].LostProductss.ProductClass__c=null;
        LostReport.LostBrands[topNum].LostProducts[secondNum].LostProductss.ProductCategory__c=null;
        LostReport.LostBrands[topNum].LostProducts[secondNum].bool=false;
      }
     }
   }
   // add tcm 20211118 end
}
  }