Create ADP for missing OrderItem voce fatturabile

PHOTO EMBED

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;
content_copyCOPY