trigger MaintenanceContractHpDeptUpd on Maintenance_Contract__c (before insert, before update) {
|
|
//deloitte-zhj 20231124 本地化导入 start
|
if((!Test.isRunningTest())&&System.Label.ByPassTrigger.contains(UserInfo.getUserId())){
|
return;
|
}
|
//deloitte-zhj 20231124 本地化导入 end
|
|
if (StaticParameter.MaintenanceContractHpDeptUpdTrigger) {
|
List<String> accIds = new List<String>();
|
List<String> userIds = new List<String>();
|
for(Maintenance_Contract__c mc : Trigger.new) {
|
if (Trigger.isInsert) {
|
accIds.add(mc.Department__c);
|
userIds.add(mc.Service_Contract_Staff__c);
|
}
|
// LJPH-BYZ8PP gwy start
|
if (Trigger.isBefore) {
|
if (Trigger.isUpdate) {
|
if (Trigger.oldMap.get(mc.Id).get('Contract_Conclusion_Date__c') != mc.Contract_Conclusion_Date__c
|
&& mc.Maintenance_Contract_No__c == null) {
|
accIds.add(mc.Maintenance_Contract_No__c= mc.Management_Code__c);
|
}
|
}
|
}
|
// LJPH-BYZ8PP gwy end
|
if (Trigger.isUpdate) {
|
if (Trigger.oldMap.get(mc.Id).get('Department__c') != mc.Department__c && String.isBlank(mc.Department__c) == false) {
|
accIds.add(mc.Department__c);
|
}
|
if(Trigger.oldMap.get(mc.Id).get('Service_Contract_Staff__c') != mc.Service_Contract_Staff__c
|
|| Trigger.oldMap.get(mc.Id).get('Mail_Staff_JingliManager__c') == null
|
|| Trigger.oldMap.get(mc.Id).get('Mail_Staff_BuzhangManager__c') == null) {
|
userIds.add(mc.Service_Contract_Staff__c);
|
}
|
}
|
}
|
|
if (accIds.size() > 0) {
|
// 診療科レコードタイプ
|
|
// LD 20200807 优化account record type ID 读取方法 Start
|
String[] deptTypes = new String[] {'病院', '診療科 その他', '診療科 呼吸科', '診療科 婦人科', '診療科 普外科', '診療科 泌尿科', '診療科 消化科', '診療科 耳鼻喉科'};
|
|
// 原逻辑
|
// List<RecordType> deptRects = [select Id, Name from RecordType where IsActive = true and SobjectType = 'Account' and Name IN :deptTypes];
|
// Map<String, String> deptRectMap = new Map<String, String>();
|
// for (RecordType rect : deptRects) {
|
// deptRectMap.put(rect.Id, rect.Name);
|
// }
|
|
// 新逻辑
|
String [] RecordTypeId = new String[] {System.Label.HP , System.Label.Department_OTH , System.Label.Department_BF , System.Label.Department_GYN , System.Label.Department_GS , System.Label.Department_URO , System.Label.Department_GI , System.Label.Department_ENT };
|
Map<String, String> deptRectMap = new Map<String, String>();
|
deptRectMap.put(RecordTypeId[0], deptTypes[0]);
|
deptRectMap.put(RecordTypeId[1], deptTypes[1]);
|
deptRectMap.put(RecordTypeId[2], deptTypes[2]);
|
deptRectMap.put(RecordTypeId[3], deptTypes[3]);
|
deptRectMap.put(RecordTypeId[4], deptTypes[4]);
|
deptRectMap.put(RecordTypeId[5], deptTypes[5]);
|
deptRectMap.put(RecordTypeId[6], deptTypes[6]);
|
deptRectMap.put(RecordTypeId[7], deptTypes[7]);
|
|
// LD 20200807 优化account record type ID 读取方法 End
|
|
Map<Id, Account> accMap = new Map<Id, Account>();
|
List<Account> accs = ControllerUtil.selectAccountForTrigger(accIds);
|
for(Account acc : accs) {
|
accMap.put(acc.Id, acc);
|
}
|
|
for(Maintenance_Contract__c mc : Trigger.new) {
|
// 「診療科」に診療科を選択する場合
|
Account acc = accMap.get(mc.Department__c);
|
if (acc != null
|
&& deptRectMap.get(acc.RecordTypeId) != null) {
|
if (deptRectMap.get(acc.RecordTypeId) == '病院') {
|
mc.Department_Class__c = null;
|
mc.Hospital__c = acc.Id;
|
} else {
|
mc.Department_Class__c = acc.ParentId;
|
mc.Hospital__c = acc.Parent.ParentId;
|
}
|
}
|
}
|
}
|
|
// 邮件用主担当部长、邮件用主担当经理 设置
|
if (userIds.size() > 0) {
|
List<User> retList = [select Id, JingLifuwuId__c, BuZhangFuwuId__c from User where Id in : userIds];
|
Map<Id, User> userMap = new Map<Id, User>();
|
for (User u : retList) {
|
userMap.put(u.Id, u);
|
}
|
for(Maintenance_Contract__c mc : Trigger.new) {
|
if (Trigger.isInsert) {
|
User us = userMap.get(mc.Service_Contract_Staff__c);
|
if (us != null) {
|
mc.Mail_Staff_JingliManager__c = us.JingLifuwuId__c;
|
mc.Mail_Staff_BuzhangManager__c = us.BuZhangFuwuId__c;
|
}
|
}
|
if (Trigger.isUpdate) {
|
if(Trigger.oldMap.get(mc.Id).get('Service_Contract_Staff__c') != mc.Service_Contract_Staff__c
|
|| Trigger.oldMap.get(mc.Id).get('Mail_Staff_JingliManager__c') == null
|
|| Trigger.oldMap.get(mc.Id).get('Mail_Staff_BuzhangManager__c') == null) {
|
User us = userMap.get(mc.Service_Contract_Staff__c);
|
if (us != null) {
|
mc.Mail_Staff_JingliManager__c = us.JingLifuwuId__c;
|
mc.Mail_Staff_BuzhangManager__c = us.BuZhangFuwuId__c;
|
}
|
}
|
}
|
}
|
}
|
|
}
|
|
}
|