/**
|
* Opportunity作成後(コピー)、triggerにて集計項目をnullにする
|
* 商談の「外貿/内貿」と「通貨」の値が一致させるトリガーです。
|
* 商談の所有者【システム】に所有者のIdを入れる
|
* OpportunityBefInsUpdTriggerTest
|
*/
|
trigger OpportunityBefUpd on Opportunity (before insert, before update) {
|
|
//Skpi test
|
if(Test.isRunningTest()){
|
return;
|
}
|
//deloitte-zhj 20231124 本地化导入 start
|
if((!Test.isRunningTest())&&System.Label.ByPassTrigger.contains(UserInfo.getUserId())){
|
return;
|
}
|
//deloitte-zhj 20231124 本地化导入 end
|
|
|
// SWAG-CE55BX 预测优化 start
|
if (StaticParameter.EscapeOppandStaTrigger) {
|
return;
|
}
|
// SWAG-CE55BX 预测优化 end
|
List<String> idlist = new List<String>();
|
if(Trigger.isInsert){
|
//询价担当人和战略科室担当人不一致,在这里同步 20170512 XFUU-ALB9JK
|
if(Trigger.isBefore){
|
for(Opportunity ops : Trigger.new){
|
if (ops.ownerid != ops.Custmor_pic_ID__c &&
|
ops.owner_not_automatically_update__c == false &&
|
ops.Custmor_pic_ID__c != null &&
|
ops.AccountType__c != system.label.Account_Type_Name_Agency &&
|
ops.Custmor_pic_IsActive__c == true){
|
System.debug('Anydatatype_msg' + ops.Custmor_pic_ID__c);
|
ops.ownerid = ops.Custmor_pic_ID__c;
|
}
|
//if(ops.State_Owner__c == '能量') ops.STMS_Package_Sale__c = true;
|
}
|
}
|
if(Trigger.isAfter){
|
/*List<Opportunity> opList = Trigger.new.clone();
|
if(opList.size()==1){
|
for(Opportunity op : opList ){
|
if(op.Old_Opportunity_ID__c !=null){
|
String ResultStr = ControllerUtil.CopyQuoteFromOppor(op.Old_Opportunity_ID__c,op.Opportunity_No__c,op.Id,op);
|
System.debug('2333333333'+ResultStr);
|
}
|
}
|
}*/
|
}
|
}else if(Trigger.isUpdate){
|
//询价担当人和战略科室担当人不一致,在这里同步 20170512 XFUU-ALB9JK
|
////ops.AccountType__c != system.label.Account_Type_Name &&
|
if(Trigger.isBefore){
|
// List<String> opIds = new List<String>();
|
|
// List<String> acs = new List<String>();
|
for(Opportunity ops : Trigger.new){
|
if (ops.ownerid != ops.Custmor_pic_ID__c &&
|
ops.owner_not_automatically_update__c == false &&
|
ops.Custmor_pic_ID__c != null &&
|
ops.AccountType__c != system.label.Account_Type_Name_Agency &&
|
ops.Custmor_pic_IsActive__c == true){
|
System.debug('Anydatatype_msg' + ops.Custmor_pic_ID__c);
|
ops.ownerid = ops.Custmor_pic_ID__c;
|
}
|
//if(ops.State_Owner__c == '能量') ops.STMS_Package_Sale__c = true;
|
// opIds.add(ops.Id);
|
// acs.add(ops.)
|
|
//2022-3-29 yjk SWAG-CCL6R7
|
//2022-5-18 yjk XLIU-CEJ38N 注释掉 start
|
// Opportunity oldOne = Trigger.oldMap.get(ops.id);
|
// if(oldOne.Bidding_Project_Name_Bid__c==null && ops.Bidding_Project_Name_Bid__c !=null ){
|
// List<Tender_information__c> ticList = [select id,ResultDate__c from Tender_information__c where id = :ops.Bidding_Project_Name_Bid__c];
|
|
// ops.Closing_Bid_Date__c = ticList.size() == 1? ticList.get(0).ResultDate__c : null ;
|
|
// }
|
//2022-5-18 yjk XLIU-CEJ38N 注释掉 end
|
}
|
// System.debug('====================='+opIds);
|
// //在询价触发器里改这个验证,排除备品状态是取消的,只要是有备品,就不允许更改最终用户。
|
|
// //1.从询价中把Id拿出来
|
|
// //2.从询价Id中查询备品状态不为取消(状态不为取消且询价中有备品的话,就报错)
|
// List<Rental_Apply__c> raList = [Select Id,Follow_UP_Opp__c From Rental_Apply__c Where Status__c != '取消' and Follow_UP_Opp__c IN :opIds];
|
// System.debug('--------------aaaaaaaaaaaaaaaaaaaaaa'+raList);
|
// //3.将其(每个询价对应的备品)放入map中
|
// Map<String,List<Rental_Apply__c>> raMap = new Map<String,List<Rental_Apply__c>>();
|
// for (Rental_Apply__c ra : raList) {
|
// if(raMap.get(ra.Follow_UP_Opp__c) != null){
|
// raMap.get(ra.Follow_UP_Opp__c).add(ra);
|
// System.debug('---------'+raMap.get(ra.Follow_UP_Opp__c));
|
// }else{
|
// List<Rental_Apply__c> raChildList = new List<Rental_Apply__c>();
|
// raChildList.add(ra);
|
// raMap.put(ra.Follow_UP_Opp__c,raChildList);
|
// System.debug(raMap);
|
// }
|
// }
|
// //4.通过for循环用Id进行对比,如果备品状态不为取消,则报错
|
// for (String opId : opIds) {
|
// if(raMap.get(opId).size()>0){
|
// // ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.ERROR,'Error: Invalid Input.');
|
// // ApexPages.addMessage(myMsg);
|
// Account.addError('由于该询价关联有备品,更改客户名会产生影响');
|
// }
|
// }
|
}
|
//如果询价编码变动,则报价编码一起变动
|
if(Trigger.isAfter){
|
/*List<id> updateQuoteOppoid = new List<id>();
|
List<String> updateSodOppoid = new List<String>();
|
for(Opportunity ops : Trigger.new){
|
Opportunity oldOne = Trigger.oldMap.get(ops.id);
|
Opportunity newOne = Trigger.newMap.get(ops.id);
|
if(oldOne.Opportunity_No__c != newOne.Opportunity_No__c){
|
updateQuoteOppoid.add(ops.id);
|
}
|
}
|
if(updateQuoteOppoid.size()>0){
|
ControllerUtil.ResetQuoteNo(updateQuoteOppoid);
|
}
|
//如果特定字段发生变化,触发以下事件(仅限单一事件)
|
for(Opportunity ops : Trigger.new){
|
Opportunity oldOne = Trigger.oldMap.get(ops.id);
|
Opportunity newOne = Trigger.newMap.get(ops.id);
|
if( (oldOne.S_Install_Date__c != newOne.S_Install_Date__c && oldOne.S_Install_Date__c == null)||
|
(oldOne.SI_FinishedPorj_Date__c != newOne.SI_FinishedPorj_Date__c && oldOne.SI_FinishedPorj_Date__c == null
|
)){
|
updateSodOppoid.add(ops.id);
|
}
|
}
|
if(updateSodOppoid.size()>0){
|
ISO_DemandOperAndDemonsController.synchronousSodWithOppor(updateSodOppoid);
|
}*/
|
}
|
}
|
|
//付晓坤 2021-1-13 在询价触发器里改这个验证,排除备品状态是取消的,只要是有备品,就不允许更改最终用户 Start
|
if(Trigger.isBefore&&Trigger.isUpdate){
|
//1.从询价中把Id拿出来
|
List<String> opIds = new List<String>();
|
List<Rental_Apply__c> raList = new List<Rental_Apply__c>();
|
for(Opportunity ops : Trigger.new){
|
//客户名改变以后才执行下面的操作
|
if(Trigger.oldMap.get(ops.Id).AccountId != ops.AccountId && ops.RecordTypeId != System.label.target && ops.StageName!= '目標'){ //niwu -01210000000QekP
|
opIds.add(ops.Id);
|
}
|
}
|
if(opIds.size()>0){
|
//对于系统管理员,只存在取消和完了的备品,允许更改。
|
if(UserInfo.getProfileId() != System.Label.ProfileId_SystemAdmin && UserInfo.getProfileId() != System.Label.ProfileId_SystemAdminGPI){
|
//2.从询价Id中查询备品状态不为取消(状态不为取消且询价中有s备品的话,就报错)
|
raList = [Select Id,Follow_UP_Opp__c From Rental_Apply__c Where RA_Status_Text__c != '取消' and Follow_UP_Opp__c IN :opIds];
|
}else{
|
//2.从询价Id中查询备品状态不为取消(状态不为取消且询价中有s备品的话,就报错)
|
//20220307 lt update and RA_Status_Text__c != '草案中' SWAG-CBXCYR 【委托】医院合并数据转移问题
|
raList = [Select Id,Follow_UP_Opp__c From Rental_Apply__c Where RA_Status_Text__c != '取消' and RA_Status_Text__c != '完了' and RA_Status_Text__c != '草案中' and Follow_UP_Opp__c IN :opIds];
|
}
|
//3.将其(每个询价对应的备品)放入map中
|
Map<String,Rental_Apply__c> raMap = new Map<String,Rental_Apply__c>();
|
for (Rental_Apply__c ra : raList) {
|
raMap.put(ra.Follow_UP_Opp__c,ra);
|
}
|
//判断询价中是否有备品,老的客户不等于新的客户
|
for(Opportunity opps : Trigger.new){
|
//4.通过for循环用Id进行对比,如果备品状态不为取消,则报错
|
if(raMap.containsKey(opps.Id)){
|
opps.AccountId.addError('询价:'+opps.Opportunity_No__c+'有关联备品申请,如果修改客户将影响备品回库');
|
}
|
}
|
}
|
}
|
//付晓坤 2021-1-13 在询价触发器里改这个验证,排除备品状态是取消的,只要是有备品,就不允许更改最终用户 End
|
|
//q.Quote_No__c = opp.Opportunity_No__c + '-' + oppNo;
|
system.debug('服务器侦错:other');
|
if (StaticParameter.EscapeOpportunityBefUpdTrigger) {
|
System.debug('Escape、EscapeOpportunityBefUpdTrigger:::::' + StaticParameter.EscapeOpportunityBefUpdTrigger);
|
return;
|
}
|
|
Opportunity newTarget = null;
|
List<Id> quoteIds = new List<Id>();
|
|
//市(文本)値設定のため、データを検索
|
List<String> oppIds = new List<String>();
|
|
List<String> hosIds = new List<String>();
|
List<String> ownerIds = new List<String>();
|
for(Opportunity opp : Trigger.new){
|
hosIds.add(opp.Hospital__c);
|
ownerIds.add(opp.OwnerId);
|
}
|
//List<Account> hospitallist = [select id,Name,State_Master__r.Sales_assistant__r.Id,State_Master__r.Energy_Assistant__r.Id from Account where id in :hosIds];
|
//List<Account> hospitallist = [select id, Name, OCM_Management_Province__r.GI_assistant__c, OCM_Management_Province__r.SP_assistant__c, OCM_Management_Province__r.Energy_assistant__c from Account where id in :hosIds];
|
//Map<String,Account> hospitalMap = new Map<String,Account>();
|
|
//for(Account acc : hospitallist){
|
// hospitalMap.put(acc.id, acc);
|
//}
|
|
// 20210623 SQL优化 Start
|
// List<OCM_Management_Province__c> mpList = [select id, Name, GI_assistant__c, SP_assistant__c, Energy_assistant__c from OCM_Management_Province__c];
|
// Map<String, OCM_Management_Province__c> mpMap = new Map<String, OCM_Management_Province__c>();
|
// for (OCM_Management_Province__c mp : mpList) {
|
// mpMap.put(mp.Name, mp);
|
// }
|
Map<String, OCM_Management_Province__c> mpMap = new Map<String, OCM_Management_Province__c>();
|
List<OCM_Management_Province__c> mpList = new List<OCM_Management_Province__c>();
|
if (trigger.isBefore && (trigger.isInsert || trigger.isUpdate)) {
|
mpList = [select id, Name, GI_assistant__c, SP_assistant__c, Energy_assistant__c from OCM_Management_Province__c];
|
}
|
for (OCM_Management_Province__c mp : mpList) {
|
mpMap.put(mp.Name, mp);
|
}
|
// 20210623 SQL优化 End
|
|
// 20210623 SQL优化 Start
|
// Map<String, String> ownerUserMap = new Map<String, String>();
|
// List<User> owerUser = [select id,Dept__c from User where id in :ownerIds];
|
// for (User u : owerUser) {
|
// ownerUserMap.put(u.id, u.Dept__c);
|
// }
|
// 20210623 SQL优化 End
|
|
for (Opportunity opp : Trigger.new) {
|
if (Trigger.isInsert && Trigger.isBefore) {
|
// Opportunity作成後(コピー)、triggerにて集計項目をnullにする
|
opp.Num_Of_NTC__c = null;
|
opp.Num_Of_OPD__c = null;
|
opp.Visit_President_Count__c = null;
|
opp.Visit_Head_Doctor_Count__c = null;
|
opp.Xin_Gross_Follow_Num__c = null;
|
}
|
if (!String.isBlank(opp.Id)) {
|
oppIds.add(opp.Id);
|
}
|
// OLY_OCM-185_149P 询价管理改善方案 询价提醒人自动设置
|
if (trigger.isBefore && (trigger.isInsert || trigger.isUpdate)) {
|
Opportunity old = trigger.oldMap == null ? null : trigger.oldMap.get(opp.Id);
|
//add by rentx 20210713 start 设置招投标阶段状态
|
if (Trigger.isInsert || (old != null && old.Bidding_Project_Name_Bid__c == null && opp.Bidding_Project_Name_Bid__c != null)) {
|
opp.InfoTypeBid_text__c = opp.InfoTypeBid__c;
|
}
|
//add by rentx 20210713 end 设置招投标阶段状态
|
Opp.ShippingDate_For_Report__c = opp.Shipping_Date_For_Report__c; //日期(业绩统计用)
|
//Account hospital = HospitalMap.get(opp.Hospital__c);
|
OCM_Management_Province__c mp = mpMap.get(opp.OCM_man_province_no_eng__c);
|
opp.Manager_name_text__c = opp.Sales_manager_departmentID__c; // 询价所有人的经理(文本)
|
if (trigger.isInsert || opp.Last_alert_to_user_update__c != old.Last_alert_to_user_update__c
|
|| opp.OwnerId != old.OwnerId
|
|| String.isBlank(opp.Sales_assistant_name_text__c)
|
) {
|
/* if(hospital != null){
|
if(owerUser.size() > 0 && ownerUserMap.get(opp.OwnerId) == '能量事业本部') {
|
//User u = owerUser.get(0);
|
//if(u.Dept__c=='能量事业本部') {
|
//opp.Sales_assistant_name_text__c = hospital.State_Master__r.Energy_Assistant__r.Id; // 询价助理(文本)
|
opp.Sales_assistant_name_text__c = hospital.OCM_Management_Province__r.Energy_assistant__c;
|
//} else {
|
// opp.Sales_assistant_name_text__c = hospital.State_Master__r.Sales_assistant__r.Id; // 询价助理(文本)
|
//}
|
} else {
|
//opp.Sales_assistant_name_text__c = hospital.State_Master__r.Sales_assistant__r.Id; // 询价助理(文本)
|
if (opp.Opportunity_Category__c == 'GI' || opp.Opportunity_Category__c == 'BF' || opp.Opportunity_Category__c == 'ET') {
|
opp.Sales_assistant_name_text__c = hospital.OCM_Management_Province__r.GI_assistant__c;
|
} else {
|
opp.Sales_assistant_name_text__c = hospital.OCM_Management_Province__r.SP_assistant__c;
|
}
|
}
|
}*/
|
if (mp != null) {
|
if (opp.OCM_man_province__c == '能量') {
|
opp.Sales_assistant_name_text__c = mp.Energy_assistant__c;
|
} else {
|
if (opp.Opportunity_Category__c == 'GI' || opp.Opportunity_Category__c == 'BF' || opp.Opportunity_Category__c == 'ET') {
|
opp.Sales_assistant_name_text__c = mp.GI_assistant__c;
|
} else {
|
opp.Sales_assistant_name_text__c = mp.SP_assistant__c;
|
}
|
}
|
}
|
if (opp.Owner_Salesdepartment__c == '1.华北') {
|
opp.Sales_window_text__c = System.label.Sales_Window_HB; // 销售部窗口(文本)
|
} else if (opp.Owner_Salesdepartment__c == '2.东北') {
|
opp.Sales_window_text__c = System.label.Sales_Window_DB;
|
} else if (opp.Owner_Salesdepartment__c == '3.西北') {
|
opp.Sales_window_text__c = System.label.Sales_Window_XB;
|
} else if (opp.Owner_Salesdepartment__c == '5.华东') {
|
opp.Sales_window_text__c = System.label.Sales_Window_HD;
|
} else if (opp.Owner_Salesdepartment__c == '6.华南') {
|
opp.Sales_window_text__c = System.label.Sales_Window_HN;
|
} else if (opp.Owner_Salesdepartment__c == '4.西南') {
|
opp.Sales_window_text__c = System.label.Sales_Window_XN;
|
} else {
|
opp.Sales_window_text__c = null;
|
}
|
}
|
|
if ((Trigger.isInsert || Trigger.oldMap.get(opp.Id).get('SAP_Send_OK__c') == false) && opp.SAP_Send_OK__c == true) {
|
opp.Sales_assistantWIN_ID__c = UserInfo.getUserId();
|
opp.Sales_assistantWIN_Mail__c = UserInfo.getUserEmail();
|
}
|
}
|
}
|
List<Opportunity> accOpps = ControllerUtil.oppSelectForCity(oppIds);
|
Map<String, String> oppRtMaps = new Map<String, String>();
|
Map<String, String> oppCmMaps = new Map<String, String>();
|
for (Opportunity opp : accOpps) {
|
// 病院
|
if (opp.Account.Parent.Parent.RecordTypeId == System.label.NFM60_3) {
|
oppRtMaps.put(opp.Id, opp.Account.Parent.Parent.RecordTypeId);
|
oppCmMaps.put(opp.Id, opp.Account.Parent.Parent.City_Master__r.Name);
|
}
|
// 販売店
|
else if (opp.Account.Parent.RecordTypeId == System.label.NFM60_2) {
|
oppRtMaps.put(opp.Id, opp.Account.Parent.RecordTypeId);
|
oppCmMaps.put(opp.Id, opp.Account.City_Master__r.Name);
|
}
|
}
|
|
for ( Integer i = 0; i < Trigger.New.size(); i++) {
|
newTarget = Trigger.New[i];
|
// 古いデータの更新をスルー
|
if (Trigger.isUpdate) {
|
Boolean noChange = false;
|
for (String colApiName : ControllerUtil.oppColumnList) {
|
colApiName = colApiName.trim();
|
if (newTarget.oldData_flg__c &&
|
Trigger.oldMap.get(newTarget.Id).get(colApiName) != Trigger.newMap.get(newTarget.Id).get(colApiName)) {
|
noChange = true;
|
break;
|
}
|
}
|
if (noChange) {
|
newTarget.addError('不能修改旧数据');
|
continue;
|
}
|
}
|
|
if ( newTarget.DetailNum__c == 0) {
|
newTarget.CurrencyIsoCode = newTarget.Trade__c == '外貿' ? 'USD' : 'CNY';
|
}
|
else {
|
newTarget.Trade__c = newTarget.CurrencyIsoCode == 'CNY' ? '内貿' : '外貿';
|
}
|
|
newTarget.Owner_System__c = newTarget.OwnerId;
|
|
// 市(文本)の値を設定
|
// WFにて二回実行、二回目はIDがある
|
if (!String.isBlank(newTarget.Id) && oppRtMaps.containsKey(newTarget.Id)
|
&& (oppRtMaps.get(newTarget.Id) == System.label.NFM60_3 || oppRtMaps.get(newTarget.Id) == System.Label.NFM60_2)) {
|
newTarget.City_Text__c = oppCmMaps.get(newTarget.Id);
|
}
|
|
if (Trigger.isUpdate
|
&& Trigger.oldMap.get(newTarget.Id).get('Estimation_Decision__c') != newTarget.Estimation_Decision__c
|
&& newTarget.Estimation_Decision__c == false) {
|
// Estimation_Id__c より、
|
if (newTarget.Estimation_Id__c != null && newTarget.Estimation_Id__c.length() > 0 && !newTarget.Estimation_Id__c.startsWith('a2K')) {
|
quoteIds.add(newTarget.Estimation_Id__c);
|
// 2022-11-18 ssm 取消decide后仍要显示预测金额,取消清空报价ID的操作
|
// newTarget.Estimation_Id__c = '';
|
}
|
}
|
}
|
|
if (quoteIds.size() > 0) {
|
List<Quote> cancelQuoteList = [Select Id, Name, Cancel_Decide__c From Quote Where Id IN :quoteIds];
|
for (Quote quo : cancelQuoteList) {
|
quo.Cancel_Decide__c = true;
|
//lightning 改造修复bug fy start
|
if(quo.Name.indexOf('已取消:') < 0){
|
//lightning 改造修复bug fy end
|
quo.Name = '已取消:' + quo.Name;
|
//lightning 改造修复bug fy start
|
}
|
//lightning 改造修复bug fy end
|
// 【委托】SH-ET-SH0584979 无法打印报价 精琢技术 wql 2020/12/22 start
|
quo.Contract__c = false;
|
// 【委托】SH-ET-SH0584979 无法打印报价 精琢技术 wql 2020/12/22 end
|
}
|
update cancelQuoteList;
|
}
|
|
if(System.Test.isRunningTest()) {
|
Integer i = 0;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
}
|
}
|