You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ofbiz.apache.org by David E Jones <de...@me.com> on 2011/02/19 11:34:25 UTC

Re: svn commit: r1072292 - in /ofbiz/trunk: applications/product/src/org/ofbiz/product/price/ framework/common/config/ framework/common/widget/ framework/entity/config/ framework/entity/fieldtype/

 Sorry about this, accidental commit. Will revert right away.

-David


On Feb 19, 2011, at 2:13 AM, jonesde@apache.org wrote:

> Author: jonesde
> Date: Sat Feb 19 10:13:50 2011
> New Revision: 1072292
> 
> URL: http://svn.apache.org/viewvc?rev=1072292&view=rev
> Log:
> VUA-429 full implementation to add a path through the screens for creating a sales order for a contact and add a customer for the contact in the process
> 
> Modified:
>    ofbiz/trunk/applications/product/src/org/ofbiz/product/price/PriceServices.java
>    ofbiz/trunk/framework/common/config/general.properties
>    ofbiz/trunk/framework/common/widget/CommonScreens.xml
>    ofbiz/trunk/framework/entity/config/entityengine.xml
>    ofbiz/trunk/framework/entity/fieldtype/fieldtypemysql.xml
> 
> Modified: ofbiz/trunk/applications/product/src/org/ofbiz/product/price/PriceServices.java
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/src/org/ofbiz/product/price/PriceServices.java?rev=1072292&r1=1072291&r2=1072292&view=diff
> ==============================================================================
> --- ofbiz/trunk/applications/product/src/org/ofbiz/product/price/PriceServices.java (original)
> +++ ofbiz/trunk/applications/product/src/org/ofbiz/product/price/PriceServices.java Sat Feb 19 10:13:50 2011
> @@ -21,9 +21,11 @@ package org.ofbiz.product.price;
> import java.math.BigDecimal;
> import java.sql.Timestamp;
> import java.util.Collection;
> +import java.util.HashSet;
> import java.util.List;
> import java.util.Locale;
> import java.util.Map;
> +import java.util.Set;
> import java.util.TreeSet;
> 
> import javolution.util.FastList;
> @@ -1117,6 +1119,31 @@ public class PriceServices {
>         return calcResults;
>     }
> 
> +    public static void getAllSubCategoryIdsByPrimaryField(String productCategoryId, Set<String> productCategoryIdSet, Delegator delegator, Timestamp nowTimestamp) {
> +        if (nowTimestamp == null) {
> +            nowTimestamp = UtilDateTime.nowTimestamp();
> +        }
> +
> +        // first make sure the current category id is in the Set
> +        productCategoryIdSet.add(productCategoryId);
> +
> +        // now find all sub-categories, filtered by effective dates, and call this routine for them
> +        try {
> +            List<GenericValue> productCategoryList = delegator.findByAndCache("ProductCategory", UtilMisc.toMap("primaryParentCategoryId", productCategoryId));
> +            for (GenericValue productCategory: productCategoryList) {
> +                String subProductCategoryId = productCategory.getString("productCategoryId");
> +                if (productCategoryIdSet.contains(subProductCategoryId)) {
> +                    // if this category has already been traversed, no use doing it again; this will also avoid infinite loops
> +                    continue;
> +                }
> +
> +                getAllSubCategoryIdsByPrimaryField(subProductCategoryId, productCategoryIdSet, delegator, nowTimestamp);
> +            }
> +        } catch (GenericEntityException e) {
> +            Debug.logError(e, "Error finding sub-categories for product search", module);
> +        }
> +    }
> +    
>     public static boolean checkPriceCondition(GenericValue productPriceCond, String productId, String virtualProductId, String prodCatalogId,
>             String productStoreGroupId, String webSiteId, String partyId, BigDecimal quantity, BigDecimal listPrice,
>             String currencyUomId, Delegator delegator, Timestamp nowTimestamp) throws GenericEntityException {
> @@ -1128,17 +1155,36 @@ public class PriceServices {
>         } else if ("PRIP_PROD_CAT_ID".equals(productPriceCond.getString("inputParamEnumId"))) {
>             // if a ProductCategoryMember exists for this productId and the specified productCategoryId
>             String productCategoryId = productPriceCond.getString("condValue");
> +            // get all sub-category IDs
> +            Set<String> productCategoryIdSet = new HashSet<String>();
> +            getAllSubCategoryIdsByPrimaryField(productCategoryId, productCategoryIdSet, delegator, nowTimestamp);
> +            
> +            //Debug.logInfo("Checking category condition with category IDs: " + productCategoryIdSet, module);
> +            
> +            // to better handle large numbers of rules with category conditions checked for each product, get all categories for the product from the cache, then filter it in memory (less queries, less cache entries too)
>             List<GenericValue> productCategoryMembers = delegator.findByAndCache("ProductCategoryMember",
> -                    UtilMisc.toMap("productId", productId, "productCategoryId", productCategoryId));
> +                    UtilMisc.toMap("productId", productId));
>             // and from/thru date within range
>             productCategoryMembers = EntityUtil.filterByDate(productCategoryMembers, nowTimestamp, null, null, true);
> -            // then 0 (equals), otherwise 1 (not equals)
> -            if (UtilValidate.isNotEmpty(productCategoryMembers)) {
> +            
> +            // see if the product is in any of the category with ID in productCategoryIdSet
> +            boolean matchFound = false;
> +            for (String testProductCategoryId: productCategoryIdSet) {
> +                List<GenericValue> testProductCategoryMembers = EntityUtil.filterByAnd(productCategoryMembers, 
> +                        UtilMisc.toMap("productCategoryId", testProductCategoryId));
> +                // then 0 (equals), otherwise 1 (not equals)
> +                if (UtilValidate.isNotEmpty(testProductCategoryMembers)) {
> +                    matchFound = true;
> +                    break;
> +                }
> +            }
> +
> +            if (matchFound) {
>                 compare = 0;
>             } else {
>                 compare = 1;
>             }
> -
> +            
>             // if there is a virtualProductId, try that given that this one has failed
>             // NOTE: this is important becuase of the common scenario where a virtual product is a member of a category but the variants will typically NOT be
>             // NOTE: we may want to parameterize this in the future, ie with an indicator on the ProductPriceCond entity
> @@ -1194,7 +1240,8 @@ public class PriceServices {
>             } else {
>                 compare = quantity.compareTo(new BigDecimal(productPriceCond.getString("condValue")));
>             }
> -        } else if ("PRIP_PARTY_ID".equals(productPriceCond.getString("inputParamEnumId"))) {
> +        } else if ("PRIP_PARTY_ID".equals(productPriceCond.getString("inputParamEnumId"))
> +                || "PRIP_CUST_ACCOUNT".equals(productPriceCond.getString("inputParamEnumId"))) {
>             if (UtilValidate.isNotEmpty(partyId)) {
>                 compare = partyId.compareTo(productPriceCond.getString("condValue"));
>             } else {
> @@ -1222,7 +1269,9 @@ public class PriceServices {
>                     }
>                 }
>             }
> -        } else if ("PRIP_PARTY_CLASS".equals(productPriceCond.getString("inputParamEnumId"))) {
> +        } else if ("PRIP_PARTY_CLASS".equals(productPriceCond.getString("inputParamEnumId"))
> +                || "PRIP_ACCOUNT_TYPE".equals(productPriceCond.getString("inputParamEnumId"))
> +                || "PRIP_CLUB_SEGMENT".equals(productPriceCond.getString("inputParamEnumId"))) {
>             if (UtilValidate.isEmpty(partyId)) {
>                 compare = 1;
>             } else {
> @@ -1238,27 +1287,69 @@ public class PriceServices {
>                     compare = 1;
>                 }
>             }
> +        } else if ("PRIP_LIST_PRICE".equals(productPriceCond.getString("inputParamEnumId"))) {
> +            BigDecimal listPriceValue = listPrice;
> +            compare = listPriceValue.compareTo(new BigDecimal(productPriceCond.getString("condValue")));
> +        } else if ("PRIP_CURRENCY_UOMID".equals(productPriceCond.getString("inputParamEnumId"))) {
> +            compare = currencyUomId.compareTo(productPriceCond.getString("condValue"));
> +        } else if ("PRIP_CONTACT".equals(productPriceCond.getString("inputParamEnumId"))) {
> +            if (UtilValidate.isEmpty(partyId)) {
> +                compare = 1;
> +            } else {
> +                String partyIdTo = productPriceCond.getString("condValue");
> +                // find Contacts
> +                List<GenericValue> contactList = delegator.findByAndCache("PartyRelationship", UtilMisc.toMap("partyRelationshipTypeId", "CONTACT_REL", "partyIdFrom", partyId, "partyIdTo", partyIdTo));
> +                // and from/thru date within range
> +                contactList = EntityUtil.filterByDate(contactList, nowTimestamp, null, null, true);
> +                // then 0 (equals), otherwise 1 (not equals)
> +                if (UtilValidate.isNotEmpty(contactList)) {
> +                    compare = 0;
> +                } else {
> +                    compare = 1;
> +                }
> +            }
> +        } else if ("PRIP_ACCOUNT_STATE".equals(productPriceCond.getString("inputParamEnumId"))) {
> +            if (UtilValidate.isEmpty(partyId)) {
> +                compare = 1;
> +            } else {
> +                String statusId = productPriceCond.getString("condValue");
> +                List<GenericValue> partyStatusList = delegator.findByAndCache("PartyStatus", UtilMisc.toMap("partyId", partyId, "statusId", statusId));
> +                // then 0 (equals), otherwise 1 (not equals)
> +                if (UtilValidate.isNotEmpty(partyStatusList)) {
> +                    compare = 0;
> +                } else {
> +                    compare = 1;
> +                }
> +            }
>         } else if ("PRIP_ROLE_TYPE".equals(productPriceCond.getString("inputParamEnumId"))) {
> -            if (partyId != null) {
> -                // if a PartyRole exists for this partyId and the specified roleTypeId
> -                GenericValue partyRole = delegator.findByPrimaryKeyCache("PartyRole",
> -                        UtilMisc.toMap("partyId", partyId, "roleTypeId", productPriceCond.getString("condValue")));
> -
> +            if (UtilValidate.isEmpty(partyId)) {
> +                compare = 1;
> +            } else {
> +                String roleTypeId = productPriceCond.getString("condValue");
> +                List<GenericValue> partyRoleList = delegator.findByAndCache("PartyRole", UtilMisc.toMap("partyId", partyId, "roleTypeId", roleTypeId));
>                 // then 0 (equals), otherwise 1 (not equals)
> -                if (partyRole != null) {
> +                if (UtilValidate.isNotEmpty(partyRoleList)) {
>                     compare = 0;
>                 } else {
>                     compare = 1;
>                 }
> +            }            
> +        } else if ("PRIP_CONTACT_TYPE".equals(productPriceCond.getString("inputParamEnumId"))) {
> +            if (UtilValidate.isEmpty(partyId)) {
> +                compare = 1;
>             } else {
> +                String contactTypeId = productPriceCond.getString("condValue");
> +                // find Contacts
> +                List<GenericValue> contactList = delegator.findByAndCache("PartyRelationship", UtilMisc.toMap("partyRelationshipTypeId", "CONTACT_REL", "partyIdFrom", partyId));
> +                // then 0 (equals), otherwise 1 (not equals)
>                 compare = 1;
> +                for (GenericValue contact : contactList) {
> +                    if (delegator.findByAndCache("Person", UtilMisc.toMap("partyId", contact.get("partyIdTo"), "contactTypeId", contactTypeId)).size() > 0) {
> +                        compare = 0;
> +                        break;
>             }
> -        } else if ("PRIP_LIST_PRICE".equals(productPriceCond.getString("inputParamEnumId"))) {
> -            BigDecimal listPriceValue = listPrice;
> -
> -            compare = listPriceValue.compareTo(new BigDecimal(productPriceCond.getString("condValue")));
> -        } else if ("PRIP_CURRENCY_UOMID".equals(productPriceCond.getString("inputParamEnumId"))) {
> -            compare = currencyUomId.compareTo(productPriceCond.getString("condValue"));
> +                }
> +            }            
>         } else {
>             Debug.logWarning("An un-supported productPriceCond input parameter (lhs) was used: " + productPriceCond.getString("inputParamEnumId") + ", returning false, ie check failed", module);
>             return false;
> 
> Modified: ofbiz/trunk/framework/common/config/general.properties
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/config/general.properties?rev=1072292&r1=1072291&r2=1072292&view=diff
> ==============================================================================
> --- ofbiz/trunk/framework/common/config/general.properties (original)
> +++ ofbiz/trunk/framework/common/config/general.properties Sat Feb 19 10:13:50 2011
> @@ -27,7 +27,7 @@ currency.uom.id.default=USD
> # -- the default organizationPartyId for used in dropdowns and reports
> ORGANIZATION_PARTY=Company
> # ID of the VisualTheme to use if there VISUAL_THEME UserPreference record for the current user supported values: FLAT_GREY and BIZZNESS_TIME and BLUELIGHT 
> -VISUAL_THEME=TOMAHAWK
> +VISUAL_THEME=VINOPS
> 
> # -- the default decimal format for currency (used in UtilFormatOut.java)
> currency.decimal.format=#,##0.00
> @@ -42,7 +42,7 @@ locale.properties.fallback=en
> #    which locales the user can select from. If this property is not used,
> #    then the user will be able to select from all the locales available
> #    in the JVM. The list below corresponds to the languages really available OOTB (2010-16-02)
> -#locales.available=ar,de,en,es,fr,hi,it,nl,pt,ro,ru,th,zh
> +locales.available=de,en,es,fr,it
> 
> # -- Time zones made available, separated by commas. This property controls
> #    which time zones the user can select from. If this property is not used,
> @@ -71,13 +71,13 @@ defaultFromEmailAddress=ofbiztest@exampl
> # as 'baseUrl' and 'baseSecureUrl' are set in the url.properties file. 
> 
> # -- mail notifications enabled (Y|N)
> -mail.notifications.enabled=N
> +#mail.notifications.enabled=N
> 
> # -- redirect all mail notifications to this address for testing
> #mail.notifications.redirectTo=
> 
> # -- the default mail server to use
> -mail.smtp.relay.host=localhost
> +#mail.smtp.relay.host=
> 
> # -- SMTP Auth settings
> #mail.smtp.auth.user=
> @@ -129,4 +129,4 @@ https.localhost=ABQIAAAAtt0d8djaYFkk8N5L
> http.localhost=ABQIAAAAtt0d8djaYFkk8N5LJVcDSBT2yXp_ZAY8_ufC3CFXhHIE1NvwkxR3euHYk9bpwvdF2Qg1EYO1LQitHA
> 
> # -- Y if you want to display the multi-tenant textbox in the login page
> -multitenant=N
> +multitenant=Y
> 
> Modified: ofbiz/trunk/framework/common/widget/CommonScreens.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/widget/CommonScreens.xml?rev=1072292&r1=1072291&r2=1072292&view=diff
> ==============================================================================
> --- ofbiz/trunk/framework/common/widget/CommonScreens.xml (original)
> +++ ofbiz/trunk/framework/common/widget/CommonScreens.xml Sat Feb 19 10:13:50 2011
> @@ -136,7 +136,7 @@ under the License.
>                 <set field="layoutSettings.javaScripts[]" value="/images/selectMultipleRelatedValues.js" global="true"/>
> 
>                 <set field="layoutSettings.commonHeaderImageLinkUrl" from-field="layoutSettings.commonHeaderImageLinkUrl" default-value="main" global="true"/>
> -                <set field="visualThemeId" from-field="userPreferences.VISUAL_THEME" global="true"/>
> +                <set field="visualThemeId" from-field="userPreferences.VISUAL_THEME" default-value="VINOPS" global="true"/>
>                 <service service-name="getVisualThemeResources">
>                     <field-map field-name="visualThemeId"/>
>                     <field-map field-name="themeResources" from-field="layoutSettings"/>
> 
> Modified: ofbiz/trunk/framework/entity/config/entityengine.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/config/entityengine.xml?rev=1072292&r1=1072291&r2=1072292&view=diff
> ==============================================================================
> --- ofbiz/trunk/framework/entity/config/entityengine.xml (original)
> +++ ofbiz/trunk/framework/entity/config/entityengine.xml Sat Feb 19 10:13:50 2011
> @@ -50,7 +50,7 @@ access. For a detailed description see t
>     <connection-factory class="org.ofbiz.entity.connection.DBCPConnectionFactory"/>
> 
>     <delegator name="default" entity-model-reader="main" entity-group-reader="main" entity-eca-reader="main" distributed-cache-clear-enabled="false">
> -        <group-map group-name="org.ofbiz" datasource-name="localderby"/>
> +        <group-map group-name="org.ofbiz" datasource-name="localmysql"/>
>         <group-map group-name="org.ofbiz.olap" datasource-name="localderbyolap"/>
>         <group-map group-name="org.ofbiz.tenant" datasource-name="localderbytenant"/>
>         <!-- <group-map group-name="org.ofbiz" datasource-name="localmysql"/>
> 
> Modified: ofbiz/trunk/framework/entity/fieldtype/fieldtypemysql.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/fieldtype/fieldtypemysql.xml?rev=1072292&r1=1072291&r2=1072292&view=diff
> ==============================================================================
> --- ofbiz/trunk/framework/entity/fieldtype/fieldtypemysql.xml (original)
> +++ ofbiz/trunk/framework/entity/fieldtype/fieldtypemysql.xml Sat Feb 19 10:13:50 2011
> @@ -33,6 +33,7 @@ under the License.
>     <field-type-def type="currency-amount" sql-type="DECIMAL(18,2)" java-type="java.math.BigDecimal"/>
>     <field-type-def type="currency-precise" sql-type="DECIMAL(18,3)" java-type="java.math.BigDecimal"/>
>     <field-type-def type="fixed-point" sql-type="DECIMAL(18,6)" java-type="java.math.BigDecimal"/>
> +    <field-type-def type="precise-point" sql-type="DECIMAL(22,10)" java-type="java.math.BigDecimal"/>
>     <field-type-def type="floating-point" sql-type="DOUBLE" java-type="Double"/>
>     <field-type-def type="numeric" sql-type="DECIMAL(20,0)" java-type="Long"/>
> 
> 
>