public without sharing class AssetTriggerHandler { /* *判断样机管理者是否可以修改样机状态 *2018/10/17 */ public static void checkStatus(List newList, Map newMap, List oldList, Map oldMap) { List assetIdList = new List(); Set assSet = new Set(); for(Asset ass : newList){ Asset oldAsset = oldMap.get(ass.Id); //如果Status_text__c字段不为空 ,则判断为样机管理者修改 if(ass.Status_text__c != null && ass.Status_text__c != ''){ //如果样机状态为在库,则认为样机管理者可以修改。 if(oldAsset.Status == '在库') { assSet.add(ass); continue; } //如果样机状态不为 在库 ,记录ID用于判断样机状态能否修改 assetIdList.add(ass.Id); } } Set assetIdSet = new Set(); Set assetIDSet1 = new Set(); if(assetIdList.size() > 0){ List ladList= [select id,LOANER__c,RAESD_Status__c,loaner_application__r.Status__c from loaner_application_detail__c where LOANER__c = : assetIdList]; if(ladList.size()>0){ for(loaner_application_detail__c lad : ladList ){ //如果明细状态不为已回库,则认为样机处于借用单之中,不能进行操作。 if(lad.RAESD_Status__c == '已回库' || (lad.RAESD_Status__c == '已分配' && lad.loaner_application__r.Status__c == '草案中')){ assetIdSet.add(lad.LOANER__c); }else{ assetIDSet1.add(lad.LOANER__c); } } }else{ assetIdSet.addAll(assetIdList); } } if(assetIDSet1.size() >0){ for(String ass : assetIDSet1){ newMap.get(ass).addError('该样机在系统中有样机借用申请单,不能修改'); return; } } if(assetIdSet.size() > 0){ for(String ass : assetIdSet){ for(Integer i = 0; i < newList.size();i++){ if(ass == newList[i].Id){ newList[i].Status = newList[i].Status_text__c; newList[i].Status_text__c = null; } } } } if(assSet.size() >0){ for(Asset ass : assSet){ ass.Status = ass.Status_text__c; ass.Status_text__c = null; } } AssetTriggerHandler.tes(); } //样机状态修改时,修改套装明细中的信息 public static void isInstock(List newList, Map newMap, List oldList, Map oldMap) { List idString = new List(); for(Asset ass : newList){ Asset old = oldMap.get(ass.Id); if(ass.Status != old.Status){ idString.add(ass.Id); } } if(idString.size() == 0){ return; } List lsdList = [select id,Asset__c from Loaner_Set_Detail__c where Asset__c in :idString]; if(lsdList.size() == 0){ return; } for(Loaner_Set_Detail__c lsd : lsdList){ if(newMap.get(lsd.Asset__c).Status=='在库'){ lsd.is_instock__c = true; }else{ lsd.is_instock__c = false; } } update lsdList; } //只有样机状态为在库时,ANI和NDT的样机管理者才能修改样机存放地。 public static void checkPlace(List newList, Map newMap, List oldList, Map oldMap) { String userId = UserInfo.getUserId(); userId.substring(0,15); for(Asset ass : newList){ Asset old = oldMap.get(ass.Id); if (ass.Status != '在库' && ass.ANI_NDTmanager__c == true) { if (ass.loaner_place__c != old.loaner_place__c) { ass.loaner_place__c.addError('非在库状态下不能修改样机存放地!'); } } if (ass.ANI_NDTmanager__c == true) { if (ass.Name != old.Name) { ass.Name.addError('不允许修改保有设备名称!'); } } if (ass.ANI_NDTmanager__c == true) { if (ass.Equipment_Type__c != old.Equipment_Type__c) { ass.Equipment_Type__c.addError('不允许修改样机分类!'); } } } } private static void tes(){ Integer i =1; 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++; } }