Skip to content
1 change: 1 addition & 0 deletions applications/datamodel/entitydef/product-entitymodel.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3562,6 +3562,7 @@ under the License.
<field name="serviceName" type="long-varchar"></field>
<field name="quantity" type="fixed-point"></field>
<field name="amount" type="fixed-point"></field>
<field name="maxDiscountAmount" type="fixed-point"></field>
<field name="productId" type="id"></field>
<field name="partyId" type="id"></field>
<field name="useCartQuantity" type="indicator"></field>
Expand Down
16 changes: 16 additions & 0 deletions applications/product/config/ProductUiLabels.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21710,6 +21710,22 @@
<value xml:lang="zh">现货数量来自组件</value>
<value xml:lang="zh-TW">現貨數量來自元件</value>
</property>
<property key="ProductMaxDiscountAmount">
<value xml:lang="de">Max. Rabattbetrag</value>
<value xml:lang="en">Max Discount Amount</value>
<value xml:lang="es">Importe máximo de descuento</value>
<value xml:lang="fr">Montant maximum de remise</value>
<value xml:lang="it">Importo massimo sconto</value>
<value xml:lang="ja">最大割引額</value>
<value xml:lang="nl">Maximum kortingsbedrag</value>
<value xml:lang="pt-BR">Valor máximo de desconto</value>
<value xml:lang="ro">Valoare maximă reducere</value>
<value xml:lang="ru">Максимальная сумма скидки</value>
<value xml:lang="th">จำนวนส่วนลดสูงสุด</value>
<value xml:lang="vi">Số tiền giảm giá tối đa</value>
<value xml:lang="zh">最大折扣金额</value>
<value xml:lang="zh-TW">最大折扣金額</value>
</property>
<property key="ProductMaxPr">
<value xml:lang="de">Maximaler Preis</value>
<value xml:lang="en">Max Pr</value>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -443,6 +443,10 @@ Map productOrderPercent() {
} else {
amount = cart.getSubTotalForPromotions() * percentage
}
BigDecimal maxDiscountAmount = productPromoAction.maxDiscountAmount ? productPromoAction.getBigDecimal('maxDiscountAmount') : BigDecimal.ZERO
if (maxDiscountAmount > BigDecimal.ZERO && amount.negate().compareTo(maxDiscountAmount) > 0) {
amount = maxDiscountAmount.negate()
}
if (amount != 0) {
ProductPromoWorker.doOrderPromoAction(productPromoAction, cart, amount, 'amount', delegator)
actionResultInfo.ranAction = true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,21 @@ class ProductPromoActionTests extends OFBizTestCase {
assert serviceResult.actionResultInfo.totalDiscountAmount == 0
}

/**
* Ensure order percent discount honors max discount amount
*/
void testProductOrderPercentMaxDiscount() {
ShoppingCart cart = loadOrder('DEMO10090')

Map<String, Object> serviceContext = prepareConditionMap(cart, 15, false)
serviceContext.productPromoAction.maxDiscountAmount = BigDecimal.ONE
Map<String, Object> serviceResult = dispatcher.runSync('productPromoActOrderPercent', serviceContext)

assert ServiceUtil.isSuccess(serviceResult)
assert serviceResult.actionResultInfo.ranAction
assert serviceResult.actionResultInfo.totalDiscountAmount == BigDecimal.ONE.negate()
}

/**
* This test check if the function productPromoActProdPrice work correctly
* 1. test failed with passing non valid value
Expand Down
2 changes: 2 additions & 0 deletions applications/product/template/promo/EditProductPromoRules.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,7 @@ under the License.
<input type="hidden" name="orderAdjustmentTypeId" value="${(productPromoAction.orderAdjustmentTypeId)!}" />
${uiLabelMap.ProductQuantity}:&nbsp;<input type="text" size="5" name="quantity" value="${(productPromoAction.quantity)!}" />
${uiLabelMap.ProductAmount}:&nbsp;<input type="text" size="5" name="amount" value="${(productPromoAction.amount)!}" />
${uiLabelMap.ProductMaxDiscountAmount}:&nbsp;<input type="text" size="5" name="maxDiscountAmount" value="${(productPromoAction.maxDiscountAmount)!}" />
<br/>
${uiLabelMap.ProductItemId}:&nbsp;<@htmlTemplate.lookupField value="${(productPromoAction.productId)!}" formName="updateProductPromoAction_${productPromoRule_index}_${productPromoAction_index}" name="productId" id="productId" fieldFormName="LookupProduct"/>
<br/>
Expand Down Expand Up @@ -449,6 +450,7 @@ under the License.
<input type="hidden" name="orderAdjustmentTypeId" value="PROMOTION_ADJUSTMENT" />
${uiLabelMap.ProductQuantity}:&nbsp;<input type="text" size="5" name="quantity" />
${uiLabelMap.ProductAmount}:&nbsp;<input type="text" size="5" name="amount" />
${uiLabelMap.ProductMaxDiscountAmount}:&nbsp;<input type="text" size="5" name="maxDiscountAmount" />
<br/>
${uiLabelMap.ProductItemId}:<@htmlTemplate.lookupField formName="createProductPromoAction" name="productId" id="productId" fieldFormName="LookupProduct"/>
<br/>
Expand Down