Author: jacopoc
Date: Sat Apr 28 02:44:43 2007 New Revision: 533322 URL: http://svn.apache.org/viewvc?view=rev&rev=533322 Log: Implemented product geo rules for shipping address geo. Modified: ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCart.java ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductWorker.java Modified: ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCart.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCart.java?view=diff&rev=533322&r1=533321&r2=533322 ============================================================================== --- ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCart.java (original) +++ ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCart.java Sat Apr 28 02:44:43 2007 @@ -504,7 +504,7 @@ // If the billing address is already set, verify if the new product // is available in the address' geo GenericValue product = item.getProduct(); - if (product != null) { + if (product != null && isSalesOrder()) { GenericValue billingAddress = this.getBillingAddress(); if (billingAddress != null) { if (!ProductWorker.isBillableToAddress(product, billingAddress)) { @@ -1440,16 +1440,18 @@ /** adds a payment method/payment method type */ public CartPaymentInfo addPaymentAmount(String id, Double amount, String refNum, String authCode, boolean isSingleUse, boolean isPresent, boolean replace) { CartPaymentInfo inf = this.getPaymentInfo(id, refNum, authCode, amount, true); - GenericValue billingAddress = inf.getBillingAddress(this.getDelegator()); - if (billingAddress != null) { - // this payment method will set the billing address for the order; - // before it is set we have to verify if the billing address is - // compatible with the ProductGeos - Iterator products = (this.getItemsProducts(this.cartLines)).iterator(); - while (products.hasNext()) { - GenericValue product = (GenericValue)products.next(); - if (!ProductWorker.isBillableToAddress(product, billingAddress)) { - throw new IllegalArgumentException("The billing address is not compatible with ProductGeos rules."); + if (isSalesOrder()) { + GenericValue billingAddress = inf.getBillingAddress(this.getDelegator()); + if (billingAddress != null) { + // this payment method will set the billing address for the order; + // before it is set we have to verify if the billing address is + // compatible with the ProductGeos + Iterator products = (this.getItemsProducts(this.cartLines)).iterator(); + while (products.hasNext()) { + GenericValue product = (GenericValue)products.next(); + if (!ProductWorker.isBillableToAddress(product, billingAddress)) { + throw new IllegalArgumentException("The billing address is not compatible with ProductGeos rules."); + } } } } @@ -1832,7 +1834,9 @@ // ---------------------------------------- public int addShipInfo() { - shipInfo.add(new CartShipInfo()); + CartShipInfo csi = new CartShipInfo(); + csi.orderTypeId = getOrderType(); + shipInfo.add(csi); return (shipInfo.size() - 1); } @@ -1866,7 +1870,9 @@ } if (shipInfo.size() == 0) { - shipInfo.add(new CartShipInfo()); + CartShipInfo csi = new CartShipInfo(); + csi.orderTypeId = getOrderType(); + shipInfo.add(csi); } return (CartShipInfo) shipInfo.get(idx); @@ -1988,6 +1994,7 @@ CartShipInfo toGroup = null; if (toIndex == -1) { toGroup = new CartShipInfo(); + toGroup.orderTypeId = getOrderType(); this.shipInfo.add(toGroup); toIndex = this.shipInfo.size() - 1; } else { @@ -2043,6 +2050,31 @@ /** Sets the shipping contact mech id. */ public void setShippingContactMechId(int idx, String shippingContactMechId) { CartShipInfo csi = this.getShipInfo(idx); + if (isSalesOrder()) { + // Verify if the new address is compatible with the ProductGeos rules of + // the products already in the cart + GenericValue shippingAddress = null; + try { + shippingAddress = this.getDelegator().findByPrimaryKey("PostalAddress", UtilMisc.toMap("contactMechId", shippingContactMechId)); + } catch(GenericEntityException gee) { + Debug.logError(gee, "Error retrieving the shipping address for contactMechId [" + shippingContactMechId + "].", module); + } + if (shippingAddress != null) { + Set shipItems = csi.getShipItems(); + if (UtilValidate.isNotEmpty(shipItems)) { + Iterator siit = shipItems.iterator(); + while (siit.hasNext()) { + ShoppingCartItem cartItem = (ShoppingCartItem) siit.next(); + GenericValue product = cartItem.getProduct(); + if (UtilValidate.isNotEmpty(product)) { + if (!ProductWorker.isShippableToAddress(product, shippingAddress)) { + throw new IllegalArgumentException("The shipping address is not compatible with ProductGeos rules."); + } + } + } + } + } + } csi.contactMechId = shippingContactMechId; } @@ -3913,6 +3945,7 @@ public static class CartShipInfo implements Serializable { public LinkedMap shipItemInfo = new LinkedMap(); public List shipTaxAdj = new LinkedList(); + public String orderTypeId = null; public String contactMechId = null; public String shipmentMethodTypeId = null; public String supplierPartyId = null; @@ -3926,6 +3959,7 @@ public Timestamp shipBeforeDate = null; public Timestamp shipAfterDate = null; + public String getOrderTypeId() { return orderTypeId; } public String getContactMechId() { return contactMechId; } public String getCarrierPartyId() { return carrierPartyId; } public String getSupplierPartyId() { return supplierPartyId; } @@ -4015,6 +4049,9 @@ public CartShipItemInfo setItemInfo(ShoppingCartItem item, double quantity, List taxAdj) { CartShipItemInfo itemInfo = (CartShipItemInfo) shipItemInfo.get(item); if (itemInfo == null) { + if (!isShippableToAddress(item)) { + throw new IllegalArgumentException("The shipping address is not compatible with ProductGeos rules."); + } itemInfo = new CartShipItemInfo(); itemInfo.item = item; shipItemInfo.put(item, itemInfo); @@ -4031,6 +4068,9 @@ public CartShipItemInfo setItemInfo(ShoppingCartItem item, List taxAdj) { CartShipItemInfo itemInfo = (CartShipItemInfo) shipItemInfo.get(item); if (itemInfo == null) { + if (!isShippableToAddress(item)) { + throw new IllegalArgumentException("The shipping address is not compatible with ProductGeos rules."); + } itemInfo = new CartShipItemInfo(); itemInfo.item = item; shipItemInfo.put(item, itemInfo); @@ -4046,6 +4086,9 @@ public CartShipItemInfo setItemInfo(ShoppingCartItem item, double quantity) { CartShipItemInfo itemInfo = (CartShipItemInfo) shipItemInfo.get(item); if (itemInfo == null) { + if (!isShippableToAddress(item)) { + throw new IllegalArgumentException("The shipping address is not compatible with ProductGeos rules."); + } itemInfo = new CartShipItemInfo(); itemInfo.item = item; shipItemInfo.put(item, itemInfo); @@ -4060,6 +4103,26 @@ public Set getShipItems() { return shipItemInfo.keySet(); + } + + private boolean isShippableToAddress(ShoppingCartItem item) { + if ("SALES_ORDER".equals(getOrderTypeId())) { + // Verify if the new address is compatible with the ProductGeos rules of + // the products already in the cart + GenericValue shippingAddress = null; + try { + shippingAddress = item.getDelegator().findByPrimaryKey("PostalAddress", UtilMisc.toMap("contactMechId", contactMechId)); + } catch(GenericEntityException gee) { + Debug.logError(gee, "Error retrieving the shipping address for contactMechId [" + contactMechId + "].", module); + } + if (shippingAddress != null) { + GenericValue product = item.getProduct(); + if (UtilValidate.isNotEmpty(product)) { + return ProductWorker.isShippableToAddress(product, shippingAddress); + } + } + } + return true; } /** Modified: ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductWorker.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductWorker.java?view=diff&rev=533322&r1=533321&r2=533322 ============================================================================== --- ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductWorker.java (original) +++ ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductWorker.java Sat Apr 28 02:44:43 2007 @@ -93,23 +93,27 @@ } catch (GenericEntityException e) { Debug.logError(e, module); } - if (UtilValidate.isEmpty(productGeos)) { + List excludeGeos = EntityUtil.filterByAnd(productGeos, UtilMisc.toMap("productGeoEnumId", productGeoPrefix + "EXCLUDE")); + List includeGeos = EntityUtil.filterByAnd(productGeos, UtilMisc.toMap("productGeoEnumId", productGeoPrefix + "INCLUDE")); + if (UtilValidate.isEmpty(excludeGeos) && UtilValidate.isEmpty(includeGeos)) { // If no GEOs are configured the default is TRUE return true; } - List excludeGeos = EntityUtil.filterByAnd(productGeos, UtilMisc.toMap("productGeoEnumId", productGeoPrefix + "EXCLUDE")); - List includeGeos = EntityUtil.filterByAnd(productGeos, UtilMisc.toMap("productGeoEnumId", productGeoPrefix + "INCLUDE")); Iterator productGeosIt = null; // exclusion productGeosIt = excludeGeos.iterator(); while (productGeosIt.hasNext()) { GenericValue productGeo = (GenericValue)productGeosIt.next(); - List includeGeoGroup = GeoWorker.expandGeoGroup(productGeo.getString("geoId"), delegator); - if (GeoWorker.containsGeo(includeGeoGroup, postalAddress.getString("countryGeoId"), delegator) || - GeoWorker.containsGeo(includeGeoGroup, postalAddress.getString("stateProvinceGeoId"), delegator) || - GeoWorker.containsGeo(includeGeoGroup, postalAddress.getString("postalCodeGeoId"), delegator)) { + List excludeGeoGroup = GeoWorker.expandGeoGroup(productGeo.getString("geoId"), delegator); + if (GeoWorker.containsGeo(excludeGeoGroup, postalAddress.getString("countryGeoId"), delegator) || + GeoWorker.containsGeo(excludeGeoGroup, postalAddress.getString("stateProvinceGeoId"), delegator) || + GeoWorker.containsGeo(excludeGeoGroup, postalAddress.getString("postalCodeGeoId"), delegator)) { return false; } + } + if (UtilValidate.isEmpty(includeGeos)) { + // If no GEOs are configured the default is TRUE + return true; } // inclusion productGeosIt = includeGeos.iterator(); |
Free forum by Nabble | Edit this page |