Author: jonesde
Date: Fri Aug 24 06:49:21 2007
New Revision: 569386
URL: http://svn.apache.org/viewvc?rev=569386&view=rev
Log:
A bit of refactoring, but mostly implemented feature only previously implied to
save the replacementOrderId on ReturnItemResponse, and attach to relevant
ReturnItems
Modified:
ofbiz/trunk/applications/order/entitydef/entitymodel.xml
ofbiz/trunk/applications/order/servicedef/services_return.xml
ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReturnServices.java
Modified: ofbiz/trunk/applications/order/entitydef/entitymodel.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/entitydef/entitymodel.xml?rev=569386&r1=569385&r2=569386&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/entitydef/entitymodel.xml (original)
+++ ofbiz/trunk/applications/order/entitydef/entitymodel.xml Fri Aug 24
06:49:21 2007
@@ -2346,7 +2346,7 @@
<relation type="one" fk-name="RTN_PAY_ORDPAYPF"
rel-entity-name="OrderPaymentPreference">
<key-map field-name="orderPaymentPreferenceId"/>
</relation>
- <relation type="one" fk-name="RTN_RESP_NEWORD"
rel-entity-name="OrderHeader">
+ <relation type="one" fk-name="RTN_RESP_NEWORD" title="Replacement"
rel-entity-name="OrderHeader">
<key-map field-name="replacementOrderId" rel-field-name="orderId"/>
</relation>
<relation type="one" fk-name="RTN_PAY_PAYMENT"
rel-entity-name="Payment">
Modified: ofbiz/trunk/applications/order/servicedef/services_return.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/servicedef/services_return.xml?rev=569386&r1=569385&r2=569386&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/servicedef/services_return.xml (original)
+++ ofbiz/trunk/applications/order/servicedef/services_return.xml Fri Aug 24
06:49:21 2007
@@ -107,8 +107,8 @@
</service>
<service name="createPaymentApplicationsFromReturnItemResponse"
engine="java"
location="org.ofbiz.order.order.OrderReturnServices"
invoke="createPaymentApplicationsFromReturnItemResponse">
- <description>Creates PaymentApplications for each return item
billing related to the return response until the responseAmount is reached or
- all items are paid.</description>
+ <description>Creates PaymentApplications for each return item
billing related to the return response until
+ the responseAmount is reached or all items are
paid.</description>
<attribute name="returnItemResponseId" type="String" mode="IN"
optional="false"/>
</service>
<service name="cancelReturnItems" engine="simple"
Modified:
ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReturnServices.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReturnServices.java?rev=569386&r1=569385&r2=569386&view=diff
==============================================================================
---
ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReturnServices.java
(original)
+++
ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReturnServices.java
Fri Aug 24 06:49:21 2007
@@ -1338,6 +1338,7 @@
String returnTypeId = (String) context.get("returnTypeId");
GenericValue userLogin = (GenericValue) context.get("userLogin");
Locale locale = (Locale) context.get("locale");
+ Timestamp nowTimestamp = UtilDateTime.nowTimestamp();
GenericValue returnHeader = null;
List returnItems = null;
@@ -1353,17 +1354,17 @@
List createdOrderIds = new ArrayList();
if (returnHeader != null && returnItems != null && returnItems.size()
> 0) {
- Map itemsByOrder = new HashMap();
+ Map returnItemsByOrderId = new HashMap();
Map totalByOrder = new HashMap();
- groupReturnItemsByOrder(returnItems, itemsByOrder, totalByOrder,
delegator, returnId, returnTypeId);
+ groupReturnItemsByOrder(returnItems, returnItemsByOrderId,
totalByOrder, delegator, returnId, returnTypeId);
// process each one by order
- Set itemSet = itemsByOrder.entrySet();
- Iterator itemByOrderIt = itemSet.iterator();
- while (itemByOrderIt.hasNext()) {
- Map.Entry entry = (Map.Entry) itemByOrderIt.next();
+ Set returnItemsByOrderIdEntrySet = returnItemsByOrderId.entrySet();
+ Iterator returnItemsByOrderIdEntryIter =
returnItemsByOrderIdEntrySet.iterator();
+ while (returnItemsByOrderIdEntryIter.hasNext()) {
+ Map.Entry entry = (Map.Entry)
returnItemsByOrderIdEntryIter.next();
String orderId = (String) entry.getKey();
- List items = (List) entry.getValue();
+ List returnItemList = (List) entry.getValue();
// get order header & payment prefs
GenericValue orderHeader = null;
@@ -1430,17 +1431,17 @@
*/
// make the order items
- double itemTotal = 0.00;
+ double orderPriceTotal = 0.00;
double additionalItemTotal = 0.00;
List orderItems = new ArrayList();
List orderItemShipGroupInfo = new ArrayList();
List orderItemShipGroupIds = new ArrayList(); // this is used
to store the ship group ids of the groups already added to the
orderItemShipGroupInfo list
List orderItemAssocs = new ArrayList();
- if (items != null) {
- Iterator ri = items.iterator();
+ if (returnItemList != null) {
+ Iterator returnItemIter = returnItemList.iterator();
int itemCount = 1;
- while (ri.hasNext()) {
- GenericValue returnItem = (GenericValue) ri.next();
+ while (returnItemIter.hasNext()) {
+ GenericValue returnItem = (GenericValue)
returnItemIter.next();
GenericValue orderItem = null;
GenericValue product = null;
try {
@@ -1454,7 +1455,7 @@
Double quantity =
returnItem.getDouble("returnQuantity");
Double unitPrice =
returnItem.getDouble("returnPrice");
if (quantity != null && unitPrice != null) {
- itemTotal = itemTotal +
(quantity.doubleValue() * unitPrice.doubleValue());
+ orderPriceTotal += (quantity.doubleValue() *
unitPrice.doubleValue());
// Check if the product being returned has a
Refurbished Equivalent and if so
// (and there is inventory for the assoc
product) use that product instead
GenericValue refurbItem = null;
@@ -1546,8 +1547,7 @@
try {
if (UtilValidate.isNotEmpty(product)) {
repairItems =
EntityUtil.filterByDate(product.getRelated("MainProductAssoc",
-
UtilMisc.toMap("productAssocTypeId",
"PRODUCT_REPAIR_SRV"),
-
UtilMisc.toList("sequenceNum")));
+
UtilMisc.toMap("productAssocTypeId", "PRODUCT_REPAIR_SRV"),
UtilMisc.toList("sequenceNum")));
}
} catch (GenericEntityException e) {
Debug.logError(e, module);
@@ -1650,11 +1650,11 @@
}
// create the replacement adjustment
- GenericValue adj = delegator.makeValue("OrderAdjustment", new
HashMap());
+ GenericValue adj = delegator.makeValue("OrderAdjustment",
null);
adj.set("orderAdjustmentTypeId", "REPLACE_ADJUSTMENT");
- adj.set("amount", new Double(itemTotal * -1));
+ adj.set("amount", new Double(orderPriceTotal * -1));
adj.set("comments", "Replacement Item Return #" + returnId);
- adj.set("createdDate", UtilDateTime.nowTimestamp());
+ adj.set("createdDate", nowTimestamp);
adj.set("createdByUserLogin",
userLogin.getString("userLoginId"));
orderMap.put("orderAdjustments", UtilMisc.toList(adj));
@@ -1733,10 +1733,49 @@
// since there is no payments required; order is ready for
processing/shipment
if (createdOrderId != null) {
OrderChangeHelper.approveOrder(dispatcher, userLogin,
createdOrderId);
+
+ // create a ReturnItemResponse and attach to each
ReturnItem
+ Map itemResponse = FastMap.newInstance();
+ itemResponse.put("replacementOrderId", createdOrderId);
+ itemResponse.put("responseAmount", new
Double(orderPriceTotal));
+ itemResponse.put("responseDate", nowTimestamp);
+ itemResponse.put("userLogin", userLogin);
+ String returnItemResponseId = null;
+ try {
+ Map createReturnItemResponseResult =
dispatcher.runSync("createReturnItemResponse", itemResponse);
+ if
(ServiceUtil.isError(createReturnItemResponseResult)) {
+ return ServiceUtil.returnError("Could not create
ReturnItemResponse record", null, null, createReturnItemResponseResult);
+ }
+ returnItemResponseId = (String)
createReturnItemResponseResult.get("returnItemResponseId");
+ } catch (GenericServiceException e) {
+ Debug.logError(e, "Problem creating ReturnItemResponse
record", module);
+ return
ServiceUtil.returnError(UtilProperties.getMessage(resource_error,"OrderProblemCreatingReturnItemResponseRecord",
locale));
+ }
+
+ Iterator updateReturnItemIter = returnItemList.iterator();
+ while (updateReturnItemIter.hasNext()) {
+ GenericValue returnItem = (GenericValue)
updateReturnItemIter.next();
+ Map updateReturnItemCtx = FastMap.newInstance();
+ updateReturnItemCtx.put("returnId", returnId);
+ updateReturnItemCtx.put("returnItemSeqId",
returnItem.get("returnItemSeqId"));
+ updateReturnItemCtx.put("returnItemResponseId",
returnItemResponseId);
+ updateReturnItemCtx.put("userLogin", userLogin);
+ try {
+ Map updateReturnItemResult =
dispatcher.runSync("updateReturnItem", updateReturnItemCtx);
+ if (ServiceUtil.isError(updateReturnItemResult)) {
+ return ServiceUtil.returnError("Could not
update ReturnItem record", null, null, updateReturnItemResult);
+ }
+ } catch (GenericServiceException e) {
+ String errMsg = "Could not update ReturnItem
record";
+ Debug.logError(e, errMsg, module);
+ return ServiceUtil.returnError(errMsg);
+ }
+ }
}
}
}
+ // create a return message AND create ReturnItemResponse record(s)
StringBuffer successMessage = new StringBuffer();
if (createdOrderIds.size() > 0) {
successMessage.append("The following new orders have been created
: ");
@@ -1818,33 +1857,34 @@
* @param delegator
* @param returnId
*/
- public static void groupReturnItemsByOrder(List returnItems, Map
itemsByOrder, Map totalByOrder, GenericDelegator delegator, String returnId,
String returnTypeId) {
+ public static void groupReturnItemsByOrder(List returnItems, Map
returnItemsByOrderId, Map totalByOrder, GenericDelegator delegator, String
returnId, String returnTypeId) {
Iterator itemIt = returnItems.iterator();
while (itemIt.hasNext()) {
- GenericValue item = (GenericValue) itemIt.next();
- String orderId = item.getString("orderId");
+ GenericValue returnItem = (GenericValue) itemIt.next();
+ String orderId = returnItem.getString("orderId");
if (orderId != null) {
- if (itemsByOrder != null) {
- List orderList = (List) itemsByOrder.get(orderId);
+ if (returnItemsByOrderId != null) {
Double totalForOrder = null;
if (totalByOrder != null) {
totalForOrder = (Double) totalByOrder.get(orderId);
}
- if (orderList == null) {
- orderList = new ArrayList();
+
+ List returnItemList = (List)
returnItemsByOrderId.get(orderId);
+ if (returnItemList == null) {
+ returnItemList = new ArrayList();
}
if (totalForOrder == null) {
totalForOrder = new Double(0.00);
}
// add to the items list
- orderList.add(item);
- itemsByOrder.put(orderId, orderList);
+ returnItemList.add(returnItem);
+ returnItemsByOrderId.put(orderId, returnItemList);
if (totalByOrder != null) {
// add on the total for this line
- Double quantity = item.getDouble("returnQuantity");
- Double amount = item.getDouble("returnPrice");
+ Double quantity =
returnItem.getDouble("returnQuantity");
+ Double amount = returnItem.getDouble("returnPrice");
if (quantity == null) {
quantity = new Double(0);
}
@@ -1853,7 +1893,7 @@
}
double thisTotal = amount.doubleValue() *
quantity.doubleValue();
double existingTotal = totalForOrder.doubleValue();
- Map condition = UtilMisc.toMap("returnId",
item.get("returnId"), "returnItemSeqId", item.get("returnItemSeqId"));
+ Map condition = UtilMisc.toMap("returnId",
returnItem.get("returnId"), "returnItemSeqId",
returnItem.get("returnItemSeqId"));
Double newTotal = new Double(existingTotal + thisTotal
+ getReturnAdjustmentTotal(delegator, condition) );
totalByOrder.put(orderId, newTotal);
}