Create ADP for missing OrderItem voce fatturabile
Thu Aug 31 2023 13:51:38 GMT+0000 (Coordinated Universal Time)
Saved by @atsigkas
String serviceName = 'IntegrationProcedure_DaVinciIntegrations_VAS1'; List<Attivit_di_processo__c> Attivita_di_Processo = new list<Attivit_di_processo__c>(); Map<String, List<String>> ordersToProducts = new Map<String, List<String>>(); //EXAMPLE ordersToProducts.put('00168868', new List<String>{'VALVCONV'}); ordersToProducts.put('00169089', new List<String>{'CALAVTERC'}); ordersToProducts.put('00168912', new List<String>{'CALAVTERC', 'VALVCONV'}); ordersToProducts.put('00169227', new List<String>{'CALAVTERC', 'VALVCONV'}); ordersToProducts.put('00169239', new List<String>{'VALVCONV'}); ordersToProducts.put('00169077', new List<String>{'CALAVTERC', 'VALVCONV'}); List<Order> orders = [SELECT ID, OrderNumber, Main_Case__c, (SELECT ID, Cod_Voce_Fatturabile__c, Product2.ProductCode FROM OrderItems) FROM Order WHERE OrderNumber IN :ordersToProducts.keySet()]; system.debug('----> ORDER LIST: ' + orders.size()); system.debug('----> ORDER LIST: ' + orders); Map<String, String> orderToCase = new Map<String, String>(); for(Order ord : orders) { orderToCase.put(ord.ID, ord.Main_Case__c); } Map<String, Case> caseToChildCase = new Map<String, Case>(); List<Case> childCases = [SELECT ID, ParentId, (SELECT ID, CreatedDate FROM Attivita_di_processo__r WHERE Name = 'Sincronizzazione Billing' LIMIT 1) FROM Case Where ParentId IN :orderToCase.values()]; system.debug('----> CHILD CASE LIST: ' + childCases.size()); system.debug('----> CHILD CASE LIST: ' + childCases); for(Case caso : childCases) { caseToChildCase.put(caso.ParentId, caso); } for(Order ord : orders) { List<String> targetProds = ordersToProducts.get(ord.OrderNumber); for(OrderItem oi : ord.OrderItems) { if(targetProds.contains(oi.Cod_Voce_Fatturabile__c)) { DateTime attivitaCreatedDate; if(caseToChildCase.get(orderToCase.get(ord.ID)).Attivita_di_processo__r.size() > 0) attivitaCreatedDate = caseToChildCase.get(orderToCase.get(ord.ID)).Attivita_di_processo__r[0].CreatedDate; Attivit_di_processo__c adp = new Attivit_di_processo__c( Stato__c = 'Aperta', RecordtypeID = Schema.SObjectType.Attivit_di_processo__c.getRecordTypeInfosByName().get('Billing Adp').getRecordTypeId(), Order__c = ord.ID, Order_Item__c = oi.ID, Cod_Voce_Fatturabile__c = oi.Cod_Voce_Fatturabile__c, Case__c = caseToChildCase.get(orderToCase.get(ord.ID)).ID, Tipo__c = 'Order Component', Importo_fisso__c = 0, Importo_rata__c = 0, Name = 'Sincronizzazione Billing', Importo_fatturato__c = 0, inizio_periodo_fattura__c = attivitaCreatedDate != null ? Date.Today().addDays(Date.Today().daysBetween(attivitaCreatedDate.date())) : Date.Today(), fine_periodo_fatturazione__c = attivitaCreatedDate != null ? Date.Today().addDays(Date.Today().daysBetween(attivitaCreatedDate.date())) : Date.Today(), prezzo__c = 0, Service_Name__c = serviceName ); Attivita_di_Processo.add(adp); } } } system.debug('-------> ADP LIST: ' + Attivita_di_Processo.size()); system.debug('-------> ADP LIST: ' + Attivita_di_Processo); insert Attivita_di_Processo;
Comments