Untitled
unknown
plain_text
3 years ago
51 kB
7
Indexable
/**
* @author Ersi Dule (ersi.dule@webresults.it)
* @date 14/07/2020
* @description CEP_SRV_OrderManagementCreation – Class that implements the logics for the creation of the order management chanin
* @history Ersi Dule - 14/07/2020 - Created the class
*/
public with sharing class CEP_SRV_OrderManagementCreation {
private static Map<String, String> caseRecordTypeIdsByDeveloperName = CEP_UTL_RecordType.getRecordTypeInfosForObject(Schema.Case.getSObjectType());
private static Map<String, String> integrationCaseRecordTypeIdsByDeveloperName = CEP_UTL_RecordType.getRecordTypeInfosForObject(Schema.IntegrationCase__c.getSObjectType());
/**
* @author Ersi Dule (ersi.dule@webresults.it)
* @date 14/07/2020
* @description createOrderManagementChain - creates the order management chain
* @param1 opportunityIds - the set containing the ids of the opportunities
* @return Object
*/
public static Object createOrderManagementChain(Set<Id> opportunityIds){
//NTT W3
Boolean vas = false;
System.debug('CEP_SRV_OrderManagementCreation::createOrderManagementChain::opportunityIds='+JSON.serializePretty(opportunityIds));
List<Case> casesToInsert = new List<Case>();
List<IntegrationCase__c> integrationCasesToInsert = new List<IntegrationCase__c>();
List<OpportunityServiceItem__c> osiToUpdate = new List<OpportunityServiceItem__c>();
String profileId = UserInfo.getProfileId();
List<Profile> userProfileList = [SELECT Id, Name FROM Profile WHERE Id = :profileId];
Profile userProfile = userProfileList[0];
String switchEleRt = CEP_UTL_RecordType.getRecordTypeIdByDeveloperName('CEP_RT_SwitchInEle', 'IntegrationCase__c');
String switchGasRt = CEP_UTL_RecordType.getRecordTypeIdByDeveloperName('CEP_RT_SwitchInGas', 'IntegrationCase__c');
Savepoint savePoint = Database.setSavepoint();
Integer counter = 0;
Boolean hasDisactivationPostponed = false;
String codsubServ = '';
try{
Map<Id, Opportunity> opptiesById = OpportunityQueries.getInstance().getOppsWithOpportunityServiceItemsForCreateOder(opportunityIds);
List<Id> badOsiIds = removeOSIVasActivation(opptiesById);
System.debug('CEP_SRV_OrderManagementCreation::createOrderManagementChain::opptiesById='+JSON.serializePretty(opptiesById));
List<Contract> contracts = ContractQueries.getInstance().listByOpptyIds(opportunityIds);
// 29-09-2021 CERCO GLI SWICHING ELE CHE DEVONO DIVENTARE CONTROPARTI COMMERCIALI
List<OpportunityServiceItem__c> osiToCheckProcess = new List<OpportunityServiceItem__c>();
if(!opptiesById.isEmpty()){
for(Id oppId : opptiesById.keySet()){
Opportunity oppty = opptiesById.get(oppId);
osiToCheckProcess.addAll(oppty.OpportunityServiceItems__r);
System.debug('riga 57');
}
}
List<OpportunityServiceItem__c> opportunityServiceItems = new List<OpportunityServiceItem__c> ();
Map<Id,OpportunityServiceItem__c> parentOsiAgevolazioniFiscali = new Map<Id,OpportunityServiceItem__c> ();
map<Id,OpportunityServiceItem__c> controcommerMap = CEP_UTL_ContropartiCommerciali.checkAccountOSI(osiToCheckProcess);
System.debug('controcommerMap = '+JSON.serialize(controcommerMap));
///////////////////////////////////////////////////////////
// query recupero
Id vasCaseId = [SELECT id FROM RecordType WHERE DeveloperName = 'RT_SmartServices' AND SobjectType = 'Case' LIMIt 1].id;
String vasAccount; String vasType;
if(!opptiesById.isEmpty()){
for(Id oppId : opptiesById.keySet()){
System.debug('@@oppId ' + oppId);
Opportunity oppty = opptiesById.get(oppId);
opportunityServiceItems = oppty.OpportunityServiceItems__r;
for (OpportunityServiceItem__c osi : opportunityServiceItems) {
system.debug('*** riga 68');
//NTT W3
System.debug('Valore osi ::: ' + osi.RecordType.DeveloperName);
if(osi.RecordType.DeveloperName == 'NTT_Smart_Service') { vas = true; vasAccount = osi.Account__c; VasType = osi.NTT_Tipologia_Prodotto__c; }
if ((osi.RecordType.DeveloperName == 'CEP_RT_VAS' && osi.Status__c == 'Rifiutato') || osi.OrderCreated__c || badOsiIds.contains(osi.Id) || osi.RethinkingStatus__c=='Ripensato') {
continue;
}
if(counter >= 100){
break;
}
system.debug('*** riga 71');
codsubServ = osi.CodSubServ__c;
counter++;
System.debug('@@osi.id ' + osi.Id);
Case processCase = new Case();
if(!controcommerMap.isEmpty() && controcommerMap.containsKey(osi.Id)){
osi.Process__c = controcommerMap.get(osi.Id).Process__c;
osi.ContractDate__c = System.today();
}
if(!vas)
{
processCase.RecordTypeId = trascodeProcessToRecordType(osi.Process__c, osi.RecordType.DeveloperName, 'Case');
}
else
{
processCase.RecordTypeId = vasCaseId;
}
if('Disattivazione'.equalsIgnoreCase(osi.Process__c) && isDeactivationPostponed(osi.RecordType.developername, osi.DeactivationDate__c) ){
hasDisactivationPostponed = true;
}
if('Switching Win'.equalsIgnoreCase(osi.Process__c) ){
osi.ContractDate__c = System.today();
}
if(processCase.RecordTypeId == Schema.SObjectType.Case.getRecordTypeInfosByDeveloperName().get('CEP_RT_TaxBreak').getRecordTypeId()){
OpportunityServiceItem__c originOsi = CEP_LC_TaxBreak.manageAgevolazioniFiscali(osi);
if(originOsi != null){
parentOsiAgevolazioniFiscali.put(originOsi.Id, originOsi);
}
}
if(processCase.RecordTypeId == Schema.SObjectType.Case.getRecordTypeInfosByDeveloperName().get('CEP_RT_ShiftMeter').getRecordTypeId()
|| processCase.RecordTypeId == Schema.SObjectType.Case.getRecordTypeInfosByDeveloperName().get('CEP_RT_RateChange').getRecordTypeId()
|| processCase.RecordTypeId == Schema.SObjectType.Case.getRecordTypeInfosByDeveloperName().get('CEP_RT_CheckMeasurementGroupEle').getRecordTypeId()
|| processCase.RecordTypeId == Schema.SObjectType.Case.getRecordTypeInfosByDeveloperName().get('CEP_RT_CheckMeasurementGroupGas').getRecordTypeId()
|| processCase.RecordTypeId == Schema.SObjectType.Case.getRecordTypeInfosByDeveloperName().get('CEP_RT_QuoteGas').getRecordTypeId()
|| processCase.RecordTypeId == Schema.SObjectType.Case.getRecordTypeInfosByDeveloperName().get('CEP_RT_VoltageCheck').getRecordTypeId()
|| processCase.RecordTypeId == Schema.SObjectType.Case.getRecordTypeInfosByDeveloperName().get('CEP_RT_ChangePhasePower').getRecordTypeId()
|| processCase.RecordTypeId == Schema.SObjectType.Case.getRecordTypeInfosByDeveloperName().get('CEP_RT_PressureCheck').getRecordTypeId()
|| processCase.RecordTypeId == Schema.SObjectType.Case.getRecordTypeInfosByDeveloperName().get('CEP_RT_Prescription').getRecordTypeId()
|| processCase.RecordTypeId == Schema.SObjectType.Case.getRecordTypeInfosByDeveloperName().get('CEP_RT_TaxBreak').getRecordTypeId()
)
{
processCase.Phase__c = Constants.getAllConstants().CASE_PHASE_WORKING;
processCase.Status = Constants.getAllConstants().CASE_STATUS_WORKING;
processCase.HistoricalResidenceData__c = osi.HistoricalResidenceData__c;
processCase.Residence__c = osi.Residence__c;
processCase.EffectiveDateFrom__c = osi.EffectiveDate__c;
}else{
processCase.Phase__c = Constants.getAllConstants().CASE_PHASE_START;
processCase.Status = Constants.getAllConstants().CASE_STATUS_TO_SEND;
}
if (processCase.RecordTypeId == Schema.SObjectType.Case.getRecordTypeInfosByDeveloperName().get('CEP_RT_Prescription').getRecordTypeId() ){
processCase.Phase__c = 'BOZZA';
}
processCase.Subject = osi.Process__c;
processCase.Opportunity__c = oppty.Id;
processCase.Channel__c = oppty.Channel__c;
processCase.SubChannel__c = oppty.SubChannel__c;
processCase.Brand__c = oppty.Brand__c;
//FI field added
processCase.ChannelDetail__c = oppty.ChannelDetail__c;
processCase.MatrixChannelAgency__c = oppty.MatrixChannelAgency__c;
processCase.SubAgency__c = oppty.SubAgency__c;
processCase.Structure__c = oppty.Structure__c;
processCase.OmniChannelOperator__c = oppty.OmniChannelOperator__c;
//
processCase.Contact__c = oppty.ContactId;
processCase.AssetId = osi.Asset__c;
processCase.OpportunityServiceItem__c = osi.Id;
processCase.ServicePoint__c = osi.ServicePoint__c;
processCase.ServicePointCode__c = osi.ServicePointCode__c;
processCase.ContractAccount__c = osi.ContractAccount__c;
processCase.BillingProfile__c = osi.BillingProfile__c;
processCase.DeactivationDate__c = osi.DeactivationDate__c;
if(('Offerta B2B'.equalsIgnoreCase(oppty.RequestType__c) || 'Da Accordo Quadro'.equalsIgnoreCase(oppty.RequestType__c)) && oppty.Account.Segment__c != 'Reseller'){
processCase.AccountId = osi.Account__c;
}else{
processCase.AccountId = oppty.AccountId;
}
if(osi.Process__c.containsIgnoreCase('voltura')){
processCase.PreviousAccount__c = osi.Asset__r?.AccountId;
}
if(osi.Process__c.containsIgnoreCase('Switching Win cc')){
processCase.PreviousAccount__c = osi.PreviousAccount__c;
}
processCase.Contract__c = !contracts.isEmpty() ? contracts[0].Id : null;
if(oppty.Account.Segment__c == Constants.getAllConstants().ACCOUNT_SEGMENT_RESELLER){
processCase.FinalAccount__c = osi.Account__c;
}
String refPerfezionamento;
if(oppty.ContactDigitalCompletion__c!=null){
refPerfezionamento = oppty.ContactDigitalCompletion__c;
}
else{
if(oppty.CustomerInteraction__c != null){
refPerfezionamento = oppty.CustomerInteraction__r.Contact__c;
}
}
processCase.ContactDigitalCompletion__c = refPerfezionamento;
processCase.Email__c = oppty.Email__c;
//LD field added
processCase.CustomerInteraction__c = oppty?.CustomerInteraction__c;
processCase.ShiftDistance__c = osi.ShiftDistance__c;
processCase.QuoteType__c = osi.QuoteType__c;
processCase.DistributorAdministrativeCharges__c = osi.DistributorAdministrativeCharges__c;
processCase.AdministrativeSalesCharges__c = osi.AdministrativeSalesCharges__c;
processCase.OverallCharges__c = osi.OverallCharges__c;
processCase.DistributorCharges__c = osi.DistributorCharge__c;
processCase.PastCharges__c = osi.PastCharges__c;
processCase.PowerAmount__c = osi.PowerAmount__c;
processCase.VATRate__c = osi.VATRate__c;
processCase.Taxable__c = osi.Taxable__c;
processCase.Stamp__c = osi.Stamp__c;
processCase.CompletionMode__c = oppty.CompletionMode__c;
//processCase.ContactDigitalCompletion__c = oppty.ContactDigitalCompletion__c;
processCase.ContactDigitalCompletionDraft__c = oppty.ContactDigitalCompletionDraft__c;
processCase.VATAmount__c = osi.VAT__c;
processCase.Amount__c = osi.TotalQuoteAmount__c;
processCase.Commodity__c = osi.Commodity__c;
if(osi.Process__c == 'Disattivazione' && osi.DeactivationDate__c == Date.today()){
processCase.ImmediateDeactivation__c = true;
}
String opptySegment = '';
if (!String.isBlank(oppty.Id)) {
list<Opportunity> opptys = new List<Opportunity>();
opptys = [SELECT Segment__c FROM Opportunity WHERE Id = :oppty.Id];
if (string.isNotBlank(opptys[0].Segment__c))opptySegment = opptys[0].Segment__c;
}
//NTT W3
if(osi.Process__c != 'CAMBIO PRODOTTO' && osi.Process__c !='CAMBIO PRODOTTO CROSS BRAND'){
if(osi.Process__c == 'Modifica Tipologia PDR') {
processCase.CalculatedSupplyStartDate__c = System.today();
} else {
processCase.CalculatedSupplyStartDate__c = osi.EffectiveDate__c;
}
}else{
if (oppty.Account.Segment__c != 'Mass Market') {
processCase.CalculatedSupplyStartDate__c = osi.EffectiveDate__c;
}else{
DateTime sign = oppty.SignatureDate__c;
if(sign==null){
sign = oppty.LastModifiedDate;
}
Integer year = sign.year();
Integer month = sign.month()+1;
processCase.CalculatedSupplyStartDate__c = date.newInstance(year, month, 1);
}
}
System.debug('@@processCase ' +processCase);
casesToInsert.add(processCase);
osi.OrderCreated__c = true;
osiToUpdate.add(osi);
}
}
System.debug('@@casesToInsert:' + casesToInsert);
System.debug('@@osiToUpdate:' + osiToUpdate);
DatabaseService.getInstance().insertSObject(casesToInsert);
CEP_TRH_OpportunityServiceItem.bypass('CEP_BypassOpportunityServiceItemTrigger');
System.debug('Prima update osi.Process__c');
// evita osi duplicati in osiToUpdate quando si aggiungono i parentOsiAgevolazioniFiscali
Map<Id,OpportunityServiceItem__c> osiToUpdateMap = new Map<Id,OpportunityServiceItem__c>(osiToUpdate);
for (Id osiId : parentOsiAgevolazioniFiscali.keySet()) {
if (!osiToUpdateMap.containsKey(osiId)) {
osiToUpdate.add(parentOsiAgevolazioniFiscali.get(osiId));
}
}
DatabaseService.getInstance().updateSObject(osiToUpdate);
System.debug('Dopo update osi.Process__c');
CEP_TRH_OpportunityServiceItem.clearBypass('CEP_BypassOpportunityServiceItemTrigger');
Map<Id, Opportunity> opptiesWithCasesById = OpportunityQueries.getInstance().getOpportunitiesWithCases(opportunityIds);
Map<Id,List<IntegrationCase__c>> childIntCaseOfCase = OpportunityQueries.getInstance().checkIntegrationCaseAssociatedToCase(opportunityIds);
System.debug('@@ opptiesWithCasesById = '+JSON.serializePretty(opptiesWithCasesById));
//creazione commessa solo se variabile = true
String id_commessa;
if(vas)
{
Commessa__c commessa = new Commessa__c(Stato__c = 'Nuovo', Tipologia_VAS__c = vasType, Accountid__c = vasAccount); //Tipologia_VAS__c = osi.NTT_Tipologia_Prodotto__c);
Database.insert(commessa);
id_commessa = commessa.id;
System.debug('Commessa ::: ' + commessa);
}
// query rt case - Select id, DeveloperName, SobjectType from RecordType WHERE DeveloperName = 'RT_SmartServices' AND SobjectType = 'Case' LIMIt 1
for(Id opptyId : opptiesWithCasesById.keySet()){
Opportunity oppty = opptiesWithCasesById.get(opptyId);
List<Case> childrenCases = oppty.Cases__r;
for(Case processCase : childrenCases){
if (childIntCaseOfCase.get(processCase.id) != null && !childIntCaseOfCase.get(processCase.id).isEmpty()){
system.debug('*** ci sono figli');
continue;
}
System.debug('CEP_SRV_OrderManagementCreation::createOrderManagementChain::processCase='+JSON.serializePretty(processCase));
IntegrationCase__c intCase = new IntegrationCase__c();
// VAS
if(vas){ intCase.Commessaid__c = id_commessa; }
//
intCase.Phase__c = 'START';
intCase.Case__c = processCase.Id;
if(!vas){
intCase.CreatedByRCG3__c = userProfile.Name == 'CEP_IntegrationUser' && processCase.Subject == 'Switching per Ripristino';
intCase.Asset__c = processCase.AssetId;
}
intCase.Account__c = processCase.AccountId;
intCase.PreviousAccount__c = processCase.PreviousAccount__c;
//da modificare con il rt nuovo degli smart service
System.debug('RT SMART SERVICE @@@@@@@@@@@@@@@@@@@@@@@@@@@@@');
List <Case> vasCase = [SELECT id, OpportunityServiceItem__r.RecordType.DeveloperName FROM Case WHERE opportunity__c = : opptyId AND OpportunityServiceItem__r.RecordType.DeveloperName <> ''];
if(vasCase[0].OpportunityServiceItem__r.RecordType.DeveloperName == 'NTT_Smart_Service') { vas = true; }
System.debug('VAS CASE LIST ' + vasCase);
if(!vas)
{
intCase.RecordTypeId = trascodeProcessToRecordType(processCase.OpportunityServiceItem__r.Process__c, processCase.OpportunityServiceItem__r.RecordType.DeveloperName, 'IntegrationCase__c');
}
else
{
intcase.RecordTypeId = '0123O0000012wHuQAI';
}
intCase.Status__c = 'Bozza';
if(!vas){intCase.ServicePoint__c = processCase.ServicePoint__c; }
intCase.ContractAccount__c = processCase.ContractAccount__c;
intCase.BillingProfile__c = processCase.BillingProfile__c;
intCase.ContactDigitalCompletion__c = processCase.ContactDigitalCompletion__c;
String orderCreationStatus = 'In Attesa';
if(processCase.OpportunityServiceItem__r.Antichurn__c && 'Attivo'==processCase.OpportunityServiceItem__r.ServicePoint__r.CurrentAsset__r.Status){
orderCreationStatus = 'In attesa cessazione';
}
if('Disattivazione'.equalsIgnoreCase(processCase.OpportunityServiceItem__r.Process__c) && isDeactivationPostponed(processCase.OpportunityServiceItem__r.RecordType.DeveloperName, processCase.OpportunityServiceItem__r.DeactivationDate__c)){
orderCreationStatus = 'Avvio posticipato';
}
intCase.OrderCreationStatus__c = orderCreationStatus;
//controllare gli osi vas e vedere se sono popolati
if(!vas){
intCase.DistributorName__c = processCase.OpportunityServiceItem__r.DistributorName__c;
intCase.DistributorVatNumber__c = processCase.OpportunityServiceItem__r.DistributorVatNumber__c;
intCase.REMICode__c = processCase.OpportunityServiceItem__r.REMICode__c;
}
intCase.OpportunityServiceItem__c = processCase.OpportunityServiceItem__c;
System.debug('intCase.OpportunityServiceItem__c = '+intCase.OpportunityServiceItem__c);
intCase.Opportunity__c = processCase.Opportunity__c;
intCase.Brand__c = processCase.Brand__c;
intCase.RequestedDate__c = processCase.OpportunityServiceItem__r.CreatedDate.date();
intCase.SignatureDate__c = oppty.LastModifiedDate.date();
//controllare su osi vas
intCase.PayableAmount__c = processCase.OpportunityServiceItem__r.TotalQuoteAmount__c;
intCase.InsuranceNumber__c = processCase.OpportunityServiceItem__r.InsuranceNumber__c;
intCase.SwitchSkipPreCheck__c = processCase.OpportunityServiceItem__r.SwitchSkipPreCheck__c != null ? processCase.OpportunityServiceItem__r.SwitchSkipPreCheck__c : 'NO';
intCase.ContractAccountChanged__c = processCase.OpportunityServiceItem__r.ContractAccountChanged__c;
intCase.DeactivationDate__c = processCase.DeactivationDate__c;
intCase.TransferredContact__c = processCase.OpportunityServiceItem__r.TransferredContact__c;
//vedere su process case che valori hanno
intCase.QuoteTypeIntegration__c = processCase.QuoteType__c;
intCase.PowerAmount__c = processCase.PowerAmount__c;
intCase.AdministrativeSalesCharges__c = processCase.AdministrativeSalesCharges__c;
intCase.DistributorAdministrativeCharges__c = processCase.DistributorAdministrativeCharges__c;
intCase.Taxable__c = processCase.Taxable__c;
intCase.VATRate__c = processCase.VATRate__c;
intCase.CodSubServ__c = codsubServ;
intCase.QuoteStatus__c = processCase.OpportunityServiceItem__r.QuoteStatus__c;
String payment = processCase.Account.Payment__c!=null ? processCase.Account.Payment__c : 'Anticipato' ;
intCase.Payment__c = getPayment(processCase.Account.Segment__c, processCase.Opportunity__r.RequestType__c, payment);
intCase.AggregateBilling__c = processCase.Account.AggregateBilling__c;
intCase.TechnicalDataReceivingDate__c = processCase.Opportunity__r.SupplyStartDate__c;
if('Disattivazione'.equalsIgnoreCase(processCase.OpportunityServiceItem__r.Process__c) ){
intCase.BillingInCycle__c = 'SI';
}
if('Attivazione'.equalsIgnoreCase(processCase.OpportunityServiceItem__r.Process__c)
|| 'Subentro'.equalsIgnoreCase(processCase.OpportunityServiceItem__r.Process__c)
|| processCase.OpportunityServiceItem__r.Process__c.containsIgnoreCase('Predisposizione')){
intCase.BillingInCycle__c = 'NO';
}
if('Attivazione'.equalsIgnoreCase(processCase.OpportunityServiceItem__r.Process__c)
|| 'Subentro'.equalsIgnoreCase(processCase.OpportunityServiceItem__r.Process__c)
|| processCase.OpportunityServiceItem__r.Process__c.containsIgnoreCase('Predisposizione')){
intCase.Print__c = getPrint(processCase.Account.Segment__c, processCase.Opportunity__r.RequestType__c);
}
if(hasDisactivationPostponed){
intCase.ProgressStatus__c = 'Da Inviare - In attesa decorrenza termini';
}
// 29-06-2021 Skip ANC for Cambio Prodotto(MM) if the CA is Inherited from asset //NTT W3
if(processCase.OpportunityServiceItem__r.Process__c.containsIgnoreCase(Constants.getAllConstants().OSI_CAMBIO_PRODOTTO_PROCESS) || processCase.OpportunityServiceItem__r.Process__c.toUppercase() == 'CAMBIO PRODOTTO CROSS BRAND' || Constants.getAllConstants().OSI_CMP_REPRICING_LIST.containsIgnoreCase(processCase.OpportunityServiceItem__r.Process__c.toUppercase())){
System.debug('ANC SKIPPEDDDDD');
//intCase.ANCSkipped__c = processCase.OpportunityServiceItem__r.OldContractAccount__c == processCase.OpportunityServiceItem__r.ContractAccount__c; //NTT W3
intcase.AncSkipped__c = Constants.getAllConstants().OSI_CMP_REPRICING_LIST.containsIgnoreCase(processCase.OpportunityServiceItem__r.Process__c.toUppercase());
if((processCase.OpportunityServiceItem__r.OldContractAccount__c!=null && String.isNotEmpty(processCase.OpportunityServiceItem__r.OldContractAccount__c) && processCase.OpportunityServiceItem__r.OldContractAccount__c != processCase.OpportunityServiceItem__r.ContractAccount__c ) || (processCase.OpportunityServiceItem__r.Process__c.toUppercase() == 'CAMBIO PRODOTTO CROSS BRAND')){
intCase.CodSubServ__c = 'CP_CA';
}
}
/* if(intCase.RecordTypeId == switchEleRt || intCase.RecordTypeId == switchGasRt){
intCase.SwitchDate__c = processCase.CalculatedSupplyStartDate__c;
} */
if('CEP_RT_PDC'== oppty.RecordType.DeveloperName ){
intCase.OpportunityPdcAgencyCode__c = oppty.AgencyCode__c;
intCase.OpportunityAgencyName__c = oppty.AgencyFormula__c;
}
integrationCasesToInsert.add(intCase);
}
}
System.debug('@@integrationCasesToInsert: ' + integrationCasesToInsert);
// DatabaseService.getInstance().insertSObject(integrationCasesToInsert);
// List<Case> caseVasToUpdate =new List<Case>();
// for(Case c : casesToInsert){
// if(c.RecordTypeId != Schema.SObjectType.Case.getRecordTypeInfosByDeveloperName().get('CEP_RT_VAS').getRecordTypeId()){
// for(Case c1 : casesToInsert){
// if(c1.RecordTypeId == Schema.SObjectType.Case.getRecordTypeInfosByDeveloperName().get('CEP_RT_VAS').getRecordTypeId()){
// if(c1.OpportunityServiceItem__r.ServicePointCode__c == c.OpportunityServiceItem__r.ServicePointCode__c){
// c1.CalculatedSupplyStartDate__c = System.today();
// if(!caseVasToUpdate.contains(c1)){
// caseVasToUpdate.add(c1);
// }
// }
// }
// }
// }
// }
// System.debug('VAS Cases ' + caseVasToUpdate);
// DatabaseService.getInstance().updateSObject(caseVasToUpdate);
List<Case> casePrescriptionToUpdate =new List<Case>();
for(Case c : casesToInsert){
if(c.RecordTypeId == Schema.SObjectType.Case.getRecordTypeInfosByDeveloperName().get('CEP_RT_Prescription').getRecordTypeId() ){
c.Phase__c = Constants.getAllConstants().CASE_PHASE_WORKING;
c.Status = Constants.getAllConstants().CASE_STATUS_WORKING;
casePrescriptionToUpdate.add(c);
}
}
if(!casePrescriptionToUpdate.isEmpty()){
DatabaseService.getInstance().updateSObject(casePrescriptionToUpdate);
}
DatabaseService.getInstance().insertSObject(integrationCasesToInsert);
map<Id,OpportunityServiceItem__c> osiMap = new map<Id,OpportunityServiceItem__c>();
for(OpportunityServiceItem__c osi : opportunityServiceItems ){
osiMap.put(osi.Id,osi);
System.debug('testa id:'+osi.Id+' - '+osi.process__c);
}
map<Id, IntegrationCase__c> ICToUpdate = new map<Id, IntegrationCase__c>();
map<Id, IntegrationCase__c> mapOnlyPrestazione = getMapOnlyICdiPrestazione(integrationCasesToInsert);
map<Id, IntegrationCase__c> mapOnlyVAS = getMapOnlyICVAS(integrationCasesToInsert);
for(IntegrationCase__c Ic : mapOnlyPrestazione.values()){
for(IntegrationCase__c Ic1 : mapOnlyVAS.values()){
if(osiMap.get(ic1.OpportunityServiceItem__c).ServicePointCode__c == osiMap.get(ic.OpportunityServiceItem__c).ServicePointCode__c){
Ic1.ParentIC__c = Ic.Id;
System.debug('Ic.Id = '+Ic.Id);
if(!ICToUpdate.containsKey(Ic1.Id)){
ICToUpdate.put(Ic1.Id,Ic1);
}
}
}
}
//System.debug('VAS Cases ' + ICToUpdate);
CEP_TRH_OpportunityServiceItem.bypass('CEP_BypassIntegrationCaseTrigger');
DatabaseService.getInstance().updateSObject(ICToUpdate.values());
CEP_TRH_OpportunityServiceItem.clearBypass('CEP_BypassIntegrationCaseTrigger');
}
else{
throw new OrderManagementServiceException('No opportunities found with the specified ids');
}
if(!System.isBatch() && !Test.isRunningTest()){
sendToEbdm(opportunityIds);
}
if(hasDisactivationPostponed){
List<IntegrationCase__c> toPostpone = [SELECT id
FROM integrationcase__c
WHERE Process__c = 'Disattivazione'
AND Opportunity__c in : opportunityIds
AND DeactivationDate__c != today];
if(!toPostpone.isEmpty()){
Set<Id> intCaseIds = new Set<Id>();
List<ReminderService.ReminderServiceRequestWrapper> reminderWrapper = new List<ReminderService.ReminderServiceRequestWrapper>();
for(IntegrationCase__c ic : toPostpone){
intCaseIds.add(ic.Id);
ReminderService.ReminderServiceRequestWrapper wrapObject = new ReminderService.ReminderServiceRequestWrapper();
wrapObject.recordRelatedId = ic.id;
wrapObject.reminderCodes = new List<String> {'StartOmDissattivazione'};
reminderWrapper.add(wrapObject);
}
ReminderService reminderService = new ReminderService();
reminderService.insertReminder(reminderWrapper);
List<CustomReminder__c> crs = [Select id, Expiration_Date__c, IntegrationCase__r.DeactivationDate__c,IntegrationCase__r.Commodity__c from CustomReminder__c where Status__c = 'Pending' and IntegrationCase__c in: intCaseIds];
for(CustomReminder__c cr : crs){
if(cr.IntegrationCase__r.Commodity__c.equalsIgnoreCase('Gas')) {
cr.Expiration_Date__c = Date.today().daysBetween(cr.IntegrationCase__r.DeactivationDate__c) > 28 ? cr.IntegrationCase__r.DeactivationDate__c.addDays(-28) : Date.today();
} else {
cr.Expiration_Date__c = Date.today().daysBetween(cr.IntegrationCase__r.DeactivationDate__c) > 30 ? cr.IntegrationCase__r.DeactivationDate__c.addDays(-30) : Date.today();
}
}
DatabaseService.getInstance().updateSObject(crs);
}
}
}
catch(OrderManagementServiceException exp){
Database.rollback(savePoint);
System.debug('@@OrderManagementServiceException: ' + exp.getMessage());
System.debug('@@OrderManagementServiceException stack: ' + exp.getStackTraceString());
throw exp;
}
catch(Exception exp){
Database.rollback(savePoint);
System.debug('@@Exception: ' + exp.getMessage());
System.debug('@@Exception stack: ' + exp.getStackTraceString());
throw exp;
}
return null;
}
@TestVisible
private static String getPayment(String segment, String requestType, String defaultValue){
if(segment == 'Mass Market'){
return 'Anticipato';
}
else if(segment == 'Small Business'){
if(requestType == 'A Listino'){
return 'Anticipato';
}
else{
return defaultValue;
}
}
else if(segment=='Business'){
return defaultValue;
}
return defaultValue;
}
@TestVisible
private static String getPrint(String segment, String requestType){
if(segment == 'Mass Market'){
return 'Bollettino';
}
else if(segment=='Business' || segment=='Reseller'){
return 'Fattura';
}
else if(segment == 'Small Business'){
if(requestType == 'A Listino'){
return 'Bollettino';
}
else{
return 'Fattura';
}
}
return 'Bollettino';
}
private static map<Id,IntegrationCase__c> getMapOnlyICdiPrestazione(List<IntegrationCase__c> integrationCasesToInsert){
map<Id,IntegrationCase__c> mapToRet = new map<Id,IntegrationCase__c>();
for(IntegrationCase__c Ic : integrationCasesToInsert){
if(Ic.RecordTypeId != Schema.SObjectType.IntegrationCase__c.getRecordTypeInfosByDeveloperName().get('CEP_RT_VAS').getRecordTypeId()){
mapToRet.put(ic.Id,ic);
}
}
return mapToRet;
}
private static map<Id,IntegrationCase__c> getMapOnlyICVAS(List<IntegrationCase__c> integrationCasesToInsert){
map<Id,IntegrationCase__c> mapToRet = new map<Id,IntegrationCase__c>();
for(IntegrationCase__c Ic : integrationCasesToInsert){
if(Ic.RecordTypeId == Schema.SObjectType.IntegrationCase__c.getRecordTypeInfosByDeveloperName().get('CEP_RT_VAS').getRecordTypeId()){
mapToRet.put(ic.Id,ic);
}
}
return mapToRet;
}
private static Boolean isDeactivationPostponed(String commodity, Date deactivationDate){
if('Electric'.equalsIgnoreCase(commodity)){
return Date.today().daysBetween(deactivationDate) > 30;
}
if('Gas'.equalsIgnoreCase(commodity)){
return Date.today().daysBetween(deactivationDate) > 28;
}
return false;
}
@TestVisible
private static Boolean getIsBloccatoPdc(Case processCase, Opportunity oppty){
List<String> rts = new List<String>{'SwitchIn_ELE', 'SwitchIn_GAS','ProductChange_ELE','ProductChange_GAS'};
return oppty.RecordType.DeveloperName == 'CEP_RT_PDC' && oppty.StageName == 'Attesa Ripensamento' && (oppty.SubChannel__c == 'Door to Door cartaceo' || oppty.Channel__c == 'Teleselling') && rts.contains(processCase.RecordType.DeveloperName);
}
public static Id trascodeProcessToRecordType(String osiProcess, String osiRecordTypeDeveloperName, String objectType){
System.debug('CEP_SRV_OrderManagementCreation::trascodeProcessToRecordType::osiProcess='+osiProcess);
System.debug('CEP_SRV_OrderManagementCreation::trascodeProcessToRecordType::osiRecordTypeDeveloperName='+osiRecordTypeDeveloperName);
System.debug('CEP_SRV_OrderManagementCreation::trascodeProcessToRecordType::objectType='+objectType);
System.debug('NTTW3 query rt');
CEP_ProcessRecordTypeTrascoding__mdt trascoding = new CEP_ProcessRecordTypeTrascoding__mdt();
if(CEP_ProcessRecordTypeTrascoding__mdt.SObjectType.getDescribe().isAccessible()){
trascoding = [ SELECT OpportunityServiceItemProcess__c, ObjectType__c, RecordTypeDeveloperName__c, Commodity__c
FROM CEP_ProcessRecordTypeTrascoding__mdt
WHERE OpportunityServiceItemProcess__c =: osiProcess
AND Commodity__c =: osiRecordTypeDeveloperName
AND ObjectType__c =: objectType];
}
if(trascoding == null){
throw new OrderManagementServiceException('Missing record type configuration for this process');
}
else{
String developerName = trascoding.RecordTypeDeveloperName__c;
if('Case'.equalsIgnoreCase(objectType)){
return caseRecordTypeIdsByDeveloperName.get(developerName);
}
else{
return integrationCaseRecordTypeIdsByDeveloperName.get(developerName);
}
}
}
@TestVisible
private static Id trascodeProcessToRecordType(String osiProcess, String objectType){
System.debug('CEP_SRV_OrderManagementCreation::trascodeProcessToRecordType::osiProcess='+osiProcess);
System.debug('CEP_SRV_OrderManagementCreation::trascodeProcessToRecordType::objectType='+objectType);
CEP_ProcessRecordTypeTrascoding__mdt trascoding = [ SELECT OpportunityServiceItemProcess__c, ObjectType__c, RecordTypeDeveloperName__c, Commodity__c
FROM CEP_ProcessRecordTypeTrascoding__mdt
WHERE OpportunityServiceItemProcess__c =: osiProcess
AND ObjectType__c =: objectType];
if(trascoding == null){
throw new OrderManagementServiceException('Missing record type configuration for this process');
}
else{
String developerName = trascoding.RecordTypeDeveloperName__c;
if('Case'.equalsIgnoreCase(objectType)){
return caseRecordTypeIdsByDeveloperName.get(developerName);
}
else{
return integrationCaseRecordTypeIdsByDeveloperName.get(developerName);
}
}
}
public static void startOrderManagment(Set<Id> opportunityIds){
System.debug('Start Order Managment');
Map<Id, Opportunity> opptiesById = OpportunityQueries.getInstance().getOpportunitiesWithOpportunityServiceItems(opportunityIds);
List<String> intContractAccountGroupedIds = new List<String>();
if(!opptiesById.isEmpty()){
Set<Id> intContractAccountIds = new Set<Id>();
Set<Id> processCaseIds = new Set<Id>();
List<IntegrationCase__c> intCasesToUpdate = new List<IntegrationCase__c>();
Map<Id, Opportunity> opptiesWithCasesById = OpportunityQueries.getInstance().getOpportunitiesWithCases(opportunityIds);
for(Id opptyId : opptiesWithCasesById.keySet()){
Opportunity oppty = opptiesWithCasesById.get(opptyId);
Id recordTypeId = oppty.RecordTypeId;
Id massMarketRecordId = CEP_UTL_RecordType.getRecordTypeIdByDeveloperName(Constants.getAllConstants().OPPORTUNITY_RECORD_TYPE_MASS_MARKET, 'Opportunity');
/*if(recordTypeId == massMarketRecordId){
List<Case> childrenCases = oppty.Cases__r;
for(Case processCase : childrenCases){
processCaseIds.add(processCase.Id);
}
intCasesToUpdate = Database.query('Select Id FROM IntegrationCase__c WHERE Case__c IN :processCaseIds');
}else{*/
//List<String> intContractAccountGroupedIds = new List<String>();
AggregateResult[] caIds = Database.query('SELECT ContractAccount__c,Id FROM IntegrationCase__c WHERE Opportunity__c = :opptyId AND Phase__c=\'START\' AND ContractAccount__c <> \'\' AND ANCSkipped__c=false GROUP BY ContractAccount__c,Id');
Map<String, String> contractAccIdIntCaseId = new Map<String, String>();
System.debug('caIds: ' + caIds);
for (AggregateResult ar : caIds) {
System.debug('ContractAccount__c ID: ' + ar.get('ContractAccount__c'));
System.debug('Id: ' + ar.get('Id'));
contractAccIdIntCaseId.put(String.valueOf(ar.get('ContractAccount__c')),String.valueOf(ar.get('Id')));
}
System.debug('contractAccIdIntCaseId.value: ' + contractAccIdIntCaseId.values());
intContractAccountGroupedIds.addAll(contractAccIdIntCaseId.values());
/*List<IntegrationCase__c> intCAncSkipped = Database.query('SELECT Id FROM IntegrationCase__c WHERE Opportunity__c = :opptyId AND Phase__c=\'START\' AND ANCSkipped__c=true');
for(IntegrationCase__c ic : intCAncSkipped){
intContractAccountGroupedIds.add(ic.id);
}*/
System.debug('intContractAccountGroupedIds: ' + intContractAccountGroupedIds);
if(intContractAccountGroupedIds.isEmpty()){
throw new OrderManagementServiceException('Non ci sono ordini da inviare sull\'opportunità');
}
//}
}
String fieldsToQuery = '';
SObjectType intCaseDesc = Schema.getGlobalDescribe().get('IntegrationCase__c');
Map<String,Schema.SObjectField> intCaseFields = intCaseDesc.getDescribe().fields.getMap();
for(String key : intCaseFields.keySet()){
fieldsToQuery += key+',';
}
fieldsToQuery = fieldsToQuery.removeEnd(',');
String intStringContractAccountGroupedIds = '(';
for(String intContractAccount : intContractAccountGroupedIds){
intStringContractAccountGroupedIds += '\''+intContractAccount+'\''+',';
}
intStringContractAccountGroupedIds = intStringContractAccountGroupedIds.removeEnd(',');
intStringContractAccountGroupedIds = intStringContractAccountGroupedIds + ')';
System.debug('** intStringContractAccountGroupedIds' + intStringContractAccountGroupedIds);
String queryUpdateIC = 'SELECT '+fieldsToQuery+' ';
queryUpdateIC += 'FROM IntegrationCase__c ';
queryUpdateIC += 'WHERE Id IN '+intStringContractAccountGroupedIds+' ';
System.debug('** queryUpdateIC' + queryUpdateIC);
CEP_BA_StartOrderManagment batchToRun = new CEP_BA_StartOrderManagment(queryUpdateIC);
Database.executeBatch(batchToRun, 1);
} else{
throw new OrderManagementServiceException('No opportunities found with the specified ids');
}
}
/**
* startOrderManagment Single paramether method for being @AuraEnabled
* @param opportunityId opportunityId
*/
@AuraEnabled
public static void startOrderManagment(Id opportunityId){
Set<Id> opportunityIdsSet = new Set<Id>{opportunityId};
startOrderManagment(opportunityIdsSet);
}
@TestVisible
public static void sendToEbdm(Set<Id> opportunityIds){
System.debug('@@CEP_SRV_OrderManagementCreation.sendToEbdm');
String opportunityIdsStr = '(';
for(Id opptyId : opportunityIds){
opportunityIdsStr += '\''+Id.valueOf(opptyId)+'\',';
}
opportunityIdsStr = opportunityIdsStr.removeEnd(',');
opportunityIdsStr += ')';
String fieldsToQuery = '';
SObjectType intCaseDesc = Schema.getGlobalDescribe().get('IntegrationCase__c');
Map<String,Schema.SObjectField> intCaseFields = intCaseDesc.getDescribe().fields.getMap();
for(String key : intCaseFields.keySet()){
fieldsToQuery += key+',';
}
fieldsToQuery = fieldsToQuery.removeEnd(',');
String queryToStartOM = 'SELECT '+fieldsToQuery+' ';
queryToStartOM += 'FROM IntegrationCase__c ';
queryToStartOM += 'WHERE OrderCreationStatus__c = \'In Attesa\' ';
//queryToStartOM += 'AND Case__r.OpportunityServiceItem__r.ImmediateActivation__c=\'SI\' ';
queryToStartOM += 'AND Case__r.Opportunity__c in '+opportunityIdsStr+' ';
queryToStartOM += 'AND (OpportunityRecordType__c = \'CEP_RT_MassMarket\' OR OpportunityRecordType__c = \'CEP_RT_Generic\' OR OpportunityRecordType__c = \'CEP_RT_PDC\' OR OpportunityRecordType__c = \'CEP_RT_Movimentazioni\' OR OpportunityRecordType__c = \'CEP_RT_VAS\' OR OpportunityRecordType__c = \'CEP_RT_Minimal\') ';
queryToStartOM += 'AND SystemModstamp = TODAY ';
System.debug('@@queryToStartOM' + queryToStartOM);
// TODO : add OrderCreationStatus__c='Inviato' in phase manager
CEP_BA_StartOrderManagment batchToRun = new CEP_BA_StartOrderManagment(queryToStartOM);
List<Opportunity> oppty = [SELECT Id,Name FROM Opportunity WHERE Id IN:opportunityIds AND SubChannel__c = 'Door to door app'];
if(oppty.isEmpty()) {
Database.executeBatch(batchToRun, 1);
} else {
System.scheduleBatch(batchToRun, oppty[0].Name, 1, 1);
}
}
/**
* @description method for retrieve all osi that don't need a Case
* @author lorenzo.orlanducci@webresults.it | 26-05-2021
* @param oppMap
* @return List<Id>
**/
public static List<Id> removeOSIVasActivation(Map<Id, Opportunity> oppMap){
List<Id> badOsiIds = new List<Id>();
for(Opportunity op : oppMap.values()){
for(OpportunityServiceItem__c osi : op.OpportunityServiceItems__r){
if(op.RecordType.DeveloperName=='CEP_RT_VAS' && osi.RecordType.DeveloperName=='CEP_RT_VAS' && osi.ParentOSI__c!=null && osi.ParentOSI__r.RecordType.DeveloperName!='CEP_RT_VAS'){
badOsiIds.add(osi.ParentOSI__c);
}
}
}
return badOsiIds;
}
public class OrderManagementServiceException extends Exception {}
}Editor is loading...