blob: c69aa3e2090e2eef805da363242c6ae40c692f6e [file] [log] [blame]
/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
*/
package org.apache.ofbiz.order.order;
import java.math.BigDecimal;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import org.apache.ofbiz.base.util.Debug;
import org.apache.ofbiz.base.util.GeneralException;
import org.apache.ofbiz.base.util.ObjectType;
import org.apache.ofbiz.base.util.StringUtil;
import org.apache.ofbiz.base.util.UtilGenerics;
import org.apache.ofbiz.base.util.UtilMisc;
import org.apache.ofbiz.base.util.UtilProperties;
import org.apache.ofbiz.base.util.UtilValidate;
import org.apache.ofbiz.base.util.collections.PagedList;
import org.apache.ofbiz.entity.Delegator;
import org.apache.ofbiz.entity.GenericEntityException;
import org.apache.ofbiz.entity.GenericValue;
import org.apache.ofbiz.entity.condition.EntityComparisonOperator;
import org.apache.ofbiz.entity.condition.EntityCondition;
import org.apache.ofbiz.entity.condition.EntityConditionList;
import org.apache.ofbiz.entity.condition.EntityExpr;
import org.apache.ofbiz.entity.condition.EntityOperator;
import org.apache.ofbiz.entity.model.DynamicViewEntity;
import org.apache.ofbiz.entity.model.ModelKeyMap;
import org.apache.ofbiz.entity.util.EntityQuery;
import org.apache.ofbiz.security.Security;
import org.apache.ofbiz.service.DispatchContext;
import org.apache.ofbiz.service.GenericServiceException;
import org.apache.ofbiz.service.LocalDispatcher;
import org.apache.ofbiz.service.ServiceUtil;
import org.apache.ofbiz.widget.renderer.Paginator;
/**
* OrderLookupServices
*/
public class OrderLookupServices {
public static final String module = OrderLookupServices.class.getName();
public static Map<String, Object> findOrders(DispatchContext dctx, Map<String, ? extends Object> context) {
LocalDispatcher dispatcher = dctx.getDispatcher();
Delegator delegator = dctx.getDelegator();
Security security = dctx.getSecurity();
GenericValue userLogin = (GenericValue) context.get("userLogin");
Integer viewIndex = Paginator.getViewIndex(context, "viewIndex", 1);
Integer viewSize = Paginator.getViewSize(context, "viewSize");
String showAll = (String) context.get("showAll");
String useEntryDate = (String) context.get("useEntryDate");
Locale locale = (Locale) context.get("locale");
if (showAll == null) {
showAll = "N";
}
// list of fields to select (initial list)
Set<String> fieldsToSelect = new LinkedHashSet<String>();
fieldsToSelect.add("orderId");
fieldsToSelect.add("orderName");
fieldsToSelect.add("statusId");
fieldsToSelect.add("orderTypeId");
fieldsToSelect.add("orderDate");
fieldsToSelect.add("currencyUom");
fieldsToSelect.add("grandTotal");
fieldsToSelect.add("remainingSubTotal");
// sorting by order date newest first
List<String> orderBy = UtilMisc.toList("-orderDate", "-orderId");
// list to hold the parameters
List<String> paramList = new LinkedList<String>();
// list of conditions
List<EntityCondition> conditions = new LinkedList<EntityCondition>();
// check security flag for purchase orders
boolean canViewPo = security.hasEntityPermission("ORDERMGR", "_PURCHASE_VIEW", userLogin);
if (!canViewPo) {
conditions.add(EntityCondition.makeCondition("orderTypeId", EntityOperator.NOT_EQUAL, "PURCHASE_ORDER"));
}
// dynamic view entity
DynamicViewEntity dve = new DynamicViewEntity();
dve.addMemberEntity("OH", "OrderHeader");
dve.addAliasAll("OH", "", null); // no prefix
dve.addRelation("one-nofk", "", "OrderType", UtilMisc.toList(new ModelKeyMap("orderTypeId", "orderTypeId")));
dve.addRelation("one-nofk", "", "StatusItem", UtilMisc.toList(new ModelKeyMap("statusId", "statusId")));
// start the lookup
String orderId = (String) context.get("orderId");
if (UtilValidate.isNotEmpty(orderId)) {
paramList.add("orderId=" + orderId);
conditions.add(makeExpr("orderId", orderId));
}
// the base order header fields
List<String> orderTypeList = UtilGenerics.checkList(context.get("orderTypeId"));
if (orderTypeList != null) {
List<EntityExpr> orExprs = new LinkedList<EntityExpr>();
for (String orderTypeId : orderTypeList) {
paramList.add("orderTypeId=" + orderTypeId);
if (!"PURCHASE_ORDER".equals(orderTypeId) || ("PURCHASE_ORDER".equals(orderTypeId) && canViewPo)) {
orExprs.add(EntityCondition.makeCondition("orderTypeId", EntityOperator.EQUALS, orderTypeId));
}
}
conditions.add(EntityCondition.makeCondition(orExprs, EntityOperator.OR));
}
String orderName = (String) context.get("orderName");
if (UtilValidate.isNotEmpty(orderName)) {
paramList.add("orderName=" + orderName);
conditions.add(makeExpr("orderName", orderName, true));
}
List<String> orderStatusList = UtilGenerics.checkList(context.get("orderStatusId"));
if (orderStatusList != null) {
List<EntityCondition> orExprs = new LinkedList<EntityCondition>();
for (String orderStatusId : orderStatusList) {
paramList.add("orderStatusId=" + orderStatusId);
if ("PENDING".equals(orderStatusId)) {
List<EntityExpr> pendExprs = new LinkedList<EntityExpr>();
pendExprs.add(EntityCondition.makeCondition("statusId", EntityOperator.EQUALS, "ORDER_CREATED"));
pendExprs.add(EntityCondition.makeCondition("statusId", EntityOperator.EQUALS, "ORDER_PROCESSING"));
pendExprs.add(EntityCondition.makeCondition("statusId", EntityOperator.EQUALS, "ORDER_APPROVED"));
orExprs.add(EntityCondition.makeCondition(pendExprs, EntityOperator.OR));
} else {
orExprs.add(EntityCondition.makeCondition("statusId", EntityOperator.EQUALS, orderStatusId));
}
}
conditions.add(EntityCondition.makeCondition(orExprs, EntityOperator.OR));
}
List<String> productStoreList = UtilGenerics.checkList(context.get("productStoreId"));
if (productStoreList != null) {
List<EntityExpr> orExprs = new LinkedList<EntityExpr>();
for (String productStoreId : productStoreList) {
paramList.add("productStoreId=" + productStoreId);
orExprs.add(EntityCondition.makeCondition("productStoreId", EntityOperator.EQUALS, productStoreId));
}
conditions.add(EntityCondition.makeCondition(orExprs, EntityOperator.OR));
}
List<String> webSiteList = UtilGenerics.checkList(context.get("orderWebSiteId"));
if (webSiteList != null) {
List<EntityExpr> orExprs = new LinkedList<EntityExpr>();
for (String webSiteId : webSiteList) {
paramList.add("webSiteId=" + webSiteId);
orExprs.add(EntityCondition.makeCondition("webSiteId", EntityOperator.EQUALS, webSiteId));
}
conditions.add(EntityCondition.makeCondition(orExprs, EntityOperator.OR));
}
List<String> saleChannelList = UtilGenerics.checkList(context.get("salesChannelEnumId"));
if (saleChannelList != null) {
List<EntityExpr> orExprs = new LinkedList<EntityExpr>();
for (String salesChannelEnumId : saleChannelList) {
paramList.add("salesChannelEnumId=" + salesChannelEnumId);
orExprs.add(EntityCondition.makeCondition("salesChannelEnumId", EntityOperator.EQUALS, salesChannelEnumId));
}
conditions.add(EntityCondition.makeCondition(orExprs, EntityOperator.OR));
}
String createdBy = (String) context.get("createdBy");
if (UtilValidate.isNotEmpty(createdBy)) {
paramList.add("createdBy=" + createdBy);
conditions.add(makeExpr("createdBy", createdBy));
}
String terminalId = (String) context.get("terminalId");
if (UtilValidate.isNotEmpty(terminalId)) {
paramList.add("terminalId=" + terminalId);
conditions.add(makeExpr("terminalId", terminalId));
}
String transactionId = (String) context.get("transactionId");
if (UtilValidate.isNotEmpty(transactionId)) {
paramList.add("transactionId=" + transactionId);
conditions.add(makeExpr("transactionId", transactionId));
}
String externalId = (String) context.get("externalId");
if (UtilValidate.isNotEmpty(externalId)) {
paramList.add("externalId=" + externalId);
conditions.add(makeExpr("externalId", externalId));
}
String internalCode = (String) context.get("internalCode");
if (UtilValidate.isNotEmpty(internalCode)) {
paramList.add("internalCode=" + internalCode);
conditions.add(makeExpr("internalCode", internalCode));
}
String dateField = "Y".equals(useEntryDate) ? "entryDate" : "orderDate";
String minDate = (String) context.get("minDate");
if (UtilValidate.isNotEmpty(minDate) && minDate.length() > 8) {
minDate = minDate.trim();
if (minDate.length() < 14) minDate = minDate + " " + "00:00:00.000";
paramList.add("minDate=" + minDate);
try {
Object converted = ObjectType.simpleTypeConvert(minDate, "Timestamp", null, null);
if (converted != null) {
conditions.add(EntityCondition.makeCondition(dateField, EntityOperator.GREATER_THAN_EQUAL_TO, converted));
}
} catch (GeneralException e) {
Debug.logWarning(e.getMessage(), module);
}
}
String maxDate = (String) context.get("maxDate");
if (UtilValidate.isNotEmpty(maxDate) && maxDate.length() > 8) {
maxDate = maxDate.trim();
if (maxDate.length() < 14) maxDate = maxDate + " " + "23:59:59.999";
paramList.add("maxDate=" + maxDate);
try {
Object converted = ObjectType.simpleTypeConvert(maxDate, "Timestamp", null, null);
if (converted != null) {
conditions.add(EntityCondition.makeCondition("orderDate", EntityOperator.LESS_THAN_EQUAL_TO, converted));
}
} catch (GeneralException e) {
Debug.logWarning(e.getMessage(), module);
}
}
// party (role) fields
String userLoginId = (String) context.get("userLoginId");
String partyId = (String) context.get("partyId");
List<String> roleTypeList = UtilGenerics.checkList(context.get("roleTypeId"));
if (UtilValidate.isNotEmpty(userLoginId) && UtilValidate.isEmpty(partyId)) {
GenericValue ul = null;
try {
ul = EntityQuery.use(delegator).from("UserLogin").where("userLoginId", userLoginId).cache().queryOne();
} catch (GenericEntityException e) {
Debug.logWarning(e.getMessage(), module);
}
if (ul != null) {
partyId = ul.getString("partyId");
}
}
String isViewed = (String) context.get("isViewed");
if (UtilValidate.isNotEmpty(isViewed)) {
paramList.add("isViewed=" + isViewed);
conditions.add(makeExpr("isViewed", isViewed));
}
// Shipment Method
String shipmentMethod = (String) context.get("shipmentMethod");
if (UtilValidate.isNotEmpty(shipmentMethod)) {
String carrierPartyId = shipmentMethod.substring(0, shipmentMethod.indexOf("@"));
String ShippingMethodTypeId = shipmentMethod.substring(shipmentMethod.indexOf("@")+1);
dve.addMemberEntity("OISG", "OrderItemShipGroup");
dve.addAlias("OISG", "shipmentMethodTypeId");
dve.addAlias("OISG", "carrierPartyId");
dve.addViewLink("OH", "OISG", Boolean.FALSE, UtilMisc.toList(new ModelKeyMap("orderId", "orderId")));
if (UtilValidate.isNotEmpty(carrierPartyId)) {
paramList.add("carrierPartyId=" + carrierPartyId);
conditions.add(makeExpr("carrierPartyId", carrierPartyId));
}
if (UtilValidate.isNotEmpty(ShippingMethodTypeId)) {
paramList.add("ShippingMethodTypeId=" + ShippingMethodTypeId);
conditions.add(makeExpr("shipmentMethodTypeId", ShippingMethodTypeId));
}
}
// PaymentGatewayResponse
String gatewayAvsResult = (String) context.get("gatewayAvsResult");
String gatewayScoreResult = (String) context.get("gatewayScoreResult");
if (UtilValidate.isNotEmpty(gatewayAvsResult) || UtilValidate.isNotEmpty(gatewayScoreResult)) {
dve.addMemberEntity("OPP", "OrderPaymentPreference");
dve.addMemberEntity("PGR", "PaymentGatewayResponse");
dve.addAlias("OPP", "orderPaymentPreferenceId");
dve.addAlias("PGR", "gatewayAvsResult");
dve.addAlias("PGR", "gatewayScoreResult");
dve.addViewLink("OH", "OPP", Boolean.FALSE, UtilMisc.toList(new ModelKeyMap("orderId", "orderId")));
dve.addViewLink("OPP", "PGR", Boolean.FALSE, UtilMisc.toList(new ModelKeyMap("orderPaymentPreferenceId", "orderPaymentPreferenceId")));
}
if (UtilValidate.isNotEmpty(gatewayAvsResult)) {
paramList.add("gatewayAvsResult=" + gatewayAvsResult);
conditions.add(EntityCondition.makeCondition("gatewayAvsResult", gatewayAvsResult));
}
if (UtilValidate.isNotEmpty(gatewayScoreResult)) {
paramList.add("gatewayScoreResult=" + gatewayScoreResult);
conditions.add(EntityCondition.makeCondition("gatewayScoreResult", gatewayScoreResult));
}
// add the role data to the view
if (roleTypeList != null || partyId != null) {
dve.addMemberEntity("OT", "OrderRole");
dve.addAlias("OT", "partyId");
dve.addAlias("OT", "roleTypeId");
dve.addViewLink("OH", "OT", Boolean.FALSE, UtilMisc.toList(new ModelKeyMap("orderId", "orderId")));
}
if (UtilValidate.isNotEmpty(partyId)) {
paramList.add("partyId=" + partyId);
fieldsToSelect.add("partyId");
conditions.add(makeExpr("partyId", partyId));
}
if (roleTypeList != null) {
fieldsToSelect.add("roleTypeId");
List<EntityExpr> orExprs = new LinkedList<EntityExpr>();
for (String roleTypeId : roleTypeList) {
paramList.add("roleTypeId=" + roleTypeId);
orExprs.add(makeExpr("roleTypeId", roleTypeId));
}
conditions.add(EntityCondition.makeCondition(orExprs, EntityOperator.OR));
}
// order item fields
String correspondingPoId = (String) context.get("correspondingPoId");
String subscriptionId = (String) context.get("subscriptionId");
String productId = (String) context.get("productId");
String budgetId = (String) context.get("budgetId");
String quoteId = (String) context.get("quoteId");
String goodIdentificationTypeId = (String) context.get("goodIdentificationTypeId");
String goodIdentificationIdValue = (String) context.get("goodIdentificationIdValue");
boolean hasGoodIdentification = UtilValidate.isNotEmpty(goodIdentificationTypeId) && UtilValidate.isNotEmpty(goodIdentificationIdValue);
if (correspondingPoId != null || subscriptionId != null || productId != null || budgetId != null || quoteId != null || hasGoodIdentification) {
dve.addMemberEntity("OI", "OrderItem");
dve.addAlias("OI", "correspondingPoId");
dve.addAlias("OI", "subscriptionId");
dve.addAlias("OI", "productId");
dve.addAlias("OI", "budgetId");
dve.addAlias("OI", "quoteId");
dve.addViewLink("OH", "OI", Boolean.FALSE, UtilMisc.toList(new ModelKeyMap("orderId", "orderId")));
if (hasGoodIdentification) {
dve.addMemberEntity("GOODID", "GoodIdentification");
dve.addAlias("GOODID", "goodIdentificationTypeId");
dve.addAlias("GOODID", "idValue");
dve.addViewLink("OI", "GOODID", Boolean.FALSE, UtilMisc.toList(new ModelKeyMap("productId", "productId")));
paramList.add("goodIdentificationTypeId=" + goodIdentificationTypeId);
conditions.add(makeExpr("goodIdentificationTypeId", goodIdentificationTypeId));
paramList.add("goodIdentificationIdValue=" + goodIdentificationIdValue);
conditions.add(makeExpr("idValue", goodIdentificationIdValue));
}
}
if (UtilValidate.isNotEmpty(correspondingPoId)) {
paramList.add("correspondingPoId=" + correspondingPoId);
conditions.add(makeExpr("correspondingPoId", correspondingPoId));
}
if (UtilValidate.isNotEmpty(subscriptionId)) {
paramList.add("subscriptionId=" + subscriptionId);
conditions.add(makeExpr("subscriptionId", subscriptionId));
}
if (UtilValidate.isNotEmpty(productId)) {
paramList.add("productId=" + productId);
if (productId.startsWith("%") || productId.startsWith("*") || productId.endsWith("%") || productId.endsWith("*")) {
conditions.add(makeExpr("productId", productId));
} else {
GenericValue product = null;
try {
product = EntityQuery.use(delegator).from("Product").where("productId", productId).queryOne();
} catch (GenericEntityException e) {
Debug.logWarning(e.getMessage(), module);
}
if (product != null) {
String isVirtual = product.getString("isVirtual");
if (isVirtual != null && "Y".equals(isVirtual)) {
List<EntityExpr> orExprs = new LinkedList<EntityExpr>();
orExprs.add(EntityCondition.makeCondition("productId", EntityOperator.EQUALS, productId));
Map<String, Object> varLookup = null;
try {
varLookup = dispatcher.runSync("getAllProductVariants", UtilMisc.toMap("productId", productId));
} catch (GenericServiceException e) {
Debug.logWarning(e.getMessage(), module);
}
List<GenericValue> variants = UtilGenerics.checkList(varLookup.get("assocProducts"));
if (variants != null) {
for (GenericValue v : variants) {
orExprs.add(EntityCondition.makeCondition("productId", EntityOperator.EQUALS, v.getString("productIdTo")));
}
}
conditions.add(EntityCondition.makeCondition(orExprs, EntityOperator.OR));
} else {
conditions.add(EntityCondition.makeCondition("productId", EntityOperator.EQUALS, productId));
}
} else {
String failMsg = UtilProperties.getMessage("OrderErrorUiLabels", "OrderFindOrderProductInvalid", UtilMisc.toMap("productId", productId), locale);
return ServiceUtil.returnFailure(failMsg);
}
}
}
if (UtilValidate.isNotEmpty(budgetId)) {
paramList.add("budgetId=" + budgetId);
conditions.add(makeExpr("budgetId", budgetId));
}
if (UtilValidate.isNotEmpty(quoteId)) {
paramList.add("quoteId=" + quoteId);
conditions.add(makeExpr("quoteId", quoteId));
}
// payment preference fields
String billingAccountId = (String) context.get("billingAccountId");
String finAccountId = (String) context.get("finAccountId");
String cardNumber = (String) context.get("cardNumber");
String accountNumber = (String) context.get("accountNumber");
String paymentStatusId = (String) context.get("paymentStatusId");
if (UtilValidate.isNotEmpty(paymentStatusId)) {
paramList.add("paymentStatusId=" + paymentStatusId);
conditions.add(makeExpr("paymentStatusId", paymentStatusId));
}
if (finAccountId != null || cardNumber != null || accountNumber != null || paymentStatusId != null) {
dve.addMemberEntity("OP", "OrderPaymentPreference");
dve.addAlias("OP", "finAccountId");
dve.addAlias("OP", "paymentMethodId");
dve.addAlias("OP", "paymentStatusId", "statusId", null, false, false, null);
dve.addViewLink("OH", "OP", Boolean.FALSE, UtilMisc.toList(new ModelKeyMap("orderId", "orderId")));
}
// search by billing account ID
if (UtilValidate.isNotEmpty(billingAccountId)) {
paramList.add("billingAccountId=" + billingAccountId);
conditions.add(makeExpr("billingAccountId", billingAccountId));
}
// search by fin account ID
if (UtilValidate.isNotEmpty(finAccountId)) {
paramList.add("finAccountId=" + finAccountId);
conditions.add(makeExpr("finAccountId", finAccountId));
}
// search by card number
if (UtilValidate.isNotEmpty(cardNumber)) {
dve.addMemberEntity("CC", "CreditCard");
dve.addAlias("CC", "cardNumber");
dve.addViewLink("OP", "CC", Boolean.FALSE, UtilMisc.toList(new ModelKeyMap("paymentMethodId", "paymentMethodId")));
paramList.add("cardNumber=" + cardNumber);
conditions.add(makeExpr("cardNumber", cardNumber));
}
// search by eft account number
if (UtilValidate.isNotEmpty(accountNumber)) {
dve.addMemberEntity("EF", "EftAccount");
dve.addAlias("EF", "accountNumber");
dve.addViewLink("OP", "EF", Boolean.FALSE, UtilMisc.toList(new ModelKeyMap("paymentMethodId", "paymentMethodId")));
paramList.add("accountNumber=" + accountNumber);
conditions.add(makeExpr("accountNumber", accountNumber));
}
// shipment/inventory item
String inventoryItemId = (String) context.get("inventoryItemId");
String softIdentifier = (String) context.get("softIdentifier");
String serialNumber = (String) context.get("serialNumber");
String shipmentId = (String) context.get("shipmentId");
if (shipmentId != null || inventoryItemId != null || softIdentifier != null || serialNumber != null) {
dve.addMemberEntity("II", "ItemIssuance");
dve.addAlias("II", "shipmentId");
dve.addAlias("II", "inventoryItemId");
dve.addViewLink("OH", "II", Boolean.FALSE, UtilMisc.toList(new ModelKeyMap("orderId", "orderId")));
if (softIdentifier != null || serialNumber != null) {
dve.addMemberEntity("IV", "InventoryItem");
dve.addAlias("IV", "softIdentifier");
dve.addAlias("IV", "serialNumber");
dve.addViewLink("II", "IV", Boolean.FALSE, UtilMisc.toList(new ModelKeyMap("inventoryItemId", "inventoryItemId")));
}
}
if (UtilValidate.isNotEmpty(inventoryItemId)) {
paramList.add("inventoryItemId=" + inventoryItemId);
conditions.add(makeExpr("inventoryItemId", inventoryItemId));
}
if (UtilValidate.isNotEmpty(softIdentifier)) {
paramList.add("softIdentifier=" + softIdentifier);
conditions.add(makeExpr("softIdentifier", softIdentifier, true));
}
if (UtilValidate.isNotEmpty(serialNumber)) {
paramList.add("serialNumber=" + serialNumber);
conditions.add(makeExpr("serialNumber", serialNumber, true));
}
if (UtilValidate.isNotEmpty(shipmentId)) {
paramList.add("shipmentId=" + shipmentId);
conditions.add(makeExpr("shipmentId", shipmentId));
}
// back order checking
String hasBackOrders = (String) context.get("hasBackOrders");
if (UtilValidate.isNotEmpty(hasBackOrders)) {
dve.addMemberEntity("IR", "OrderItemShipGrpInvRes");
dve.addAlias("IR", "quantityNotAvailable");
dve.addViewLink("OH", "IR", Boolean.FALSE, UtilMisc.toList(new ModelKeyMap("orderId", "orderId")));
paramList.add("hasBackOrders=" + hasBackOrders);
if ("Y".equals(hasBackOrders)) {
conditions.add(EntityCondition.makeCondition("quantityNotAvailable", EntityOperator.NOT_EQUAL, null));
conditions.add(EntityCondition.makeCondition("quantityNotAvailable", EntityOperator.GREATER_THAN, BigDecimal.ZERO));
} else if ("N".equals(hasBackOrders)) {
List<EntityExpr> orExpr = new LinkedList<EntityExpr>();
orExpr.add(EntityCondition.makeCondition("quantityNotAvailable", EntityOperator.EQUALS, null));
orExpr.add(EntityCondition.makeCondition("quantityNotAvailable", EntityOperator.EQUALS, BigDecimal.ZERO));
conditions.add(EntityCondition.makeCondition(orExpr, EntityOperator.OR));
}
}
// Get all orders according to specific ship to country with "Only Include" or "Do not Include".
String countryGeoId = (String) context.get("countryGeoId");
String includeCountry = (String) context.get("includeCountry");
if (UtilValidate.isNotEmpty(countryGeoId) && UtilValidate.isNotEmpty(includeCountry)) {
paramList.add("countryGeoId=" + countryGeoId);
paramList.add("includeCountry=" + includeCountry);
// add condition to dynamic view
dve.addMemberEntity("OCM", "OrderContactMech");
dve.addMemberEntity("PA", "PostalAddress");
dve.addAlias("OCM", "contactMechId");
dve.addAlias("OCM", "contactMechPurposeTypeId");
dve.addAlias("PA", "countryGeoId");
dve.addViewLink("OH", "OCM", Boolean.FALSE, ModelKeyMap.makeKeyMapList("orderId"));
dve.addViewLink("OCM", "PA", Boolean.FALSE, ModelKeyMap.makeKeyMapList("contactMechId"));
EntityConditionList<EntityExpr> exprs = null;
if ("Y".equals(includeCountry)) {
exprs = EntityCondition.makeCondition(UtilMisc.toList(
EntityCondition.makeCondition("contactMechPurposeTypeId", "SHIPPING_LOCATION"),
EntityCondition.makeCondition("countryGeoId", countryGeoId)), EntityOperator.AND);
} else {
exprs = EntityCondition.makeCondition(UtilMisc.toList(
EntityCondition.makeCondition("contactMechPurposeTypeId", "SHIPPING_LOCATION"),
EntityCondition.makeCondition("countryGeoId", EntityOperator.NOT_EQUAL, countryGeoId)), EntityOperator.AND);
}
conditions.add(exprs);
}
// create the main condition
EntityCondition cond = null;
if (conditions.size() > 0 || showAll.equalsIgnoreCase("Y")) {
cond = EntityCondition.makeCondition(conditions, EntityOperator.AND);
}
if (Debug.verboseOn()) {
Debug.logInfo("Find order query: " + cond.toString(), module);
}
List<GenericValue> orderList = new LinkedList<GenericValue>();
int orderCount = 0;
// get the index for the partial list
int lowIndex = 0;
int highIndex = 0;
if (cond != null) {
PagedList<GenericValue> pagedOrderList = null;
try {
// do the lookup
pagedOrderList = EntityQuery.use(delegator)
.select(fieldsToSelect)
.from(dve)
.where(cond)
.orderBy(orderBy)
.distinct() // set distinct on so we only get one row per order
.cursorScrollInsensitive()
.queryPagedList(viewIndex - 1, viewSize);
orderCount = pagedOrderList.getSize();
lowIndex = pagedOrderList.getStartIndex();
highIndex = pagedOrderList.getEndIndex();
orderList = pagedOrderList.getData();
} catch (GenericEntityException e) {
Debug.logError(e, module);
return ServiceUtil.returnError(e.getMessage());
}
}
// create the result map
Map<String, Object> result = ServiceUtil.returnSuccess();
// filter out requested inventory problems
filterInventoryProblems(context, result, orderList, paramList);
// format the param list
String paramString = StringUtil.join(paramList, "&amp;");
result.put("highIndex", Integer.valueOf(highIndex));
result.put("lowIndex", Integer.valueOf(lowIndex));
result.put("viewIndex", viewIndex);
result.put("viewSize", viewSize);
result.put("showAll", showAll);
result.put("paramList", (paramString != null? paramString: ""));
result.put("orderList", orderList);
result.put("orderListSize", Integer.valueOf(orderCount));
return result;
}
public static void filterInventoryProblems(Map<String, ? extends Object> context, Map<String, Object> result, List<GenericValue> orderList, List<String> paramList) {
List<String> filterInventoryProblems = new LinkedList<String>();
String doFilter = (String) context.get("filterInventoryProblems");
if (doFilter == null) {
doFilter = "N";
}
if ("Y".equals(doFilter) && orderList.size() > 0) {
paramList.add("filterInventoryProblems=Y");
for (GenericValue orderHeader : orderList) {
OrderReadHelper orh = new OrderReadHelper(orderHeader);
BigDecimal backorderQty = orh.getOrderBackorderQuantity();
if (backorderQty.compareTo(BigDecimal.ZERO) == 1) {
filterInventoryProblems.add(orh.getOrderId());
}
}
}
List<String> filterPOsOpenPastTheirETA = new LinkedList<String>();
List<String> filterPOsWithRejectedItems = new LinkedList<String>();
List<String> filterPartiallyReceivedPOs = new LinkedList<String>();
String filterPOReject = (String) context.get("filterPOsWithRejectedItems");
String filterPOPast = (String) context.get("filterPOsOpenPastTheirETA");
String filterPartRec = (String) context.get("filterPartiallyReceivedPOs");
if (filterPOReject == null) {
filterPOReject = "N";
}
if (filterPOPast == null) {
filterPOPast = "N";
}
if (filterPartRec == null) {
filterPartRec = "N";
}
boolean doPoFilter = false;
if ("Y".equals(filterPOReject)) {
paramList.add("filterPOsWithRejectedItems=Y");
doPoFilter = true;
}
if ("Y".equals(filterPOPast)) {
paramList.add("filterPOsOpenPastTheirETA=Y");
doPoFilter = true;
}
if ("Y".equals(filterPartRec)) {
paramList.add("filterPartiallyReceivedPOs=Y");
doPoFilter = true;
}
if (doPoFilter && orderList.size() > 0) {
for (GenericValue orderHeader : orderList) {
OrderReadHelper orh = new OrderReadHelper(orderHeader);
String orderType = orh.getOrderTypeId();
String orderId = orh.getOrderId();
if ("PURCHASE_ORDER".equals(orderType)) {
if ("Y".equals(filterPOReject) && orh.getRejectedOrderItems()) {
filterPOsWithRejectedItems.add(orderId);
}
else if ("Y".equals(filterPOPast) && orh.getPastEtaOrderItems(orderId)) {
filterPOsOpenPastTheirETA.add(orderId);
}
else if ("Y".equals(filterPartRec) && orh.getPartiallyReceivedItems()) {
filterPartiallyReceivedPOs.add(orderId);
}
}
}
}
result.put("filterInventoryProblemsList", filterInventoryProblems);
result.put("filterPOsWithRejectedItemsList", filterPOsWithRejectedItems);
result.put("filterPOsOpenPastTheirETAList", filterPOsOpenPastTheirETA);
result.put("filterPartiallyReceivedPOsList", filterPartiallyReceivedPOs);
}
protected static EntityExpr makeExpr(String fieldName, String value) {
return makeExpr(fieldName, value, false);
}
protected static EntityExpr makeExpr(String fieldName, String value, boolean forceLike) {
EntityComparisonOperator<?, ?> op = forceLike ? EntityOperator.LIKE : EntityOperator.EQUALS;
if (value.startsWith("*")) {
op = EntityOperator.LIKE;
value = "%" + value.substring(1);
}
else if (value.startsWith("%")) {
op = EntityOperator.LIKE;
}
if (value.endsWith("*")) {
op = EntityOperator.LIKE;
value = value.substring(0, value.length() - 1) + "%";
}
else if (value.endsWith("%")) {
op = EntityOperator.LIKE;
}
if (forceLike) {
if (!value.startsWith("%")) {
value = "%" + value;
}
if (!value.endsWith("%")) {
value = value + "%";
}
}
return EntityCondition.makeCondition(fieldName, op, value);
}
}