📄 orderreturnservices.java
字号:
return ServiceUtil.returnError(errorMsg, null, null, serviceResults); } if (Debug.verboseOn()) { Debug.logInfo("Created PaymentApplication for response with amountApplied " + amountApplied.toString(), module); } } } } catch (GenericServiceException e) { Debug.logError(e, errorMsg + e.getMessage(), module); return ServiceUtil.returnError(errorMsg + e.getMessage()); } catch (GenericEntityException e) { Debug.logError(e, errorMsg + e.getMessage(), module); return ServiceUtil.returnError(errorMsg + e.getMessage()); } return ServiceUtil.returnSuccess(); } // replacement return (create new order adjusted to be at no charge) public static Map processReplacementReturn(DispatchContext dctx, Map context) { LocalDispatcher dispatcher = dctx.getDispatcher(); GenericDelegator delegator = dctx.getDelegator(); String returnId = (String) context.get("returnId"); GenericValue userLogin = (GenericValue) context.get("userLogin"); Locale locale = (Locale) context.get("locale"); GenericValue returnHeader = null; List returnItems = null; try { returnHeader = delegator.findByPrimaryKey("ReturnHeader", UtilMisc.toMap("returnId", returnId)); if (returnHeader != null) { returnItems = returnHeader.getRelatedByAnd("ReturnItem", UtilMisc.toMap("returnTypeId", "RTN_REPLACE")); } } catch (GenericEntityException e) { Debug.logError(e, "Problems looking up return information", module); return ServiceUtil.returnError(UtilProperties.getMessage(resource_error,"OrderErrorGettingReturnHeaderItemInformation", locale)); } List createdOrderIds = new ArrayList(); if (returnHeader != null && returnItems != null && returnItems.size() > 0) { Map itemsByOrder = new HashMap(); Map totalByOrder = new HashMap(); groupReturnItemsByOrder(returnItems, itemsByOrder, totalByOrder, delegator, returnId); // process each one by order Set itemSet = itemsByOrder.entrySet(); Iterator itemByOrderIt = itemSet.iterator(); while (itemByOrderIt.hasNext()) { Map.Entry entry = (Map.Entry) itemByOrderIt.next(); String orderId = (String) entry.getKey(); List items = (List) entry.getValue(); // get order header & payment prefs GenericValue orderHeader = null; try { orderHeader = delegator.findByPrimaryKey("OrderHeader", UtilMisc.toMap("orderId", orderId)); } catch (GenericEntityException e) { Debug.logError(e, "Cannot get Order details for #" + orderId, module); continue; } OrderReadHelper orh = new OrderReadHelper(orderHeader); // create the replacement order Map orderMap = UtilMisc.toMap("userLogin", userLogin); GenericValue placingParty = orh.getPlacingParty(); String placingPartyId = null; if (placingParty != null) { placingPartyId = placingParty.getString("partyId"); } orderMap.put("orderTypeId", "SALES_ORDER"); orderMap.put("partyId", placingPartyId); orderMap.put("productStoreId", orderHeader.get("productStoreId")); orderMap.put("webSiteId", orderHeader.get("webSiteId")); orderMap.put("visitId", orderHeader.get("visitId")); orderMap.put("currencyUom", orderHeader.get("currencyUom")); orderMap.put("grandTotal", new Double(0.00)); // make the contact mechs List contactMechs = new ArrayList(); List orderCm = null; try { orderCm = orderHeader.getRelated("OrderContactMech"); } catch (GenericEntityException e) { Debug.logError(e, module); } if (orderCm != null) { Iterator orderCmi = orderCm.iterator(); while (orderCmi.hasNext()) { GenericValue v = (GenericValue) orderCmi.next(); contactMechs.add(GenericValue.create(v)); } orderMap.put("orderContactMechs", contactMechs); } // make the shipment prefs List shipmentPrefs = new ArrayList(); List orderSp = null; try { orderSp = orderHeader.getRelated("OrderShipmentPreference"); } catch (GenericEntityException e) { Debug.logError(e, module); } if (orderSp != null) { Iterator orderSpi = orderSp.iterator(); while (orderSpi.hasNext()) { GenericValue v = (GenericValue) orderSpi.next(); shipmentPrefs.add(GenericValue.create(v)); } orderMap.put("orderShipmentPreferences", shipmentPrefs); } // make the order items double itemTotal = 0.00; List orderItems = new ArrayList(); if (items != null) { Iterator ri = items.iterator(); int itemCount = 1; while (ri.hasNext()) { GenericValue returnItem = (GenericValue) ri.next(); GenericValue orderItem = null; try { orderItem = returnItem.getRelatedOne("OrderItem"); } catch (GenericEntityException e) { Debug.logError(e, module); continue; } if (orderItem != null) { Double quantity = returnItem.getDouble("returnQuantity"); Double unitPrice = returnItem.getDouble("returnPrice"); if (quantity != null && unitPrice != null) { itemTotal = (quantity.doubleValue() * unitPrice.doubleValue()); GenericValue newItem = delegator.makeValue("OrderItem", UtilMisc.toMap("orderItemSeqId", new Integer(itemCount).toString())); newItem.set("orderItemTypeId", orderItem.get("orderItemTypeId")); newItem.set("productId", orderItem.get("productId")); newItem.set("productFeatureId", orderItem.get("productFeatureId")); newItem.set("prodCatalogId", orderItem.get("prodCatalogId")); newItem.set("productCategoryId", orderItem.get("productCategoryId")); newItem.set("quantity", quantity); newItem.set("unitPrice", unitPrice); newItem.set("unitListPrice", orderItem.get("unitListPrice")); newItem.set("itemDescription", orderItem.get("itemDescription")); newItem.set("comments", orderItem.get("comments")); newItem.set("correspondingPoId", orderItem.get("correspondingPoId")); newItem.set("statusId", "ITEM_CREATED"); orderItems.add(newItem); } } } orderMap.put("orderItems", orderItems); } else { Debug.logError("No return items found??", module); continue; } // create the replacement adjustment GenericValue adj = delegator.makeValue("OrderAdjustment", new HashMap()); adj.set("orderAdjustmentTypeId", "REPLACE_ADJUSTMENT"); adj.set("amount", new Double(itemTotal * -1)); adj.set("comments", "Replacement Item Return #" + returnId); adj.set("createdDate", UtilDateTime.nowTimestamp()); adj.set("createdByUserLogin", userLogin.getString("userLoginId")); orderMap.put("orderAdjustments", UtilMisc.toList(adj)); // we'll assume new order is under same terms as original. note orderTerms is a required parameter of storeOrder try { orderMap.put("orderTerms", orderHeader.getRelated("OrderTerm")); } catch (GenericEntityException e) { Debug.logError(e, "Cannot create replacement order because order terms for original order is not available", module); } // create the order String createdOrderId = null; Map orderResult = null; try { orderResult = dispatcher.runSync("storeOrder", orderMap); } catch (GenericServiceException e) { Debug.logInfo(e, "Problem creating the order!", module); } if (orderResult != null) { createdOrderId = (String) orderResult.get("orderId"); createdOrderIds.add(createdOrderId); } // since there is no payments required; order is ready for processing/shipment if (createdOrderId != null) { OrderChangeHelper.approveOrder(dispatcher, userLogin, createdOrderId); } } } StringBuffer successMessage = new StringBuffer(); if (createdOrderIds.size() > 0) { successMessage.append("The following new orders have been created : "); Iterator i = createdOrderIds.iterator(); while (i.hasNext()) { successMessage.append(i.next()); if (i.hasNext()) { successMessage.append(", "); } } } else { successMessage.append("No orders were created."); } return ServiceUtil.returnSuccess(successMessage.toString()); } /** * Takes a List of returnItems and returns a Map of orderId -> items and a Map of orderId -> orderTotal * @param returnItems * @param itemsByOrder * @param totalByOrder * @param delegator * @param returnId */ public static void groupReturnItemsByOrder(List returnItems, Map itemsByOrder, Map totalByOrder, GenericDelegator delegator, String returnId) { Iterator itemIt = returnItems.iterator(); while (itemIt.hasNext()) { GenericValue item = (GenericValue) itemIt.next(); String orderId = item.getString("orderId"); if (orderId != null) { if (itemsByOrder != null) { List orderList = (List) itemsByOrder.get(orderId); Double totalForOrder = null; if (totalByOrder != null) { totalForOrder = (Double) totalByOrder.get(orderId); } if (orderList == null) { orderList = new ArrayList(); } if (totalForOrder == null) { totalForOrder = new Double(0.00); } // add to the items list orderList.add(item); itemsByOrder.put(orderId, orderList); if (totalByOrder != null) { // add on the total for this line Double quantity = item.getDouble("returnQuantity");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -