public with sharing class RentalEquipmentCreateController{ public String campaignId {get;set;} public String opdId {get;set;} public List prods ; // public Map planProducts {get; set;} public List campaignEquipments; public List opdEquipments; public String eventRecordType; public String campaignRecordType; public String otherRecordType; public Boolean isEdit {get;set;} public OPDPlan__c targetOPD; public Map planProductMap{get;set;} public Campaign targetCampaign; public RentalEquipmentCreateController(){ this.prods = [SELECT Name FROM Rental_Equipment__c ORDER BY Serial_Number__c ASC NULLS FIRST]; this.campaignEquipments = new List(); this.opdEquipments = new List(); this.planProductMap = new Map(); List recordTypes = [SELECT Id,Name FROM RecordType WHERE SobjectType = 'Plan_Rental_Equipment__c']; for(RecordType re : recordTypes){ if ('事件'.equals(re.Name)) { eventRecordType = re.Id; } if ('学会'.equals(re.Name)) { campaignRecordType = re.Id; } if ('其他'.equals(re.Name)) { otherRecordType = re.Id; } } } public List getProds() { // Map planProducts = new Map(); System.debug('-----camp---'+campaignId); if (campaignId != null && campaignId != '') { UserRecordAccess useraccess = [SELECT recordId,HasEditAccess FROM UserRecordAccess WHERE userId = :UserInfo.getUserId() AND recordId = :campaignId]; this.isEdit = useraccess.HasEditAccess; // this.isEdit = Campaign.sObjectType.getDescribe().isUpdateable(); this.targetCampaign = [SELECT Id,LoadNum__c,Status,Is_LendProduct__c FROM Campaign WHERE Id = :campaignId]; if ((!('草案中').equals(targetCampaign.Status)) && isEdit) { this.isEdit = false; } // else if (targetCampaign.Is_LendProduct__c == '否' && isEdit) { // this.isEdit = false; // } System.debug('-----campisEdit---'+isEdit); this.campaignEquipments = [SELECT Rental_Equipment__c,Rental_Quantity__c FROM Plan_Rental_Equipment__c WHERE Campaign__c = :campaignId]; this.planProductMap = campaignMap(); } if (opdId != null && opdId != '') { UserRecordAccess useraccess = [SELECT recordId,HasEditAccess FROM UserRecordAccess WHERE userId = :UserInfo.getUserId() AND recordId = :opdId]; this.isEdit = useraccess.HasEditAccess; this.targetOPD = [SELECT Id,PlanProdDetail__c,Campaign__c,OPDType__c,Status__c FROM OPDPlan__c WHERE Id = :opdId]; // ***SWAG-BZCAHL***XHL***20210331***START********* // 因OPD计划再申请生成的OPD计划 状态是 草案中 无法创建 计划出借备品 // 同时 从事件与学会创建的OPD计划 不会是草案中,因此将其注掉,不影响其它逻辑 // if ((('事件').equals(targetOPD.OPDType__c) || ('学会').equals(targetOPD.OPDType__c)) && isEdit) { // if (!targetOPD.Reapply__c) { // this.isEdit = false; // } // } // ***SWAG-BZCAHL***XHL***20210331***END********* if ((!('草案中').equals(targetOPD.Status__c)) && isEdit) { this.isEdit = false; } this.opdEquipments = [SELECT Rental_Equipment__c,Rental_Quantity__c FROM Plan_Rental_Equipment__c WHERE OPD_Plan__c = :opdId]; this.planProductMap = eventMap(); } return this.prods; } public Map campaignMap(){ System.debug('-----campaignMap111---'+campaignId); // campaignEquipments = new List(); Map tempPlanProducts = new Map(); // if (campaignId != null && campaignId != '') { // campaignEquipments = [SELECT Rental_Equipment__c,Rental_Quantity__c FROM Plan_Rental_Equipment__c WHERE Campaign__c = :campaignId]; // } Map tempMap = new Map(); if (campaignEquipments.size() > 0) { for(Plan_Rental_Equipment__c rentalEquipment : campaignEquipments){ if (String.isBlank(rentalEquipment.Rental_Quantity__c)) { tempMap.put(rentalEquipment.Rental_Equipment__c, ''); }else{ tempMap.put(rentalEquipment.Rental_Equipment__c, rentalEquipment.Rental_Quantity__c); } } } if (prods.size() > 0 ) { if (campaignEquipments.size() > 0) { for(Rental_Equipment__c prod : prods){ if (tempMap.containsKey(prod.Name)) { if (String.isBlank(tempMap.get(prod.Name)) || tempMap.get(prod.Name) == '0') { tempPlanProducts.put(prod.Name, ''); }else{ tempPlanProducts.put(prod.Name, tempMap.get(prod.Name)); } }else{ tempPlanProducts.put(prod.Name, ''); } } }else{ for(Rental_Equipment__c prod : prods){ tempPlanProducts.put(prod.Name, ''); } } } return tempPlanProducts; } public Map eventMap(){ // opdEquipments = new List(); Map tempPlanProducts = new Map(); // if (opdId != null && opdId != '') { // opdEquipments = [SELECT Rental_Equipment__c,Rental_Quantity__c FROM Plan_Rental_Equipment__c WHERE OPD_Plan__c = :opdId]; // } Map tempMap = new Map(); if (opdEquipments.size() > 0) { for(Plan_Rental_Equipment__c rentalEquipment : opdEquipments){ if (String.isBlank(rentalEquipment.Rental_Quantity__c)) { tempMap.put(rentalEquipment.Rental_Equipment__c, ''); }else{ tempMap.put(rentalEquipment.Rental_Equipment__c, rentalEquipment.Rental_Quantity__c); } } } if (prods.size() > 0 ) { if (opdEquipments.size() > 0) { for(Rental_Equipment__c prod : prods){ if (tempMap.containsKey(prod.Name)) { if (String.isBlank(tempMap.get(prod.Name)) || tempMap.get(prod.Name) == '0') { tempPlanProducts.put(prod.Name, ''); }else{ tempPlanProducts.put(prod.Name, tempMap.get(prod.Name)); } }else{ tempPlanProducts.put(prod.Name, ''); } } }else{ for(Rental_Equipment__c prod : prods){ tempPlanProducts.put(prod.Name, ''); } } } return tempPlanProducts; } public void save(){ List ineuqipments = new List(); List upeuqipments = new List(); Map camTemp = new Map(); Map eveTemp = new Map(); // OPDPlan__c targetOPD = new OPDPlan__c(); Event targetEvent = new Event(); for(Plan_Rental_Equipment__c plan : campaignEquipments){ if (String.isBlank(plan.Rental_Quantity__c)) { plan.Rental_Quantity__c = '0'; } camTemp.put(plan.Rental_Equipment__c, plan); } for(Plan_Rental_Equipment__c plan : opdEquipments){ if (String.isBlank(plan.Rental_Quantity__c)) { plan.Rental_Quantity__c = '0'; } eveTemp.put(plan.Rental_Equipment__c, plan); } if (campaignId != null && campaignId != '') { if (campaignEquipments.size() > 0) { //学会已经有出借备品 for(Rental_Equipment__c prod : prods){ if (camTemp.containsKey(prod.Name)) { if (!camTemp.get(prod.Name).Rental_Quantity__c.equals(planProductMap.get(prod.Name))) { //出借备品数量有变化 if (String.isBlank(planProductMap.get(prod.Name))) { camTemp.get(prod.Name).Rental_Quantity__c = '0'; }else { camTemp.get(prod.Name).Rental_Quantity__c = planProductMap.get(prod.Name); } upeuqipments.add(camTemp.get(prod.Name)); } }else{ //新增的出借备品数量 if (!'0'.equals(planProductMap.get(prod.Name)) && String.isNotBlank(planProductMap.get(prod.Name))) { Plan_Rental_Equipment__c planeuqipment = new Plan_Rental_Equipment__c(); planeuqipment.Campaign__c = campaignId; planeuqipment.RecordTypeId = campaignRecordType; planeuqipment.Name = prod.Name; planeuqipment.Rental_Equipment__c = prod.Name; planeuqipment.Rental_Quantity__c = planProductMap.get(prod.Name); ineuqipments.add(planeuqipment); campaignEquipments.add(planeuqipment); } } } }else{ //学会没有出借备品,需要新增 for(Rental_Equipment__c prod : prods){ if (!'0'.equals(planProductMap.get(prod.Name)) && String.isNotBlank(planProductMap.get(prod.Name))) { Plan_Rental_Equipment__c planeuqipment = new Plan_Rental_Equipment__c(); planeuqipment.Campaign__c = campaignId; planeuqipment.RecordTypeId = campaignRecordType; planeuqipment.Name = prod.Name; planeuqipment.Rental_Equipment__c = prod.Name; planeuqipment.Rental_Quantity__c = planProductMap.get(prod.Name); ineuqipments.add(planeuqipment); campaignEquipments.add(planeuqipment); } } } } else if (opdId != null && opdId != '') { // targetOPD = [SELECT Id,PlanProdDetail__c,Campaign__c FROM OPDPlan__c WHERE Id = :opdId]; if (targetOPD.OPDType__c == '事件') { List getEventList = new List(); getEventList = [SELECT Id,PlanProdDetail__c FROM Event WHERE Opd_Plan__c = :opdId]; if (getEventList.size() > 0) { targetEvent = getEventList[0]; } } if (opdEquipments.size() > 0) { //OPD已经有出借备品 for(Rental_Equipment__c prod : prods){ if (eveTemp.containsKey(prod.Name)) { if (!eveTemp.get(prod.Name).Rental_Quantity__c.equals(planProductMap.get(prod.Name))) { //出借备品数量有变化 if (String.isBlank(planProductMap.get(prod.Name))) { eveTemp.get(prod.Name).Rental_Quantity__c = '0'; }else{ eveTemp.get(prod.Name).Rental_Quantity__c = planProductMap.get(prod.Name); } upeuqipments.add(eveTemp.get(prod.Name)); } }else{ //新增的出借备品数量 if (!'0'.equals(planProductMap.get(prod.Name)) && String.isNotBlank(planProductMap.get(prod.Name))) { Plan_Rental_Equipment__c planeuqipment = new Plan_Rental_Equipment__c(); planeuqipment.OPD_Plan__c = opdId; planeuqipment.Name = prod.Name; planeuqipment.Rental_Equipment__c = prod.Name; planeuqipment.Rental_Quantity__c = planProductMap.get(prod.Name); if (targetOPD.OPDType__c == '事件') { if (String.isNotBlank(targetEvent.Id)) { planeuqipment.Event_ID__c = targetEvent.Id; planeuqipment.RecordTypeId = eventRecordType; } else { planeuqipment.RecordTypeId = otherRecordType; } }else if(targetOPD.OPDType__c == '学会') { planeuqipment.Campaign__c = targetOPD.Campaign__c; planeuqipment.RecordTypeId = campaignRecordType; }else{ planeuqipment.RecordTypeId = otherRecordType; } ineuqipments.add(planeuqipment); opdEquipments.add(planeuqipment); } } } }else{ //OPD没有出借备品,需要新增 for(Rental_Equipment__c prod : prods){ if (!'0'.equals(planProductMap.get(prod.Name)) && String.isNotBlank(planProductMap.get(prod.Name))) { Plan_Rental_Equipment__c planeuqipment = new Plan_Rental_Equipment__c(); planeuqipment.OPD_Plan__c = opdId; planeuqipment.Name = prod.Name; planeuqipment.Rental_Equipment__c = prod.Name; planeuqipment.Rental_Quantity__c = planProductMap.get(prod.Name); if (targetOPD.OPDType__c == '事件') { if (String.isNotBlank(targetEvent.Id)) { planeuqipment.Event_ID__c = targetEvent.Id; planeuqipment.RecordTypeId = eventRecordType; } else { planeuqipment.RecordTypeId = otherRecordType; } }else if(targetOPD.OPDType__c == '学会') { planeuqipment.Campaign__c = targetOPD.Campaign__c; planeuqipment.RecordTypeId = campaignRecordType; }else{ planeuqipment.RecordTypeId = otherRecordType; } ineuqipments.add(planeuqipment); opdEquipments.add(planeuqipment); } } } } System.debug('--ineuqipments--'+ineuqipments +' ----upeuqipments---'+upeuqipments); if (ineuqipments.size()>0) { insert ineuqipments; } if (upeuqipments.size()>0) { update upeuqipments; } if (campaignId != null && campaignId != '') { String quantity = ''; for(Plan_Rental_Equipment__c plan : campaignEquipments){ if (String.isNotBlank(plan.Rental_Quantity__c) && plan.Rental_Quantity__c != '0') { quantity += plan.Rental_Equipment__c + '*' + plan.Rental_Quantity__c + '; '; } } targetCampaign.LoadNum__c = quantity; update targetCampaign; } else if(opdId != null && opdId != ''){ String quantity = ''; for(Plan_Rental_Equipment__c plan : opdEquipments){ if (String.isNotBlank(plan.Rental_Quantity__c) && plan.Rental_Quantity__c != '0') { quantity += plan.Rental_Equipment__c + '*' + plan.Rental_Quantity__c + '; '; } } // targetEvent.PlanProdDetail__c = quantity; // update targetEvent; targetOPD.PlanProdDetail__c = quantity; update targetOPD; } // return null; } }