📄 orderreadhelper.java
字号:
public static GenericValue getProductStoreFromOrder(GenericDelegator delegator, String orderId) {
return getProductStoreFromOrder(getOrderHeader(delegator, orderId));
}
public static GenericValue getProductStoreFromOrder(GenericValue orderHeader) {
GenericDelegator delegator = orderHeader.getDelegator();
GenericValue productStore = null;
if (orderHeader != null && orderHeader.get("productStoreId") != null) {
try {
productStore = delegator.findByPrimaryKeyCache("ProductStore", UtilMisc.toMap("productStoreId", orderHeader.getString("productStoreId")));
} catch (GenericEntityException e) {
Debug.logError(e, "Cannot locate ProductStore from OrderHeader", module);
}
} else {
Debug.logError("Null header or productStoreId", module);
}
return productStore;
}
public static double getOrderGrandTotal(List orderItems, List adjustments) {
double total = getOrderItemsTotal(orderItems, adjustments);
double adj = getOrderAdjustmentsTotal(orderItems, adjustments);
return total + adj;
}
public static List getOrderHeaderAdjustments(List adjustments) {
List contraints1 = UtilMisc.toList(new EntityExpr("orderItemSeqId", EntityOperator.EQUALS, null));
List contraints2 = UtilMisc.toList(new EntityExpr("orderItemSeqId", EntityOperator.EQUALS, DataModelConstants.SEQ_ID_NA));
List contraints3 = UtilMisc.toList(new EntityExpr("orderItemSeqId", EntityOperator.EQUALS, ""));
List adj = new LinkedList();
adj.addAll(EntityUtil.filterByAnd(adjustments, contraints1));
adj.addAll(EntityUtil.filterByAnd(adjustments, contraints2));
adj.addAll(EntityUtil.filterByAnd(adjustments, contraints3));
return adj;
}
public static List getOrderHeaderStatuses(List orderStatuses) {
List contraints1 = UtilMisc.toList(new EntityExpr("orderItemSeqId", EntityOperator.EQUALS, null));
List contraints2 = UtilMisc.toList(new EntityExpr("orderItemSeqId", EntityOperator.EQUALS, DataModelConstants.SEQ_ID_NA));
List contraints3 = UtilMisc.toList(new EntityExpr("orderItemSeqId", EntityOperator.EQUALS, ""));
List newOrderStatuses = new LinkedList();
newOrderStatuses.addAll(EntityUtil.filterByAnd(orderStatuses, contraints1));
newOrderStatuses.addAll(EntityUtil.filterByAnd(orderStatuses, contraints2));
newOrderStatuses.addAll(EntityUtil.filterByAnd(orderStatuses, contraints3));
newOrderStatuses = EntityUtil.orderBy(newOrderStatuses, UtilMisc.toList("statusDatetime"));
return newOrderStatuses;
}
public static double getOrderAdjustmentsTotal(List orderItems, List adjustments) {
return calcOrderAdjustments(getOrderHeaderAdjustments(adjustments), getOrderItemsSubTotal(orderItems, adjustments), true, true, true);
}
// ================= Order Adjustments =================
public static double calcOrderAdjustments(List orderHeaderAdjustments, double subTotal, boolean includeOther, boolean includeTax, boolean includeShipping) {
double adjTotal = 0.0;
if (orderHeaderAdjustments != null && orderHeaderAdjustments.size() > 0) {
List filteredAdjs = filterOrderAdjustments(orderHeaderAdjustments, includeOther, includeTax, includeShipping, false, false);
Iterator adjIt = filteredAdjs.iterator();
while (adjIt.hasNext()) {
GenericValue orderAdjustment = (GenericValue) adjIt.next();
adjTotal += OrderReadHelper.calcOrderAdjustment(orderAdjustment, subTotal);
}
}
return adjTotal;
}
public static double calcOrderAdjustment(GenericValue orderAdjustment, double orderSubTotal) {
double adjustment = 0.0;
if (orderAdjustment.get("amount") != null) {
adjustment += orderAdjustment.getDouble("amount").doubleValue();
}
if (orderAdjustment.get("percentage") != null) {
adjustment += (orderAdjustment.getDouble("percentage").doubleValue() * orderSubTotal);
}
return adjustment;
}
// ================= Order Item Adjustments =================
public static double getOrderItemsSubTotal(List orderItems, List adjustments) {
double result = 0.0;
Iterator itemIter = UtilMisc.toIterator(orderItems);
while (itemIter != null && itemIter.hasNext()) {
GenericValue orderItem = (GenericValue) itemIter.next();
double itemTotal = getOrderItemSubTotal(orderItem, adjustments);
//Debug.log("Item : " + orderItem.getString("orderId") + " / " + orderItem.getString("orderItemSeqId") + " = " + itemTotal, module);
result += itemTotal;
}
return result;
}
/** The passed adjustments can be all adjustments for the order, ie for all line items */
public static double getOrderItemSubTotal(GenericValue orderItem, List adjustments) {
return getOrderItemSubTotal(orderItem, adjustments, false, false);
}
/** The passed adjustments can be all adjustments for the order, ie for all line items */
public static double getOrderItemSubTotal(GenericValue orderItem, List adjustments, boolean forTax, boolean forShipping) {
Double unitPrice = orderItem.getDouble("unitPrice");
Double quantity = getOrderItemQuantity(orderItem);
double result = 0.0;
if (unitPrice == null || quantity == null) {
Debug.logWarning("[getOrderItemTotal] unitPrice or quantity are null, using 0 for the item base price", module);
} else {
if (Debug.verboseOn()) Debug.logVerbose("Unit Price : " + unitPrice.doubleValue() + " / " + "Quantity : " + quantity.doubleValue(), module);
result = unitPrice.doubleValue() * quantity.doubleValue();
}
// subtotal also includes non tax and shipping adjustments; tax and shipping will be calculated using this adjusted value
result += getOrderItemAdjustmentsTotal(orderItem, adjustments, true, false, false, forTax, forShipping);
return result;
}
public static double getOrderItemsTotal(List orderItems, List adjustments) {
double result = 0.0;
Iterator itemIter = UtilMisc.toIterator(orderItems);
while (itemIter != null && itemIter.hasNext()) {
result += getOrderItemTotal((GenericValue) itemIter.next(), adjustments);
}
return result;
}
public static double getOrderItemTotal(GenericValue orderItem, List adjustments) {
// add tax and shipping to subtotal
return (getOrderItemSubTotal(orderItem, adjustments) + getOrderItemAdjustmentsTotal(orderItem, adjustments, false, true, true));
}
public static double getAllOrderItemsAdjustmentsTotal(List orderItems, List adjustments, boolean includeOther, boolean includeTax, boolean includeShipping) {
double result = 0.0;
Iterator itemIter = UtilMisc.toIterator(orderItems);
while (itemIter != null && itemIter.hasNext()) {
result += getOrderItemAdjustmentsTotal((GenericValue) itemIter.next(), adjustments, includeOther, includeTax, includeShipping);
}
return result;
}
/** The passed adjustments can be all adjustments for the order, ie for all line items */
public static double getOrderItemAdjustmentsTotal(GenericValue orderItem, List adjustments, boolean includeOther, boolean includeTax, boolean includeShipping) {
return getOrderItemAdjustmentsTotal(orderItem, adjustments, includeOther, includeTax, includeShipping, false, false);
}
/** The passed adjustments can be all adjustments for the order, ie for all line items */
public static double getOrderItemAdjustmentsTotal(GenericValue orderItem, List adjustments, boolean includeOther, boolean includeTax, boolean includeShipping, boolean forTax, boolean forShipping) {
return calcItemAdjustments(getOrderItemQuantity(orderItem), orderItem.getDouble("unitPrice"),
getOrderItemAdjustmentList(orderItem, adjustments),
includeOther, includeTax, includeShipping, false, false);
}
public static List getOrderItemAdjustmentList(GenericValue orderItem, List adjustments) {
return EntityUtil.filterByAnd(adjustments, UtilMisc.toMap("orderItemSeqId", orderItem.get("orderItemSeqId")));
}
public static List getOrderItemStatuses(GenericValue orderItem, List orderStatuses) {
return EntityUtil.filterByAnd(orderStatuses, UtilMisc.toMap("orderItemSeqId", orderItem.get("orderItemSeqId")));
}
// Order Item Adjs Utility Methods
public static double calcItemAdjustments(Double quantity, Double unitPrice, List adjustments, boolean includeOther, boolean includeTax, boolean includeShipping, boolean forTax, boolean forShipping) {
double adjTotal = 0.0;
if (adjustments != null && adjustments.size() > 0) {
List filteredAdjs = filterOrderAdjustments(adjustments, includeOther, includeTax, includeShipping, forTax, forShipping);
Iterator adjIt = filteredAdjs.iterator();
while (adjIt.hasNext()) {
GenericValue orderAdjustment = (GenericValue) adjIt.next();
adjTotal += OrderReadHelper.calcItemAdjustment(orderAdjustment, quantity, unitPrice);
}
}
return adjTotal;
}
public static double calcItemAdjustment(GenericValue itemAdjustment, GenericValue item) {
return calcItemAdjustment(itemAdjustment, getOrderItemQuantity(item), item.getDouble("unitPrice"));
}
public static double calcItemAdjustment(GenericValue itemAdjustment, Double quantity, Double unitPrice) {
double adjustment = 0.0;
if (itemAdjustment.get("amount") != null) {
adjustment += itemAdjustment.getDouble("amount").doubleValue();
}
if (itemAdjustment.get("amountPerQuantity") != null && quantity != null) {
adjustment += itemAdjustment.getDouble("amountPerQuantity").doubleValue() * quantity.doubleValue();
}
if (itemAdjustment.get("percentage") != null && unitPrice != null) {
adjustment += (itemAdjustment.getDouble("percentage").doubleValue() * unitPrice.doubleValue());
}
if (Debug.verboseOn())
Debug.logVerbose("calcItemAdjustment: " + itemAdjustment + ", quantity=" + quantity + ", unitPrice=" + unitPrice + ", adjustment=" + adjustment, module);
return adjustment;
}
public static List filterOrderAdjustments(List adjustments, boolean includeOther, boolean includeTax, boolean includeShipping, boolean forTax, boolean forShipping) {
List newOrderAdjustmentsList = new LinkedList();
if (adjustments != null && adjustments.size() > 0) {
Iterator adjIt = adjustments.iterator();
while (adjIt.hasNext()) {
GenericValue orderAdjustment = (GenericValue) adjIt.next();
boolean includeAdjustment = false;
if ("SALES_TAX".equals(orderAdjustment.getString("orderAdjustmentTypeId"))) {
if (includeTax) includeAdjustment = true;
} else if ("SHIPPING_CHARGES".equals(orderAdjustment.getString("orderAdjustmentTypeId"))) {
if (includeShipping) includeAdjustment = true;
} else {
if (includeOther) includeAdjustment = true;
}
// default to yes, include for shipping; so only exclude if includeInShipping is N, or false; if Y or null or anything else it will be included
if (forTax && "N".equals(orderAdjustment.getString("includeInTax"))) {
includeAdjustment = false;
}
// default to yes, include for shipping; so only exclude if includeInShipping is N, or false; if Y or null or anything else it will be included
if (forShipping && "N".equals(orderAdjustment.getString("includeInShipping"))) {
includeAdjustment = false;
}
if (includeAdjustment) {
newOrderAdjustmentsList.add(orderAdjustment);
}
}
}
return newOrderAdjustmentsList;
}
/**
* Checks to see if this user has read permission on the specified order
* @param userLogin The UserLogin value object to check
* @param orderHeader The OrderHeader for the specified order
* @return boolean True if we have read permission
*/
public static boolean hasPermission(Security security, GenericValue userLogin, GenericValue orderHeader) {
if (userLogin == null || orderHeader == null)
return false;
if (security.hasEntityPermission("ORDERMGR", "_VIEW", userLogin)) {
return true;
} else if (security.hasEntityPermission("ORDERMGR", "_ROLEVIEW", userLogin)) {
List orderRoles = null;
try {
orderRoles = orderHeader.getRelatedByAnd("OrderRole",
UtilMisc.toMap("partyId", userLogin.getString("partyId")));
} catch (GenericEntityException e) {
Debug.logError(e, "Cannot get OrderRole from OrderHeader", module);
}
if (orderRoles.size() > 0) {
// we are in at least one role
return true;
}
}
return false;
}
public static OrderReadHelper getHelper(GenericValue orderHeader) {
return new OrderReadHelper(orderHeader);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -