trigger ConsumableOrderTrigger on Consumable_order__c (before insert, before update,after update) {
|
|
//deloitte-zhj 20231124 本地化导入 start
|
if((!Test.isRunningTest())&&System.Label.ByPassTrigger.contains(UserInfo.getUserId())){
|
return;
|
}
|
//deloitte-zhj 20231124 本地化导入 end
|
|
// CHAN-CBYBBF 【委托】经销商ET账号显示界面维护-广东汇晨 start
|
// 注释跳过 发货时要计算 SAP合同号
|
// if (StaticParameter.EscapeConsumableOrderDetail2Trigger) {
|
// return;
|
// }
|
// CHAN-CBYBBF 【委托】经销商ET账号显示界面维护-广东汇晨 end
|
//add by rentx 20210618 start
|
if (StaticParameter.ConsumableOrderTrigger) {
|
return;
|
}
|
//ad by rentx 20210618 end
|
Set<String> contactIdSet = new Set<String>();
|
Map<String, String> rprIdList = new Map<String, String>();
|
Map<String, String> contactIdMap = new Map<String, String>();
|
List<Statu_Achievements__c> sAlist = new List<Statu_Achievements__c>();
|
if (Trigger.isBefore) {
|
Account contactdet = null;
|
List<Account> contactList = new List<Account>();
|
Consumable_order__c old = null;
|
for (Consumable_order__c local : Trigger.New) {
|
if(String.isNotBlank(local.Order_effective_contact__c)) {
|
contactIdSet.add(local.Order_effective_contact__c);
|
}
|
}
|
// contactList = [SELECT Id, Name, Business_Assistant__c FROM Account WHERE Id in :contactIdSet];
|
// for(Account acc :contactList){
|
// if(String.isNotBlank(acc.Business_Assistant__c)){
|
// contactIdMap.put(acc.Id, acc.Business_Assistant__c);
|
// }
|
// }
|
|
Map<String,List<Statu_Achievements__c> > sAmap = new Map<String,List<Statu_Achievements__c> >();
|
Map<String,String> zMaps = new Map<String,String>();
|
|
for (Consumable_order__c local : Trigger.New) {
|
if(String.isNotBlank(local.Opportunity__c) && String.isNotBlank(local.name)) {
|
zMaps.put(local.Opportunity__c,local.name);
|
}
|
}
|
|
|
sAlist = [SELECT ContractNO__c,Opportunity__c FROM Statu_Achievements__c WHERE Opportunity__c = :zMaps.keySet()];
|
|
for(Statu_Achievements__c sa : sAlist) {
|
List<Statu_Achievements__c> ssList = sAmap.get(zMaps.get(sa.Opportunity__c));
|
if(ssList == null) {
|
ssList = new List<Statu_Achievements__c>();
|
}
|
ssList.add(sa);
|
sAmap.put(zMaps.get(sa.Opportunity__c),ssList);
|
}
|
|
// sAlist = [SELECT ContractNO__c FROM Statu_Achievements__c WHERE Opportunity__c = :opps];
|
// sAmap.put(name,sAlist);
|
|
for (Consumable_order__c local : Trigger.New) {
|
if (Trigger.isInsert) {
|
rprIdList.put(local.Id, local.Id);
|
}
|
if (Trigger.isUpdate) {
|
old = Trigger.oldMap.get(local.Id);
|
}
|
if ((Trigger.isInsert
|
|| old.Order_status__c != local.Order_status__c)
|
&& local.Order_status__c == '批准'
|
) {
|
if(local.Order_date__c < Date.newInstance(2022, 04, 01)) {
|
local.addError('4/1之前的订单只能驳回并重新提交。');
|
continue;
|
}
|
}
|
// 「消耗品订单」になったとき、ログインユーザーからプロセス用の上司を設定
|
if ((Trigger.isInsert
|
|| old.Order_status__c != local.Order_status__c)
|
&& local.Order_status__c == '附件上传完成'
|
) {
|
//if (contactdet == null) {
|
// contactdet = [SELECT Id, Name, Business_Assistant__c FROM Account WHERE Id = :local.Order_effective_contact__c];
|
//}
|
if(local.Business_Assistant__c == null) {
|
local.addError('合同没有有效的营业助理。');
|
continue;
|
}else{
|
local.SalesManager__c = local.Business_Assistant__c;
|
}
|
// 項目の新規追加したくない、API名も変更したくない、ラベル名を変更、User.服务→修理.服务
|
//local.SalesManager__c = contactdet.SalesManager__c == null ? contactdet.Id : contactdet.SalesManager__c;
|
//local.BuchangApprovalManagerSales__c = loginUser.BuchangApprovalManager__c == null ? loginUser.Id : loginUser.BuchangApprovalManager__c;
|
//local.ZongjianApprovalManager__c = loginUser.ZongjianApprovalManager__c == null ? loginUser.Id : loginUser.ZongjianApprovalManager__c;
|
//local.TongkuoZongjian__c = loginUser.TongkuoZongjian__c == null ? loginUser.Id : loginUser.TongkuoZongjian__c;
|
}
|
|
//更新or插入 前
|
if(Trigger.isInsert || Trigger.isUpdate ) {
|
List<String> cNList = new List<String>();
|
List<Statu_Achievements__c> sas = sAmap.get(local.name);
|
|
if(sas != null) {
|
for (Statu_Achievements__c sa : sas) {
|
//保存合同编号
|
cNList.add(sa.ContractNO__c);
|
}
|
|
//拼接合同编号
|
String cNs = String.join(cNList,',');
|
local.ContractNo__c = cNs;
|
}
|
}
|
}
|
}
|
//fy DB202312538864 2024.02.20 start
|
System.debug('isAfterisUpdate!!2!');
|
System.debug('Trigger.isAfter'+Trigger.isAfter);
|
System.debug('Trigger.isUpdate'+Trigger.isUpdate);
|
if (Trigger.isAfter && Trigger.isUpdate) {
|
System.debug('isAfterisUpdate!!!');
|
//产品预留check
|
List<Consumable_order__c> oppList = new List<Consumable_order__c>();
|
for (Consumable_order__c local : Trigger.New) {
|
Consumable_order__c old = Trigger.oldMap.get(local.Id);
|
if(local.Order_status__c != old.Order_status__c && (local.Order_status__c == '驳回'||local.Order_status__c == '草案中')&&!(old.Order_status__c == '驳回'&&local.Order_status__c == '草案中' )){
|
oppList.add(local);
|
}
|
}
|
if(oppList.size()>0){
|
List<PreProduct_Storage_List__c> PreProductStorageList = new List<PreProduct_Storage_List__c>();
|
List<PreProduct_Storage__c> UpdatePreProductStorageList = new List<PreProduct_Storage__c>();
|
Set<Id> lastProductFLGListId = new Set<Id>();
|
List<Consumable_Orderdetails__c> act = new List<Consumable_Orderdetails__c>();
|
List<Consumable_Orderdetails__c> act2 = new List<Consumable_Orderdetails__c>();
|
List<Id> localId = new List<Id>();
|
Map<String,Consumable_order__c> oppmap = new Map<String,Consumable_order__c>();
|
for (Consumable_order__c local : oppList) {
|
localId.add(local.Id);
|
oppmap.put(local.Id,local);
|
}
|
act = [select Id,Consumable_order__c,Consumable_count__c,Consumable_product__r.Product2__c,Consumable_product__r.Product2__r.LastbuyProductFLG__c,Consumable_product__r.Name__c from Consumable_Orderdetails__c where Consumable_order__c in:localId];
|
act2=act.deepClone();
|
Map<String,Map<String,Consumable_Orderdetails__c>> map2 = new Map<String,Map<String,Consumable_Orderdetails__c>>();
|
System.debug('activitiesss!!!'+act);
|
//*****合并产品重复的报价行项目****
|
for(Consumable_Orderdetails__c pspsc :act2){
|
if(pspsc.Consumable_product__r.Product2__c!=null){
|
if(map2.containsKey(pspsc.Consumable_order__c)){
|
Map<String,Consumable_Orderdetails__c> quoteLine = map2.get(pspsc.Consumable_order__c);
|
if(quoteLine.containsKey(pspsc.Consumable_product__r.Product2__c)){
|
Consumable_Orderdetails__c quoteLine1 = quoteLine.get(pspsc.Consumable_product__r.Product2__c);
|
quoteLine1.Consumable_count__c =quoteLine1.Consumable_count__c+pspsc.Consumable_count__c;
|
quoteLine.put(pspsc.Consumable_product__r.Product2__c,quoteLine1);
|
}else{
|
quoteLine.put(pspsc.Consumable_product__r.Product2__c,pspsc);
|
}
|
map2.put(pspsc.Consumable_order__c,quoteLine);
|
}else{
|
Map<String,Consumable_Orderdetails__c> quoteLine = new Map<String,Consumable_Orderdetails__c>();
|
quoteLine.put(pspsc.Consumable_product__r.Product2__c,pspsc);
|
map2.put(pspsc.Consumable_order__c,quoteLine);
|
}
|
System.debug('3449987sdf9!!!'+act);
|
}
|
}
|
System.debug('3434sdf343!!!'+act);
|
Map<String,List<Consumable_order__c>> proCorderIdMap = new Map<String,List<Consumable_order__c>>();
|
for (Map<String,Consumable_Orderdetails__c> value2 : map2.values()) {
|
for (Consumable_Orderdetails__c value : value2.values()) {
|
if(value.Consumable_product__r.Product2__r.LastbuyProductFLG__c){
|
lastProductFLGListId.add(value.Consumable_product__r.Product2__c);
|
if(proCorderIdMap.containsKey(value.Consumable_product__r.Product2__c)){
|
List<Consumable_order__c> clastList = proCorderIdMap.get(value.Consumable_product__r.Product2__c);
|
Consumable_order__c clast = oppmap.get(value.Consumable_order__c);
|
clastList.add(clast);
|
proCorderIdMap.put(value.Consumable_product__r.Product2__c,clastList);
|
}else{
|
List<Consumable_order__c> cnewList = new List<Consumable_order__c>();
|
Consumable_order__c cnew = oppmap.get(value.Consumable_order__c);
|
cnewList.add(cnew);
|
proCorderIdMap.put(value.Consumable_product__r.Product2__c,cnewList);
|
}
|
}
|
}
|
}
|
System.debug('opp5656sdf565!!!'+map2);
|
//*****合并产品重复的报价****
|
if(lastProductFLGListId!=null&&lastProductFLGListId.size()!=0){
|
// 锁定行前查询数据
|
List<PreProduct_Storage__c> lockedPreProductStorage = [SELECT Id,Name,Storage_Number__c,Used_Number__c,Department__c,Province__c,RecordType.Name,Field1__c FROM PreProduct_Storage__c WHERE ifValid__c = true and Field1__c in:lastProductFLGListId FOR UPDATE];
|
// 执行需要锁定行的其他操作
|
if(lockedPreProductStorage!=null&&lockedPreProductStorage.size()!=0){
|
|
for (PreProduct_Storage__c preProductStorage : lockedPreProductStorage) {
|
for(Consumable_order__c corder : proCorderIdMap.get(preProductStorage.Field1__c)){
|
Map<String,Consumable_Orderdetails__c> promp = map2.get(corder.Id);
|
Decimal pronumber = promp.get(preProductStorage.Field1__c).Consumable_count__c;
|
if((preProductStorage.RecordType.Name == '整机'
|
&& corder.SalesDepartment_Dealer__c == preProductStorage.Department__c)
|
||(preProductStorage.RecordType.Name == '耗材'
|
&& corder.OCM_man_province_HP__c == preProductStorage.Province__c) ){
|
PreProduct_Storage_List__c PreProductStorageObj = new PreProduct_Storage_List__c();
|
PreProductStorageObj.PreProduct_Storage__c = preProductStorage.Id;
|
PreProductStorageObj.Modify_Number__c = pronumber;
|
PreProductStorageObj.AddReduceNumber__c = pronumber;
|
PreProductStorageObj.Modified_Time__c = Datetime.now();
|
PreProductStorageObj.Change_Type__c = '退回';
|
PreProductStorageObj.Consumble__c = corder.Id;
|
UpdatePreProductStorageList.add(preProductStorage);
|
PreProductStorageList.add(PreProductStorageObj);
|
}
|
}
|
}
|
}
|
}
|
System.debug('PreProductStorageListf565!!!'+PreProductStorageList);
|
System.debug('UpdatePreProductStorageListdf565!!!'+UpdatePreProductStorageList);
|
if(PreProductStorageList.size()>0){
|
insert PreProductStorageList;
|
}
|
// if(UpdatePreProductStorageList.size()>0){
|
// update UpdatePreProductStorageList;
|
// }
|
}
|
|
}
|
//fy DB202312538864 2024.02.20 end
|
}
|