Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

TODO: add code samples

...

Promotion Calendar capability brings these core back-end enhancements

API: Filter to find all contracts & rebates for the given customer(s) and product(s) criteria

As a configuration engineer, I want to be able to efficiently fetch contracts & rebates based on customer group and product group so that I can display relevant records in a Gantt highchart in a dashboard.

New Groovy API methods

  • Filter productToRelatedObjectsFilter(String relatedObjectTypeCode, ProductGroup productGroup);

  • Filter customerToRelatedObjectsFilter(String relatedObjectTypeCode, CustomerGroup customerGroup);

  • Object getCalculableLineItemCollection(String typedId);

API: Filter to find all contracts & rebates for the given customer(s) and product(s) criteria

Allow customer/productToRelatedObjectsFilter() to accept the customer/product picker

methods to accept the customer/product picker

productToRelatedObjectsFilter

customerToRelatedObjectsFilter

 

Allow getCalculableLineItemCollection() to accept Filter

method to provide full details of the contracts/rebates

getCalculableLineItemCollection

Usage of newly introduced methods:

Code Block
breakoutModewide
languagejava
Filter getCustomerProductFilter(String typeCode, Collection customerIds, Collection skus, List contractStatus,
                                String dateFrom, String dateTo) {

    def filters = Filter.and()

    if (customerIds != null) {
        Filter filterCustomers = Filter.or()

        if (customerIds) {
            customerIds.each { customerId ->
                filterCustomers.add(api.customerToRelatedObjectsFilter(typeCode, customerId))
            }
        } else {
            filterCustomers.add(
                    Filter.equal("customerId", null)
            )
        }

        filters.add(
                Filter.or(filterCustomers, Filter.isNull("customerGroup"))
        )
    }

    if (skus != null) {
        Filter filterProducts = Filter.or()

        if (skus) {
            skus.each { sku ->
                filterProducts.add(api.productToRelatedObjectsFilter(typeCode, sku))
            }
        } else {
            filterProducts.add(
                    Filter.equal("sku", null)
            )
        }
        filters.add(
                Filter.or(filterProducts, Filter.isNull("productGroup"))
        )
    }

    if (contractStatus) {
        filters.add(
                Filter.in("contractStatus", contractStatus)
        )
    }

    if (dateFrom) {
        filters.add(
                Filter.greaterOrEqual("startDate", dateFrom),
        )
    }

    if (dateTo) {
        filters.add(
                Filter.lessOrEqual("endDate", dateTo),
        )
    }

    return filters
}
Code Block
breakoutModewide
languagejava
def customerIds = out.Customers?.customerId
def skus = out.Products?.sku
def contractStatus = out.Status
def productList = out.Products
def tradeLeverCategory = out.TradeLevers?.TradeLeverCategory
def tradeLeverType = out.TradeLevers?.TradeLeverType
def contractTermTypes = out.ContractTermTypes

def filter = Library.getCustomerProductFilter("CT", customerIds, skus, contractStatus, out.DateFrom, out.DateTo)

def contracts = api.find("CT", 0, api.maxFindResultsLimit, "startDate", ["id"], filter)
        .collect { contract ->
            api.getCalculableLineItemCollection(contract.id + ".CT")
        }