You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by de...@apache.org on 2015/12/28 06:07:38 UTC
svn commit: r1721875 - in /ofbiz/branches/release14.12: ./
applications/order/servicedef/ applications/order/src/org/ofbiz/order/order/
applications/order/src/org/ofbiz/order/shoppingcart/
Author: deepak
Date: Mon Dec 28 05:07:38 2015
New Revision: 1721875
URL: http://svn.apache.org/viewvc?rev=1721875&view=rev
Log:
Applied fix from trunk for revision: 1721093
===
(OFBIZ-4954) Applied patch from jira issue OFBIZ-4954
============================================================
Order item quantity cancel issue.
If user partially received an order and then cancel order item, system cancel all the order item quantity.System does not check for shipped/received order item quantity.
Expected behavior: Only remaining order item quantity should be cancelled and order item should marked as complete with partial received/shipped quantity.
============================================================
Modified:
ofbiz/branches/release14.12/ (props changed)
ofbiz/branches/release14.12/applications/order/servicedef/secas.xml
ofbiz/branches/release14.12/applications/order/servicedef/services_cart.xml
ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java
ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/order/OrderServices.java
ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartEvents.java
ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartServices.java
Propchange: ofbiz/branches/release14.12/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Dec 28 05:07:38 2015
@@ -8,4 +8,4 @@
/ofbiz/branches/json-integration-refactoring:1634077-1635900
/ofbiz/branches/multitenant20100310:921280-927264
/ofbiz/branches/release13.07:1547657
-/ofbiz/trunk:1649072,1649083-1649084,1649086,1649090,1649096,1649230,1649238-1649239,1649248,1649272,1649275,1649280-1649281,1649283,1649285-1649286,1649291,1649329,1649331,1649384,1649393,1649666,1649742,1650240,1650348,1650357,1650583,1650642,1650678,1650821,1650882,1650887,1650938,1651593,1652312,1652361,1652638,1652641,1652672,1652688,1652706,1652725,1652731,1652739,1652852,1653248,1653296,1653456,1653597,1653614,1654175,1654273,1654509,1654670,1654672-1654673,1654683-1654684,1654824,1655046,1655668,1655979,1656014,1656185,1656198,1656445,1656983,1657323,1657506-1657507,1657514,1657714,1657790,1657848,1658364,1658662,1658882,1659224,1659965,1660031,1660053,1660389,1660444,1660579,1661303,1661328,1661760,1661778,1661853,1661862,1661873,1661940,1661951,1661977,1662119-1662120,1662361,1662500,1662812,1662919,1663202,1663912,1663979,1664602,1664604,1664696,1665154,1665162,1665535,1666404,1666511,1666633,1666836,1666939,1666949,1666958,1667055,1667253,1667483,1667492,1667774,1668207,
1668214,1668236,1668246,1668258,1668263,1668265,1668270,1668277,1668314,1668657,1669317,1669588,1672427,1672430,1672846,1672853,1672856,1672862,1672873,1673764,1674447,1674464,1674491,1674496,1674908,1676674,1677123,1677597,1677769-1677770,1678294,1678882,1678911,1679689,1679697,1679709,1679720,1679728,1679732,1679957,1680155,1680288,1680304,1680671,1680675,1680733,1680840,1680881,1682272,1682295,1682415,1682633,1683998,1684094,1686360,1686536,1686545,1686566,1686569,1686574,1686583,1686635,1686651,1686970,1687427,1688772,1690086,1690581,1692357,1692458,1692600,1692604,1693393,1693579,1695017,1696018,1696234,1697590,1697647,1697993,1698259,1698261,1698263,1701164,1701441,1701819,1701825,1701936,1702002,1702548,1702704,1703121,1703586,1703945,1703954,1703965,1703971,1703976-1703977,1703981,1704000,1704014,1704018,1704036,1704043,1704052,1704082,1704140,1704230,1705004,1705329,1705405,1705412,1705417,1705427,1705532,1706159,1706162,1706316,1706531,1706549,1706553,1706561,1706569,17065
77,1706589,1706591,1706593,1706694,1707837,1707857,1708274,1708341,1708742,1708930,1709117,1710178,1710348,1711513,1712971,1714244,1714410,1714415,1714571,1714657,1715477-1715478,1715485,1715501,1716319,1717058,1717180,1717682,1717710,1717760,1718023,1718109,1719094,1719872,1721067,1721625
+/ofbiz/trunk:1649072,1649083-1649084,1649086,1649090,1649096,1649230,1649238-1649239,1649248,1649272,1649275,1649280-1649281,1649283,1649285-1649286,1649291,1649329,1649331,1649384,1649393,1649666,1649742,1650240,1650348,1650357,1650583,1650642,1650678,1650821,1650882,1650887,1650938,1651593,1652312,1652361,1652638,1652641,1652672,1652688,1652706,1652725,1652731,1652739,1652852,1653248,1653296,1653456,1653597,1653614,1654175,1654273,1654509,1654670,1654672-1654673,1654683-1654684,1654824,1655046,1655668,1655979,1656014,1656185,1656198,1656445,1656983,1657323,1657506-1657507,1657514,1657714,1657790,1657848,1658364,1658662,1658882,1659224,1659965,1660031,1660053,1660389,1660444,1660579,1661303,1661328,1661760,1661778,1661853,1661862,1661873,1661940,1661951,1661977,1662119-1662120,1662361,1662500,1662812,1662919,1663202,1663912,1663979,1664602,1664604,1664696,1665154,1665162,1665535,1666404,1666511,1666633,1666836,1666939,1666949,1666958,1667055,1667253,1667483,1667492,1667774,1668207,
1668214,1668236,1668246,1668258,1668263,1668265,1668270,1668277,1668314,1668657,1669317,1669588,1672427,1672430,1672846,1672853,1672856,1672862,1672873,1673764,1674447,1674464,1674491,1674496,1674908,1676674,1677123,1677597,1677769-1677770,1678294,1678882,1678911,1679689,1679697,1679709,1679720,1679728,1679732,1679957,1680155,1680288,1680304,1680671,1680675,1680733,1680840,1680881,1682272,1682295,1682415,1682633,1683998,1684094,1686360,1686536,1686545,1686566,1686569,1686574,1686583,1686635,1686651,1686970,1687427,1688772,1690086,1690581,1692357,1692458,1692600,1692604,1693393,1693579,1695017,1696018,1696234,1697590,1697647,1697993,1698259,1698261,1698263,1701164,1701441,1701819,1701825,1701936,1702002,1702548,1702704,1703121,1703586,1703945,1703954,1703965,1703971,1703976-1703977,1703981,1704000,1704014,1704018,1704036,1704043,1704052,1704082,1704140,1704230,1705004,1705329,1705405,1705412,1705417,1705427,1705532,1706159,1706162,1706316,1706531,1706549,1706553,1706561,1706569,17065
77,1706589,1706591,1706593,1706694,1707837,1707857,1708274,1708341,1708742,1708930,1709117,1710178,1710348,1711513,1712971,1714244,1714410,1714415,1714571,1714657,1715477-1715478,1715485,1715501,1716319,1717058,1717180,1717682,1717710,1717760,1718023,1718109,1719094,1719872,1721067,1721093,1721625
Modified: ofbiz/branches/release14.12/applications/order/servicedef/secas.xml
URL: http://svn.apache.org/viewvc/ofbiz/branches/release14.12/applications/order/servicedef/secas.xml?rev=1721875&r1=1721874&r2=1721875&view=diff
==============================================================================
--- ofbiz/branches/release14.12/applications/order/servicedef/secas.xml (original)
+++ ofbiz/branches/release14.12/applications/order/servicedef/secas.xml Mon Dec 28 05:07:38 2015
@@ -150,7 +150,7 @@ under the License.
</eca>
<!-- cancel order items -->
- <eca service="cancelOrderItem" event="commit">
+ <eca service="cancelOrderItem" event="global-commit-post-run">
<action service="recreateOrderAdjustments" mode="sync"/>
<action service="resetGrandTotal" mode="sync"/>
<action service="sendOrderChangeNotification" mode="async" persist="true"/>
Modified: ofbiz/branches/release14.12/applications/order/servicedef/services_cart.xml
URL: http://svn.apache.org/viewvc/ofbiz/branches/release14.12/applications/order/servicedef/services_cart.xml?rev=1721875&r1=1721874&r2=1721875&view=diff
==============================================================================
--- ofbiz/branches/release14.12/applications/order/servicedef/services_cart.xml (original)
+++ ofbiz/branches/release14.12/applications/order/servicedef/services_cart.xml Mon Dec 28 05:07:38 2015
@@ -112,6 +112,7 @@ under the License.
location="org.ofbiz.order.shoppingcart.ShoppingCartServices" invoke="loadCartFromOrder">
<description>Create a ShoppingCart Object based on an existing order</description>
<attribute name="orderId" type="String" mode="IN" optional="false"/>
+ <attribute name="createAsNewOrder" type="String" mode="IN" default-value="N"/>
<attribute name="skipInventoryChecks" type="Boolean" mode="IN" optional="true"/>
<attribute name="skipProductChecks" type="Boolean" mode="IN" optional="true"/>
<attribute name="includePromoItems" type="Boolean" mode="IN" optional="true"/>
Modified: ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java?rev=1721875&r1=1721874&r2=1721875&view=diff
==============================================================================
--- ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java (original)
+++ ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java Mon Dec 28 05:07:38 2015
@@ -3026,5 +3026,27 @@ public class OrderReadHelper {
}
return shippableSizes;
}
+ public BigDecimal getItemReceivedQuantity(GenericValue orderItem) {
+ BigDecimal totalReceived = BigDecimal.ZERO;
+ try {
+ if (UtilValidate.isNotEmpty(orderItem)) {
+ EntityCondition cond = EntityCondition.makeCondition(UtilMisc.toList(
+ EntityCondition.makeCondition("orderId", orderItem.getString("orderId")),
+ EntityCondition.makeCondition("quantityAccepted", EntityOperator.GREATER_THAN, BigDecimal.ZERO),
+ EntityCondition.makeCondition("orderItemSeqId", orderItem.getString("orderItemSeqId"))));
+ Delegator delegator = orderItem.getDelegator();
+ List<GenericValue> shipmentReceipts = EntityQuery.use(delegator).select("quantityAccepted", "quantityRejected").from("ShipmentReceiptAndItem").where(cond).queryList();
+ for (GenericValue shipmentReceipt : shipmentReceipts) {
+ if (shipmentReceipt.getBigDecimal("quantityAccepted") != null)
+ totalReceived = totalReceived.add(shipmentReceipt.getBigDecimal("quantityAccepted"));
+ if (shipmentReceipt.getBigDecimal("quantityRejected") != null)
+ totalReceived = totalReceived.add(shipmentReceipt.getBigDecimal("quantityRejected"));
+ }
+ }
+ } catch (GenericEntityException e) {
+ Debug.logError(e, module);
+ }
+ return totalReceived;
+ }
}
Modified: ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/order/OrderServices.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/order/OrderServices.java?rev=1721875&r1=1721874&r2=1721875&view=diff
==============================================================================
--- ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/order/OrderServices.java (original)
+++ ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/order/OrderServices.java Mon Dec 28 05:07:38 2015
@@ -2069,6 +2069,7 @@ public class OrderServices {
fields.put("shipGroupSeqId", shipGroupSeqId);
}
+ OrderReadHelper orh = new OrderReadHelper(delegator, orderId);
List<GenericValue> orderItemShipGroupAssocs = null;
try {
orderItemShipGroupAssocs = EntityQuery.use(delegator).from("OrderItemShipGroupAssoc").where(fields).queryList();
@@ -2081,6 +2082,7 @@ public class OrderServices {
if (orderItemShipGroupAssocs != null) {
for (GenericValue orderItemShipGroupAssoc : orderItemShipGroupAssocs) {
GenericValue orderItem = null;
+ String itemStatus = "ITEM_CANCELLED";
try {
orderItem = orderItemShipGroupAssoc.getRelatedOne("OrderItem", false);
} catch (GenericEntityException e) {
@@ -2106,11 +2108,23 @@ public class OrderServices {
if (availableQuantity == null) availableQuantity = BigDecimal.ZERO;
if (itemQuantity == null) itemQuantity = BigDecimal.ZERO;
+ if ("PURCHASE_ORDER".equals(orh.getOrderTypeId())) {
+ BigDecimal receivedQty = orh.getItemReceivedQuantity(orderItem);
+ if (receivedQty.compareTo(BigDecimal.ZERO) > 0)
+ itemStatus = "ITEM_COMPLETED";
+ itemQuantity = itemQuantity.subtract(receivedQty);
+ } else {
+ BigDecimal shippedQty = orh.getItemShippedQuantity(orderItem);
+ if (shippedQty.compareTo(BigDecimal.ZERO) > 0 )
+ itemStatus = "ITEM_COMPLETED";
+ itemQuantity = itemQuantity.subtract(shippedQty);
+ }
+
BigDecimal thisCancelQty = null;
if (cancelQuantity != null) {
thisCancelQty = cancelQuantity;
} else {
- thisCancelQty = availableQuantity;
+ thisCancelQty = itemQuantity;
}
if (availableQuantity.compareTo(thisCancelQty) >= 0) {
@@ -2182,8 +2196,19 @@ public class OrderServices {
}
if (thisCancelQty.compareTo(itemQuantity) >= 0) {
+ if ("ITEM_COMPLETED".equals(itemStatus) && "SALES_ORDER".equals(orh.getOrderTypeId())) {
+ //If partial item shipped then release remaining inventory of SO item and marked SO item as completed.
+ Map<String, Object> cancelOrderItemInvResCtx = UtilMisc.toMap("orderId", orderId, "orderItemSeqId", orderItem.getString("orderItemSeqId"), "shipGroupSeqId",
+ shipGroupSeqId, "cancelQuantity", thisCancelQty, "userLogin", userLogin);
+ try {
+ dispatcher.runSyncIgnore("cancelOrderItemInvResQty", cancelOrderItemInvResCtx);
+ } catch (GenericServiceException e) {
+ Debug.logError(e, module);
+ return ServiceUtil.returnError(UtilProperties.getMessage(resource_error,"OrderUnableToUpdateInventoryReservations", UtilMisc.toMap("itemMsgInfo",itemMsgInfo), locale));
+ }
+ }
// all items are cancelled -- mark the item as cancelled
- Map<String, Object> statusCtx = UtilMisc.<String, Object>toMap("orderId", orderId, "orderItemSeqId", orderItem.getString("orderItemSeqId"), "statusId", "ITEM_CANCELLED", "userLogin", userLogin);
+ Map<String, Object> statusCtx = UtilMisc.<String, Object>toMap("orderId", orderId, "orderItemSeqId", orderItem.getString("orderItemSeqId"), "statusId", itemStatus, "userLogin", userLogin);
try {
dispatcher.runSyncIgnore("changeOrderItemStatus", statusCtx);
} catch (GenericServiceException e) {
Modified: ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartEvents.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartEvents.java?rev=1721875&r1=1721874&r2=1721875&view=diff
==============================================================================
--- ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartEvents.java (original)
+++ ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartEvents.java Mon Dec 28 05:07:38 2015
@@ -1454,11 +1454,12 @@ public class ShoppingCartEvents {
Delegator delegator = (Delegator) request.getAttribute("delegator");
String orderId = request.getParameter("orderId");
+ String createAsNewOrder = request.getParameter("createAsNewOrder");
ShoppingCart cart = null;
try {
Map<String, Object> outMap = dispatcher.runSync("loadCartFromOrder",
- UtilMisc.<String, Object>toMap("orderId", orderId,
+ UtilMisc.<String, Object>toMap("orderId", orderId, "createAsNewOrder", createAsNewOrder,
"skipProductChecks", Boolean.TRUE, // the products have already been checked in the order, no need to check their validity again
"userLogin", userLogin));
if (!ServiceUtil.isSuccess(outMap)) {
Modified: ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartServices.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartServices.java?rev=1721875&r1=1721874&r2=1721875&view=diff
==============================================================================
--- ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartServices.java (original)
+++ ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartServices.java Mon Dec 28 05:07:38 2015
@@ -168,6 +168,8 @@ public class ShoppingCartServices {
Boolean skipProductChecks = (Boolean) context.get("skipProductChecks");
boolean includePromoItems = Boolean.TRUE.equals(context.get("includePromoItems"));
Locale locale = (Locale) context.get("locale");
+ //FIXME: deepak:Personally I don't like the idea of passing flag but for orderItem quantity calculation we need this flag.
+ String createAsNewOrder = (String) context.get("createAsNewOrder");
if (UtilValidate.isEmpty(skipInventoryChecks)) {
skipInventoryChecks = Boolean.FALSE;
@@ -397,7 +399,13 @@ public class ShoppingCartServices {
if (amount == null) {
amount = BigDecimal.ZERO;
}
- BigDecimal quantity = item.getBigDecimal("quantity");
+ //BigDecimal quantity = item.getBigDecimal("quantity");
+ BigDecimal quantity = BigDecimal.ZERO;
+ if("ITEM_COMPLETED".equals(item.getString("statusId")) && "N".equals(createAsNewOrder)) {
+ quantity = item.getBigDecimal("quantity");
+ } else {
+ quantity = OrderReadHelper.getOrderItemQuantity(item);
+ }
if (quantity == null) {
quantity = BigDecimal.ZERO;
}