blob: 0210e04863fda287b75f4eca1e73d9e15f1c21ec [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.webpos.search;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.apache.ofbiz.base.util.Debug;
import org.apache.ofbiz.base.util.UtilValidate;
import org.apache.ofbiz.entity.Delegator;
import org.apache.ofbiz.entity.GenericEntityException;
import org.apache.ofbiz.entity.GenericValue;
import org.apache.ofbiz.entity.condition.EntityCondition;
import org.apache.ofbiz.entity.condition.EntityFunction;
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.EntityListIterator;
import org.apache.ofbiz.entity.util.EntityQuery;
import org.apache.ofbiz.entity.util.EntityUtil;
import org.apache.ofbiz.service.DispatchContext;
import org.apache.ofbiz.service.ServiceUtil;
public class WebPosSearch {
public static final String module = WebPosSearch.class.getName();
public static Map<String, Object> findProducts(DispatchContext dctx, Map<String, ? extends Object> context) {
Delegator delegator = dctx.getDelegator();
String searchByProductIdValue = (String) context.get("searchByProductIdValue");
String searchByProductName = (String) context.get("searchByProductName");
String searchByProductDescription = (String) context.get("searchByProductDescription");
String goodIdentificationTypeId = (String) context.get("goodIdentificationTypeId");
Map<String, Object> result = ServiceUtil.returnSuccess();
List<EntityCondition> andExprs = new LinkedList<EntityCondition>();
EntityCondition mainCond = null;
String entityName = "Product";
// search by product name
if (UtilValidate.isNotEmpty(searchByProductName)) {
searchByProductName = searchByProductName.toUpperCase().trim();
andExprs.add(EntityCondition.makeCondition(EntityFunction.UPPER_FIELD("productName"), EntityOperator.LIKE, EntityFunction.UPPER("%" + searchByProductName + "%")));
}
// search by description
if (UtilValidate.isNotEmpty(searchByProductDescription)) {
searchByProductDescription = searchByProductDescription.toUpperCase().trim();
andExprs.add(EntityCondition.makeCondition(EntityFunction.UPPER_FIELD("description"), EntityOperator.LIKE, EntityFunction.UPPER("%" + searchByProductDescription + "%")));
}
// search by good identification
if (UtilValidate.isNotEmpty(searchByProductIdValue)) {
entityName = "GoodIdentificationAndProduct";
searchByProductIdValue = searchByProductIdValue.toUpperCase().trim();
andExprs.add(EntityCondition.makeCondition(EntityFunction.UPPER_FIELD("idValue"), EntityOperator.EQUALS, searchByProductIdValue));
if (UtilValidate.isNotEmpty(goodIdentificationTypeId)) {
andExprs.add(EntityCondition.makeCondition("goodIdentificationTypeId", EntityOperator.EQUALS, goodIdentificationTypeId));
}
}
mainCond = EntityCondition.makeCondition(andExprs, EntityOperator.AND);
List<GenericValue> products = null;
try {
products = EntityQuery.use(delegator).from(entityName).where(mainCond).orderBy("productName", "description").queryList();
} catch (GenericEntityException e) {
Debug.logError(e, module);
}
result.put("productsList", products);
return result;
}
public static Map<String, Object> findParties(DispatchContext dctx, Map<String, ? extends Object> context) {
Delegator delegator = dctx.getDelegator();
String searchByPartyLastName = (String) context.get("searchByPartyLastName");
String searchByPartyFirstName = (String) context.get("searchByPartyFirstName");
String searchByPartyIdValue = (String) context.get("searchByPartyIdValue");
String partyIdentificationTypeId = (String) context.get("partyIdentificationTypeId");
String billingLocation = (String) context.get("billingLocation");
String shippingLocation = (String) context.get("shippingLocation");
Map<String, Object> result = ServiceUtil.returnSuccess();
List<EntityCondition> andExprs = new LinkedList<EntityCondition>();
List<EntityCondition> orExprs = new LinkedList<EntityCondition>();
EntityCondition mainCond = null;
List<String> orderBy = new LinkedList<String>();
// default view settings
DynamicViewEntity dynamicView = new DynamicViewEntity();
dynamicView.addMemberEntity("PT", "Party");
dynamicView.addAlias("PT", "partyId");
dynamicView.addAlias("PT", "statusId");
dynamicView.addAlias("PT", "partyTypeId");
dynamicView.addMemberEntity("PI", "PartyIdentification");
dynamicView.addAlias("PI", "partyIdentificationTypeId");
dynamicView.addAlias("PI", "idValue");
dynamicView.addViewLink("PT", "PI", Boolean.TRUE, ModelKeyMap.makeKeyMapList("partyId"));
dynamicView.addMemberEntity("PER", "Person");
dynamicView.addAlias("PER", "lastName");
dynamicView.addAlias("PER", "firstName");
dynamicView.addViewLink("PT", "PER", Boolean.TRUE, ModelKeyMap.makeKeyMapList("partyId"));
dynamicView.addMemberEntity("PCP", "PartyContactMechPurpose");
dynamicView.addAlias("PCP", "contactMechId");
dynamicView.addAlias("PCP", "contactMechPurposeTypeId");
dynamicView.addAlias("PCP", "fromDate");
dynamicView.addAlias("PCP", "thruDate");
dynamicView.addViewLink("PT", "PCP", Boolean.TRUE, ModelKeyMap.makeKeyMapList("partyId"));
dynamicView.addMemberEntity("CM", "ContactMech");
dynamicView.addAlias("CM", "contactMechId");
dynamicView.addAlias("CM", "contactMechTypeId");
dynamicView.addAlias("CM", "infoString");
dynamicView.addViewLink("PCP", "CM", Boolean.TRUE, ModelKeyMap.makeKeyMapList("contactMechId"));
dynamicView.addMemberEntity("PA", "PostalAddress");
dynamicView.addAlias("PA", "address1");
dynamicView.addAlias("PA", "city");
dynamicView.addAlias("PA", "postalCode");
dynamicView.addAlias("PA", "countryGeoId");
dynamicView.addAlias("PA", "stateProvinceGeoId");
dynamicView.addViewLink("CM", "PA", Boolean.TRUE, ModelKeyMap.makeKeyMapList("contactMechId"));
if (UtilValidate.isNotEmpty(billingLocation) && "Y".equalsIgnoreCase(billingLocation)) {
orExprs.add(EntityCondition.makeCondition("contactMechPurposeTypeId", EntityOperator.EQUALS, "BILLING_LOCATION"));
}
if (UtilValidate.isNotEmpty(shippingLocation) && "Y".equalsIgnoreCase(shippingLocation)) {
orExprs.add(EntityCondition.makeCondition("contactMechPurposeTypeId", EntityOperator.EQUALS, "SHIPPING_LOCATION"));
}
if (orExprs.size() > 0) {
andExprs.add(EntityCondition.makeCondition(orExprs, EntityOperator.OR));
}
andExprs.add(EntityCondition.makeCondition("partyTypeId", EntityOperator.EQUALS, "PERSON"));
andExprs.add(EntityCondition.makeCondition("contactMechTypeId", EntityOperator.EQUALS, "POSTAL_ADDRESS"));
mainCond = EntityCondition.makeCondition(andExprs, EntityOperator.AND);
orderBy.add("lastName");
orderBy.add("firstName");
// search by last name
if (UtilValidate.isNotEmpty(searchByPartyLastName)) {
searchByPartyLastName = searchByPartyLastName.toUpperCase().trim();
andExprs.add(EntityCondition.makeCondition(EntityFunction.UPPER_FIELD("lastName"), EntityOperator.LIKE, EntityFunction.UPPER("%" + searchByPartyLastName + "%")));
}
// search by first name
if (UtilValidate.isNotEmpty(searchByPartyFirstName)) {
searchByPartyFirstName = searchByPartyFirstName.toUpperCase().trim();
andExprs.add(EntityCondition.makeCondition(EntityFunction.UPPER_FIELD("firstName"), EntityOperator.LIKE, EntityFunction.UPPER("%" + searchByPartyFirstName + "%")));
}
// search by party identification
if (UtilValidate.isNotEmpty(searchByPartyIdValue)) {
searchByPartyIdValue = searchByPartyIdValue.toUpperCase().trim();
andExprs.add(EntityCondition.makeCondition(EntityFunction.UPPER_FIELD("idValue"), EntityOperator.EQUALS, searchByPartyIdValue));
if (UtilValidate.isNotEmpty(partyIdentificationTypeId)) {
andExprs.add(EntityCondition.makeCondition("partyIdentificationTypeId", EntityOperator.EQUALS, partyIdentificationTypeId));
}
}
mainCond = EntityCondition.makeCondition(andExprs, EntityOperator.AND);
List<GenericValue> parties = null;
try {
EntityListIterator pli = delegator.findListIteratorByCondition(dynamicView, mainCond, null, null, orderBy, null);
parties = EntityUtil.filterByDate(pli.getCompleteList(), true);
pli.close();
} catch (GenericEntityException e) {
Debug.logError(e, module);
}
result.put("partiesList", parties);
return result;
}
}