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();


Reply via email to