This is an automated email from the ASF dual-hosted git repository.
gsperi pushed a commit to branch release22.01
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git
The following commit(s) were added to refs/heads/release22.01 by this push:
new b10e74b030 Fixed: inv. reservation places order if not enough qty
(OFBIZ-12455) If quantity not reserved is not 0, requireInventory is set to Y,
system let an order to be placed anyway.
b10e74b030 is described below
commit b10e74b030431c16fd945a4219630e2740c51f23
Author: Giulio Speri <[email protected]>
AuthorDate: Thu Apr 7 23:33:54 2022 +0200
Fixed: inv. reservation places order if not enough qty (OFBIZ-12455)
If quantity not reserved is not 0, requireInventory is set to Y, system
let an order to be placed anyway.
The usage of the service around the project let make an important
assertion: we can consider that also reserveInventory flag of the
ProductStore is Y, since right now is always the caller context that
checks for the reserveInventory flag.
This fix simply returns a specific error to the caller, avoiding the
system to place the order.
Thanks Nicola Mazzoni for helping in debug this issue and Jacopo
Cappellato for the patch review.
---
applications/product/config/ProductUiLabels.xml | 4 ++++
.../minilang/product/inventory/InventoryReserveServices.xml | 9 ++++++++-
2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/applications/product/config/ProductUiLabels.xml
b/applications/product/config/ProductUiLabels.xml
index 1226c40899..37f5799100 100644
--- a/applications/product/config/ProductUiLabels.xml
+++ b/applications/product/config/ProductUiLabels.xml
@@ -20866,6 +20866,10 @@
<value xml:lang="zh">这个明细缺货</value>
<value xml:lang="zh-TW">這個細項缺貨</value>
</property>
+ <property key="ProductCannotReserveInventoryNotEnoughStock">
+ <value xml:lang="it">Impossibile riservare l'articolo
${parameters.productId}: quantità in stock non sufficiente nel deposito
${parameters.facilityId}. Quantità non riservata è
${parameters.quantityNotReserved}</value>
+ <value xml:lang="en">Cannot reserve product ${parameters.productId}:
not enough quantity left in stock for facility ${parameters.facilityId}.
Quantity not reserved is ${parameters.quantityNotReserved}</value>
+ </property>
<property key="ProductItemPrc">
<value xml:lang="de">Position Preis</value>
<value xml:lang="en">Item Prc</value>
diff --git
a/applications/product/minilang/product/inventory/InventoryReserveServices.xml
b/applications/product/minilang/product/inventory/InventoryReserveServices.xml
index fb4f603715..5146bec889 100644
---
a/applications/product/minilang/product/inventory/InventoryReserveServices.xml
+++
b/applications/product/minilang/product/inventory/InventoryReserveServices.xml
@@ -163,7 +163,14 @@ under the License.
-->
<if-compare field="parameters.quantityNotReserved"
operator="not-equals" value="0" type="BigDecimal">
<if-compare field="parameters.requireInventory"
operator="equals" value="Y">
- <!-- use this else pattern to accomplish the anything
but Y logic, ie if not specified default to inventory NOT required -->
+ <!-- if there is still quantity not reserved but
ProductStore is configured to require inventory, we can
+ assume here that also reserveInventory is set to Y
(reserveInventory is checked by caller services).
+ In such a scenario we return an error and avoid
order creation.
+ -->
+ <add-error>
+ <fail-property resource="ProductUiLabels"
property="ProductCannotReserveInventoryNotEnoughStock"/>
+ </add-error>
+ <check-errors/>
<else>
<if-not-empty field="lastNonSerInventoryItem">
<!-- subtract from quantityNotReserved from the
availableToPromise of existing inventory item -->