Advertisement
Ashwini_p

Asset

Oct 2nd, 2017
12
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.56 KB | None | 0 0
  1. /**
  2. * @description: Asset Management handler class
  3. * @author: Davanti Consulting
  4. * @history:
  5. * 07Jul2014 Davanti Consulting: Initial version
  6. * 18Mar2015 Shailendra(DC): Updated for Asset Management Order changes.
  7. */
  8.  
  9.  
  10. public class OrderItemTriggerHandler {
  11.  
  12. public static void forceEditOnChildRecords(Set<Id> newChildSet){
  13. system.debug('newChildSet>>'+newChildSet);
  14. List<Order_Receive_Line__c> childOrderReceiveLine = [select Id from Order_Receive_Line__c where Order_Item_Id__c in :newChildSet];
  15. if (childOrderReceiveLine.size() > 0) update childOrderReceiveLine;
  16. }
  17.  
  18.  
  19. /*******************************************************************
  20. Purpose : OrderProduct Trigger hanlder class to Created Asset/Asset Assignment records
  21. Parameters : List Of OrderProduct and Map of old OrderProduct records
  22. Returns : None
  23. ********************************************************************/
  24.  
  25. public static List<OrderItem> getOrderItemDetails(Set<String> setOrderItemId){
  26. return [Select Id, OrderId, Order.AccountId, Connection_Type__c, Order.Account.Asset_Management__c, Order.Account.Phone, Phone_Number__c,
  27. Serial_Number__c, Pricebookentry.Product2.LE_Price_Hidden__c, User_Name__c, Pricebookentry.Product2.Name, MSP_Product__c,Serialised__c,
  28. Order.Account.Device_Recycling__c, User_Email__c, Order.Account.Replenishment_Stock__c,Replenishment_Stock__c,MSP_No__c
  29. from OrderItem where ID IN :setOrderItemId
  30. AND (Order.Account.Asset_Management__c=true OR Order.Account.Replenishment_Stock__c=true OR Order.Account.Device_Recycling__c=true)];
  31. }
  32.  
  33. public static List<Asset_Assignment__c> getAssetAssignmentDetails(Set<String> setPhoneNumber){
  34. return [Select Asset__c, Phone_Number__c, Account__r.Device_Recycling__c from Asset_Assignment__c
  35. where Phone_Number__c IN: setPhoneNumber];
  36. }
  37.  
  38. public static Asset__c createAsset(OrderItem obj, Map<Id, OrderItem> mapOrderItems){
  39. Asset__c objAsset=new Asset__c();
  40. objAsset.Asset_Name__c=mapOrderItems.get(obj.Id).Pricebookentry.Product2.Name;
  41. objAsset.Latest_Account_Assigned__c= mapOrderItems.get(obj.Id).Order.AccountId;
  42. objAsset.Serial_Number__c=obj.Serial_Number__c;
  43. objAsset.Status__c=mapOrderItems.get(obj.Id).Order.Account.Replenishment_Stock__c?'Created':'Active';
  44. objAsset.Source_MSP_Order_No__c=mapOrderItems.get(obj.Id).MSP_No__c;
  45. objAsset.Source_Order__c=mapOrderItems.get(obj.Id).OrderId;
  46. objAsset.Type__c='Device';
  47. objAsset.Product_List_Price__c=mapOrderItems.get(obj.Id).Pricebookentry.Product2.LE_Price_Hidden__c;
  48. objAsset.Purchase_Date__c=Date.Today();
  49. objAsset.Active__c=true;
  50. insert objAsset;
  51. return objAsset;
  52. }
  53.  
  54. public static Asset_Assignment__c createAssetAssignment(OrderItem obj, Id objAssetId, Map<Id, OrderItem> mapOrderItems){
  55. Asset_Assignment__c objAssetAssign=new Asset_Assignment__c();
  56. objAssetAssign.Account__c = mapOrderItems.get(obj.Id).Order.AccountId;
  57. objAssetAssign.Phone_Number__c=obj.Phone_Number__c;
  58. objAssetAssign.Status__c='Active';
  59. objAssetAssign.User_Name__c=obj.User_Name__c;
  60. objAssetAssign.User_Email_Address__c=obj.User_Email__c;
  61. objAssetAssign.Asset__c = objAssetId;
  62. objAssetAssign.Assignment_Date__c=Date.Today();
  63. insert objAssetAssign;
  64. return objAssetAssign;
  65. }
  66.  
  67. public static void createCaseForAssignment(OrderItem obj, Map<Id, OrderItem> mapOrderItems, QueueSObject queueLog, Id rtId, Id oldAssetId, Asset_Assignment__c objAssetAssignment){
  68. Case objcase=new Case();
  69. objcase.OwnerId = queueLog.queueId;
  70. objcase.Status = 'Awaiting Asset Return';
  71. objcase.Asset__c = oldAssetId;
  72. objcase.RecordTypeId = rtId;
  73. objcase.Type = 'Recycle Return';
  74. objcase.AccountId=mapOrderItems.get(obj.Id).Order.AccountId;
  75. objcase.User_Name__c=objAssetAssignment.User_Name__c;
  76. objcase.Mobile_Number__c=objAssetAssignment.Phone_Number__c;
  77. objcase.contact_email_address__c=objAssetAssignment.User_Email_Address__c;
  78. objcase.Asset_Condition__c='Awaiting Diagnosis';
  79. objcase.Subject='Recycle Return for '+objAssetAssignment.User_Name__c;
  80. insert objCase;
  81. }
  82.  
  83. public static void createAssetAssignmentForNonReplenishment(List<OrderItem> lstOrderItem, Map<String, Asset_Assignment__c> mapExistingAssetAssignments, Map<Id, OrderItem> mapOrderItems, QueueSObject queueLog, Id rtID){
  84.  
  85. for(OrderItem obj: lstOrderItem){
  86. if(obj.Connection_Type__c!=null && (obj.Connection_Type__c=='New Connection' || obj.Connection_Type__c=='Port')){
  87. if(!(mapOrderItems.get(obj.Id).Order.Account.Replenishment_Stock__c && mapOrderItems.get(obj.Id).Order.Account.Asset_Management__c==false && mapOrderItems.get(obj.Id).Order.Account.Device_Recycling__c==false)){
  88. Asset_Assignment__c objAssetAssign=createAssetAssignment(obj, obj.Assigned_Asset_New__c, mapOrderItems);
  89. }
  90. }else{
  91. Asset_Assignment__c objAssetAssignment= new Asset_Assignment__c();
  92.  
  93. objAssetAssignment=mapExistingAssetAssignments.get(obj.Phone_Number__c);
  94. Id oldAssetId;
  95. if(objAssetAssignment==null){
  96. objAssetAssignment=createAssetAssignment(obj, obj.Assigned_Asset_New__c, mapOrderItems);
  97. System.debug('>>>>>>>>>>>>>>>>>>>>>>>>>>>objAssetAssignment'+objAssetAssignment);
  98. }else{
  99. objAssetAssignment.Assignment_Date__c=Date.Today();
  100. objAssetAssignment.Status__c='Active';
  101. oldAssetId=objAssetAssignment.Asset__c;
  102. objAssetAssignment.Asset__c=obj.Assigned_Asset_New__c;
  103. objAssetAssignment.User_Name__c=obj.User_Name__c;
  104. objAssetAssignment.User_Email_Address__c=obj.User_Email__c;
  105. update objAssetAssignment;
  106. }
  107. if(mapOrderItems.get(obj.Id).Order.Account.Device_Recycling__c){
  108. createCaseForAssignment(obj, mapOrderItems, queueLog, rtId, oldAssetId, objAssetAssignment);
  109. }
  110. Asset__c assetUpdate =new Asset__c();
  111. assetUpdate.Id=oldAssetId;
  112. assetUpdate.Status__c=mapOrderItems.get(obj.Id).Order.Account.Device_Recycling__c?'Awaiting Return':'Decommissioned';
  113. update assetUpdate;
  114.  
  115. }
  116. Asset__c assetUpdateAssigned =new Asset__c(Id=obj.Assigned_Asset_New__c, Status__c='Assigned');
  117. update assetUpdateAssigned;
  118. }
  119.  
  120. }
  121.  
  122. public static void createAssetAssignmentForReplenishment(List<OrderItem> lstOrderItem, Map<String, Asset_Assignment__c> mapExistingAssetAssignments, Map<Id, OrderItem> mapOrderItems, QueueSObject queueLog, Id rtID){
  123.  
  124. Map<String, Asset_Assignment__c> mapAssetAssignmentsInsert=new Map<String, Asset_Assignment__c>();
  125. List<Asset_Assignment__c> lstAssignmentInsert=new List<Asset_Assignment__c>();
  126. List<Asset_Assignment__c> lstAssignmentUpdate=new List<Asset_Assignment__c>();
  127. List<Case> lstCaseInsert=new List<Case>();
  128.  
  129. for(OrderItem obj: lstOrderItem){
  130. // if(!obj.Replenishment_Stock__c) continue;
  131.  
  132. if(obj.Connection_Type__c!=null && (obj.Connection_Type__c=='New Connection' || obj.Connection_Type__c=='Port')){
  133. if(obj.Replenishment_Stock__c){
  134. Asset__c objAsset=createAsset(obj, mapOrderItems);
  135. obj.Created_Asset__c=objAsset.Id;
  136. }else{
  137.  
  138. Asset__c objAsset=createAsset(obj, mapOrderItems);
  139. obj.Assigned_Asset_New__c=objAsset.Id;
  140. obj.Created_Asset__c=objAsset.Id;
  141. Asset_Assignment__c objAssetAssign=createAssetAssignment(obj, objAsset.Id, mapOrderItems);
  142. }
  143. }else{
  144. if(obj.Replenishment_Stock__c){
  145. Asset__c objAsset=createAsset(obj, mapOrderItems);
  146. obj.Created_Asset__c=objAsset.Id;
  147. }else{
  148.  
  149. Asset__c objAsset=createAsset(obj, mapOrderItems);
  150. obj.Assigned_Asset_New__c=objAsset.Id;
  151. obj.Created_Asset__c=objAsset.Id;
  152. Asset_Assignment__c objAssetAssignment= new Asset_Assignment__c();
  153.  
  154. objAssetAssignment=mapExistingAssetAssignments.get(obj.Phone_Number__c);
  155. Id oldAssetId;
  156. if(objAssetAssignment==null){
  157. objAssetAssignment=createAssetAssignment(obj, obj.Assigned_Asset_New__c, mapOrderItems);
  158. }else{
  159. objAssetAssignment.Assignment_Date__c=Date.Today();
  160. objAssetAssignment.Status__c='Active';
  161. oldAssetId=objAssetAssignment.Asset__c;
  162. objAssetAssignment.Asset__c=objAsset.Id;
  163. objAssetAssignment.User_Name__c=obj.User_Name__c;
  164. objAssetAssignment.User_Email_Address__c=obj.User_Email__c;
  165. update objAssetAssignment;
  166. }
  167. if(mapOrderItems.get(obj.Id).Order.Account.Device_Recycling__c){
  168.  
  169. createCaseForAssignment(obj, mapOrderItems, queueLog, rtId, oldAssetId, objAssetAssignment);
  170. }
  171. Asset__c assetUpdate =new Asset__c();
  172. assetUpdate.Id=oldAssetId;
  173. assetUpdate.Status__c=mapOrderItems.get(obj.Id).Order.Account.Device_Recycling__c?'Awaiting Return':'Decommissioned';
  174. update assetUpdate;
  175.  
  176. }
  177. }
  178.  
  179. }
  180. }
  181.  
  182.  
  183. public static void assetManagementProcess(List<OrderItem> lstOrderItem, Map<Id, OrderItem> mapNewOrder, Map<Id, OrderItem> mapOldOrder, Set<Id> newChildSet){
  184.  
  185. // if(!checkRecursive.runOnce()) return;
  186.  
  187. Map<String, Asset_Assignment__c> mapExistingAssetAssignments=new Map<String, Asset_Assignment__c>();
  188. Map<Id, OrderItem> mapOrderItems=new Map<Id, OrderItem>();
  189. Set<String> setOrderItemId=new Set<String>();
  190. Set<String> setOrderItemIdAssetChange=new Set<String>();
  191. Set<String> setPhoneNumber=new Set<String>();
  192.  
  193. for(OrderItem obj: lstOrderItem){
  194.  
  195. if(obj.Serial_Number__c!=null && obj.Serial_Number__c!=mapOldOrder.get(obj.Id).Serial_Number__c && obj.MSP_Product__c && obj.Serialised__c){
  196. setOrderItemId.add(obj.Id);
  197. }
  198.  
  199. if(obj.Assigned_Asset_New__c!=null && obj.Assigned_Asset_New__c!=mapOldOrder.get(obj.Id).Assigned_Asset_New__c){
  200. setOrderItemIdAssetChange.add(obj.Id);
  201. }
  202.  
  203. if(obj.Phone_Number__c!=null){
  204. setPhoneNumber.add(obj.Phone_Number__c);
  205. }
  206. }
  207.  
  208. if(setOrderItemId.ISEMPTY() && setOrderItemIdAssetChange.ISEMPTY()) return;
  209.  
  210. Id rtId = [select Id,name from RecordType where SobjectType='Case' AND Name='Replacement Recycle' limit 1].Id;
  211. QueueSObject queueLog = [select id,QueueId,Queue.Name from QueueSObject where Queue.Name='Logistics' limit 1];
  212.  
  213. Set<String> setOrderItemChangeId=setOrderItemId.ISEMPTY()?setOrderItemIdAssetChange:setOrderItemId;
  214.  
  215. for(Asset_Assignment__c obj: getAssetAssignmentDetails(setPhoneNumber)){
  216. mapExistingAssetAssignments.put(obj.Phone_Number__c,obj);
  217. }
  218.  
  219. try{
  220.  
  221. for(OrderItem obj: getOrderItemDetails(setOrderItemChangeId)){
  222. mapOrderItems.put(obj.Id,obj);
  223. }
  224. System.debug('mapOrderItems---------------------------------->'+mapOrderItems);
  225.  
  226. if(!mapOrderItems.ISEMPTY() && !setOrderItemId.ISEMPTY()){
  227. createAssetAssignmentForReplenishment(lstOrderItem, mapExistingAssetAssignments, mapOrderItems, queueLog, rtId);
  228. }else if(!mapOrderItems.ISEMPTY() && !setOrderItemIdAssetChange.ISEMPTY()){
  229. createAssetAssignmentForNonReplenishment(lstOrderItem, mapExistingAssetAssignments, mapOrderItems, queueLog, rtId);
  230. }
  231. }catch(Exception e){
  232. System.debug(e);
  233. }
  234. }
  235.  
  236.  
  237.  
  238.  
  239. public static void updateBulkChangesList(Set<Id> oldChildSet){
  240.  
  241. List<Bulk_Changes_List__c> newList = new List<Bulk_Changes_List__c>();
  242. List<OrderItem> orderItems = [select Id, Order.Id, Order.Case__c, Phone_Number__c, User_Name__c, User_Email__c, SPOT__c, SUBS__c, DTOM_Profile__c, Cost_Centre__c from OrderItem where Serialised__c=true and Id in :oldChildSet LIMIT 1];
  243.  
  244. if(orderItems.size() > 0){
  245.  
  246. for(OrderItem oItem : orderItems) {
  247.  
  248. if(![select Id from Bulk_Changes_List__c where Order_Product__c =: oItem.Id].isEmpty()) {
  249.  
  250. Bulk_Changes_List__c bulkItem = [select Id from Bulk_Changes_List__c where Order_Product__c =: oItem.Id LIMIT 1];
  251.  
  252. bulkItem.Order_Product__c = oItem.Id;
  253. bulkItem.User_Name__c = oItem.User_Name__c;
  254. bulkItem.User_Email__c = oItem.User_Email__c;
  255. bulkItem.SPOT__c = oItem.SPOT__c;
  256. bulkItem.SUBS__c = oItem.SUBS__c;
  257. bulkItem.DTOM_Profile__c = oItem.DTOM_Profile__c;
  258. bulkItem.Cost_Centre__c = oItem.Cost_Centre__c;
  259.  
  260. if (oItem.Phone_Number__c != null) {
  261. bulkItem.Name = oItem.Phone_Number__c;
  262. } else {
  263. bulkItem.Name = 'TO BE CONFIRMED';
  264. }
  265.  
  266. newList.add(bulkItem);
  267. }
  268. }
  269. }
  270.  
  271. if(newList.size() > 0) update newList;
  272.  
  273. }
  274.  
  275. public static void updateAccountNamePicklist(Set<Id> oldChildSet){
  276.  
  277. if(!checkRecursive.runOnce()) return;
  278.  
  279. List<OrderItem> ItemstoUpdate = new List<OrderItem>();
  280. for(OrderItem obj : [Select id,Account_Name__c,Account_Name_Picklist__c from OrderItem where id in:Trigger.newMap.keyset()]){
  281. if(obj.Account_Name_Picklist__c <> obj.Account_Name__c){
  282.  
  283. If(obj.Account_Name__c.contains('CHH')){
  284. obj.Account_Name_Picklist__c = 'CHH';
  285. }else{if(obj.Account_Name__c.contains('Oji')){
  286. obj.Account_Name_Picklist__c = 'Oji';
  287. }else{
  288.  
  289. obj.Account_Name_Picklist__c = obj.Account_Name__c;
  290. }
  291. }
  292.  
  293. ItemstoUpdate.add(obj);
  294. }
  295. update ItemstoUpdate;
  296. }
  297. }
  298.  
  299. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement