Advertisement
Guest User

Untitled

a guest
Jan 18th, 2018
339
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.33 KB | None | 0 0
  1. public with sharing class CPQ_MIL01_UtilsCls {
  2.  
  3. public static final String MIL_NAME_ASSIGN_COORDINATOR = 'Assign Coordinator';
  4. public static final String MIL_NAME_COMMITED_DELIVERY_DATE = 'Committed Delivery Date';
  5. public static final String MIL_NAME_DELIVERY_ON_TIME = 'Delivered On Time';
  6.  
  7. public static final String MIL_NAME_DISMANTLE_CROSS_CONNECT = 'Dismantle Cross Connect';
  8.  
  9. public static final String MIL_NAME_DISMANTLE = 'Dismantle';
  10.  
  11. public static final String MIL_NAME_PORT_ALLOCATION_ETHERNET = 'Port Allocation Ethernet';
  12. public static final String MIL_NAME_PORT_ALLOCATION_IP_SERVICE = 'Port Allocation IP Service';
  13. public static final String MIL_NAME_PORT_ALLOCATION_DEFAULT = 'Default Port Allocation';
  14.  
  15. public static final String MIL_NAME_ROUTE_PLANNING_BACKBONE = 'Route Planning Backbone';
  16. public static final String MIL_NAME_ROUTE_PLANNING_ETHERNET = 'Route Planning Ethernet';
  17. public static final String MIL_NAME_ROUTE_PLANNING_IP_SERVICE = 'Route Planning IP Service';
  18. public static final String MIL_NAME_ROUTE_PLANNING_WAVELENGTH = 'Route Planning Wavelength';
  19. public static final String MIL_NAME_ROUTE_PLANNING_WITH_NBO = 'Route Planning with NBO';
  20. public static final String MIL_NAME_ROUTE_PLANNING_DEFAULT = 'Default Route Planning';
  21.  
  22. public static final String MIL_NAME_SERV_CONF_IP_OR_ETHERNET = 'Service Configuration IP Service or Ethernet';
  23. public static final String MIL_NAME_SERV_CONF_SEC_IP = 'Service Configuration Security Service, IP Sec Gateway';
  24. public static final String MIL_NAME_SERV_CONF_DEFAULT = 'Default Service Configuration';
  25.  
  26. public static final String MIL_NAME_TRANS_CONF_BACKBONE = 'Transmission Configuration Backbone';
  27. public static final String MIL_NAME_TRANS_CONF_ETHERNET = 'Transmission Configuration Ethernet';
  28. public static final String MIL_NAME_TRANS_CONF_IP_SERVICE = 'Transmission Configuration IP Service';
  29. public static final String MIL_NAME_TRANS_CONF_WAVELENGTH = 'Transmission Configuration Wavelength';
  30. public static final String MIL_NAME_TRANS_CONF_NBO = 'Transmission Configuration with NBO';
  31. public static final String MIL_NAME_TRANS_CONF_DEFAULT = 'Default Transmission Configuration';
  32.  
  33. public static final String TYPE_OF_SERVICE_CARRIER_IP = 'CARRIER_IP';
  34.  
  35. public static final Map<String, List<String>> WO_TYPE_TO_MIL = prepareMap();
  36.  
  37. private static Map<String, List<String>> prepareMap(){
  38. Map<String, List<String>> outputMap = new Map<String, List<String>>();
  39. outputMap.put(ApplicationConstant.WORK_ORDER_TYPE_TRANSMISSION_CONFIGURATION, new List<String>{MIL_NAME_TRANS_CONF_NBO, MIL_NAME_TRANS_CONF_WAVELENGTH,
  40. MIL_NAME_TRANS_CONF_IP_SERVICE, MIL_NAME_TRANS_CONF_ETHERNET, MIL_NAME_TRANS_CONF_BACKBONE,
  41. MIL_NAME_TRANS_CONF_DEFAULT});
  42. outputMap.put(ApplicationConstant.WORK_ORDER_TYPE_SERVICE_CONFIGURATION, new List<String>{MIL_NAME_SERV_CONF_IP_OR_ETHERNET, MIL_NAME_SERV_CONF_SEC_IP, MIL_NAME_SERV_CONF_DEFAULT, MIL_NAME_DISMANTLE});
  43. outputMap.put(ApplicationConstant.WORK_ORDER_TYPE_PORT_ALLOCATION, new List<String>{MIL_NAME_PORT_ALLOCATION_IP_SERVICE, MIL_NAME_PORT_ALLOCATION_ETHERNET, MIL_NAME_PORT_ALLOCATION_DEFAULT});
  44. outputMap.put(ApplicationConstant.WORK_ORDER_TYPE_ROUTE_PLANNER, new List<String>{MIL_NAME_ROUTE_PLANNING_WITH_NBO, MIL_NAME_ROUTE_PLANNING_WAVELENGTH, MIL_NAME_ROUTE_PLANNING_IP_SERVICE, MIL_NAME_ROUTE_PLANNING_ETHERNET,
  45. MIL_NAME_ROUTE_PLANNING_BACKBONE, MIL_NAME_ROUTE_PLANNING_DEFAULT, MIL_NAME_DISMANTLE});
  46. return outputMap;
  47. }
  48.  
  49. public static void completeWorkOrderMilestone(Map<Id, WorkOrder> workOrderMap, List<String> milestoneNameList, DateTime complDate) {
  50. List<EntityMilestone> womToUpdate = [
  51. SELECT Id, CompletionDate
  52. FROM EntityMilestone
  53. WHERE ParentEntityId IN : workOrderMap.keySet()
  54. AND Name IN :milestoneNameList
  55. AND CompletionDate = null
  56. ];
  57.  
  58. if (!womToUpdate.isEmpty()) {
  59. for (EntityMilestone emRecord : womToUpdate) {
  60. emRecord.CompletionDate = complDate;
  61. }
  62.  
  63. update womToUpdate;
  64.  
  65. }
  66. }
  67.  
  68. /**
  69. * @author Grzegorz Długosz - grzegorz.dlugosz@enxoo.com
  70. * @description Method reopens closed milestones that are related to given List of WorkOrders and
  71. * which names are included in the list.
  72. * @param workOrderSetId - Work Orders for which the milestones need to be reopened
  73. */
  74. public static void reopenWorkOrderMilestone(Set<Id> workOrderIdSet) {
  75. List<String> milestoneNameList = new List<String>{MIL_NAME_PORT_ALLOCATION_ETHERNET, MIL_NAME_PORT_ALLOCATION_IP_SERVICE, MIL_NAME_ROUTE_PLANNING_WAVELENGTH, MIL_NAME_ROUTE_PLANNING_IP_SERVICE,
  76. MIL_NAME_ROUTE_PLANNING_ETHERNET, MIL_NAME_ROUTE_PLANNING_BACKBONE, MIL_NAME_TRANS_CONF_WAVELENGTH, MIL_NAME_TRANS_CONF_IP_SERVICE,
  77. MIL_NAME_TRANS_CONF_ETHERNET, MIL_NAME_TRANS_CONF_BACKBONE};
  78. DateTime newStartDate = System.now();
  79.  
  80. List<EntityMilestone> milestonesToUpdate = [
  81. SELECT Id, CompletionDate, StartDate
  82. FROM EntityMilestone
  83. WHERE ParentEntityId IN : workOrderIdSet
  84. AND Name IN :milestoneNameList
  85. AND CompletionDate != null
  86. ];
  87.  
  88. if (!milestonesToUpdate.isEmpty()) {
  89. for (EntityMilestone em : milestonesToUpdate) {
  90. em.CompletionDate = null;
  91. em.StartDate = newStartDate;
  92. }
  93.  
  94. update milestonesToUpdate;
  95. }
  96. }
  97.  
  98. // closeRelatedWO - not empty only in Insert operation
  99. public static void completeWorkOrderMilestone(Map<String, Map<Id, WorkOrder>> workOrderMap, DateTime complDate, Map<String, Set<Id>> closeRelatedWO) {
  100. Set<String> milestonesTosearch = new Set<String>();
  101. Map<Id, WorkOrder> wo2check = new Map<Id, WorkOrder>();
  102.  
  103. if(closeRelatedWO != null && !closeRelatedWO.isEmpty()){
  104. for(String typeWo : closeRelatedWO.keySet()){
  105. milestonesTosearch.addAll(WO_TYPE_TO_MIL.get(typeWo));
  106. }
  107. wo2check = findRelatedWO(closeRelatedWO);
  108. } else {
  109. closeRelatedWO = new Map<String, Set<Id>>();
  110. }
  111. for(String key : workOrderMap.keySet()){
  112. if(WO_TYPE_TO_MIL.containsKey(key)){
  113. milestonesTosearch.addAll(WO_TYPE_TO_MIL.get(key));
  114. }
  115. wo2check.putAll(workOrderMap.get(key));
  116. }
  117.  
  118. List<EntityMilestone> mil2update = new List<EntityMilestone>();
  119. System.debug('@@ GRDLU wo2check: ' + JSON.serialize(wo2check));
  120. System.debug('@@ GRDLU mil2update : ' + JSON.serialize(mil2update ));
  121. System.debug('@@ GRDLU milestonesTosearch : ' + JSON.serialize(milestonesTosearch ));
  122.  
  123. for(EntityMilestone entMil : [ SELECT Name, CompletionDate, ParentEntityId, ParentEntity.Sold_Service_Modification__r.Type_Of_Service__c FROM EntityMilestone WHERE ParentEntityId IN : wo2check.keySet() AND Name IN :milestonesTosearch AND CompletionDate = null]){
  124. System.debug('@@ GRDLU considered entMil: ' + JSON.serialize(entMil));
  125. Boolean updateMilestone = false;
  126. WorkOrder woTemp = wo2check.get(entMil.ParentEntityId);
  127.  
  128. if(woTemp.Type__c == ApplicationConstant.WORK_ORDER_TYPE_TRANSMISSION_CONFIGURATION){
  129. if(closeRelatedWO.isEmpty() && entMil.Name == MIL_NAME_TRANS_CONF_DEFAULT){
  130. updateMilestone = true;
  131. } else if(closeRelatedWO.containsKey(ApplicationConstant.WORK_ORDER_TYPE_TRANSMISSION_CONFIGURATION) && closeRelatedWO.get(ApplicationConstant.WORK_ORDER_TYPE_TRANSMISSION_CONFIGURATION).contains(woTemp.Sold_Service_Modification__c) && entMil.Name != MIL_NAME_TRANS_CONF_NBO){
  132. updateMilestone = true;
  133. } else if(closeRelatedWO.isEmpty() && woTemp.NBO_Connected_To_SSM__c == true && entMil.Name == MIL_NAME_TRANS_CONF_NBO){
  134. updateMilestone = true;
  135. } else if(entMil.Name != MIL_NAME_TRANS_CONF_NBO && woTemp.Product_Name__c != null && (woTemp.Product_Name__c == ApplicationConstant.ITEMNAME_WAVELENGTH || woTemp.Product_Name__c == ApplicationConstant.ITEMNAME_IP_SERVICE ||
  136. woTemp.Product_Name__c.contains(ApplicationConstant.PRD_NAME_BACKBONE) || woTemp.Product_Name__c.contains(ApplicationConstant.PRD_NAME_ETHERNET) || entMil.ParentEntity.Sold_Service_Modification__r.Type_Of_Service__c.contains(TYPE_OF_SERVICE_CARRIER_IP))){
  137. updateMilestone = true;
  138. }
  139. } else if(woTemp.Type__c == ApplicationConstant.WORK_ORDER_TYPE_ROUTE_PLANNER){
  140. System.debug('@@ GRDLU 1: ' + JSON.serialize(woTemp));
  141. if(closeRelatedWO.isEmpty() && entMil.Name == MIL_NAME_ROUTE_PLANNING_DEFAULT || entMil.Name == MIL_NAME_DISMANTLE){
  142. System.debug('@@ GRDLU 2: ' + JSON.serialize(woTemp));
  143. updateMilestone = true;
  144. } else if(closeRelatedWO.containsKey(ApplicationConstant.WORK_ORDER_TYPE_ROUTE_PLANNER) && closeRelatedWO.get(ApplicationConstant.WORK_ORDER_TYPE_ROUTE_PLANNER).contains(woTemp.Sold_Service_Modification__c) && entMil.Name != MIL_NAME_ROUTE_PLANNING_WITH_NBO){
  145. System.debug('@@ GRDLU 3: ' + JSON.serialize(woTemp));
  146. updateMilestone = true;
  147. } else if(closeRelatedWO.isEmpty() && woTemp.NBO_Connected_To_SSM__c == true && entMil.Name == MIL_NAME_ROUTE_PLANNING_WITH_NBO){
  148. System.debug('@@ GRDLU 4: ' + JSON.serialize(woTemp));
  149. updateMilestone = true;
  150. } else if(entMil.Name != MIL_NAME_ROUTE_PLANNING_WITH_NBO && woTemp.Product_Name__c != null && (woTemp.Product_Name__c == ApplicationConstant.ITEMNAME_WAVELENGTH || woTemp.Product_Name__c.contains(ApplicationConstant.PRD_NAME_ETHERNET) || woTemp.Product_Name__c.contains(ApplicationConstant.PRD_NAME_BACKBONE) ||
  151. woTemp.Product_Name__c == ApplicationConstant.ITEMNAME_IP_SERVICE ) || entMil.ParentEntity.Sold_Service_Modification__r.Type_Of_Service__c.contains(TYPE_OF_SERVICE_CARRIER_IP)){
  152. System.debug('@@ GRDLU 6: ' + JSON.serialize(woTemp));
  153. updateMilestone = true;
  154. }
  155. } else if(woTemp.Type__c == ApplicationConstant.WORK_ORDER_TYPE_SERVICE_CONFIGURATION){
  156. if(closeRelatedWO.isEmpty() && entMil.Name == MIL_NAME_SERV_CONF_DEFAULT || entMil.Name == MIL_NAME_DISMANTLE){
  157. updateMilestone = true;
  158. } else if(woTemp.Product_Name__c == ApplicationConstant.ITEMNAME_SECURITY_SERVICE || woTemp.Product_Name__c == ApplicationConstant.ITEMNAME_IP_SERVICE ||
  159. woTemp.Product_Name__c == ApplicationConstant.ITEMNAME_IP_SEC_GATEWAY || (woTemp.Product_Name__c != null && woTemp.Product_Name__c.contains(ApplicationConstant.PRD_NAME_ETHERNET) || entMil.ParentEntity.Sold_Service_Modification__r.Type_Of_Service__c.contains(TYPE_OF_SERVICE_CARRIER_IP))){
  160. updateMilestone = true;
  161. }
  162. } else if(woTemp.Type__c == ApplicationConstant.WORK_ORDER_TYPE_PORT_ALLOCATION){
  163. if(closeRelatedWO.isEmpty() && entMil.Name == MIL_NAME_PORT_ALLOCATION_DEFAULT){
  164. updateMilestone = true;
  165. } else if(closeRelatedWO.containsKey(ApplicationConstant.WORK_ORDER_TYPE_PORT_ALLOCATION) && closeRelatedWO.get(ApplicationConstant.WORK_ORDER_TYPE_PORT_ALLOCATION).contains(woTemp.Sold_Service_Modification__c)){
  166. updateMilestone = true;
  167. } else if(woTemp.Product_Name__c != null && (woTemp.Product_Name__c == ApplicationConstant.ITEMNAME_IP_SERVICE || woTemp.Product_Name__c.contains(ApplicationConstant.PRD_NAME_ETHERNET) || entMil.ParentEntity.Sold_Service_Modification__r.Type_Of_Service__c.contains(TYPE_OF_SERVICE_CARRIER_IP))){
  168. updateMilestone = true;
  169. }
  170. }
  171.  
  172. if(updateMilestone){
  173. entMil.CompletionDate = complDate;
  174. System.debug('@@ GRDLU mil2update: ' + JSON.serialize(mil2update));
  175. mil2update.add(entMil);
  176. }
  177. }
  178.  
  179. if (!mil2update.isEmpty()) {
  180. System.debug('@@ GRDLU mil2update: ' + JSON.serialize(mil2update));
  181. update mil2update;
  182. }
  183. }
  184.  
  185. public static Map<Id, WorkOrder> findRelatedWO(Map<String, Set<Id>> closeRelatedWO){
  186. Set<Id> relatedSSM = new Set<Id>();
  187. for(Set<Id> idSet : closeRelatedWO.values()){
  188. relatedSSM.addAll(idSet);
  189. }
  190. return new Map<Id, WorkOrder>([SELECT Type__c, Sold_Service_Modification__c, NBO_Connected_To_SSM__c, Product_Name__c FROM WorkOrder WHERE Sold_Service_Modification__c IN :relatedSSM AND Type__c = :closeRelatedWO.keySet()]);
  191. }
  192.  
  193. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement