1global class QCPForFindingLookupRecords implements SBQQ.QuoteCalculatorPlugin, SBQQ.QuoteCalculatorPlugin2 {
2 global set<String> getReferencedFields() {
3 return new Set<String> {
4 String.valueOf(SBQQ__QuoteLine__c.SBQQ__ProductCode__c),
5 String.valueOf(SBQQ__QuoteLine__c.SBQQ__Description__c)
6 };
7 }
8
9 global void onInit(SObject[] lines) {}
10
11 global void onBeforeCalculate(SObject quote, SObject[] lines) {}
12
13 global void onBeforePriceRules(SObject quote, SObject[] lines) {}
14
15 global void onAfterPriceRules(SObject quote, SObject[] lines) {}
16
17 global void onAfterCalculate(SObject quote, SObject[] lines) {
18 if (!lines.isEmpty()) {
19 String[] productCodes = new String[0];
20 for (SObject line : lines) {
21 String productCode = (String)line.get(String.valueOf(SBQQ__QuoteLine__c.SBQQ__ProductCode__c));
22 if (productCode != null && !productCode.isWhitespace()) {
23 productCodes.add(productCode);
24 }
25 }
26 SBQQ__LookupData__c[] ds = [SELECT Id, SBQQ__Category__c, SBQQ__Value__c FROM SBQQ__LookupData__c WHERE SBQQ__Category__c IN :productCodes];
27 if (!ds.isEmpty()) {
28 Map<String,String> valuesByCategory = new Map<String,String>();
29 for (SBQQ__LookupData__c d : ds) {
30 valuesByCategory.put(d.SBQQ__Category__c, d.SBQQ__Value__c);
31 }
32 for (SObject line : lines) {
33 String productCode = (String)line.get(String.valueOf(SBQQ__QuoteLine__c.SBQQ__ProductCode__c));
34 if (productCode != null && !productCode.isWhitespace()) {
35 line.put(String.valueOf(SBQQ__QuoteLine__c.SBQQ__Description__c), valuesByCategory.get(productCode));
36 }
37 }
38 }
39 }
40 }
41}