public without sharing class CampaignCopyToOPDPlanHandler extends Oly_TriggerHandler {
|
|
private Map<Id, Campaign> newMap;
|
private Map<Id, Campaign> oldMap;
|
private List<Campaign> newList;
|
private List<Campaign> oldList;
|
public static boolean HandlerFlag = false;
|
public CampaignCopyToOPDPlanHandler() {
|
this.newMap = (Map<Id, Campaign>) Trigger.newMap;
|
this.oldMap = (Map<Id, Campaign>) Trigger.oldMap;
|
this.newList = (List<Campaign>) Trigger.new;
|
this.oldList = (List<Campaign>) Trigger.old;
|
}
|
protected override void afterUpdate() {
|
//将符合条件的学会拷贝成OPDPlan
|
CampaignCopyToOPDPlan();
|
//学会发生改变,对应的OPDPlan也会发生相应的改变
|
listen();
|
//add by rentx LZHU-BX3DU8 2021-01-13 start
|
//在学会上学会的状态变成“已提交报告”的时候,查一下关联的opd计划,把状态变成完成
|
changeOPDPlanStatusBeOver();
|
//add by rentx LZHU-BX3DU8 2021-01-13 end
|
|
// 2022-01-26 ssm 决裁信息变化时更新OPD计划 start
|
updateApprovedToOPDPlan();
|
// 2022-01-26 ssm 决裁信息变化时更新OPD计划 end
|
}
|
|
private void CampaignCopyToOPDPlan() {
|
//记录类型 : 1.学会/会议 --> Society 2.社外培训 --> Training_event 3.服务培训/学会会议 -->Service_trainig 6.营业部专用会议 -->BusinessTraining
|
List<Id> recordTypeIds = new List<Id>();
|
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()); //营业部专用会议
|
//用来保存将学会转换成的OPDPlan
|
List<OPDPlan__c> ResultList = new List<OPDPlan__c> ();
|
//System.debug('CamMzyNewList :'+ newList.size());
|
List<String> idList = new List<String>();
|
for ( Campaign c : newList) {
|
OPDPlan__c tempOPD = new OPDPlan__c();
|
//RecordTypeId 摘要中
|
//System.debug('CamMzyStauts :'+ c.Status);
|
//System.debug('CamMzyStauts :'+ c.RecordTypeId);
|
//判断是由其他状态变成 公开中 ,且需要借出备品 时插入数据
|
Campaign oldCampaign = oldMap.get(c.Id);
|
if (!String.isEmpty(String.valueOf(oldCampaign.Status)) && !oldCampaign.Status.equals('公开中')) {
|
if ( c.Status != null && c.Status.equals('公开中') && recordTypeIds.contains(c.RecordTypeId)
|
&& String.isNotBlank(c.Is_LendProduct__c)
|
&& String.valueOf(c.Is_LendProduct__c).equals('是')) {
|
// System.debug('zzz:' + c);
|
//转换 (对应字段的管理)
|
// 学会的开始日期 --> OPD计划实施日期temp
|
tempOPD.OPDPlan_ImplementDate_temp__c = c.StartDate ;
|
// OPD 查找 市场活动 的关系字段
|
tempOPD.Campaign__c = c.Id ;
|
// 学会生成OPD计划时, OPD计划状态为 计划中
|
tempOPD.Status__c = '计划中';
|
// 学会名称 --> OPD计划科室
|
//tempOPD.Account_Laboratory__c = c.Name2__c ;
|
// 学会所有人 --> OPD计划所有人
|
tempOPD.OwnerId = c.OwnerId;
|
// 学会会议的出借备品信息-->OPD计划出借备品信息
|
tempOPD.PlanProdDetail__c = c.LoadNum__c;
|
tempOPD.OPDType__c = '学会';//2020-10-21 zh OPD计划类型为学会 SWAG-BS6BYA
|
//20201118 you SWAG-BVGAGD start
|
tempOPD.Meeting_Cooperate__c = c.Meeting_Cooperate__c;
|
tempOPD.Meeting_Cooperate2__c = c.Meeting_Cooperate2__c;
|
tempOPD.Meeting_Cooperate3__c = c.Meeting_Cooperate3__c;
|
tempOPD.Meeting_Cooperate4__c = c.Meeting_Cooperate4__c;
|
//20201118 you SWAG-BVGAGD end
|
//20201208 liying SFDC-BVY95C start
|
tempOPD.Open_scope__c = c.Open_scope__c;
|
//20201208 liying SFDC-BVY95C end
|
//20211223 OBPM LY start
|
tempOPD.IF_Approved__c = c.IF_Approved__c;//是否申请决裁
|
tempOPD.Approved_Status__c = c.Approved_Status__c;//决裁状态
|
tempOPD.Approved_No__c = c.Meeting_Approved_No__c;//决裁编码
|
//20211223 OBPM LY end
|
|
idList.add(c.Id);
|
//写入集合中
|
ResultList.add(tempOPD);
|
}
|
}
|
//System.debug('mmmmmmm:' + ResultList);
|
}
|
//20201022 zh 小表同步opd SWAG-BS6BYA
|
Map<Id, Id> camToOPD = new Map<Id, Id>();
|
if (idList.size() > 0) {
|
//查询指定OPDPlan mzy
|
List<OPDPlan__c> OPDPlanList = [select Campaign__c from OPDPlan__c where Campaign__c in :idList];
|
if (OPDPlanList.size() <= 0) {
|
//添加
|
insert ResultList;
|
for (OPDPlan__c opd : ResultList ) {
|
camToOPD.put(opd.Campaign__c, opd.Id);
|
}
|
|
List<Plan_Rental_Equipment__c> updateProds = new List<Plan_Rental_Equipment__c>();
|
List<Plan_Rental_Equipment__c> planProds = [SELECT Id, Campaign__c, OPD_Plan__c FROM Plan_Rental_Equipment__c WHERE Campaign__c in :idList];
|
if (planProds.size() > 0) {
|
for (Plan_Rental_Equipment__c plan : planProds) {
|
plan.OPD_Plan__c = camToOPD.get(plan.Campaign__c);
|
updateProds.add(plan);
|
|
}
|
}
|
if (updateProds.size() > 0) {
|
update updateProds;
|
}
|
}
|
|
}
|
}
|
|
// 2020-11-10 mzy update 学会取消或者延期, 不直接更改opd计划的状态和时间,而是新建一个取消延期对象 start
|
// 构建需要取消的OPD计划
|
@TestVisible
|
private CancelPostponePlan__c QX_OPDPlanBuild(ID OpdID) {
|
CancelPostponePlan__c tempCpp = new CancelPostponePlan__c();
|
tempCpp.CancelOPDPlan__c = OpdID;
|
tempCpp.Status__c = '取消成功';
|
tempCpp.cancelReasonCombobox__c = '学会取消';
|
tempCpp.RecordTypeId = '01210000000gQyL';
|
return tempCpp;
|
}
|
// 构建需要延期的OPD计划
|
@TestVisible
|
private CancelPostponePlan__c YQ_OPDPlanBuild(OPDPlan__c Opd, Date startDate) {
|
CancelPostponePlan__c tempCpp = new CancelPostponePlan__c();
|
tempCpp.CancelOPDPlan__c = Opd.id;
|
tempCpp.Status__c = '延期成功';
|
tempCpp.cancelReasonCombobox__c = '学会延期';
|
tempCpp.NextPlanDate__c = startDate;
|
tempCpp.RecordTypeId = '01210000000gQyM';
|
// 2021-01-21 mzy add 会议的时间大于OPD计划的时间,则为延期 , 会议的时间小于OPD计划的时间,则为提前
|
if(Opd.OPDPlan_ImplementDate__c < StartDate){
|
tempCpp.ApplyType__c = '延期';
|
}else if(Opd.OPDPlan_ImplementDate__c > StartDate){
|
tempCpp.ApplyType__c = '提前';
|
}
|
// 2021-01-21 mzy add 会议的时间大于OPD计划的时间,则为延期 , 会议的时间小于OPD计划的时间,则为提前
|
return tempCpp;
|
}
|
// 2020-11-10 mzy update 学会取消或者延期, 不直接更改opd计划的状态和时间,而是新建一个取消延期对象 end
|
|
private void listen() {
|
// 2020-11-10 mzy update 学会取消或者延期, 不直接更改opd计划的状态和时间,而是新建一个取消延期对象 start
|
//如果学会的状态发生改变时,OPDplan的状态也将发生改变
|
// 进入了一次不进入第二次
|
if(CampaignCopyToOPDPlanHandler.HandlerFlag){
|
return;
|
}
|
CampaignCopyToOPDPlanHandler.HandlerFlag = true;
|
map<ID, Campaign> QXMap = new Map<ID, Campaign>(); //保存取消的学会
|
Map<ID, Campaign> YQMap = new Map<ID, Campaign>(); //保存延期的学会
|
Map<ID, Campaign> hyhzMap = new Map<ID, Campaign>();//SWAG-BVGAGD 20201119 you 会议合作本部1,2,3,4带值
|
for (Campaign c : newList) {
|
//目的 :学会变化 : 状态变为取消 / 开始日期发生改变
|
Campaign oldCampaign = oldMap.get(c.Id);
|
if (!String.isEmpty(String.valueOf(oldCampaign.Status))
|
&& !oldCampaign.Status.equals('取消')) {
|
// 状态从非取消变为取消
|
if ( (c.Status != null && c.Status.equals('取消')) ) {
|
// 取消的学会
|
QXMap.put(c.id, c);
|
}
|
// 在非取消时,开始日期发生变化为延期
|
else if (c.StartDate != oldCampaign.StartDate) {
|
// 延期的学会
|
YQMap.put(c.id, c);
|
}
|
//SWAG-BVGAGD 20201119 you start
|
if(c.Meeting_Cooperate__c != oldCampaign.Meeting_Cooperate__c
|
|| c.Meeting_Cooperate2__c != oldCampaign.Meeting_Cooperate2__c
|
|| c.Meeting_Cooperate3__c != oldCampaign.Meeting_Cooperate3__c
|
|| c.Meeting_Cooperate4__c != oldCampaign.Meeting_Cooperate4__c
|
|| c.Open_scope__c != oldCampaign.Open_scope__c){
|
hyhzMap.put(c.id, c);
|
}
|
//SWAG-BVGAGD 20201119 you end
|
}
|
}
|
//用来保存新建的取消(延期)对象,包括取消和延期两种情况
|
List<CancelPostponePlan__c> QX_List = new List<CancelPostponePlan__c>();
|
//System.debug('Test : '+idList);
|
//查询取消学会的OPDPlan
|
List<OPDPlan__c> QX_OPDPlan = new List<OPDPlan__c>();
|
//查询延期学会的OPDPlan
|
List<OPDPlan__c> YQ_OPDPlan = new List<OPDPlan__c>();
|
//SWAG-BVGAGD 20201119 you
|
List<OPDPlan__c> oPDPlans = new List<OPDPlan__c>();
|
// 需要更新的OPD计划的ID集合
|
Set<ID> targetIDSet = new Set<ID>();
|
targetIDSet.addAll(QXMap.keySet());
|
targetIDSet.addAll(YQMap.keySet());
|
//SWAG-BVGAGD 20201119 you start
|
targetIDSet.addAll(hyhzMap.keySet());
|
//SWAG-BVGAGD 20201119 you end
|
|
if (targetIDSet.size() > 0) {
|
List<OPDPlan__c> targetOPDPlanList =
|
[select id , Campaign__c ,OPDPlan_ImplementDate__c
|
from OPDPlan__c
|
where Campaign__c != null
|
and status__c != '取消'
|
and Campaign__c in: targetIDSet
|
];
|
|
for (OPDPlan__c tempOPD : targetOPDPlanList) {
|
// 如果学会取消,那么生成取消的 取消(延期)对象
|
if (QXMap.containsKey(tempOPD.Campaign__c)) {
|
QX_List.add(QX_OPDPlanBuild(tempOPD.id));
|
}
|
// 如果学会延期,那么生成延期的 取消(延期)对象,并且记录下来新的学会开始日期
|
else if (YQMap.containsKey(tempOPD.Campaign__c)) {
|
Date startDate = YQMap.get(tempOPD.Campaign__c)?.StartDate;
|
QX_List.add(YQ_OPDPlanBuild(tempOPD, startDate));
|
}
|
//SWAG-BVGAGD 20201119 you start
|
// add by gzw 注释掉,单独操作 start
|
// for (Campaign c : newList) {
|
// if(c.id==tempOPD.Campaign__c){
|
// tempOPD.Meeting_Cooperate__c = c.Meeting_Cooperate__c;
|
// tempOPD.Meeting_Cooperate2__c = c.Meeting_Cooperate2__c;
|
// tempOPD.Meeting_Cooperate3__c = c.Meeting_Cooperate3__c;
|
// tempOPD.Meeting_Cooperate4__c = c.Meeting_Cooperate4__c;
|
// tempOPD.Open_scope__c = c.Open_scope__c;
|
// oPDPlans.add(tempOPD);
|
// }
|
// }
|
// add by gzw 注释掉,单独操作 end
|
//SWAG-BVGAGD 20201119 you end
|
|
}
|
}
|
|
if (QX_List.size() > 0 && QX_List != null) {
|
insert QX_List;
|
}
|
// add by gzw OPDPlan__c 单独循环,否则OPDPlan_ImplementDate__c 会还原,报错 start
|
if (targetIDSet.size() > 0) {
|
List<OPDPlan__c> targetOPDPlanList =
|
[select id , Campaign__c
|
from OPDPlan__c
|
where Campaign__c != null
|
and status__c != '取消'
|
and Campaign__c in: targetIDSet
|
];
|
|
for (OPDPlan__c tempOPD : targetOPDPlanList) {
|
//SWAG-BVGAGD 20201119 you start
|
for (Campaign c : newList) {
|
if(c.id==tempOPD.Campaign__c){
|
tempOPD.Meeting_Cooperate__c = c.Meeting_Cooperate__c;
|
tempOPD.Meeting_Cooperate2__c = c.Meeting_Cooperate2__c;
|
tempOPD.Meeting_Cooperate3__c = c.Meeting_Cooperate3__c;
|
tempOPD.Meeting_Cooperate4__c = c.Meeting_Cooperate4__c;
|
tempOPD.Open_scope__c = c.Open_scope__c;
|
oPDPlans.add(tempOPD);
|
}
|
}
|
//SWAG-BVGAGD 20201119 you end
|
|
}
|
}
|
// add by gzw OPDPlan__c 单独循环,否则OPDPlan_ImplementDate__c 会还原,报错 end
|
//SWAG-BVGAGD 20201119 you start
|
if (oPDPlans.size() > 0) {
|
// System.debug('oPDPlans++++++' + oPDPlans);
|
update oPDPlans;
|
}
|
//SWAG-BVGAGD 20201119 you end
|
|
// 2020-11-10 mzy update 学会取消或者延期, 不直接更改opd计划的状态和时间,而是新建一个取消延期对象 end
|
|
|
/* 2020-11-10 mzy update 学会取消或者延期,OPD计划相应的发生改变
|
|
//创建Map保存 学会Id 和 OPDPlan的Id
|
Map<String,String> QXIdsMap = new Map<String,String>();
|
for (OPDPlan__c tempOPD : QX_OPDPlan){
|
QXIdsMap.put(tempOPD.Campaign__c,tempOPD.id);
|
}
|
|
//用来保存发生变化的OPDPlan
|
List<OPDPlan__c> UpdateOPDPlan = new List<OPDPlan__c>();
|
for (Campaign c : newList){
|
OPDPlan__c tempOPD = new OPDPlan__c();
|
// System.debug('====111: ' + IdsMap.get(c.id));
|
// 判断如果id为空则不进行更新操作
|
if(IdsMap.get(c.id) != null && !String.isEmpty(IdsMap.get(c.id))){
|
tempOPD.id = IdsMap.get(c.id);
|
//模拟条件
|
//if(c.Status.equals('草案中')){
|
tempOPD.Status__c = '计划中' ;
|
}else
|
// 学会会议延期 更新OPD计划的实施日期
|
tempOPD.OPDPlan_ImplementDate__c = c.StartDate ;
|
//学会会议取消,OPD计划取消
|
if(c.Status.equals('取消')) {
|
tempOPD.Status__c = '取消';
|
}
|
UpdateOPDPlan.add(tempOPD);
|
//else {
|
// tempOPD.Status__c = '完毕';
|
// }
|
// UpdateOPDPlan.add(tempOPD);
|
}
|
|
}
|
//更新状态
|
update UpdateOPDPlan ;*/
|
|
|
}
|
|
//add by rentx LZHU-BX3DU8 2021-01-13 start
|
private void changeOPDPlanStatusBeOver(){
|
//获取状态变为 '完毕未报告' 的学会的id
|
List<Id> camIds = new List<Id>();
|
for ( Campaign c : newList) {
|
if (c.Status != null && c.Status == '已提交报告' && oldMap.get(c.Id).Status != null && oldMap.get(c.Id).Status != '已提交报告') {
|
camIds.add(c.Id);
|
}
|
}
|
//获取学会下的OPD计划
|
if (camIds.size() > 0) {
|
List<OPDPlan__c> opdlist = [select id,status__c from OPDPlan__c WHERE OPDType__c = '学会' and status__c != '完毕' and Campaign__c in: camIds];
|
//将OPD计划的状态更新为 完毕
|
if (opdlist != null && opdlist.size() > 0) {
|
for (OPDPlan__c opdc : opdlist) {
|
opdc.Status__c= '完毕';
|
}
|
update opdlist;
|
}
|
}
|
|
}
|
//add by rentx LZHU-BX3DU8 2021-01-13 end
|
|
// 2022-01-26 ssm 决裁信息变化时更新OPD计划 start
|
private void updateApprovedToOPDPlan() {
|
List<String> cam_ids = new List<String>();
|
for (Campaign cam : this.newList) {
|
Campaign old_cam = this.oldMap.get(cam.Id);
|
if (old_cam != null && (
|
old_cam.IF_Approved__c != cam.IF_Approved__c ||
|
old_cam.Approved_Status__c != cam.Approved_Status__c ||
|
old_cam.Meeting_Approved_No__c != cam.Meeting_Approved_No__c
|
)) {
|
cam_ids.add(cam.Id);
|
}
|
}
|
if (cam_ids.size() > 0) {
|
List<OPDPlan__c> plans = [select Id, Campaign__c, IF_Approved__c, Approved_Status__c, Approved_No__c from OPDPlan__c where Campaign__c in :cam_ids];
|
if (plans != null && plans.size() > 0) {
|
for (OPDPlan__c plan : plans) {
|
Campaign cam = this.newMap.get(plan.Campaign__c);
|
plan.IF_Approved__c = cam.IF_Approved__c;
|
plan.Approved_Status__c = cam.Approved_Status__c;
|
plan.Approved_No__c = cam.Meeting_Approved_No__c;
|
}
|
update plans;
|
}
|
}
|
}
|
// 2022-01-26 ssm 决裁信息变化时更新OPD计划 end
|
}
|