Introduction

Extension for Utility object to support Account Segment when selecting Grace Period for Quote validity.

Rules for selection are:

  1. 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
  2. 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
  3. 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 

NameApi NameTypeDescription
Grace Period KeyPP_Grace_Period_Key__cText(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 SegmentPP_Account_Customer_Segment__cPicklistNew 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


SLV23_UtilityHelper
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
        );
    }
  • No labels