You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by bi...@apache.org on 2008/05/12 11:36:04 UTC
svn commit: r655452 - in /ofbiz/trunk/applications/order:
data/OrderTypeData.xml entitydef/entitygroup.xml entitydef/entitymodel.xml
script/org/ofbiz/order/order/OrderServices.xml servicedef/services.xml
src/org/ofbiz/order/order/OrderServices.java
Author: bibryam
Date: Mon May 12 02:36:04 2008
New Revision: 655452
URL: http://svn.apache.org/viewvc?rev=655452&view=rev
Log:
"Store Order Item changes" from Jira Issue OFBIZ-1773
Modified:
ofbiz/trunk/applications/order/data/OrderTypeData.xml
ofbiz/trunk/applications/order/entitydef/entitygroup.xml
ofbiz/trunk/applications/order/entitydef/entitymodel.xml
ofbiz/trunk/applications/order/script/org/ofbiz/order/order/OrderServices.xml
ofbiz/trunk/applications/order/servicedef/services.xml
ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java
Modified: ofbiz/trunk/applications/order/data/OrderTypeData.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/data/OrderTypeData.xml?rev=655452&r1=655451&r2=655452&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/data/OrderTypeData.xml (original)
+++ ofbiz/trunk/applications/order/data/OrderTypeData.xml Mon May 12 02:36:04 2008
@@ -79,6 +79,12 @@
<Enumeration description="Affiliate Channel" enumCode="AFFIL_CHANNEL" enumId="AFFIL_SALES_CHANNEL" sequenceId="07" enumTypeId="ORDER_SALES_CHANNEL"/>
<Enumeration description="eBay Channel" enumCode="EBAY_CHANNEL" enumId="EBAY_SALES_CHANNEL" sequenceId="08" enumTypeId="ORDER_SALES_CHANNEL"/>
<Enumeration description="Unknown Channel" enumCode="UNKOWN_CAHNNEL" enumId="UNKNWN_SALES_CHANNEL" sequenceId="99" enumTypeId="ORDER_SALES_CHANNEL"/>
+ <EnumerationType description="Order Item Change Type" enumTypeId="ODR_ITM_CHANGE_TYPE" hasTable="N" parentTypeId=""/>
+ <Enumeration description="Order Item Update" enumCode="ITM_UPDATE" enumId="ODR_ITM_UPDATE" sequenceId="01" enumTypeId="ODR_ITM_CHANGE_TYPE"/>
+ <Enumeration description="Order Item Cancel" enumCode="ITM_CANCEL" enumId="ODR_ITM_CANCEL" sequenceId="02" enumTypeId="ODR_ITM_CHANGE_TYPE"/>
+ <EnumerationType description="Order Item Change Reason" enumTypeId="ODR_ITM_CH_REASON" hasTable="N" parentTypeId=""/>
+ <Enumeration description="Mis-Ordered Item" enumCode="MISORDER" enumId="OICR_MISORDER_ITEM" sequenceId="01" enumTypeId="ODR_ITM_CH_REASON"/>
+ <Enumeration description="Customer Changed Mind" enumCode="CHANGE_MIND" enumId="OICR_CUST_CHMIND" sequenceId="02" enumTypeId="ODR_ITM_CH_REASON"/>
<QuoteType description="Other" hasTable="N" parentTypeId="" quoteTypeId="OTHER_QUOTE"/>
<QuoteType description="Product" hasTable="N" parentTypeId="" quoteTypeId="PRODUCT_QUOTE"/>
Modified: ofbiz/trunk/applications/order/entitydef/entitygroup.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/entitydef/entitygroup.xml?rev=655452&r1=655451&r2=655452&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/entitydef/entitygroup.xml (original)
+++ ofbiz/trunk/applications/order/entitydef/entitygroup.xml Mon May 12 02:36:04 2008
@@ -64,6 +64,7 @@
<entity-group group="org.ofbiz" entity="OrderItemAssocType" />
<entity-group group="org.ofbiz" entity="OrderItemAttribute" />
<entity-group group="org.ofbiz" entity="OrderItemBilling" />
+ <entity-group group="org.ofbiz" entity="OrderItemChange" />
<entity-group group="org.ofbiz" entity="OrderItemContactMech" />
<entity-group group="org.ofbiz" entity="OrderItemGroup" />
<entity-group group="org.ofbiz" entity="OrderItemShipGrpInvRes" />
Modified: ofbiz/trunk/applications/order/entitydef/entitymodel.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/entitydef/entitymodel.xml?rev=655452&r1=655451&r2=655452&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/entitydef/entitymodel.xml (original)
+++ ofbiz/trunk/applications/order/entitydef/entitymodel.xml Mon May 12 02:36:04 2008
@@ -652,6 +652,40 @@
<key-map field-name="itemIssuanceId"/>
</relation>
</entity>
+ <entity entity-name="OrderItemChange"
+ package-name="org.ofbiz.order.order"
+ never-cache="true"
+ title="Order Item Change Entity">
+ <field name="orderItemChangeId" type="id-ne"></field>
+ <field name="orderId" type="id-ne"></field>
+ <field name="orderItemSeqId" type="id-ne"></field>
+ <field name="changeTypeEnumId" type="id"></field>
+ <field name="changeDatetime" type="date-time"></field>
+ <field name="changeUserLogin" type="id-vlong"></field>
+ <field name="quantity" type="floating-point"></field>
+ <field name="cancelQuantity" type="floating-point"></field>
+ <field name="unitPrice" type="currency-amount"></field>
+ <field name="itemDescription" type="description"></field>
+ <field name="reasonEnumId" type="id"></field>
+ <field name="changeComments" type="comment"></field>
+ <prim-key field="orderItemChangeId"/>
+ <relation type="one-nofk" rel-entity-name="OrderHeader">
+ <key-map field-name="orderId"/>
+ </relation>
+ <relation type="one" fk-name="ORDER_ITCH_OITM" rel-entity-name="OrderItem">
+ <key-map field-name="orderId"/>
+ <key-map field-name="orderItemSeqId"/>
+ </relation>
+ <relation type="one" fk-name="ORDER_ITCH_TYPE" rel-entity-name="Enumeration">
+ <key-map field-name="changeTypeEnumId" rel-field-name="enumId"/>
+ </relation>
+ <relation type="one" fk-name="ORDER_ITCH_REAS" title="Reason" rel-entity-name="Enumeration">
+ <key-map field-name="reasonEnumId" rel-field-name="enumId"/>
+ </relation>
+ <relation type="one" fk-name="ORDER_ITCH_USER" rel-entity-name="UserLogin">
+ <key-map field-name="changeUserLogin" rel-field-name="userLoginId"/>
+ </relation>
+ </entity>
<entity entity-name="OrderItemContactMech"
package-name="org.ofbiz.order.order"
never-cache="true"
Modified: ofbiz/trunk/applications/order/script/org/ofbiz/order/order/OrderServices.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/script/org/ofbiz/order/order/OrderServices.xml?rev=655452&r1=655451&r2=655452&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/script/org/ofbiz/order/order/OrderServices.xml (original)
+++ ofbiz/trunk/applications/order/script/org/ofbiz/order/order/OrderServices.xml Mon May 12 02:36:04 2008
@@ -882,4 +882,19 @@
</if-empty>
<field-to-result field-name="isBackOrder" result-name="isBackOrder"/>
</simple-method>
+
+ <simple-method method-name="createOrderItemChange" short-description="Creates a new Order Item Change record">
+ <make-value value-name="newEntity" entity-name="OrderItemChange"/>
+ <set-nonpk-fields map-name="parameters" value-name="newEntity"/>
+ <if-empty field-name="parameters.changeDatetime">
+ <now-timestamp-to-env env-name="nowTimestamp"/>
+ <set field="newEntity.changeDatetime" from-field="nowTimestamp"/>
+ </if-empty>
+ <if-empty field-name="parameters.changeUserLogin">
+ <set field="newEntity.changeUserLogin" from-field="userLogin.userLoginId"/>
+ </if-empty>
+ <sequenced-id-to-env sequence-name="OrderItemChange" env-name="newEntity.orderItemChangeId"/>
+ <create-value value-name="newEntity"/>
+ <field-to-result field-name="newEntity.orderItemChangeId" result-name="orderItemChangeId"/>
+ </simple-method>
</simple-methods>
Modified: ofbiz/trunk/applications/order/servicedef/services.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/servicedef/services.xml?rev=655452&r1=655451&r2=655452&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/servicedef/services.xml (original)
+++ ofbiz/trunk/applications/order/servicedef/services.xml Mon May 12 02:36:04 2008
@@ -823,4 +823,14 @@
<attribute name="orderPaymentPreferenceId" type="String" mode="IN" optional="false"/>
<attribute name="changeReason" type="String" mode="IN" optional="true"/>
</service>
+
+ <service name="createOrderItemChange" engine="simple" auth="true" default-entity-name="OrderItemChange"
+ location="org/ofbiz/order/order/OrderServices.xml" invoke="createOrderItemChange">
+ <description>Creates a new OrderItemChange record</description>
+ <auto-attributes mode="OUT" include="pk" optional="false"/>
+ <auto-attributes mode="IN" include="nonpk" optional="true"/>
+ <override name="orderId" optional="false"/>
+ <override name="orderItemSeqId" optional="false"/>
+ <override name="changeTypeEnumId" optional="false"/>
+ </service>
</services>
Modified: ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java?rev=655452&r1=655451&r2=655452&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java (original)
+++ ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java Mon May 12 02:36:04 2008
@@ -1858,6 +1858,9 @@
}
if (availableQuantity.doubleValue() >= thisCancelQty.doubleValue()) {
+ if (availableQuantity.doubleValue() == 0) {
+ return ServiceUtil.returnSuccess(); //item already canceled
+ }
orderItem.set("cancelQuantity", Double.valueOf(itemCancelQuantity.doubleValue() + thisCancelQty.doubleValue()));
orderItemShipGroupAssoc.set("cancelQuantity", Double.valueOf(aisgaCancelQuantity.doubleValue() + thisCancelQty.doubleValue()));
@@ -1868,6 +1871,24 @@
Debug.logError(e, module);
return ServiceUtil.returnError(UtilProperties.getMessage(resource_error,"OrderUnableToSetCancelQuantity", UtilMisc.toMap("itemMsgInfo",itemMsgInfo), locale));
}
+
+ // create order item change record
+ Map serviceCtx = FastMap.newInstance();
+ serviceCtx.put("orderId", orderItem.getString("orderId"));
+ serviceCtx.put("orderItemSeqId", orderItem.getString("orderItemSeqId"));
+ serviceCtx.put("cancelQuantity", thisCancelQty);
+ serviceCtx.put("changeTypeEnumId", "ODR_ITM_CANCEL");
+ serviceCtx.put("userLogin", userLogin);
+ Map resp = null;
+ try {
+ resp = dispatcher.runSync("createOrderItemChange", serviceCtx);
+ } catch (GenericServiceException e) {
+ Debug.logError(e, module);
+ return ServiceUtil.returnError(e.getMessage());
+ }
+ if (ServiceUtil.isError(resp)) {
+ return ServiceUtil.returnError((String)resp.get(ModelService.ERROR_MESSAGE));
+ }
if (thisCancelQty.doubleValue() >= itemQuantity.doubleValue()) {
// all items are cancelled -- mark the item as cancelled
@@ -3534,6 +3555,7 @@
}
// get the new orderItems, adjustments, shipping info and payments from the cart
+ List<GenericValue> modifiedItems = FastList.newInstance();
List toStore = new LinkedList();
toStore.addAll(cart.makeOrderItems());
toStore.addAll(cart.makeAllAdjustments());
@@ -3571,7 +3593,47 @@
if (valueObj.get("statusId") == null) {
valueObj.set("statusId", "PAYMENT_NOT_RECEIVED");
}
- }
+ } else if ("OrderItem".equals(valueObj.getEntityName())) {
+ GenericValue oldOrderItem = null;
+ try {
+ oldOrderItem = delegator.findByPrimaryKey("OrderItem", UtilMisc.toMap("orderId", valueObj.getString("orderId"), "orderItemSeqId", valueObj.getString("orderItemSeqId")));
+ } catch (GenericEntityException e) {
+ Debug.logError(e, module);
+ throw new GeneralException(e.getMessage());
+ }
+ if (UtilValidate.isNotEmpty(oldOrderItem)) {
+
+ // Existing order item found. Check for modifications and store if any
+ String oldItemDescription = oldOrderItem.getString("itemDescription") != null ? oldOrderItem.getString("itemDescription") : "";
+ Double oldQuantity = oldOrderItem.getDouble("quantity") != null ? oldOrderItem.getDouble("quantity") : Double.valueOf(0.00);
+ Double oldUnitPrice = oldOrderItem.getDouble("unitPrice") != null ? oldOrderItem.getDouble("unitPrice") : Double.valueOf(0.00);
+
+ boolean changeFound = false;
+ if (oldItemDescription.equals(valueObj.getString("itemDescription"))) {
+ oldOrderItem.remove("itemDescription");
+ } else {
+ changeFound = true;
+ }
+
+ Double quantityDif = Double.valueOf(valueObj.getDouble("quantity").doubleValue() - oldQuantity.doubleValue());
+ Double unitPriceDif = Double.valueOf(valueObj.getDouble("unitPrice").doubleValue() - oldUnitPrice.doubleValue());
+ if (quantityDif.doubleValue() == 0) {
+ oldOrderItem.remove("quantity");
+ } else {
+ oldOrderItem.set("quantity", quantityDif);
+ changeFound = true;
+ }
+ if (unitPriceDif.doubleValue() == 0) {
+ oldOrderItem.remove("unitPrice");
+ } else {
+ oldOrderItem.set("unitPrice", unitPriceDif);
+ changeFound = true;
+ }
+ if (changeFound) {
+ modifiedItems.add(oldOrderItem);
+ }
+ }
+ }
}
Debug.log("To Store Contains: " + toStore, module);
@@ -3583,6 +3645,30 @@
throw new GeneralException(e.getMessage());
}
+ //store the orderItem changes
+ if (UtilValidate.isNotEmpty(modifiedItems)) {
+ for (GenericValue oldItemValues : modifiedItems) {
+ Map serviceCtx = FastMap.newInstance();
+ serviceCtx.put("orderId", oldItemValues.getString("orderId"));
+ serviceCtx.put("orderItemSeqId", oldItemValues.getString("orderItemSeqId"));
+ serviceCtx.put("itemDescription", oldItemValues.getString("itemDescription"));
+ serviceCtx.put("quantity", oldItemValues.getDouble("quantity"));
+ serviceCtx.put("unitPrice", oldItemValues.getDouble("unitPrice"));
+ serviceCtx.put("changeTypeEnumId", "ODR_ITM_UPDATE");
+ serviceCtx.put("userLogin", userLogin);
+ Map resp = null;
+ try {
+ resp = dispatcher.runSync("createOrderItemChange", serviceCtx);
+ } catch (GenericServiceException e) {
+ Debug.logError(e, module);
+ throw new GeneralException(e.getMessage());
+ }
+ if (ServiceUtil.isError(resp)) {
+ throw new GeneralException((String) resp.get(ModelService.ERROR_MESSAGE));
+ }
+ }
+ }
+
// make the order item object map & the ship group assoc list
List orderItemShipGroupAssoc = new LinkedList();
Map itemValuesBySeqId = new HashMap();