...
Code Block | ||||
---|---|---|---|---|
| ||||
def tieredVal = api.multiTierEntry("Revenue Target", "€","%")
if (api.isInputGenerationExecution()) return //isInputGenerationExecution supported from version 10.0, in older versions use isSyntaxCheck
// 5% --> 0.05 conversion
if (tieredVal != null){
tieredVal = tieredVal.multiplyValues(0.01)
}
api.log("sales target", tieredVal.inspect())
api.global.target = tieredVal
return tieredVal |
...
Code Block | ||||
---|---|---|---|---|
| ||||
if (api.isInputGenerationExecution()) return //isInputGenerationExecution supported from version 10.0, in older versions use isSyntaxCheck def line = api.currentItem() if (line != null){ // is null on input generation/formula save def customerGroup = api.getElement("CustomerGroup") def productGroup = api.getElement("ProductGroup") // actuals for the period specified in the rebate line item def timeFilter = api.filter("InvoiceDate", line?.startDate, line?.endDate) if (timeFilter != null){ api.datamartQuery("TX", "Transaction DM", customerGroup, productGroup, timeFilter, "InvoicePrice\$") } } |
...
Code Block | ||||
---|---|---|---|---|
| ||||
if (api.isInputGenerationExecution()) return //isInputGenerationExecution supported from version 10.0, in older versions use isSyntaxCheck def sales = api.datamartLookup("TX", "InvoicePrice\$") api.log("actual", sales.inspect()) api.global.actual = sales as BigDecimal return api.global.actual |
...
Code Block | ||||
---|---|---|---|---|
| ||||
if (api.isInputGenerationExecution()) return //isInputGenerationExecution supported from version 10.0, in older versions use isSyntaxCheck
def sales = api.global.actual
if (sales<0) sales=0
def rebate = Library.calcDiscount(sales, api.global.target)
api.global.rebate = rebate as BigDecimal
return api.global.rebate |
...
Code Block | ||||
---|---|---|---|---|
| ||||
if (api.isInputGenerationExecution()) return //isInputGenerationExecution supported from version 10.0, in older versions use isSyntaxCheck
def sales = api.global.actual * api.getElement("ASFFactor")
if (sales<0) sales=0
def rebate = Library.calcDiscount(sales, api.global.target)
api.global.rebate = rebate as BigDecimal
return api.global.rebate |
...
Code Block | ||||
---|---|---|---|---|
| ||||
if (api.isInputGenerationExecution()) return) return //isInputGenerationExecution supported from version 10.0, in older versions use isSyntaxCheck rebateRecords.add() |
Stepped Rebate
...
Code Block | ||||
---|---|---|---|---|
| ||||
//Stepped discount calculation function: revenue falls in a specific tier, %discount of each tier up to this tier is applied to the part of the revenue. if (api.isInputGenerationExecution()) return //isInputGenerationExecution supported from version 10.0, in older versions use isSyntaxCheck // target values are % values (i.e. 5% is represented by 5 rather than 0.05) def calcSteppedDiscount(actual, tieredTarget){ api.log("calcSteppedDiscount: actual", actual.inspect()) api.log("calcSteppedDiscount: target", tieredTarget.inspect()) def cumulativeDiscount = 0.0 if (actual != null && tieredTarget != null){ if (tieredTarget.size()>0){ def unusedActual = actual for (i = tieredTarget.size()-1; i>=0; i--){ def tier = tieredTarget.get(i) def target = tier.target as BigDecimal def value = tier.value as BigDecimal api.log("Tier" +i + " target", target.inspect()) api.log("Tier" +i + " value", value.inspect()) if (target != null){ if (unusedActual > target){ if (value == null) value=0 def discountable = unusedActual - target def discount = discountable * value api.log("Discountable", discountable) api.log("Discount", discount) cumulativeDiscount += (discountable * value) api.log(" Cumulative discount", cumulativeDiscount) unusedActual = target } } } } } return cumulativeDiscount } |
...
Code Block | ||||
---|---|---|---|---|
| ||||
def tieredVal = api.multiTierEntry("Revenue Target", "€","%") if (api.isInputGenerationExecution()) return //isInputGenerationExecution supported from version 10.0, in older versions use isSyntaxCheck // 5% --> 0.05 conversion if (tieredVal != null){ tieredVal = tieredVal.multiplyValues(0.01) } api.log("sales target", tieredVal.inspect()) api.global.target = tieredVal return tieredVal |
...
Code Block | ||||
---|---|---|---|---|
| ||||
if (api.isInputGenerationExecution()) return return //isInputGenerationExecution supported from version 10.0, in older versions use isSyntaxCheck def line = api.currentItem() if (line != null){ // is null on input generation/formula save def customerGroup = api.getElement("CustomerGroup") def productGroup = api.getElement("ProductGroup") // actuals for the period specified in the rebate line item def timeFilter = api.filter("InvoiceDate", line?.startDate, line?.endDate) if (timeFilter != null){ api.datamartQuery("TX", "Transaction DM", customerGroup, productGroup, timeFilter, "InvoicePrice\$") } } |
...
Code Block | ||||
---|---|---|---|---|
| ||||
if (api.isInputGenerationExecution()) return //isInputGenerationExecution supported from version 10.0, in older versions use isSyntaxCheck def sales = api.datamartLookup("TX", "InvoicePrice\$") api.log("actual", sales.inspect()) api.global.actual = sales as BigDecimal return api.global.actual |
...
Code Block | ||||
---|---|---|---|---|
| ||||
if (api.isInputGenerationExecution()) return //isInputGenerationExecution supported from version 10.0, in older versions use isSyntaxCheck def sales = api.global.actual if (sales<0) sales=0 def rebate = Library.calcSteppedDiscount(sales, api.global.target) api.global.rebate = rebate as BigDecimal return api.global.rebate |
...
Code Block | ||||
---|---|---|---|---|
| ||||
if (api.isInputGenerationExecution()) return) return //isInputGenerationExecution supported from version 10.0, in older versions use isSyntaxCheck def sales = api.global.actual * api.getElement("ASFFactor") if (sales<0) sales=0 def rebate = Library.calcDiscount(sales, api.global.target) api.global.rebate = rebate as BigDecimal return api.global.rebate |
...
Code Block | ||||
---|---|---|---|---|
| ||||
if (api.isInputGenerationExecution()) return //isInputGenerationExecution supported from version 10.0, in older versions use isSyntaxCheck rebateRecords.add() |
Growth Rebate
...
Code Block | ||||
---|---|---|---|---|
| ||||
def tieredVal = api.multiTierEntry("Growth Target", "%","%") if (api.isInputGenerationExecution()) return //isInputGenerationExecution supported from version 10.0, in older versions use isSyntaxCheck //rebate % conversion if (tieredVal != null){ tieredVal = tieredVal.multiplyValues(0.01) } api.log("growth target", tieredVal.inspect()) api.global.target = tieredVal return tieredVal |
...
Code Block | ||||
---|---|---|---|---|
| ||||
if (api.isInputGenerationExecution()) return return //isInputGenerationExecution supported from version 10.0, in older versions use isSyntaxCheck def line = api.currentItem() if (line != null){ // is null on input generation/formula save def customerGroup = api.getElement("CustomerGroup") def productGroup = api.getElement("ProductGroup") // actuals for the period specified in the rebate line item def timeFilter = api.filter("InvoiceDate", line?.startDate, line?.endDate) if (timeFilter != null){ api.datamartQuery("TX", "Transaction DM", customerGroup, productGroup, timeFilter, "InvoicePrice\$") } // previous year (copy and paste for other past periods) def cal = api.datamartCalendar() def startDate = line?.startDate?.toString() // is a string def endDate = line.endDate.toString() // is a string if (startDate != null){ startDate = cal.add(startDate, -1, "YEAR"); } if (endDate != null){ endDate = cal.add(endDate, -1, "YEAR"); } timeFilter = api.filter("InvoiceDate", startDate, endDate) if (timeFilter != null){ api.datamartQuery("TX-1yr", "Transaction DM", customerGroup, productGroup, timeFilter, "InvoicePrice\$") } } |
...
Code Block | ||||
---|---|---|---|---|
| ||||
if (api.isInputGenerationExecution()) return //isInputGenerationExecution supported from version 10.0, in older versions use isSyntaxCheck def sales = api.datamartLookup("TX", "InvoicePrice\$") api.log("actual", sales.inspect()) api.global.actual = sales as BigDecimal return api.global.actual |
...
Code Block | ||||
---|---|---|---|---|
| ||||
if (api.isInputGenerationExecution()) return //isInputGenerationExecution supported from version 10.0, in older versions use isSyntaxCheck def sales = api.datamartLookup("TX-1yr", "InvoicePrice\$") api.log("actual", sales.inspect()) api.global.actualPrevYear = sales as BigDecimal return api.global.actualPrevYear |
...
Code Block | ||||
---|---|---|---|---|
| ||||
if (api.isInputGenerationExecution()) return) return //isInputGenerationExecution supported from version 10.0, in older versions use isSyntaxCheck def sales = api.global.actual def lastYearsSales = api.global.actualPrevYear if (sales<0) sales=0 if (lastYearsSales<0) lastYearsSales=0 def rebate = Library.growthBonus(sales, lastYearsSales, api.global.target) api.global.rebate = rebate as BigDecimal return api.global.rebate |
...
Code Block | ||||
---|---|---|---|---|
| ||||
if (api.isInputGenerationExecution()) return //isInputGenerationExecution supported from version 10.0, in older versions use isSyntaxCheck def sales = api.global.actual * api.getElement("ASFFactor") if (sales<0) sales=0 def rebate = Library.calcDiscount(sales, api.global.target) api.global.rebate = rebate as BigDecimal return api.global.rebate |
...
Code Block | ||||
---|---|---|---|---|
| ||||
if (api.isInputGenerationExecution()) return //isInputGenerationExecution supported from version 10.0, in older versions use isSyntaxCheck rebateRecords.add() |
Fixed Rebate
...
Code Block | ||||
---|---|---|---|---|
| ||||
if (api.isInputGenerationExecution()) return //isInputGenerationExecution supported from version 10.0, in older versions use isSyntaxCheck
rebateRecords.add() |
Rebate Variants
...