You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by mb...@apache.org on 2024/01/23 22:33:53 UTC
(ofbiz-framework) branch trunk updated: Extending individual discountRate value (OFBIZ-12802)
This is an automated email from the ASF dual-hosted git repository.
mbrohl pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git
The following commit(s) were added to refs/heads/trunk by this push:
new a07c44f516 Extending individual discountRate value (OFBIZ-12802)
a07c44f516 is described below
commit a07c44f51660f091feec66723017b3366b243b11
Author: Adrian Wolf <ad...@ecomify.de>
AuthorDate: Mon Apr 17 10:09:12 2023 +0200
Extending individual discountRate value (OFBIZ-12802)
+ Addition of additional context information "productStoreGroupId" and
"partyId" to the call parameters of a "customMethodName"
price-calc-service
+ Obtaining the fields discountRate and listPrice from calling a
"customMethodName" price-calc-service
+ discountRate as Result Field
+ Transport original discount rate from custom price calculation over
cart to order to have the correct rate instead of back-calculating it
from unitPrice and unitListPrice
---
applications/datamodel/entitydef/order-entitymodel.xml | 1 +
.../apache/ofbiz/order/shoppingcart/ShoppingCart.java | 1 +
.../ofbiz/order/shoppingcart/ShoppingCartItem.java | 10 ++++++++++
.../product/servicedef/services_pricepromo.xml | 1 +
.../org/apache/ofbiz/product/price/PriceServices.java | 18 ++++++++++++++++--
5 files changed, 29 insertions(+), 2 deletions(-)
diff --git a/applications/datamodel/entitydef/order-entitymodel.xml b/applications/datamodel/entitydef/order-entitymodel.xml
index f827711b7a..54b3cd9bba 100644
--- a/applications/datamodel/entitydef/order-entitymodel.xml
+++ b/applications/datamodel/entitydef/order-entitymodel.xml
@@ -549,6 +549,7 @@ under the License.
<field name="unitListPrice" type="currency-precise"></field>
<field name="unitAverageCost" type="currency-amount"></field>
<field name="unitRecurringPrice" type="currency-amount"></field>
+ <field name="discountRate" type="fixed-point"></field>
<field name="isModifiedPrice" type="indicator"></field>
<field name="recurringFreqUomId" type="id"></field>
<field name="itemDescription" type="description"></field>
diff --git a/applications/order/src/main/java/org/apache/ofbiz/order/shoppingcart/ShoppingCart.java b/applications/order/src/main/java/org/apache/ofbiz/order/shoppingcart/ShoppingCart.java
index 42f9c702ec..431c6cfb12 100644
--- a/applications/order/src/main/java/org/apache/ofbiz/order/shoppingcart/ShoppingCart.java
+++ b/applications/order/src/main/java/org/apache/ofbiz/order/shoppingcart/ShoppingCart.java
@@ -4376,6 +4376,7 @@ public class ShoppingCart implements Iterable<ShoppingCartItem>, Serializable {
orderItem.set("selectedAmount", item.getSelectedAmount());
orderItem.set("unitPrice", item.getBasePrice());
orderItem.set("unitListPrice", item.getListPrice());
+ orderItem.set("discountRate", item.getDiscountRate());
orderItem.set("isModifiedPrice", item.getIsModifiedPrice() ? "Y" : "N");
orderItem.set("isPromo", item.getIsPromo() ? "Y" : "N");
diff --git a/applications/order/src/main/java/org/apache/ofbiz/order/shoppingcart/ShoppingCartItem.java b/applications/order/src/main/java/org/apache/ofbiz/order/shoppingcart/ShoppingCartItem.java
index 8a3064b45d..1bf7b3b8d1 100644
--- a/applications/order/src/main/java/org/apache/ofbiz/order/shoppingcart/ShoppingCartItem.java
+++ b/applications/order/src/main/java/org/apache/ofbiz/order/shoppingcart/ShoppingCartItem.java
@@ -135,6 +135,7 @@ public class ShoppingCartItem implements java.io.Serializable {
*/
private BigDecimal reservNthPPPerc = BigDecimal.ZERO;
private BigDecimal listPrice = BigDecimal.ZERO;
+ private BigDecimal discountRate = null;
/**
* flag to know if the price have been modified
*/
@@ -1412,6 +1413,7 @@ public class ShoppingCartItem implements java.io.Serializable {
}
this.setSpecialPromoPrice((BigDecimal) priceResult.get("specialPromoPrice"));
+ this.discountRate = (BigDecimal) priceResult.get("discountRate");
}
this.orderItemPriceInfos = UtilGenerics.cast(priceResult.get("orderItemPriceInfos"));
@@ -2502,6 +2504,14 @@ public class ShoppingCartItem implements java.io.Serializable {
this.listPrice = listPrice;
}
+ /**
+ * Returns the DiscountRate
+ * @return discountRate
+ */
+ public BigDecimal getDiscountRate() {
+ return discountRate;
+ }
+
/**
* Returns isModifiedPrice
*/
diff --git a/applications/product/servicedef/services_pricepromo.xml b/applications/product/servicedef/services_pricepromo.xml
index cd59004ea9..83f0ec0b9b 100644
--- a/applications/product/servicedef/services_pricepromo.xml
+++ b/applications/product/servicedef/services_pricepromo.xml
@@ -49,6 +49,7 @@ under the License.
<attribute name="basePrice" type="BigDecimal" mode="OUT" optional="false"><!-- will only be different from price if there is a display price adjustment, for example: checkIncludeVat=Y and a VAT amount was found --></attribute>
<attribute name="price" type="BigDecimal" mode="OUT" optional="false"/>
<attribute name="listPrice" type="BigDecimal" mode="OUT" optional="true"/>
+ <attribute name="discountRate" type="BigDecimal" mode="OUT" optional="true" />
<attribute name="defaultPrice" type="BigDecimal" mode="OUT" optional="true"/>
<attribute name="competitivePrice" type="BigDecimal" mode="OUT" optional="true"/>
<attribute name="averageCost" type="BigDecimal" mode="OUT" optional="true"/>
diff --git a/applications/product/src/main/java/org/apache/ofbiz/product/price/PriceServices.java b/applications/product/src/main/java/org/apache/ofbiz/product/price/PriceServices.java
index 6c13e27151..66376141b4 100644
--- a/applications/product/src/main/java/org/apache/ofbiz/product/price/PriceServices.java
+++ b/applications/product/src/main/java/org/apache/ofbiz/product/price/PriceServices.java
@@ -343,6 +343,8 @@ public class PriceServices {
boolean validPriceFound = false;
BigDecimal defaultPrice = BigDecimal.ZERO;
+ BigDecimal listPrice = null;
+ BigDecimal discountRate = null;
List<GenericValue> orderItemPriceInfos = new LinkedList<>();
if (defaultPriceValue != null) {
// If a price calc formula (service) is specified, then use it to get the unit price
@@ -366,13 +368,19 @@ public class PriceServices {
if (UtilValidate.isNotEmpty(customAttributes)) {
inMap.put("customAttributes", customAttributes);
}
+ inMap.put("productStoreGroupId", productStoreGroupId);
+ inMap.put("partyId", partyId);
try {
Map<String, Object> outMap = dispatcher.runSync(customMethod.getString("customMethodName"), inMap);
if (ServiceUtil.isSuccess(outMap)) {
BigDecimal calculatedDefaultPrice = (BigDecimal) outMap.get("price");
+ BigDecimal calculatedListPrice = (BigDecimal) outMap.get("listPrice");
+ BigDecimal calculatedDiscountRate = (BigDecimal) outMap.get("discountRate");
orderItemPriceInfos = UtilGenerics.cast(outMap.get("orderItemPriceInfos"));
if (UtilValidate.isNotEmpty(calculatedDefaultPrice)) {
defaultPrice = calculatedDefaultPrice;
+ listPrice = calculatedListPrice;
+ discountRate = calculatedDiscountRate;
validPriceFound = true;
}
}
@@ -388,9 +396,13 @@ public class PriceServices {
}
}
- BigDecimal listPrice = listPriceValue != null ? listPriceValue.getBigDecimal("price") : null;
+ boolean skipPriceRules = true;
+ if (listPrice == null && listPriceValue != null) {
+ listPrice = listPriceValue.getBigDecimal("price");
+ skipPriceRules = listPrice == null;
+ }
- if (listPrice == null) {
+ if (skipPriceRules) {
// no list price, use defaultPrice for the final price
// ========= ensure calculated price is not below minSalePrice or above maxSalePrice =========
@@ -407,6 +419,8 @@ public class PriceServices {
validPriceFound = true;
}
+ result.put("listPrice", listPrice);
+ result.put("discountRate", discountRate);
result.put("basePrice", defaultPrice);
result.put("price", defaultPrice);
result.put("defaultPrice", defaultPrice);