📄 orderservices.java
字号:
/** Service for checking and re-calc the shipping amount */
public static Map recalcOrderShipping(DispatchContext ctx, Map context) {
GenericDelegator delegator = ctx.getDelegator();
String orderId = (String) context.get("orderId");
GenericValue userLogin = (GenericValue) context.get("userLogin");
// check and make sure we have permission to change the order
Security security = ctx.getSecurity();
if (!security.hasEntityPermission("ORDERMGR", "_UPDATE", userLogin)) {
GenericValue placingCustomer = null;
try {
Map placingCustomerFields = UtilMisc.toMap("orderId", orderId, "partyId", userLogin.getString("partyId"), "roleTypeId", "PLACING_CUSTOMER");
placingCustomer = delegator.findByPrimaryKey("OrderRole", placingCustomerFields);
} catch (GenericEntityException e) {
return ServiceUtil.returnError("ERROR: Cannot get OrderRole entity: " + e.getMessage());
}
if (placingCustomer == null)
return ServiceUtil.returnError("You do not have permission to change this order's status.");
}
// get the order header
GenericValue orderHeader = null;
try {
orderHeader = delegator.findByPrimaryKey("OrderHeader", UtilMisc.toMap("orderId", orderId));
} catch (GenericEntityException e) {
return ServiceUtil.returnError("ERROR: Cannot get OrderHeader entity: " + e.getMessage());
}
if (orderHeader == null) {
return ServiceUtil.returnError("ERROR: No valid order header found for orderId : " + orderId);
}
OrderReadHelper orh = new OrderReadHelper(orderHeader);
if (Debug.verboseOn()) {
Debug.logVerbose("Shippable Total : " + orh.getShippableTotal(), module);
}
Map shippingEstMap = ShippingEvents.getShipEstimate(delegator, orh);
Double shippingTotal = null;
if (orh.getValidOrderItems() == null || orh.getValidOrderItems().size() == 0) {
shippingTotal = new Double(0.00);
} else {
shippingTotal = (Double) shippingEstMap.get("shippingTotal");
}
if (Debug.verboseOn()) {
Debug.logVerbose("New Shipping Total : " + shippingTotal, module);
}
double currentShipping = OrderReadHelper.getAllOrderItemsAdjustmentsTotal(orh.getOrderItems(), orh.getAdjustments(), false, false, true);
currentShipping += OrderReadHelper.calcOrderAdjustments(orh.getOrderHeaderAdjustments(), orh.getOrderItemsSubTotal(), false, false, true);
if (Debug.verboseOn()) {
Debug.log("Old Shipping Total : " + currentShipping);
}
List errorMessageList = (List) shippingEstMap.get(ModelService.ERROR_MESSAGE_LIST);
if (errorMessageList != null) {
return ServiceUtil.returnError(errorMessageList);
}
if (shippingTotal.doubleValue() != currentShipping) {
// place the difference as a new shipping adjustment
Double adjustmentAmount = new Double(shippingTotal.doubleValue() - currentShipping);
String adjSeqId = delegator.getNextSeqId("OrderAdjustment").toString();
GenericValue orderAdjustment = delegator.makeValue("OrderAdjustment", UtilMisc.toMap("orderAdjustmentId", adjSeqId));
orderAdjustment.set("orderAdjustmentTypeId", "SHIPPING_CHARGES");
orderAdjustment.set("amount", adjustmentAmount);
orderAdjustment.set("orderId", orh.getOrderId());
orderAdjustment.set("orderItemSeqId", DataModelConstants.SEQ_ID_NA);
//orderAdjustment.set("comments", "Shipping Re-Calc Adjustment");
try {
orderAdjustment.create();
} catch (GenericEntityException e) {
Debug.logError(e, "Problem creating shipping re-calc adjustment : " + orderAdjustment, module);
return ServiceUtil.returnError("ERROR: Cannot create adjustment");
}
}
// TODO: re-balance free shipping adjustment
return ServiceUtil.returnSuccess();
}
/** Service for checking to see if an order is fully completed or canceled */
public static Map checkItemStatus(DispatchContext ctx, Map context) {
GenericDelegator delegator = ctx.getDelegator();
LocalDispatcher dispatcher = ctx.getDispatcher();
GenericValue userLogin = (GenericValue) context.get("userLogin");
String orderId = (String) context.get("orderId");
// check and make sure we have permission to change the order
Security security = ctx.getSecurity();
if (!security.hasEntityPermission("ORDERMGR", "_UPDATE", userLogin)) {
GenericValue placingCustomer = null;
try {
Map placingCustomerFields = UtilMisc.toMap("orderId", orderId, "partyId", userLogin.getString("partyId"), "roleTypeId", "PLACING_CUSTOMER");
placingCustomer = delegator.findByPrimaryKey("OrderRole", placingCustomerFields);
} catch (GenericEntityException e) {
return ServiceUtil.returnError("ERROR: Cannot get OrderRole entity: " + e.getMessage());
}
if (placingCustomer == null)
return ServiceUtil.returnError("You do not have permission to change this order's status.");
}
// get the order header
GenericValue orderHeader = null;
try {
orderHeader = delegator.findByPrimaryKey("OrderHeader", UtilMisc.toMap("orderId", orderId));
} catch (GenericEntityException e) {
Debug.logError(e, "Cannot get OrderHeader record", module);
}
if (orderHeader == null) {
Debug.logError("OrderHeader came back as null", module);
return ServiceUtil.returnError("Cannot update null order header [" + orderId + "]");
}
// get the order items
List orderItems = null;
try {
orderItems = delegator.findByAnd("OrderItem", UtilMisc.toMap("orderId", orderId));
} catch (GenericEntityException e) {
Debug.logError(e, "Cannot get OrderItem records", module);
return ServiceUtil.returnError("Problem getting OrderItem records");
}
boolean allCanceled = true;
boolean allComplete = true;
boolean allApproved = true;
if (orderItems != null) {
Iterator itemIter = orderItems.iterator();
while (itemIter.hasNext()) {
GenericValue item = (GenericValue) itemIter.next();
String statusId = item.getString("statusId");
//Debug.log("Item Status: " + statusId, module);
if (!"ITEM_CANCELLED".equals(statusId)) {
//Debug.log("Not set to cancel", module);
allCanceled = false;
if (!"ITEM_COMPLETED".equals(statusId)) {
//Debug.log("Not set to complete", module);
allComplete = false;
if (!"ITEM_APPROVED".equals(statusId)) {
//Debug.log("Not set to approve", module);
allApproved = false;
break;
}
}
}
}
// find the next status to set to (if any)
String newStatus = null;
if (allCanceled) {
newStatus = "ORDER_CANCELLED";
} else if (allComplete) {
newStatus = "ORDER_COMPLETED";
} else if (allApproved) {
if (!"ORDER_SENT".equals(orderHeader.getString("statusId"))) {
newStatus = "ORDER_APPROVED";
}
}
// now set the new order status
if (newStatus != null) {
Map serviceContext = UtilMisc.toMap("orderId", orderId, "statusId", newStatus, "userLogin", userLogin);
try {
Map result = dispatcher.runSync("changeOrderStatus", serviceContext);
} catch (GenericServiceException e) {
Debug.logError(e, "Problem calling the changeOrderStatus service", module);
}
}
} else {
Debug.logWarning("Received NULL for OrderItem records orderId : " + orderId, module);
}
return ServiceUtil.returnSuccess();
}
/** Service to cancel an order item quantity */
public static Map cancelOrderItem(DispatchContext ctx, Map context) {
LocalDispatcher dispatcher = ctx.getDispatcher();
GenericDelegator delegator = ctx.getDelegator();
GenericValue userLogin = (GenericValue) context.get("userLogin");
Double cancelQuantity = (Double) context.get("cancelQuantity");
String orderId = (String) context.get("orderId");
String orderItemSeqId = (String) context.get("orderItemSeqId");
// debugging message info
String itemMsgInfo = orderId + " / " + orderItemSeqId;
// check and make sure we have permission to change the order
Security security = ctx.getSecurity();
if (!security.hasEntityPermission("ORDERMGR", "_UPDATE", userLogin)) {
GenericValue placingCustomer = null;
try {
Map placingCustomerFields = UtilMisc.toMap("orderId", orderId, "partyId", userLogin.getString("partyId"), "roleTypeId", "PLACING_CUSTOMER");
placingCustomer = delegator.findByPrimaryKey("OrderRole", placingCustomerFields);
} catch (GenericEntityException e) {
Debug.logError(e, module);
return ServiceUtil.returnError("ERROR: Cannot get OrderRole entity: " + itemMsgInfo);
}
if (placingCustomer == null)
return ServiceUtil.returnError("You do not have permission to change this order's status.");
}
Map fields = UtilMisc.toMap("orderId", orderId);
if (orderItemSeqId != null) {
fields.put("orderItemSeqId", orderItemSeqId);
}
List orderItems = null;
try {
orderItems = delegator.findByAnd("OrderItem", fields);
} catch (GenericEntityException e) {
Debug.logError(e, module);
return ServiceUtil.returnError("ERROR: Cannot get OrderItem entity: " + itemMsgInfo);
}
if (orderItems != null && orderItems.size() > 0) {
Iterator itemsIterator = orderItems.iterator();
while (itemsIterator.hasNext()) {
GenericValue orderItem = (GenericValue) itemsIterator.next();
if (orderItem == null) {
ServiceUtil.returnError("ERROR: Cannot cancel item; item not found : " + itemMsgInfo);
}
Double quantity = orderItem.getDouble("quantity");
Double cancelQty = orderItem.getDouble("cancelQuantity");
if (quantity == null) quantity = new Double(0.0);
if (cancelQty == null) cancelQty = new Double(0.0);
Double thisCancelQty = null;
if (cancelQuantity != null) {
thisCancelQty = new Double(cancelQuantity.doubleValue());
} else {
thisCancelQty = new Double(quantity.doubleValue());
}
orderItem.set("cancelQuantity", thisCancelQty);
try {
orderItem.store();
} catch (GenericEntityException e) {
Debug.logError(e, module);
return ServiceUtil.returnError("Unable to set cancel quantity : " + itemMsgInfo);
}
if (thisCancelQty.doubleValue() >= quantity.doubleValue()) {
// all items are cancelled -- mark the item as cancelled
Map statusCtx = UtilMisc.toMap("orderId", orderId, "orderItemSeqId", orderItemSeqId, "statusId", "ITEM_CANCELLED", "userLogin", userLogin);
try {
dispatcher.runSyncIgnore("changeOrderItemStatus", statusCtx);
} catch (GenericServiceException e) {
Debug.logError(e, module);
return ServiceUtil.returnError("Unable to cancel order line : " + itemMsgInfo);
}
} else {
// reverse the inventory reservation
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -