Introduction
Extension for Utility object to support Account Segment when selecting Grace Period for Quote validity.
Rules for selection are:
- If PP_Grace_Period_Key__c equals combination of GBU (SLV7_UTI_GBU__c) / BU (SLV7_UTI_BU__c) / Region (SLV9_Region__c) / Account customer Segment
- If not found then PP_Grace_Period_Key__c equals GBU (SLV7_UTI_GBU__c) / BU (SLV7_UTI_BU__c) / Region (SLV9_Region__c) if segment is blank
- If not found then Select Grace period record with Name = 'Default'
Standard elements
Grace Period list view
New list view on Utility tab that provide overview on Grace Period (record type) records.

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

Custom fieldsÂ
| 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 |
Validation Rule
| 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 |
Code
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
);
}