/** 备品智能化 * 2023-10-15 Add by dzk * 询价上新建OPD计划时将勾选的行项目转换为OPD计划的计划备品数据 * 学会状态变更为公开中,将学会下计划备品数据,转换到OPD计划的计划备品数据 * 状态变更为提交时,报价内产品数量、报价外产品数据更新 */ public with sharing class OpdPlan_CreatePlanRentalEquipmentHandler { public static void createPlanRentalEquipment(List newList) { Set oppIdSet = new Set(); Set quoteIdSet = new Set(); Set campaignIdSet = new Set(); String planFromDetai = ''; String planNotFromDetai = ''; String planSysDetai = ''; List OPDList = new List(); Map opdPlanMap = new Map(); List planRentalEquipmentList = new List(); Id planRERecordTypeOther = Schema.SObjectType.Plan_Rental_Equipment__c.getRecordTypeInfosByDeveloperName().get('Other').getRecordTypeId(); Id planRERecordTypeCampaign = Schema.SObjectType.Plan_Rental_Equipment__c.getRecordTypeInfosByDeveloperName().get('campaign').getRecordTypeId(); // 取得询价Id for(OPDPlan__c opdPlanNew : newList){ if(opdPlanNew.OPDType__c == '询价' || opdPlanNew.OPDType__c == '日报'){ oppIdSet.add(opdPlanNew.Related_Opportunity1_ID__c); } if(opdPlanNew.OPDType__c == '学会'){ campaignIdSet.add(opdPlanNew.Campaign__c); } } // 取得最新报价Id List oppList = new List(); if(oppIdSet.size() > 0){ oppList = [SELECT Id,Estimation_Id__c FROM Opportunity WHERE Id =: oppIdSet]; } for(Opportunity opp : oppList){ quoteIdSet.add(opp.Estimation_Id__c); } // 取得符合备品借出条件的产品信息 List quoteLineItemList = new List(); List planREList = new List(); if(quoteIdSet.size() > 0){ quoteLineItemList = [SELECT Id, Quantity, //报价行项目数量 Product2.Name, //产品名称 Product2.ProductCode, //产品代码 Product2.Key_product_147P__c, //产品型号 Product2.Fixture_Model_No_T__c, //产品型号 OppIsLendMark__c, //是否出借标记 QuoteId,//报价Id Quote.OpportunityId //询价Id FROM QuoteLineItem WHERE QuoteId =: quoteIdSet AND OppIsLendMark__c = TRUE]; } // 获取学会上的计划借出备品信息 System.debug('campaignIdSet:'+campaignIdSet); if(campaignIdSet.size() > 0){ planREList = [SELECT Id, Name, OPD_Plan__c,Rental_Quantity__c, MDM_Model_No__c,FixtureModel__c, Campaign__c, Campaign__r.RecordTypeId,Campaign__r.Is_LendProduct__c FROM Plan_Rental_Equipment__c WHERE Campaign__c =: campaignIdSet AND RecordTypeId =: planRERecordTypeCampaign AND OPD_Plan__c = NULL]; } System.debug('planREList:'+planREList); if(quoteLineItemList.size() > 0){ for(OPDPlan__c opdPlan : newList){ OPDPlan__c opdPlanRecord = new OPDPlan__c(); for(QuoteLineItem quoteItem : quoteLineItemList){ if(opdPlan.Related_Opportunity1_ID__c == quoteItem.Quote.OpportunityId){ // 新建计划借出备品数据 Plan_Rental_Equipment__c planRentalEquipment = new Plan_Rental_Equipment__c(); planRentalEquipment.RecordTypeId = planRERecordTypeOther; planRentalEquipment.Rental_Quantity__c = '1'; planRentalEquipment.OPD_Plan__c = opdPlan.Id; planRentalEquipment.Name = quoteItem.Product2.Name; planRentalEquipment.Rental_Equipment__c = quoteItem.Product2.Name; planRentalEquipment.Opportunity__c = opdPlan.Related_Opportunity1_ID__c; planRentalEquipment.ProductCode__c = quoteItem.Product2.ProductCode; planRentalEquipment.MDM_Model_No__c = quoteItem.Product2.Fixture_Model_No_T__c; planRentalEquipment.Quote__c = quoteItem.QuoteId; if(String.isNotBlank(quoteItem.Product2.Key_product_147P__c)){ planRentalEquipment.FixtureModel__c = quoteItem.Product2.Key_product_147P__c.substring(3); planSysDetai += planRentalEquipment.FixtureModel__c + '*' + planRentalEquipment.Rental_Quantity__c + '; '; } planRentalEquipmentList.add(planRentalEquipment); if(quoteItem.QuoteId == null){ planNotFromDetai += planRentalEquipment.MDM_Model_No__c + '*' + planRentalEquipment.Rental_Quantity__c + '; '; }else{ planFromDetai += planRentalEquipment.MDM_Model_No__c + '*' + planRentalEquipment.Rental_Quantity__c + '; '; } } } opdPlanRecord.Id = opdPlan.Id; opdPlanRecord.PlanProdDetail__c = planNotFromDetai + planFromDetai; // 计划出借备品信息 opdPlanRecord.EquipmentFromOpp__c = planFromDetai; // 报价外产品 opdPlanRecord.EquipmentNotFromOpp__c = planNotFromDetai; // 报价内产品 opdPlanRecord.PlanProdDetailSys__c = planSysDetai; // 计划出借战略产品 opdPlanRecord.PlanProdDetailSysT__c = planSysDetai.length() > 255 ? planSysDetai.substring(0, 255):planSysDetai; // 计划出借战略产品文本 add by ljh 20240302 // 备品智能化 20240110 zyh start System.debug('OPDtestzyh==='+opdPlan.OriginalOpdPlanRental__c); if (String.isBlank( opdPlan.OriginalOpdPlanRental__c)) { OPDList.add(opdPlanRecord); } // 备品智能化 20240110 zyh end } insert planRentalEquipmentList; // 备品智能化 20240110 zyh start if (OPDList.size() > 0) { update OPDList; } // 备品智能化 20240110 zyh end } // 学会状态变更为公开中时,自动创建OPD计划,将学会中的备品转到OPD计划中。 if(planREList.size() > 0){ List recordTypeIds = new List(); recordTypeIds.add(Schema.SObjectType.Campaign.getRecordTypeInfosByDeveloperName().get('Society').getRecordTypeId()); //学会/会议 recordTypeIds.add(Schema.SObjectType.Campaign.getRecordTypeInfosByDeveloperName().get('Training_event').getRecordTypeId()); //社外培训 recordTypeIds.add(Schema.SObjectType.Campaign.getRecordTypeInfosByDeveloperName().get('Service_trainig').getRecordTypeId()); //服务培训/学会会议 recordTypeIds.add(Schema.SObjectType.Campaign.getRecordTypeInfosByDeveloperName().get('BusinessTraining').getRecordTypeId()); //营业部专用会议 System.debug('recordTypeIds:'+recordTypeIds); String camquantity = ''; List planREUpdateList = new List(); for(OPDPlan__c opdPlan : newList){ OPDPlan__c opdPlanRecord = new OPDPlan__c(); //20240304 学会过来的OPD 产品报价内/外赋值逻辑添加 sx add Integer fromNotOppNum = 0; for(Plan_Rental_Equipment__c planRE : planREList){ System.debug('planRE:'+planRE); if(opdPlan.Campaign__c == planRE.Campaign__c && recordTypeIds.contains(planRE.Campaign__r.RecordTypeId) && String.isNotBlank(planRE.Campaign__r.Is_LendProduct__c) && String.valueOf(planRE.Campaign__r.Is_LendProduct__c).equals('是')){ Plan_Rental_Equipment__c planREUpdate = new Plan_Rental_Equipment__c(); planREUpdate.Id = planRE.Id; planREUpdate.OPD_Plan__c = opdPlan.Id; planREUpdateList.add(planREUpdate); planNotFromDetai += planRE.MDM_Model_No__c + '*' + planRE.Rental_Quantity__c + '; '; if(String.isNotBlank(planRE.FixtureModel__c)){ planSysDetai += planRE.FixtureModel__c + '*' + planRE.Rental_Quantity__c + '; '; } fromNotOppNum ++ ; //20240304 学会产品 报价内/外没有值 sx add } } opdPlanRecord.Id = opdPlan.Id; opdPlanRecord.PlanProdDetail__c = planNotFromDetai; opdPlanRecord.EquipmentNotFromOpp__c = planNotFromDetai; opdPlanRecord.EquipmentFromOpp__c = ''; opdPlanRecord.PlanProdDetailSys__c = planSysDetai; opdPlanRecord.PlanProdDetailSysT__c = planSysDetai.length() > 255 ? planSysDetai.substring(0, 255):planSysDetai; // 计划出借战略产品文本 add by ljh 20240302 //20240304 学会过来的OPD 产品报价内/外赋值逻辑添加 sx start opdPlanRecord.EquipmentFromOppNum__c = 0; opdPlanRecord.EquipmentNotFromOppNum__c = fromNotOppNum; System.debug('opdPlanRecord.EquipmentNotFromOppNum__c===' + opdPlanRecord.EquipmentNotFromOppNum__c); //20240304 学会过来的OPD 产品报价内/外赋值逻辑添加 sx end OPDList.add(opdPlanRecord); } update planREUpdateList; update OPDList; } } // OPD计划状态更改为'提交'时,获取备品源于询价数量、备品手动补充数量 public static void updateOPDPlan(List newList){ Set opdIdSet = new Set(); List opdPlanList = new List(); for(OPDPlan__c opd : newList){ opdIdSet.add(opd.Id); } Integer fromOppNum = 0; Integer fromNotOppNum = 0; List EquipmentFromOppList = new List(); List EquipmentNotFromOppList = new List(); if(opdIdSet.size() > 0){ EquipmentFromOppList = [SELECT Id, Rental_Quantity__c, MDM_Model_No__c FROM Plan_Rental_Equipment__c WHERE Quote__c != null AND OPD_Plan__c =: opdIdSet]; EquipmentNotFromOppList = [SELECT Id, Rental_Quantity__c, MDM_Model_No__c FROM Plan_Rental_Equipment__c WHERE Quote__c = null AND OPD_Plan__c =: opdIdSet]; } for(Plan_Rental_Equipment__c fromOpp : EquipmentFromOppList){ fromOppNum += Integer.valueOf(fromOpp.Rental_Quantity__c); } for(Plan_Rental_Equipment__c fromNotOpp : EquipmentNotFromOppList){ fromNotOppNum += Integer.valueOf(fromNotOpp.Rental_Quantity__c); } for(OPDPlan__c opdUpdate : newList){ OPDPlan__c opdRecord = new OPDPlan__c(); opdRecord.Id = opdUpdate.Id; opdRecord.EquipmentFromOppNum__c = fromOppNum; opdRecord.EquipmentNotFromOppNum__c = fromNotOppNum; opdPlanList.add(opdRecord); } update opdPlanList; } }