Extension for Utility object to support Account Segment when selecting Grace Period for Quote validity.
Rules for selection are:
New list view on Utility tab that provide overview on Grace Period (record type) records.

Grace Period layout displays all relevant fields for Grace Period logic.

| Name | Api Name | Type | Description |
| Grace Period Key | PP_Grace_Period_Key__c | Text(255) (Unique Case Sensitive) | Stores unique key of Grace Period GBU (SLV7_UTI_GBU__c) / BU (SLV7_UTI_BU__c) / Region (SLV9_Region__c) / Account customer Segment |
| Account Customer Segment | PP_Account_Customer_Segment__c | Picklist | New Account Customer Segment dropdown |
| PP_GBU_Novecare_Maximum_Grace_period_Day | |
| AND(TEXT(SLV7_UTI_GBU__c) = "Novecare", PP_Grace_Period_Days__c > 180 ) | |
| You cannot enter more than 180 days in the Grace Period Days field when GBU is set to Novecare | |
| You cannot enter more than 180 days in the Grace Period Days field when GBU is set to Novecare |
public SLV_Utility__c getUtilityByGbuBuAndRegion(SLV44_ONE_Quote__c quote) {
SLV_Utility__c utilityToReturn;
String quoteKeyLong;
String quoteKey =
quote.PP_GBU__c +
'/' +
quote.SLV44_BU__c +
'/' +
quote.SLV44_Pricing_Region__c;
if (!String.isBlank(quote.SLV44_Account_customer_Segment__c)) {
quoteKeyLong = quoteKey + '/' + quote.SLV44_Account_customer_Segment__c;
}
for (SLV_Utility__c utility : gracePeriodUtilities) {
if (utility.PP_Grace_Period_Key__c == quoteKeyLong) {
utilityToReturn = utility;
}
}
if (utilityToReturn == null) {
for (SLV_Utility__c utility : gracePeriodUtilities) {
if (utility.PP_Grace_Period_Key__c == quoteKey) {
utilityToReturn = utility;
}
}
}
if (utilityToReturn == null) {
for (SLV_Utility__c utility : gracePeriodUtilities) {
if (
utility.Name == 'Default' &&
utility.SLV7_UTI_BU__c == null &&
utility.PP_Grace_Period_Days__c == 180
) {
utilityToReturn = utility;
}
}
}
return utilityToReturn;
}
public void setGracePeriodUtilities(List<SLV44_ONE_Quote__c> quotes) {
Set<String> gracePeriodKeys = new Set<String>();
String quoteKey;
for (SLV44_ONE_Quote__c quote : quotes) {
quoteKey =
quote.PP_GBU__c +
'/' +
quote.SLV44_BU__c +
'/' +
quote.SLV44_Pricing_Region__c;
gracePeriodKeys.add(quoteKey);
if (!String.isBlank(quote.SLV44_Account_customer_Segment__c)) {
quoteKey += '/' + quote.SLV44_Account_customer_Segment__c;
}
gracePeriodKeys.add(quoteKey);
}
gracePeriodUtilities = PP_UtilitySelector.getGracePeriodUtilities(
gracePeriodKeys,
AccessType.READABLE
);
} |