Advertisement
Guest User

Untitled

a guest
Oct 19th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //-- --------------------------------------------------------------------------------- --
  2. //-- *
  3. //-- Fichier     : TR_WorkOrderUpdateRules
  4. //-- Modifie par : SOPRA STERIA
  5. //-- Modifie le  : 16/10/2018
  6. //-- Version     : 1.0
  7. //-- * 1.0 - Init
  8. //-- --------------------------------------------------------------------------------- --
  9. public with sharing class TR_WorkOrderUpdateRules {
  10.    
  11.     /**
  12.     * @description Règles de validation pour les interventions (ordres d'exécution)
  13.     * @param newEvents Liste des interventions à vérifier
  14.     */
  15.     public static void applyUpdateRules(List<WorkOrder> newWorkOrders) {
  16.         system.debug('### DEBUT TR_WorkOrderUpdateRules.applyUpdateRules');
  17.         if (!Trigger.isExecuting)
  18.             return;
  19.            
  20.         // Init        
  21.         Set<String> caseIds = new Set<String>();
  22.         List<WorkOrder> interventions = [SELECT Id FROM WorkOrder ORDER BY CreatedDate DESC limit 1];
  23.         Map<WorkOrder, String> workOrderUpdateCaseInd = new Map<WorkOrder, String>();
  24.         Map<WorkOrder, String> caseWorkOrderMap = new Map<WorkOrder, String>();
  25.         Map<Id, WorkOrder> oldWorkOrders = (Map<Id, WorkOrder>)Trigger.oldMap;
  26.        
  27.         System.debug('########## List newWorkOrders'+newWorkOrders);
  28.         System.debug('########## query'+interventions[0]);
  29.         try{
  30.         /* A - Récupération de la liste des Ids */
  31.         for(WorkOrder newWorkOrder : newWorkOrders) {
  32.             WorkOrder oldWorkOrder = oldWorkOrders == null ? null : oldWorkOrders.get(newWorkOrder.id);
  33.             if(String.isNotBlank(newWorkOrder.CaseId) && Trigger.isInsert && newWorkOrder.id == interventions[0].id)
  34.                 caseIds.add(newWorkOrder.CaseId);
  35.             if(Trigger.IsUpdate && Trigger.IsAfter && String.isNotBlank(newWorkOrder.CaseId) && newWorkOrder.coutMainOeuvre__c != oldWorkOrder.coutMainOeuvre__c)
  36.                 caseWorkOrderMap.put(newWorkOrder, newWorkOrder.CaseId);
  37.             if((Trigger.IsUpdate || Trigger.isDelete) && Trigger.IsAfter && newWorkOrder.id == interventions[0].id) {
  38.                 system.debug('########## newWorkOrder.interventionConcluante__c'+newWorkOrder.interventionConcluante__c);
  39.                 if(Trigger.IsUpdate && newWorkOrder.interventionConcluante__c == true && newWorkOrder.Status == 'Terminée')
  40.                     workOrderUpdateCaseInd.put(newWorkOrder, 'concluante');
  41.                 if(Trigger.isDelete && newWorkOrder.interventionConcluante__c == true && newWorkOrder.Status == 'Terminée')
  42.                     workOrderUpdateCaseInd.put(newWorkOrder, 'delete');
  43.                 }
  44.         }
  45.            
  46.         if(!workOrderUpdateCaseInd.isEmpty())
  47.             incrementCaseIndicators(workOrderUpdateCaseInd);
  48.         if(!caseWorkOrderMap.isEmpty())
  49.             calculateCoutMO(caseWorkOrderMap);
  50.            
  51.         /* B - SOQL - Récupération des informations */
  52.                
  53.         /* C - Traitement */
  54.         } catch (Exception e) {
  55.             system.debug('ERREUR # TR_OrderUpdateRules (' + e + ') ligne : ' + String.valueOf(e.getLineNumber()) + ' !');
  56.             system.debug('ERREUR # Message ' + e.getMessage());
  57.             throw e;
  58.         }
  59.        
  60.         system.debug('### FIN TR_WorkOrderValidationRules.applyValidationRules');
  61.     }
  62.    
  63.     public static void incrementCaseIndicators(Map<WorkOrder, String> newWorkOrders) {
  64.         List<String> caseIds = new List<String>();
  65.         List<Case> caseToUp = new List<Case>();
  66.         Map<String, Case> cases = new Map<String, Case>();
  67.         for(WorkOrder newWorkOrder : newWorkOrders.keySet()) {
  68.             caseIds.add(newWorkOrder.CaseId);
  69.         }
  70.         if(!caseIds.isEmpty())
  71.             cases = new Map<String, Case>([SELECT id, derniereInterventionConcluante__c FROM Case WHERE Id IN :caseIds]);
  72.        
  73.         for(WorkOrder newWorkOrder : newWorkOrders.keySet()) {
  74.             Case caseWorkOrder = cases.get(newWorkOrder.CaseId);
  75.             if(newWorkOrders.get(newWorkOrder) == 'concluante') {
  76.                 caseWorkOrder.derniereInterventionConcluante__c = true;
  77.                 caseToUp.add(caseWorkOrder);
  78.             }
  79.             if(newWorkOrders.get(newWorkOrder) == 'delete' && caseWorkOrder.derniereInterventionConcluante__c == true) {
  80.                 caseWorkOrder.derniereInterventionConcluante__c = false;
  81.                 caseToUp.add(caseWorkOrder);
  82.             }
  83.         }
  84.        
  85.         if(!caseToUp.isEmpty())
  86.             update caseToUp;
  87.            
  88.     }
  89.    
  90.     public static void calculateCoutMO (Map<WorkOrder, String> caseWorkOrderMap) {
  91.         List<Case> caseToUp = new List<Case>();
  92.        
  93.         // Modification de coutMO
  94.         AggregateResult[] groupedResults = [SELECT CaseId, SUM(coutMainOeuvre__c)somme FROM WorkOrder
  95.                                                 WHERE CaseId IN :caseWorkOrderMap.values()
  96.                                             GROUP BY CaseId];
  97.         for(AggregateResult result : groupedResults) {
  98.             Case ccc = new Case();
  99.             ccc.Id = (String) result.get('CaseId');
  100.             Decimal coutTtotal = (Decimal) result.get('somme');
  101.             ccc.mainOeuvreTechnicien__c = (Decimal) result.get('somme');
  102.             system.debug('### mainOeuvreTechnicien__c ' + ccc.mainOeuvreTechnicien__c);
  103.             caseToUp.add(ccc);
  104.         }
  105.        
  106.         if(!caseToUp.isEmpty())
  107.             update caseToUp;
  108.        
  109.     }
  110.    
  111.     public class LapeyreException extends Exception {}
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement