public without sharing class AssetHandlerMEBG extends Oly_TriggerHandler { private Map newMap; private Map oldMap; private List newList; private List oldList; // @TestVisible private static Set testTargetDepts; // @TestVisible private static Id Account_Asset_Id; // public static Boolean disabled = false; public AssetHandlerMEBG() { this.newMap = (Map) Trigger.newMap; this.oldMap = (Map) Trigger.oldMap; this.newList = (List) Trigger.new; this.oldList = (List) Trigger.old; } protected override void beforeInsert() { assetImageBeforeTrigger(); assetRecordTypeUpd(); } protected override void beforeUpdate() { assetHpDeptUpd(); assetImageBeforeTrigger(); assetRecordTypeUpd(); } protected override void beforeDelete() { assetRecordTypeUpd(); } private void assetHpDeptUpd() { List accIds = new List(); for(Asset a : newList) { Asset olda = oldMap.get(a.Id); if (olda.AccountId != a.AccountId || a.AccountParentId__c != a.Department_Class__c || a.AccountParentParentId__c != a.Hospital__c) { if (!String.isBlank(a.AccountId)) { accIds.add(a.AccountId); } } } if (accIds.size() > 0) { // 診療科レコードタイプ String[] deptTypes = new String[] {'病院', '診療科 その他', '診療科 呼吸科', '診療科 婦人科', '診療科 普外科', '診療科 泌尿科', '診療科 消化科', '診療科 耳鼻喉科'}; List deptRects = [select Id, Name from RecordType where IsActive = true and SobjectType = 'Account' and Name IN :deptTypes]; Map deptRectMap = new Map(); for (RecordType rect : deptRects) { deptRectMap.put(rect.Id, rect.Name); } // TODO 販売店のレコードタイプのMapを生成 Map accMap = new Map(); List accs = ControllerUtil.selectAccountForTrigger(accIds); for(Account acc : accs) { accMap.put(acc.Id, acc); } for(Asset a : newList) { // 「診療科」に診療科を選択する場合 Account acc = accMap.get(a.AccountId); if (acc != null && deptRectMap.get(acc.RecordTypeId) != null && acc.Management_Code__c != '9999900' ) { if (deptRectMap.get(acc.RecordTypeId) == '病院') { a.Department_Class__c = null; a.Hospital__c = acc.Id; } else { a.Department_Class__c = acc.ParentId; a.Hospital__c = acc.Parent.ParentId; } } // TODO 「販売店」の更新 } } } private void assetImageBeforeTrigger(){ if (StaticParameter.EscapeVMCTrigger) { return ; } if (trigger.isBefore) { for(Asset newS : newList) { if (Trigger.isUpdate && newS.Status == '使用中' && String.isBlank(((Asset) Trigger.oldMap.get(newS.Id)).ImageAsset__c) && !String.isBlank(newS.ImageAsset__c) ) { newS.ImageAssetUploadedTime__c = Datetime.now(); newS.ImageAssetUploadedBy__c = UserInfo.getUserId(); } if (Trigger.isUpdate && newS.Status == '使用中' && String.isBlank(((Asset) Trigger.oldMap.get(newS.Id)).ImageSerial__c) && !String.isBlank(newS.ImageSerial__c) ) { newS.ImageSerialUploadedTime__c = Datetime.now(); newS.ImageSerialUploadedBy__c = UserInfo.getUserId(); } System.debug('-------->Start'); if(Trigger.isUpdate && !String.isBlank(((Asset)Trigger.oldMap.get(newS.Id)).Reson_Can_not_Warranty__c)){ String reason = ((Asset)Trigger.oldMap.get(newS.Id)).Reson_Can_not_Warranty__c; System.debug('oldreason'+reason); System.debug('reason'+newS.Reson_Can_not_Warranty__c); System.debug('Asset_Owner__c'+newS.Asset_Owner__c); if(newS.Asset_Owner__c != '病院資産'){ if(newS.Reson_Can_not_Warranty__c != null){ if(!newS.Reson_Can_not_Warranty__c.contains('备品')){ // newS.Reson_Can_not_Warranty__c = reason + '备品'; newS.Reson_Can_not_Warranty__c = newS.Reson_Can_not_Warranty__c + '备品'; } }else{ newS.Reson_Can_not_Warranty__c = '备品'; } }else{ if(newS.Reson_Can_not_Warranty__c != null){ if(newS.Reson_Can_not_Warranty__c.contains('备品')){ //newS.Reson_Can_not_Warranty__c = reason.replace('备品', ''); newS.Reson_Can_not_Warranty__c = newS.Reson_Can_not_Warranty__c.replace('备品', ''); } } } if(newS.Final_Examination_Date__c != null){ if(Date.today().addDays(-90) > newS.Final_Examination_Date__c){ if(!reason.contains('点检')){ newS.Reson_Can_not_Warranty__c = reason + '点检'; } }else{ if(reason.contains('点检')){ newS.Reson_Can_not_Warranty__c = reason.replace('点检', ''); } } }else{ if(reason.contains('点检')){ newS.Reson_Can_not_Warranty__c = reason.replace('点检', ''); } } }else if(Trigger.isInsert || Trigger.isUpdate && String.isBlank(((Asset)Trigger.oldMap.get(newS.Id)).Reson_Can_not_Warranty__c)){ if(newS.Asset_Owner__c != '病院資産'){ newS.Reson_Can_not_Warranty__c = '备品'; }else{ if(newS.Reson_Can_not_Warranty__c != null){ if(newS.Reson_Can_not_Warranty__c.contains('备品')){ //newS.Reson_Can_not_Warranty__c = reason.replace('备品', ''); newS.Reson_Can_not_Warranty__c = newS.Reson_Can_not_Warranty__c.replace('备品', ''); } } } if(newS.Final_Examination_Date__c != null){ if(Date.today().addDays(-90) > newS.Final_Examination_Date__c){ newS.Reson_Can_not_Warranty__c = '点检'; } } } System.debug('-------->End'); } } } private void assetRecordTypeUpd(){ if (StaticParameter.EscapeVMCTrigger) { return ; } //add by gzw 20210729 end List cdList = new List(); if (trigger.isBefore && (trigger.isInsert || trigger.isUpdate)) { for(Asset ass : newList) { ass.RecordTypeID__c = ass.RecordTypeId; // 注残设置 if (!String.isBlank(ass.Order_No__c) && ass.Backorder__c == null) { cdList.add(ass.Order_No__c); } // HWAG-AWLAU6 2018/3/7 "是否多年保修"的值拷贝到"是否多年保修(文本)"中 if (trigger.isUpdate && ((Asset)Trigger.oldMap.get(ass.Id)).IS_Extend_Gurantee_Txt__c != ass.IS_Extend_Gurantee_Txt__c) { ass.Extend_Gurantee_Txt_Manual__c = true; } else { if (ass.IS_Extend_Gurantee__c != ass.IS_Extend_Gurantee_Txt__c && ass.Extend_Gurantee_Txt_Manual__c == false) { ass.IS_Extend_Gurantee_Txt__c = ass.IS_Extend_Gurantee__c; } } } } if (cdList.size() > 0) { List saList = [select Id, Name, ContractNO__c from Statu_Achievements__c where ContractNO__c IN : cdList AND Valid_Statu_Achievements__c = 1]; if (saList != null && saList.size() > 0) { Map saMap = new Map(); for (Statu_Achievements__c sa : saList) { saMap.put(sa.ContractNO__c, sa.Id); } for (Asset a : newList) { for (String s : saMap.keySet()) { if (a.Order_No__c == s) { a.Backorder__c = saMap.get(s); } } } } } if (trigger.isBefore && trigger.isDelete) { cdList = new List(); Map delMap = new Map(); for (Asset delId : oldList) { cdList.add(delId.Id); } if (cdList.size() > 0) { List mcList = [select Max(Id) Id, Asset__c from Maintenance_Contract_Asset__c where Asset__c In : cdList group by Asset__c]; List reList = [select Max(id) Id, Delivered_Product__c from Repair__c where Status1__c != '0.删除' and Delivered_Product__c In : cdList group by Delivered_Product__c]; List qisList = [select Max(Id) Id, nonyushohin__c from QIS_Report__c where nonyushohin__c In : cdList group by nonyushohin__c]; if (mcList != null && mcList.size() > 0) { for (AggregateResult mc : mcList) { delMap.put(String.valueOf(mc.get('Asset__c')), String.valueOf(mc.get('Asset__c'))); } } if (reList != null && reList.size() > 0) { for (AggregateResult re : reList) { delMap.put(String.valueOf(re.get('Delivered_Product__c')), String.valueOf(re.get('Delivered_Product__c'))); } } if (qisList != null && qisList.size() > 0) { for (AggregateResult qis : qisList) { delMap.put(String.valueOf(qis.get('nonyushohin__c')), String.valueOf(qis.get('nonyushohin__c'))); } } } for (Asset adel : oldList) { if (delMap.containsKey(adel.Id)) { adel.addError('该设备存在维修合同、修理或QIS,不能删除。'); } } } } }