/**
* @description :
* @author : Mady COLY
* @group :
* @last modified on : 10-07-2021
* @last modified by : ChangeMeIn@UserSettingsUnder.SFDoc
**/
public without sharing class CEP_UTL_StatePerformanceCheck {
private static Set<String> pointFieldSet = new Set<String>{
'Id', 'Name', 'Key__c', 'CurrentAsset__c', 'CurrentAsset__r.Account.VATNumber__c', 'CurrentAsset__r.Status', 'RecordTypeId', 'RecordType.Name', 'CurrentSupply__r.CompanyDivision__r.Name',
'CurrentSupply__c', 'CurrentSupply__r.Name', 'CurrentSupply__r.Key__c', 'CurrentSupply__r.Status__c',
'CurrentSupply__r.CompanyDivision__c', 'CurrentSupply__r.Product__c', 'CurrentSupply__r.Product__r.Name',
'CurrentSupply__r.Account__c', 'CurrentSupply__r.Account__r.Name', 'CurrentSupply__r.Account__r.Key__c', 'CurrentSupply__r.ContractAccount__r.Account__r.Name',
'CurrentSupply__r.ContractAccount__c', 'CurrentSupply__r.ContractAccount__r.Name', 'CurrentSupply__r.ContractAccount__r.Key__c',
'CurrentSupply__r.ServiceSite__c', 'CurrentSupply__r.ServiceSite__r.Name', 'CurrentSupply__r.ServiceSite__r.SiteAddressKey__c',
'CurrentSupply__r.ServiceSite__r.Account__c', 'CurrentSupply__r.ServiceSite__r.Account__r.Name', 'CurrentSupply__r.ServiceSite__r.SiteAddress__c',
'CurrentSupply__r.Contract__c', 'CurrentSupply__r.Contract__r.ContractNumber', 'CurrentSupply__r.Contract__r.AccountId', 'CurrentSupply__r.Contract__r.Account.Name','Distributor__c',
'CurrentAsset__r.AccountId','CurrentAsset__r.SupplyEnergyService__c', 'CurrentAsset__r.Account.Segment__c', 'CurrentAsset__r.Account.Name', 'CurrentAsset__r.Account.JointVenture__r.Name'
};
private String opportunityId;
private String accountId;
private String vatNumberUscente;
public static final CEP_QR_ContestablePod podContendibiliSrv = CEP_QR_ContestablePod.getInstance();
public static CEP_UTL_StatePerformanceCheck getInstance() {
return (CEP_UTL_StatePerformanceCheck) ServiceLocator.getInstance(CEP_UTL_StatePerformanceCheck.class);
}
public List<String> statoPrestazionePreValorizzazione(String podPdr, String commodity,String accountId, String opportunityId) {
System.debug('CEP_UTL_StatePerformanceCheck.statoPrestazionePreValorizzazione');
if(String.isBlank(podPdr)) {
throw new WrtsException(System.Label.AtLeastOneQueryFilterMustBeSet);
}
String text = podPdr;
Set<String> fieldSet = pointFieldSet;
this.opportunityId = opportunityId;
this.accountId = accountId;
String query = 'SELECT ' + String.join(new List<String>(fieldSet), ', ')
+ ', CurrentAsset__r.Account.FiscalCode__c, CurrentAsset__r.Account.Type, CurrentAsset__r.Account.RecordType.Name, CurrentAsset__r.Account.CompanyChannel__c, CurrentAsset__r.Account.Key__c '
+' FROM ServicePoint__c '
+' WHERE Key__c = \'' + text + '\'';
List<ServicePoint__c> servicePoints;
List<ContestablePod__c> podContendibili = new List<ContestablePod__c>();
List<PODDistributorAlignment__c> pda = new List<PODDistributorAlignment__c>();
if(Schema.SObjectType.ServicePoint__c.isAccessible()) {
servicePoints= Database.query(query);
System.debug('POD SERVICE POINT--list : ' + servicePoints);
}
String status = '';
List<CEP_StatePerformance__mdt> statePerformances = new List<CEP_StatePerformance__mdt>();
List<String> prestazioni = new List<String>();
System.debug('*** accountId: '+accountId);
Account acc = AccountQueries.getInstance().findAccount(accountId);
String accountCfEntrante = acc.FiscalCode__c;
String accountVatNumber = acc.VATNumber__c;
/*
if('Reseller'.equalsIgnoreCase(acc.Segment__c)){
accountCfEntrante = acc.Key__c;
}
*/
String clientType = acc.Type!=null && String.isNotBlank(acc.Type) ? acc.Type : acc.RecordType.Name;
String recordTypeName = acc.RecordTypeDeveloperName__c;
System.debug('71');
switch on commodity{
when 'Electric' {
System.debug('Electric commodity');
prestazioni = this.manageEleCommodity(servicePoints,podPdr,accountCfEntrante,clientType, accountVatNumber, this.opportunityId);
}
when 'Gas'{
System.debug('Gas commodity');
prestazioni = this.manageGasCommodity(servicePoints,accountCfEntrante,clientType, accountVatNumber, this.opportunityId);
}
when else {
return null;
}
}
//RIMUOVE I VALORI DI VOLTURA PER CLIENTI RESELLER
if(recordTypeName == 'CEP_RT_Reseller' || recordTypeName == 'CEP_RT_ResellerEndCustomer'){
if(prestazioni.contains('Voltura'))
prestazioni.remove(prestazioni.indexOf('Voltura'));
if(prestazioni.contains('Voltura Successione Mortis Causa'))
prestazioni.remove(prestazioni.indexOf('Voltura Successione Mortis Causa'));
if(prestazioni.contains('Voltura Fusione, Incorporazione'))
prestazioni.remove(prestazioni.indexOf('Voltura Fusione, Incorporazione'));
if(prestazioni.contains('Voltura Per Incorporazione Societaria'))
prestazioni.remove(prestazioni.indexOf('Voltura Per Incorporazione Societaria'));
if(prestazioni.contains('Voltura Beneficiario Servizi Energetici'))
prestazioni.remove(prestazioni.indexOf('Voltura Beneficiario Servizi Energetici'));
if(prestazioni.contains('Voltura Gestore Servizi Energetici'))
prestazioni.remove(prestazioni.indexOf('Voltura Gestore Servizi Energetici'));
}
// ELIMINA I VALORI PERFORMANCE NON PREVISTI PER LA WAVE 1
/*if(Constants.getAllConstants().ACTIVE_PERFORMANCE_VALUE_WAVE_1){
prestazioni = this.filterPerformanceValuesForWave1(prestazioni,commodity);
} */
return prestazioni;
}
public List<String> manageGasCommodity(List<ServicePoint__c> servicePoints, String accountCfEntrante, String clientType,String vatNumber, String opportunityId){
System.debug('In manageGasCommodity 114');
List<ContestablePod__c> podContendibili = new List<ContestablePod__c>();
List<PODDistributorAlignment__c> pda = new List<PODDistributorAlignment__c>();
List<PermissionSetAssignment> prs=[SELECT PermissionSetId FROM PermissionSetAssignment WHERE PermissionSet.Name IN ('CEP_LargeSme_AEMA','CEP_LargeSme_UE','CEP_LeadSmeLarge') AND AssigneeId =: UserInfo.getUserId() limit 1];
String status = '';
String accountIdAsset = '';
String accountCfUscente;
String supplyEnergyService;
String companyDivisionAsset;
String accountNameAsset;
String segment = '';
String accountTypeUscente;
String accountTypeEntrante = clientType;
//NTT W3
String brand;
//
List<CEP_StatePerformance__mdt> statePerformances = new List<CEP_StatePerformance__mdt>();
List<String> prestazioni = new List<String>();
String CorrespondenceCFIncomingOutgoing = 'NO';
//non sempre, quando viene richiamato questo metodo, si ha l'opportunityId popolato
//nei casi in cui è null è necessario controllarlo prima di effettuare la query
//INC0000000057134 --> errore sulla verifica offertabilità
Opportunity oppty;
String accountNameOppty;
String companyDivisionOppty;
String recordTypeName;
String opptySegment = '';
if(!String.isBlank(opportunityId)) {
oppty = [SELECT Account.Name, Account.JointVenture__r.Name, Account.RecordTypeDeveloperName__c, Segment__c FROM Opportunity WHERE Id =: opportunityId];
accountNameOppty = oppty.Account.Name;
companyDivisionOppty = oppty.Account.JointVenture__r.Name;
recordTypeName = oppty.Account.RecordTypeDeveloperName__c;
if(string.isNotBlank(oppty.Segment__c))opptySegment = oppty.Segment__c;
}
if(servicePoints.size()>0){
accountCfUscente = servicePoints[0].CurrentAsset__r.Account.FiscalCode__c;
status = servicePoints[0].CurrentAsset__r.Status;
accountIdAsset = servicePoints[0].CurrentAsset__r.AccountId;
segment = servicePoints[0].CurrentAsset__r.Account.Segment__c;
companyDivisionAsset = servicePoints[0].CurrentAsset__r.Account.JointVenture__r.Name;
accountNameAsset = servicePoints[0].CurrentAsset__r.Account.Name;
//NTT W3
brand = ServicePoints[0].CurrentAsset__r.Account.CompanyChannel__c;
//
CorrespondenceCFIncomingOutgoing = accountCfUscente != null && accountCfEntrante != null && accountCfEntrante == accountCfUscente ? 'SI' : 'NO';
supplyEnergyService = servicePoints[0].CurrentAsset__r.SupplyEnergyService__c;
String accTypeTmp = servicePoints[0].CurrentAsset__r.Account.Type;
String recTypeTmp = servicePoints[0].CurrentAsset__r.Account.RecordType.Name;
accountTypeUscente = accTypeTmp!=null && String.isNotBlank(accTypeTmp) ? accTypeTmp : recTypeTmp;
if(status == 'Attivo'){
statePerformances = CEP_QR_StatePerformance.getInstance().getByOriginAndStatus('DB Acea',status,'Gas', CorrespondenceCFIncomingOutgoing, clientType);
}else {
statePerformances = CEP_QR_StatePerformance.getInstance().getByOriginAndStatus('DB Acea',status,'Gas',clientType);
}
if(statePerformances.size()>0){
String prestazione = '';
for(CEP_StatePerformance__mdt stpf : statePerformances){
prestazione = prestazione + stpf.Performance__c + ',';
}
prestazioni = prestazione.split(',');
}
else{
prestazioni.add('SWITCHING WIN');
prestazioni.add('Voltura Con Switching');
prestazioni.add('A40 - ATTIVAZIONE SOGGETTA ALLA DELIBERA 40/14');
prestazioni.add('A01 - ATTIVAZIONE NON SOGGETTA ALLA DELIBERA 40/14');
System.debug('Ser179');
// prestazioni.add('VOLTURA TITOLO 4');
// prestazioni.add('CAMBIO PRODOTTO');
}
}else{
prestazioni.add('SWITCHING WIN');
prestazioni.add('Voltura Con Switching');
prestazioni.add('A40 - ATTIVAZIONE SOGGETTA ALLA DELIBERA 40/14');
prestazioni.add('A01 - ATTIVAZIONE NON SOGGETTA ALLA DELIBERA 40/14');
prestazioni.add('Attivazione Tecnica');
System.debug('Service Point nuovo190');
// prestazioni.add('VOLTURA TITOLO 4');
// prestazioni.add('CAMBIO PRODOTTO');
}
System.debug('this.opportunityId >>> '+this.opportunityId);
//if(prs!=null && prs.size()==1){
//valori gestiti da matrice CEP_StatePerformance__mdt
//prestazioni.add('Voltura');
//prestazioni.add('Voltura Successione Mortis Causa');
//prestazioni.add('Voltura per Incorporazione Societaria');
//prestazioni.add('Voltura Titolo 4');
//prestazioni.add('Voltura Retroattiva o di recupero');
if((status=='Attivo')&&(this.accountId == accountIdAsset)){
prestazioni.add('Modifica Tipologia PDR');
}
if(prs!=null && prs.size()==1){
if((status=='Attivo' || status=='Sospeso') && supplyEnergyService == 'SI' && servicePoints[0].CurrentAsset__r != null){
if(this.accountId == accountIdAsset){
prestazioni.add('Voltura Beneficiario Servizi Energetici');
}else{
prestazioni.add('Voltura Gestore Servizi Energetici');
}
}
}
//NTT W3
//CONTROLLO SUL CANALE DELLO USER
/*
Id userId = userinfo.getUserId();
List<User> userInfo = [SELECT DefaultChannel__c, DefaultSubChannel__c FROM User WHERE Id = :userId LIMIT 1];
if(userInfo.size()>0){
String canale = userInfo[0].DefaultChannel__c;
String sottoCanale = userInfo[0].DefaultSubChannel__c;
if (canale == 'Punti fisici' && sottoCanale == 'Store WINDTRE') {
if(prestazioni.contains('Cambio Prodotto') && brand == 'AE'){
prestazioni.remove(prestazioni.indexOf('Cambio Prodotto'));
prestazioni.add('Cambio Prodotto Cross Brand');
}
if(prestazioni.contains('Cambio Prodotto') && brand == 'W3'){
prestazioni.remove(prestazioni.indexOf('Cambio Prodotto'));
prestazioni.add('Errore');
}
}
} */
//
if(segment == 'Mass Market' && clientType == 'Organizzazione'){
if(prestazioni.contains('Voltura Successione Mortis Causa')){
prestazioni.remove(prestazioni.indexOf('Voltura Successione Mortis Causa'));
}
}
if(opptySegment != 'Mass Market'){
// if(segment != 'Mass Market'){
if(recordTypeName != 'CEP_RT_Reseller'){
if(prestazioni.contains('Voltura Successione Mortis Causa'))
prestazioni.remove(prestazioni.indexOf('Voltura Successione Mortis Causa'));
if(prestazioni.contains(' Voltura Successione Mortis Causa'))
prestazioni.remove(prestazioni.indexOf(' Voltura Successione Mortis Causa'));
if((status =='Attivo' || status =='Sospeso') && companyDivisionAsset != companyDivisionOppty){
prestazioni.add('Voltura Con Switching');
if(prestazioni.contains('Voltura'))
prestazioni.remove(prestazioni.indexOf('Voltura'));
if(prestazioni.contains(' Voltura'))
prestazioni.remove(prestazioni.indexOf(' Voltura'));
if(prestazioni.contains('Voltura Fusione\\'))
prestazioni.remove(prestazioni.indexOf('Voltura Fusione\\'));
if(prestazioni.contains(' Voltura Fusione\\'))
prestazioni.remove(prestazioni.indexOf(' Voltura Fusione\\'));
if(prestazioni.contains('Incorporazione'))
prestazioni.remove(prestazioni.indexOf('Incorporazione'));
if(prestazioni.contains(' Incorporazione'))
prestazioni.remove(prestazioni.indexOf(' Incorporazione'));
if(prestazioni.contains('Voltura Retroattiva'))
prestazioni.remove(prestazioni.indexOf('Voltura Retroattiva'));
if(prestazioni.contains(' Voltura Retroattiva'))
prestazioni.remove(prestazioni.indexOf(' Voltura Retroattiva'));
if(prestazioni.contains('Voltura Tecnica'))
prestazioni.remove(prestazioni.indexOf('Voltura Tecnica'));
if(prestazioni.contains(' Voltura Tecnica'))
prestazioni.remove(prestazioni.indexOf(' Voltura Tecnica'));
}
}
else{
if((status =='Attivo' || status =='Sospeso') && accountNameAsset != accountNameOppty){
prestazioni.add('Voltura Con Switching');
if(prestazioni.contains('Voltura'))
prestazioni.remove(prestazioni.indexOf('Voltura'));
if(prestazioni.contains('Voltura Fusione\\'))
prestazioni.remove(prestazioni.indexOf('Voltura Fusione\\'));
if(prestazioni.contains('Incorporazione'))
prestazioni.remove(prestazioni.indexOf('Incorporazione'));
if(prestazioni.contains('Voltura Retroattiva'))
prestazioni.remove(prestazioni.indexOf('Voltura Retroattiva'));
if(prestazioni.contains(' Voltura'))
prestazioni.remove(prestazioni.indexOf(' Voltura'));
if(prestazioni.contains(' Voltura Fusione\\'))
prestazioni.remove(prestazioni.indexOf(' Voltura Fusione\\'));
if(prestazioni.contains(' Incorporazione'))
prestazioni.remove(prestazioni.indexOf(' Incorporazione'));
if(prestazioni.contains(' Voltura Retroattiva'))
prestazioni.remove(prestazioni.indexOf(' Voltura Retroattiva'));
if(prestazioni.contains('Voltura Tecnica'))
prestazioni.remove(prestazioni.indexOf('Voltura Tecnica'));
if(prestazioni.contains(' Voltura Tecnica'))
prestazioni.remove(prestazioni.indexOf(' Voltura Tecnica'));
}
}
}
if(segment == 'Mass Market'){
if(accountTypeUscente!=null &&
((accountTypeEntrante.containsIgnoreCase('organizzazione') && !accountTypeUscente.containsIgnoreCase('organizzazione')) ||
(accountTypeUscente.containsIgnoreCase('organizzazione') && !accountTypeEntrante.containsIgnoreCase('organizzazione')))){
if(prestazioni.contains('Voltura Fusione\\'))
prestazioni.remove(prestazioni.indexOf('Voltura Fusione\\'));
if(prestazioni.contains('Incorporazione'))
prestazioni.remove(prestazioni.indexOf(' Incorporazione'));
}
if(accountTypeUscente!=null &&
((accountTypeEntrante.containsIgnoreCase('persona fisica') && !accountTypeUscente.containsIgnoreCase('persona fisica')) ||
(accountTypeUscente.containsIgnoreCase('persona fisica') && !accountTypeEntrante.containsIgnoreCase('persona fisica')))){
if(prestazioni.contains('Voltura Successione Mortis Causa'))
prestazioni.remove(prestazioni.indexOf('Voltura Successione Mortis Causa'));
}
}
System.debug('segment = '+segment);
System.debug('status2 = '+status);
if( status=='Cessato'){
prestazioni.add('Attivazione Tecnica');
}
return prestazioni;
}
public List<String> manageEleCommodity(List<ServicePoint__c> servicePoints, String pod, String accountCfEntrante, String clientType, String vatNumber, String opportunityId){
List<ContestablePod__c> podContendibili = new List<ContestablePod__c>();
List<PODDistributorAlignment__c> pda = new List<PODDistributorAlignment__c>();
//list<PermissionSetAssignment> prs=[SELECT PermissionSetId FROM PermissionSetAssignment WHERE PermissionSet.Name IN ('CEP_LargeSme_AEMA','CEP_LargeSme_UE','CEP_LeadSmeLarge') AND AssigneeId =: UserInfo.getUserId() limit 1];
String status = '';
String accountIdAsset = '';
String accountCfUscente;
String accountTypeUscente;
String accountTypeEntrante = clientType;
String segment = '';
String companyDivisionAsset;
String accountNameAsset;
String CorrespondenceCFIncomingOutgoing = 'NO';
//NTT W3
String brand;
//
List<CEP_StatePerformance__mdt> statePerformances = new List<CEP_StatePerformance__mdt>();
List<String> prestazioni = new List<String>();
System.debug('Search in service points...');
//non sempre, quando viene richiamato questo metodo, si ha l'opportunityId popolato
//nei casi in cui è null è necessario controllarlo prima di effettuare la query
//INC0000000057134 --> errore sulla verifica offertabilità
Opportunity oppty;
String accountNameOppty;
String companyDivisionOppty;
String recordTypeName;
String opptySegment = '';
if(!String.isBlank(opportunityId)) {
oppty = [SELECT Account.Name, Account.JointVenture__r.Name, Account.RecordTypeDeveloperName__c, Segment__c,(select id FROM OpportunityServiceItems__r) FROM Opportunity WHERE Id =: opportunityId];
accountNameOppty = oppty.Account.Name;
companyDivisionOppty = oppty.Account.JointVenture__r.Name;
recordTypeName = oppty.Account.RecordTypeDeveloperName__c;
if(string.isNotBlank(oppty.Segment__c))opptySegment = oppty.Segment__c;
}
// Il sistema cerca il punto sul DB Acea
if(servicePoints.size()>0){
accountCfUscente = servicePoints[0].CurrentAsset__r.Account.FiscalCode__c;
//GIO
String jointAccountUscente;
if(!String.isEmpty(servicePoints[0].CurrentAsset__c)){
String idCompany = servicePoints[0].CurrentAsset__r.Account.JointVenture__c;
System.debug('*** idCompany: '+idCompany);
List<CompanyDivision__c> ListJointAccountUscente = [Select id, JointVentureCode__c from CompanyDivision__c where id =: idCompany limit 1];
if(ListJointAccountUscente.size() > 0){
jointAccountUscente = ListJointAccountUscente[0].JointVentureCode__c;
}
}
/*
//gio se reseller ricerca per key__c dell'account sull'asset
if('Reseller'.equalsIgnoreCase(servicePoints[0].CurrentAsset__r.Account.Segment__c)){
accountCfUscente = servicePoints[0].CurrentAsset__r.Account.Key__c;
}
*/
String accTypeTmp = servicePoints[0].CurrentAsset__r.Account.Type;
String recTypeTmp = servicePoints[0].CurrentAsset__r.Account.RecordType.Name;
accountTypeUscente = accTypeTmp!=null && String.isNotBlank(accTypeTmp) ? accTypeTmp : recTypeTmp;
//System.debug('service point field BusinessPartnerType__c ' + servicePoints[0].CurrentAsset__r.Account.BusinessPartnerType__c );
System.debug('Found service point ' + servicePoints[0].Id);
status = servicePoints[0].CurrentAsset__r.Status;
accountIdAsset = servicePoints[0].CurrentAsset__r.AccountId;
segment = servicePoints[0].CurrentAsset__r.Account.Segment__c;
vatNumberUscente = servicePoints[0].CurrentAsset__r.Account.VATNumber__c;
companyDivisionAsset = servicePoints[0].CurrentAsset__r.Account.JointVenture__r.Name;
accountNameAsset = servicePoints[0].CurrentAsset__r.Account.Name;
//NTT W3
brand = ServicePoints[0].CurrentAsset__r.Account.CompanyChannel__c;
//
System.debug('Current service point status '+ status);
// gio
List<Account> accountEntrante = [SELECT Id, VATNumber__c, FiscalCode__c, JointVenture__r.JointVentureCode__c FROM Account WHERE FiscalCode__c =: accountCfEntrante LIMIT 1];
String jointAccountEntrante = accountEntrante[0].JointVenture__r.JointVentureCode__c;
//
System.debug('*** jointAccountEntrante: '+jointAccountEntrante+' *** jointAccountUscente: '+jointAccountUscente);
if(!String.isEmpty(jointAccountUscente)){
CorrespondenceCFIncomingOutgoing = accountCfUscente != null && accountCfEntrante != null && jointAccountEntrante != null && jointAccountUscente != null
&& accountCfEntrante == accountCfUscente && jointAccountEntrante == jointAccountUscente ? 'SI' : 'NO';
}else{
CorrespondenceCFIncomingOutgoing = accountCfUscente != null && accountCfEntrante != null && accountCfEntrante == accountCfUscente ? 'SI' : 'NO';
}
// Se lo trova e lo Stato DB è “Attivo” interroga la tabella per determinare la prestazione
if(status == 'Attivo'){
statePerformances = CEP_QR_StatePerformance.getInstance().getByOriginAndStatus('DB Acea',status,'Ele',CorrespondenceCFIncomingOutgoing,clientType);
if(statePerformances.size()>0){
String prestazione = '';
for(CEP_StatePerformance__mdt stpf : statePerformances){
prestazione = prestazione + stpf.Performance__c + ',';
}
prestazioni = prestazione.split(',');
}
String firstToSearch;
String secondToSearch;
//accountCfUscente = servicePoints[0].CurrentAsset__r.Account.FiscalCode__c; //ripristino il controllo sul cf uscente invece che sulla key uscente
if(String.isNotBlank(accountCfEntrante)){
firstToSearch = accountCfEntrante;
}else{
firstToSearch = vatNumber;
}
if(String.isNotBlank(accountCfUscente)){
secondToSearch = accountCfUscente;
}else{
secondToSearch = vatNumberUscente;
}
if(firstToSearch == secondToSearch){ // probabile controparte commerciale. Vado a querare gli account
List<Account> accountList = new List<Account>();
//List<Account> accountListCF = new List<Account>();
//gio NON mettere if per fare query sulle key__c perchè serve ad aggiungere solo la prestazione di Switching Win
//if('Reseller'.equalsIgnoreCase(servicePoints[0].CurrentAsset__r.Account.Segment__c)){
// accountListCF = [SELECT Id, VATNumber__c, FiscalCode__c, JointVenture__r.JointVentureCode__c FROM Account WHERE Key__c IN(:accountCfEntrante, :accountCfUscente) LIMIT 2];
//}else{
List<Account> accountListCF = [SELECT Id, VATNumber__c, FiscalCode__c, JointVenture__r.JointVentureCode__c FROM Account WHERE FiscalCode__c IN(:firstToSearch, :secondToSearch) OR vatNumber__c IN(:firstToSearch, :secondToSearch) LIMIT 2];
//}
for(Account account : accountListCF){
if(String.isNotBlank(account.FiscalCode__c)){
accountList.add(account);
}else if(String.isNotBlank(account.VATNumber__c)) {
accountList.add(account);
}
}
System.debug('accountList = '+accountList);
if(!accountList.isEmpty() && accountList.size()>=2 ){
if((accountList[0]?.JointVenture__r?.JointVentureCode__c != accountList[1]?.JointVenture__r?.JointVentureCode__c) && !prestazioni.contains('Switching Win')){
prestazioni.add('Switching Win');
}
}
}
System.debug('prestazioni = '+prestazioni);
}
// Altrimenti cerca il punto sulla tabella dei POD Contendibili
else{
System.debug('Search in POD CONTENDIBILI');
podContendibili = CEP_QR_ContestablePod.getInstance().getByPod(pod);
// Se il punto è trovato
if(podContendibili.size()>0){
System.debug('Found POD CONTENDIBILI ' + servicePoints[0].Id);
status = podContendibili[0].CounterStatus__c;
System.debug('Current service point status '+ status);
statePerformances = CEP_QR_StatePerformance.getInstance().getByOriginAndStatus('Pod Contendibili',status,'Ele',clientType);
//e lo Stato Contendibile è censito in tabella
if(statePerformances.size()>0){
// allora il sistema usa questo stato per determinare la prestazione
String prestazione = '';
for(CEP_StatePerformance__mdt stpf : statePerformances){
prestazione = prestazione + stpf.Performance__c + ',';
}
prestazioni = prestazione.split(',');
}
// Altrimenti se lo Stato Contendibile non è censito in tabella
// possiamo avere 2 situazioni
else{
statePerformances = CEP_QR_StatePerformance.getInstance().getByOriginAndStatus('DB Acea',status,'Ele',clientType);
// 1 - lo Stato DB è censito in tabella
if(statePerformances.size()>0){
// allora il sistema usa lo Stato DB per determinare la prestazione
String prestazione = '';
for(CEP_StatePerformance__mdt stpf : statePerformances){
prestazione = prestazione + stpf.Performance__c + ',';
}
prestazioni = prestazione.split(',');
}
// 2 - lo Stato DB non è censito in tabella
else{
// allora il sistema fa vedere tutte le prestazioni previste per la commodity ELE
if(segment != 'Mass Market'){
prestazioni.add('Switching Win');
prestazioni.add('Voltura Con Switching');
prestazioni.add('Attivazione');
prestazioni.add('Subentro');
}
// NOTA : sul documento per ora sono questi
// inserire nella variabile eventuali altri stati
}
}
}
// Altrimenti se il punto non è stato trovato nei POD Contendibili
// possiamo avere 2 situazioni
else{
statePerformances = CEP_QR_StatePerformance.getInstance().getByOriginAndStatus('DB Acea',status,'Ele',clientType);
// 1 - lo Stato DB è censito in tabella
if(statePerformances.size()>0){
// allora il sistema usa lo Stato DB per determinare la prestazione
String prestazione = '';
for(CEP_StatePerformance__mdt stpf : statePerformances){
prestazione = prestazione + stpf.Performance__c + ',';
}
prestazioni = prestazione.split(',');
}
// 2 - lo Stato DB non è censito in tabella
else{
System.debug('senza ASSET 512');
// allora il sistema fa vedere tutte le prestazioni previste per la commodity ELE
if(segment != 'Mass Market'){
prestazioni.add('Switching Win');
prestazioni.add('Voltura Con Switching');
prestazioni.add('Attivazione');
prestazioni.add('Subentro');
prestazioni.add('Attivazione Tecnica');
}
}
}
}
}
// Altrimenti se il punto non è stato trovato sul DB Acea
// cerca il punto sulla tabella dei POD Contendibili
else{
System.debug('POD CONTENDIBILI 526');
podContendibili = podContendibiliSrv.getByPod(pod);
// Se il punto è trovato
if(podContendibili.size()>0){
status = podContendibili[0].CounterStatus__c;
statePerformances = CEP_QR_StatePerformance.getInstance().getByOriginAndStatus('Pod Contendibili',status,'Ele',clientType);
//e lo Stato Contendibile è censito in tabella
if(statePerformances.size()>0){
// allora il sistema usa questo stato per determinare la prestazione
String prestazione = '';
for(CEP_StatePerformance__mdt stpf : statePerformances){
prestazione = prestazione + stpf.Performance__c + ',';
}
prestazioni = prestazione.split(',');
}
// Altrimenti se lo Stato Contendibile non è censito in tabella
else{
prestazioni.add('Switching Win');
prestazioni.add('Voltura Con Switching');
prestazioni.add('Attivazione');
prestazioni.add('Subentro');
//prestazioni.add('Voltura');
// prestazioni.add('Cambio Prodotto');
}
}
// Altrimenti se il punto non è stato trovato nemmeno sui POD Contendibili
else{
System.debug('553');
prestazioni.add('Switching Win');
prestazioni.add('Voltura Con Switching');
prestazioni.add('Attivazione');
prestazioni.add('Subentro');
prestazioni.add('Attivazione Tecnica');
// prestazioni.add('Voltura Titolo 4');
// prestazioni.add('Cambio Prodotto');
}
}
//if(prs!=null && prs.size()==1){
//valori gestiti da matrice CEP_StatePerformance__mdt
//prestazioni.add('Voltura');
//prestazioni.add('Voltura Successione Mortis Causa');
//prestazioni.add('Voltura per Incorporazione Societaria');
//prestazioni.add('Voltura Titolo 4');
//prestazioni.add('Voltura Retroattiva o di recupero');
//NTT W3
//CONTROLLO SUL CANALE DELLO USER
Id userId = userinfo.getUserId();
List<User> userInfo = [SELECT DefaultChannel__c, DefaultSubChannel__c FROM User WHERE Id = :userId LIMIT 1];
if(userInfo.size()>0){
String canale = userInfo[0].DefaultChannel__c;
String sottoCanale = userInfo[0].DefaultSubChannel__c;
System.debug(canale);
System.debug(sottoCanale);
System.debug('Controllo 1');
if (canale == 'Punti fisici' && sottoCanale == 'Store WINDTRE') {
System.debug('Controllo 2');
if(prestazioni.contains('Cambio Prodotto') && brand == 'AE'){
System.debug('Controllo 3');
prestazioni.remove(prestazioni.indexOf('Cambio Prodotto'));
prestazioni.add('Cambio Prodotto Cross Brand');
}
if(prestazioni.contains('Cambio Prodotto') && brand == 'W3'){
System.debug('Controllo 4');
prestazioni.remove(prestazioni.indexOf('Cambio Prodotto'));
prestazioni.add('Errore');
}
}
}
if((status=='Attivo' || status=='Sospeso') && this.accountId == accountIdAsset){
if(this.accountId!=null && [Select Segment__c FROM Account WHERE Id =: this.accountId].Segment__c != 'Mass Market'){
prestazioni.add('Cambio Uso');
}
}
if(segment == 'Mass Market' && clientType == 'Organizzazione'){
if(prestazioni.contains('Voltura Successione Mortis Causa')){
prestazioni.remove(prestazioni.indexOf('Voltura Successione Mortis Causa'));
}
}
if(opptySegment != 'Mass Market'){
//if(segment != 'Mass Market'){
if(prestazioni.contains('Voltura Successione Mortis Causa'))
prestazioni.remove(prestazioni.indexOf('Voltura Successione Mortis Causa'));
if(recordTypeName != 'CEP_RT_Reseller'){
if((status =='Attivo' || status =='Sospeso') && companyDivisionAsset != companyDivisionOppty){
prestazioni.add('Voltura Con Switching');
System.debug('RIMUOVO LA VOLTURA TECNICA');
if(prestazioni.contains('Voltura'))
prestazioni.remove(prestazioni.indexOf('Voltura'));
if(prestazioni.contains('Voltura Fusione\\'))
prestazioni.remove(prestazioni.indexOf('Voltura Fusione\\'));
if(prestazioni.contains('Incorporazione'))
prestazioni.remove(prestazioni.indexOf('Incorporazione'));
if(prestazioni.contains('Voltura Retroattiva'))
prestazioni.remove(prestazioni.indexOf('Voltura Retroattiva'));
if(prestazioni.contains(' Voltura'))
prestazioni.remove(prestazioni.indexOf(' Voltura'));
if(prestazioni.contains(' Voltura Fusione\\'))
prestazioni.remove(prestazioni.indexOf(' Voltura Fusione\\'));
if(prestazioni.contains(' Incorporazione'))
prestazioni.remove(prestazioni.indexOf(' Incorporazione'));
if(prestazioni.contains(' Voltura Retroattiva'))
prestazioni.remove(prestazioni.indexOf(' Voltura Retroattiva'));
if(prestazioni.contains('Voltura Tecnica'))
prestazioni.remove(prestazioni.indexOf('Voltura Tecnica'));
if(prestazioni.contains(' Voltura Tecnica'))
prestazioni.remove(prestazioni.indexOf(' Voltura Tecnica'));
}
}
else{
if((status =='Attivo' || status =='Sospeso') && accountNameAsset != accountNameOppty){
prestazioni.add('Voltura Con Switching');
if(prestazioni.contains('Voltura'))
prestazioni.remove(prestazioni.indexOf('Voltura'));
if(prestazioni.contains('Voltura Fusione\\'))
prestazioni.remove(prestazioni.indexOf('Voltura Fusione\\'));
if(prestazioni.contains('Incorporazione'))
prestazioni.remove(prestazioni.indexOf('Incorporazione'));
if(prestazioni.contains('Voltura Retroattiva'))
prestazioni.remove(prestazioni.indexOf('Voltura Retroattiva'));
if(prestazioni.contains(' Voltura'))
prestazioni.remove(prestazioni.indexOf(' Voltura'));
if(prestazioni.contains(' Voltura Fusione\\'))
prestazioni.remove(prestazioni.indexOf(' Voltura Fusione\\'));
if(prestazioni.contains(' Incorporazione'))
prestazioni.remove(prestazioni.indexOf(' Incorporazione'));
if(prestazioni.contains(' Voltura Retroattiva'))
prestazioni.remove(prestazioni.indexOf(' Voltura Retroattiva'));
if(prestazioni.contains('Voltura Tecnica'))
prestazioni.remove(prestazioni.indexOf('Voltura Tecnica'));
if(prestazioni.contains(' Voltura Tecnica'))
prestazioni.remove(prestazioni.indexOf(' Voltura Tecnica'));
}
}
}
if(segment == 'Mass Market'){
if(accountTypeUscente!=null &&
((accountTypeEntrante.containsIgnoreCase('organizzazione') && !accountTypeUscente.containsIgnoreCase('organizzazione')) ||
(accountTypeUscente.containsIgnoreCase('organizzazione') && !accountTypeEntrante.containsIgnoreCase('organizzazione')))){
if(prestazioni.contains('Voltura Fusione\\'))
prestazioni.remove(prestazioni.indexOf('Voltura Fusione\\'));
if(prestazioni.contains('Incorporazione'))
prestazioni.remove(prestazioni.indexOf(' Incorporazione'));
}
if(accountTypeUscente!=null &&
((accountTypeEntrante.containsIgnoreCase('persona fisica') && !accountTypeUscente.containsIgnoreCase('persona fisica')) ||
(accountTypeUscente.containsIgnoreCase('persona fisica') && !accountTypeEntrante.containsIgnoreCase('persona fisica')))){
if(prestazioni.contains('Voltura Successione Mortis Causa'))
prestazioni.remove(prestazioni.indexOf('Voltura Successione Mortis Causa'));
}
}
System.debug('segment = '+segment);
System.debug('status = '+status);
if(status=='Cessato'){
prestazioni.add('Attivazione Tecnica');
}
// rimuovo la Voltura Tecnica se ci sono altre osi di qualsiasi altro tipo
if(oppty!= null && !oppty.OpportunityServiceItems__r.isEmpty() && segment == 'Mass Market'){
if(prestazioni.contains('Voltura Tecnica'))
prestazioni.remove(prestazioni.indexOf('Voltura Tecnica'));
if(prestazioni.contains(' Voltura Tecnica'))
prestazioni.remove(prestazioni.indexOf(' Voltura Tecnica'));
}
List<PermissionSetAssignment> prs=[SELECT PermissionSetId FROM PermissionSetAssignment WHERE PermissionSet.Name = 'CEP_CanViewVolturaTecnica' AND AssigneeId = :userId limit 1];
if(prs.size() == 0){
if(prestazioni.contains('Voltura Tecnica'))
prestazioni.remove(prestazioni.indexOf('Voltura Tecnica'));
}
if(segment == 'Reseller' && prestazioni.contains('Voltura Tecnica')){
prestazioni.remove(prestazioni.indexOf('Voltura Tecnica'));
}
return prestazioni;
}
@TestVisible
private List<String> filterPerformanceValuesForWave1(List<String> input, String commodity){
List<String> output = new List<String>();
if(commodity=='Electric'){
for(String s : input){
if(Constants.getAllConstants().PERFORMANCE_ELE_WAVE_1.contains(s)){
output.add(s);
}
}
}
if(commodity=='Gas'){
for(String s : input){
if(Constants.getAllConstants().PERFORMANCE_GAS_WAVE_1.contains(s)){
output.add(s);
}
}
}
return output;
}
/*
@TestVisible
private List<String> addPrestazioniPermissionSet(List<String> prestazioni){
List<PermissionSetAssignment> prs=[SELECT PermissionSetId FROM PermissionSetAssignment WHERE PermissionSet.Name = 'CEP_LargeUsers' AND AssigneeId = :UserInfo.getUserId() limit 1];
if(prs!=null && prs.size()==1){
prestazioni.add('Voltura Ordinaria');
prestazioni.add('Voltura Mortis causa');
prestazioni.add('Voltura per Incorporazione Societaria');
prestazioni.add('Voltura Titolo IV');
prestazioni.add('Voltura Retroattiva o di recupero');
}
return prestazioni;
}*/
}