On Apr 5, 2012, at 12:38 PM, Hans Bakker wrote:

> Thank you for fixing it.
> 
> We looked seriously into your recommendation but found out there were too 
> much basic differences to create a tree of product types.

How can you say this?
If you search for the string "AGGREGATEDSERV_CONF" you will see that it is used 
in 4 different places under the applications and in three of them the same code 
is shared with the "SERVICE_PRODUCT"; this is a perfect case for applying my 
suggestion.

Jacopo

> 
> Regards,
> Hans
> 
> On 04/05/2012 04:47 PM, Jacopo Cappellato wrote:
>> Hi Hans,
>> 
>> with this code you have broken the ability to add "bulk products" (items 
>> without a product id) to a purchase order; I fixed the error happening in 
>> checkout in rev. but please make sure that there are no other parts of the 
>> systems affected by this.
>> 
>> Also, as I mentioned in another review (that you ignored) to one of your 
>> commits, we should avoid code like:
>> 
>> if ("SERVICE_PRODUCT".equals(product.get("productTypeId")) || 
>> "AGGREGATEDSERV_CONF".equals(product.get("productTypeId"))
>> 
>> because it makes the system less extensible, the code less readable and 
>> instead use the parentTypeId to define hierarchies of product types etc...
>> 
>> Jacopo
>> 
>> 
>> On Sep 8, 2011, at 9:07 AM, [email protected] wrote:
>> 
>>> Author: hansbak
>>> Date: Thu Sep  8 07:07:07 2011
>>> New Revision: 1166543
>>> 
>>> URL: http://svn.apache.org/viewvc?rev=1166543&view=rev
>>> Log:
>>> New product type SERVICE_PRODUCT which was discussed in the mailing list. 
>>> blog linked to the what is new file will be added later
>>> 
>>> Modified:
>>>    ofbiz/trunk/applications/order/data/OrderTypeData.xml
>>>    
>>> ofbiz/trunk/applications/order/script/org/ofbiz/order/test/ShoppingCartTests.xml
>>>    
>>> ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java
>>>    ofbiz/trunk/applications/order/testdef/ShoppingCartTests.xml
>>>    ofbiz/trunk/applications/product/data/ProductTypeData.xml
>>>    ofbiz/trunk/specialpurpose/ecommerce/data/DemoProduct.xml
>>> 
>>> Modified: ofbiz/trunk/applications/order/data/OrderTypeData.xml
>>> URL: 
>>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/data/OrderTypeData.xml?rev=1166543&r1=1166542&r2=1166543&view=diff
>>> ==============================================================================
>>> --- ofbiz/trunk/applications/order/data/OrderTypeData.xml (original)
>>> +++ ofbiz/trunk/applications/order/data/OrderTypeData.xml Thu Sep  8 
>>> 07:07:07 2011
>>> @@ -322,6 +322,7 @@ under the License.
>>>     <ReturnItemTypeMap returnHeaderTypeId="CUSTOMER_RETURN" 
>>> returnItemMapKey="SURCHARGE_ADJUSTMENT" 
>>> returnItemTypeId="RET_SURCHARGE_ADJ"/>
>>>     <ReturnItemTypeMap returnHeaderTypeId="CUSTOMER_RETURN" 
>>> returnItemMapKey="ADDITIONAL_FEATURE" 
>>> returnItemTypeId="RET_ADD_FEATURE_ADJ"/>
>>>     <ReturnItemTypeMap returnHeaderTypeId="CUSTOMER_RETURN" 
>>> returnItemMapKey="WARRANTY_ADJUSTMENT" returnItemTypeId="RET_WARRANTY_ADJ"/>
>>> +<ReturnItemTypeMap returnHeaderTypeId="CUSTOMER_RETURN" 
>>> returnItemMapKey="SERVICE_PRODUCT" returnItemTypeId="RET_SPROD_ITEM"/>
>>>     <ReturnItemTypeMap returnHeaderTypeId="VENDOR_RETURN" 
>>> returnItemMapKey="FINISHED_GOOD" returnItemTypeId="RET_FPROD_ITEM"/>
>>>     <ReturnItemTypeMap returnHeaderTypeId="VENDOR_RETURN" 
>>> returnItemMapKey="MARKETING_PKG_AUTO" returnItemTypeId="RET_FPROD_ITEM"/>
>>>     <ReturnItemTypeMap returnHeaderTypeId="VENDOR_RETURN" 
>>> returnItemMapKey="MARKETING_PKG_PICK" returnItemTypeId="RET_FPROD_ITEM"/>
>>> 
>>> Modified: 
>>> ofbiz/trunk/applications/order/script/org/ofbiz/order/test/ShoppingCartTests.xml
>>> URL: 
>>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/script/org/ofbiz/order/test/ShoppingCartTests.xml?rev=1166543&r1=1166542&r2=1166543&view=diff
>>> ==============================================================================
>>> --- 
>>> ofbiz/trunk/applications/order/script/org/ofbiz/order/test/ShoppingCartTests.xml
>>>  (original)
>>> +++ 
>>> ofbiz/trunk/applications/order/script/org/ofbiz/order/test/ShoppingCartTests.xml
>>>  Thu Sep  8 07:07:07 2011
>>> @@ -260,4 +260,119 @@ under the License.
>>>         <assert><not><if-empty field="orderMap.orderId"/></not></assert>
>>>         <check-errors/>
>>>     </simple-method>
>>> +
>>> +<simple-method method-name="testCreateOrderServiceProduct" 
>>> short-description="Test create an order using a service product" 
>>> login-required="false">
>>> +<entity-one entity-name="UserLogin" value-field="userLogin">
>>> +<field-map field-name="userLoginId" value="DemoCustomer"/>
>>> +</entity-one>
>>> +
>>> +<!-- Shopping Cart new Instance -->
>>> +<set field="delegator" from-field="parameters.delegator" type="Object"/>
>>> +<set field="dispatcher" from-field="parameters.dispatcher" type="Object"/>
>>> +<set field="locale" from-field="parameters.locale" type="Object" />
>>> +<set field="productStoreId" value="9000" type="String"/>
>>> +<set field="currencyUom" value="USD" type="String"/>
>>> +<set field="salesChannel" value="WEB_SALES_CHANNEL" type="String"/>
>>> +
>>> +<set field="partyId" value="DemoCustomer" type="String"/>
>>> +
>>> +<create-object class-name="org.ofbiz.order.shoppingcart.ShoppingCart" 
>>> field="shoppingCart">
>>> +<field field="delegator" type="org.ofbiz.entity.Delegator"/>
>>> +<field field="productStoreId" type="String"/>
>>> +<field field="locale" type="java.util.Locale"/>
>>> +<field field="currencyUom" type="String"/>
>>> +</create-object>
>>> +
>>> +<set field="orderType" value="SALES_ORDER" type="String"/>
>>> +<call-object-method method-name="setOrderType" obj-field="shoppingCart">
>>> +<field field="orderType" type="String"/>
>>> +</call-object-method>
>>> +
>>> +<call-object-method method-name="setChannelType" obj-field="shoppingCart">
>>> +<field field="salesChannel" type="String"/>
>>> +</call-object-method>
>>> +
>>> +<call-object-method method-name="setProductStoreId" 
>>> obj-field="shoppingCart">
>>> +<field field="productStoreId" type="String"/>
>>> +</call-object-method>
>>> +
>>> +<call-object-method method-name="setBillToCustomerPartyId" 
>>> obj-field="shoppingCart">
>>> +<field field="partyId" type="String"/>
>>> +</call-object-method>
>>> +
>>> +<call-object-method method-name="setPlacingCustomerPartyId" 
>>> obj-field="shoppingCart">
>>> +<field field="partyId" type="String"/>
>>> +</call-object-method>
>>> +
>>> +<call-object-method method-name="setShipToCustomerPartyId" 
>>> obj-field="shoppingCart">
>>> +<field field="partyId" type="String"/>
>>> +</call-object-method>
>>> +
>>> +<call-object-method method-name="setEndUserCustomerPartyId" 
>>> obj-field="shoppingCart">
>>> +<field field="partyId" type="String"/>
>>> +</call-object-method>
>>> +
>>> +<call-object-method method-name="setUserLogin" obj-field="shoppingCart">
>>> +<field field="userLogin" type="org.ofbiz.entity.GenericValue"/>
>>> +<field field="dispatcher" type="org.ofbiz.service.LocalDispatcher"/>
>>> +</call-object-method>
>>> +
>>> +<set field="productId" value="SV-1001" type="String"/>
>>> +<set field="prodCatalogId" value="DemoCatalog" type="String"/>
>>> +<set field="quantity" value="1" type="BigDecimal"/>
>>> +
>>> +<call-object-method method-name="addOrIncreaseItem" 
>>> obj-field="shoppingCart">
>>> +<field field="productId" type="String"/>
>>> +<field field="selectedAmount" type="BigDecimal"/>
>>> +<field field="quantity" type="BigDecimal"/>
>>> +<field field="reservStart" type="Timestamp"/>
>>> +<field field="reservLength" type="BigDecimal"/>
>>> +<field field="reservPersons" type="BigDecimal"/>
>>> +<field field="shipBeforeDate" type="Timestamp"/>
>>> +<field field="shipAfterDate" type="Timestamp"/>
>>> +<field field="features" type="Map"/>
>>> +<field field="attributes" type="Map"/>
>>> +<field field="prodCatalogId" type="String"/>
>>> +<field field="configWrapper" 
>>> type="org.ofbiz.product.config.ProductConfigWrapper"/>
>>> +<field field="itemType" type="String"/>
>>> +<field field="itemGroupNumber" type="String"/>
>>> +<field field="parentProductId" type="String"/>
>>> +<field field="dispatcher" type="org.ofbiz.service.LocalDispatcher"/>
>>> +</call-object-method>
>>> +
>>> +<call-object-method method-name="setDefaultCheckoutOptions" 
>>> obj-field="shoppingCart">
>>> +<field field="dispatcher" type="org.ofbiz.service.LocalDispatcher"/>
>>> +</call-object-method>
>>> +
>>> +<create-object class-name="org.ofbiz.order.shoppingcart.CheckOutHelper" 
>>> field="checkOutHelper">
>>> +<field field="dispatcher" type="org.ofbiz.service.LocalDispatcher"/>
>>> +<field field="delegator" type="org.ofbiz.entity.Delegator"/>
>>> +<field field="shoppingCart" 
>>> type="org.ofbiz.order.shoppingcart.ShoppingCart"/>
>>> +</create-object>
>>> +
>>> +<call-object-method method-name="createOrder" obj-field="checkOutHelper" 
>>> ret-field="orderCreateResult">
>>> +<field field="userLogin" type="org.ofbiz.entity.GenericValue"/>
>>> +</call-object-method>
>>> +<set field="orderId" from-field="orderCreateResult.orderId" type="String"/>
>>> +<if-not-empty field="orderId">
>>> +<call-class-method method-name="approveOrder" 
>>> class-name="org.ofbiz.order.order.OrderChangeHelper" ret-field="approved">
>>> +<field field="dispatcher" type="org.ofbiz.service.LocalDispatcher"/>
>>> +<field field="userLogin" type="org.ofbiz.entity.GenericValue"/>
>>> +<field field="orderId" type="String"/>
>>> +</call-class-method>
>>> +<log level="info" message="======== Test order with id: [${orderId}] has 
>>> been approved: [${approved}]========"/>
>>> +
>>> +<entity-one entity-name="UserLogin" value-field="systemUserLogin">
>>> +<field-map field-name="userLoginId" value="system"/>
>>> +</entity-one>
>>> +
>>> +<set field="quickShipEntireOrderMap.orderId" from-field="orderId"/>
>>> +<set field="quickShipEntireOrderMap.userLogin" 
>>> from-field="systemUserLogin"/>
>>> +<call-service service-name="quickShipEntireOrder" 
>>> in-map-name="quickShipEntireOrderMap"/>
>>> +<log level="info" message="========Test order with id: [${orderId}] has 
>>> been shipped"/>
>>> +</if-not-empty>
>>> +
>>> +<assert><not><if-empty field="orderId"/></not></assert>
>>> +<check-errors/>
>>> +</simple-method>
>>> </simple-methods>
>>> 
>>> Modified: 
>>> ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java
>>> URL: 
>>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java?rev=1166543&r1=1166542&r2=1166543&view=diff
>>> ==============================================================================
>>> --- 
>>> ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java 
>>> (original)
>>> +++ 
>>> ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java 
>>> Thu Sep  8 07:07:07 2011
>>> @@ -1130,8 +1130,63 @@ public class OrderServices {
>>>             // store line items, etc so that they will be there for the 
>>> foreign key checks
>>>             delegator.storeAll(toBeStored);
>>> 
>>> -            // START inventory reservation
>>>             List<String>  resErrorMessages = new LinkedList<String>();
>>> +
>>> +            // add a product service to inventory
>>> +            if (UtilValidate.isNotEmpty(orderItems)) {
>>> +                for (GenericValue orderItem: orderItems) {
>>> +                    String productId = (String) orderItem.get("productId");
>>> +                    GenericValue product = 
>>> delegator.getRelatedOne("Product", orderItem);
>>> +
>>> +                    
>>> if("SERVICE_PRODUCT".equals(product.get("productTypeId"))){
>>> +                        String inventoryFacilityId = null;
>>> +                        if 
>>> ("Y".equals(productStore.getString("oneInventoryFacility"))) {
>>> +                            inventoryFacilityId = 
>>> productStore.getString("inventoryFacilityId");
>>> +
>>> +                            if (UtilValidate.isEmpty(inventoryFacilityId)) 
>>> {
>>> +                                Debug.logWarning("ProductStore with id " + 
>>> productStoreId + " has Y for oneInventoryFacility but inventoryFacilityId 
>>> is empty, returning false for inventory check", module);
>>> +                            }
>>> +                        } else {
>>> +                            List<GenericValue>  productFacilities = null;
>>> +                            GenericValue productFacility = null;
>>> +
>>> +                            try {
>>> +                                productFacilities = 
>>> delegator.getRelatedCache("ProductFacility", product);
>>> +                            } catch (GenericEntityException e) {
>>> +                                Debug.logWarning(e, "Error invoking 
>>> getRelatedCache in isCatalogInventoryAvailable", module);
>>> +                            }
>>> +
>>> +                            if 
>>> (UtilValidate.isNotEmpty(productFacilities)) {
>>> +                                productFacility = 
>>> EntityUtil.getFirst(productFacilities);
>>> +                                inventoryFacilityId = (String) 
>>> productFacility.get("facilityId");
>>> +                            }
>>> +                        }
>>> +
>>> +                        Map<String, Object>  ripCtx = 
>>> FastMap.newInstance();
>>> +                        if (UtilValidate.isNotEmpty(inventoryFacilityId)&& 
>>>  UtilValidate.isNotEmpty(productId)&&  
>>> orderItem.getBigDecimal("quantity").compareTo(BigDecimal.ZERO)>  0) {
>>> +                            // do something tricky here: run as the 
>>> "system" user
>>> +                            GenericValue permUserLogin = 
>>> delegator.findByPrimaryKeyCache("UserLogin", UtilMisc.toMap("userLoginId", 
>>> "system"));
>>> +                            ripCtx.put("productId", productId);
>>> +                            ripCtx.put("facilityId", inventoryFacilityId);
>>> +                            ripCtx.put("inventoryItemTypeId", 
>>> "NON_SERIAL_INV_ITEM");
>>> +                            ripCtx.put("quantityAccepted", 
>>> orderItem.getBigDecimal("quantity"));
>>> +                            ripCtx.put("quantityRejected", 0.0);
>>> +                            ripCtx.put("userLogin", permUserLogin);
>>> +                            try {
>>> +                                Map<String, Object>  ripResult = 
>>> dispatcher.runSync("receiveInventoryProduct", ripCtx);
>>> +                                if (ServiceUtil.isError(ripResult)) {
>>> +                                    String errMsg = 
>>> ServiceUtil.getErrorMessage(ripResult);
>>> +                                    resErrorMessages.addAll((Collection<? 
>>> extends String>) UtilMisc.<String, String>toMap("reasonCode", 
>>> "ReceiveInventoryServiceError", "description", errMsg));
>>> +                                }
>>> +                            } catch (GenericServiceException e) {
>>> +                                Debug.logWarning(e, "Error invoking 
>>> receiveInventoryProduct service in createOrder", module);
>>> +                            }
>>> +                        }
>>> +                    }
>>> +                }
>>> +            }
>>> +
>>> +            // START inventory reservation
>>>             try {
>>>                 reserveInventory(delegator, dispatcher, userLogin, locale, 
>>> orderItemShipGroupInfo, dropShipGroupIds, itemValuesBySeqId,
>>>                         orderTypeId, productStoreId, resErrorMessages);
>>> 
>>> Modified: ofbiz/trunk/applications/order/testdef/ShoppingCartTests.xml
>>> URL: 
>>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/testdef/ShoppingCartTests.xml?rev=1166543&r1=1166542&r2=1166543&view=diff
>>> ==============================================================================
>>> --- ofbiz/trunk/applications/order/testdef/ShoppingCartTests.xml (original)
>>> +++ ofbiz/trunk/applications/order/testdef/ShoppingCartTests.xml Thu Sep  8 
>>> 07:07:07 2011
>>> @@ -25,4 +25,7 @@ under the License.
>>>     <test-case case-name="shoppingCart-test">
>>>         <simple-method-test 
>>> location="component://order/script/org/ofbiz/order/test/ShoppingCartTests.xml"
>>>  name="testCreateShoppingCart"/>
>>>     </test-case>
>>> +<test-case case-name="productServiceOrder-test">
>>> +<simple-method-test 
>>> location="component://order/script/org/ofbiz/order/test/ShoppingCartTests.xml"
>>>  name="testCreateOrderServiceProduct"/>
>>> +</test-case>
>>> </test-suite>
>>> 
>>> Modified: ofbiz/trunk/applications/product/data/ProductTypeData.xml
>>> URL: 
>>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/data/ProductTypeData.xml?rev=1166543&r1=1166542&r2=1166543&view=diff
>>> ==============================================================================
>>> --- ofbiz/trunk/applications/product/data/ProductTypeData.xml (original)
>>> +++ ofbiz/trunk/applications/product/data/ProductTypeData.xml Thu Sep  8 
>>> 07:07:07 2011
>>> @@ -498,6 +498,7 @@ under the License.
>>>     <ProductType description="Marketing Package: Pick Assembly" 
>>> isPhysical="Y" isDigital="N" hasTable="N" parentTypeId="MARKETING_PKG" 
>>> productTypeId="MARKETING_PKG_PICK"/>
>>>     <ProductType description="Work In Process" isPhysical="Y" isDigital="N" 
>>> hasTable="N" parentTypeId="GOOD" productTypeId="WIP"/>
>>>     <ProductType description="Configurable Good Configuration" 
>>> isPhysical="Y" isDigital="N" hasTable="N" parentTypeId="AGGREGATED" 
>>> productTypeId="AGGREGATED_CONF"/>
>>> +<ProductType description="Service a product which is received to- and 
>>> shipped from inventory" isPhysical="Y" isDigital="N" hasTable="N" 
>>> parentTypeId="" productTypeId="SERVICE_PRODUCT"/>
>>> 
>>>     <EnumerationType description="Product Requirement Method" 
>>> enumTypeId="PROD_REQ_METHOD" hasTable="N" parentTypeId=""/>
>>>     <!-- NONE: no requirement is created (default) -->
>>> 
>>> Modified: ofbiz/trunk/specialpurpose/ecommerce/data/DemoProduct.xml
>>> URL: 
>>> http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/ecommerce/data/DemoProduct.xml?rev=1166543&r1=1166542&r2=1166543&view=diff
>>> ==============================================================================
>>> --- ofbiz/trunk/specialpurpose/ecommerce/data/DemoProduct.xml (original)
>>> +++ ofbiz/trunk/specialpurpose/ecommerce/data/DemoProduct.xml Thu Sep  8 
>>> 07:07:07 2011
>>> @@ -710,7 +710,7 @@ under the License.
>>>     <ElectronicText dataResourceId="SERV-001-ALT" 
>>> textData="service-product"/>
>>>     <ElectronicText dataResourceId="DRSERV-001-ALTEN" textData="services"/>
>>>     <ElectronicText dataResourceId="DRSERV-001-ALTEN" 
>>> textData="service-product"/>
>>> -
>>> +
>>>     <Content contentId="SERV-001-ALT" contentTypeId="DOCUMENT" 
>>> dataResourceId="SERV-001-ALT" localeString="en"/>
>>>     <Content contentId="CSERV-001-ALTEN" contentTypeId="DOCUMENT" 
>>> dataResourceId="DRSERV-001-ALTEN" localeString="en_US"/>
>>>     <Content contentId="SV-1000-ALT" contentTypeId="DOCUMENT" 
>>> dataResourceId="SV-1000-ALT" localeString="en"/>
>>> @@ -720,6 +720,22 @@ under the License.
>>>     <ProductCategoryContent productCategoryId="SERV-001" 
>>> contentId="SERV-001-ALT" prodCatContentTypeId="ALTERNATIVE_URL" 
>>> fromDate="2001-05-13 12:00:00.0"/>
>>>     <ProductContent productId="SV-1000" contentId="SV-1000-ALT" 
>>> productContentTypeId="ALTERNATIVE_URL" fromDate="2001-05-13 12:00:00.0"/>
>>> 
>>> +<!-- test for service product type which is received to- and shipped from 
>>> inventory-->
>>> +<Product productId="SV-1001" productTypeId="SERVICE_PRODUCT" 
>>> primaryProductCategoryId="SERV-001" productName="Laundry service" 
>>> internalName="Service type product which is received to- and shipped from 
>>> inventory" description="Service type product which is received to- and 
>>> shipped from inventory for demonstration use" taxable="Y" 
>>> chargeShipping="N" autoCreateKeywords="Y" isVirtual="N" isVariant="N" 
>>> createdDate="2008-12-02 12:00:00.0" createdByUserLogin="admin" 
>>> lastModifiedDate="2008-12-02 12:00:00.0" lastModifiedByUserLogin="admin"/>
>>> +<ProductPrice productId="SV-1001" productPricePurposeId="PURCHASE" 
>>> productPriceTypeId="DEFAULT_PRICE" currencyUomId="USD" 
>>> productStoreGroupId="_NA_" fromDate="2011-08-02 12:00:00.0" price="10.99" 
>>> createdDate="2011-08-02 12:00:00.0" createdByUserLogin="admin"/>
>>> +<ProductCategoryMember productCategoryId="SERV-001" productId="SV-1001" 
>>> fromDate="2011-08-02 12:00:00.0"/>
>>> +<ProductCategoryMember productCategoryId="CATALOG1_SEARCH" 
>>> productId="SV-1001" fromDate="2011-08-02 12:00:00.0"/>
>>> +<DataResource dataResourceId="SV-1001-ALT" dataResourceTypeId="LINK" 
>>> objectInfo="lanudry-service-SV-1001-p"/>
>>> +<DataResource dataResourceTypeId="ELECTRONIC_TEXT" 
>>> dataResourceId="SV-1001-ALT" localeString="en"/>
>>> +<DataResource dataResourceTypeId="ELECTRONIC_TEXT" 
>>> dataResourceId="DRSV-1001-ALTEN" localeString="en_US"/>
>>> +<ElectronicText dataResourceId="SV-1001-ALT" textData="service-product"/>
>>> +<ElectronicText dataResourceId="DRSV-1001-ALTEN" 
>>> textData="service-product"/>
>>> +
>>> +<Content contentId="SV-1001-ALT" contentTypeId="DOCUMENT" 
>>> dataResourceId="SV-1001-ALT" localeString="en"/>
>>> +<Content contentId="CSV-1001-ALTEN" contentTypeId="DOCUMENT" 
>>> dataResourceId="DRSV-1001-ALTEN" localeString="en_US"/>
>>> +<ContentAssoc contentId="SV-1001-ALT" contentIdTo="CSV-1001-ALTEN" 
>>> contentAssocTypeId="ALTERNATE_LOCALE" fromDate="2011-08-02 12:00:00.0"/>
>>> +<ProductContent productId="SV-1001" contentId="SV-1001-ALT" 
>>> productContentTypeId="ALTERNATIVE_URL" fromDate="2011-08-02 12:00:00.0"/>
>>> +
>>>     <ProductFeatureCategory productFeatureCategoryId="8000" 
>>> description="License Features"/>
>>>     <ProductFeatureCategoryAppl productFeatureCategoryId="8000" 
>>> productCategoryId="CATALOG1_SEARCH" fromDate="2001-05-13 12:00:00.0"/>
>>> 
>>> @@ -975,6 +991,7 @@ under the License.
>>>     <ProductFacility productId="GZ-1000" facilityId="WebStoreWarehouse" 
>>> minimumStock="2" reorderQuantity="10" daysToShip="1"/>
>>>     <ProductFacility productId="GZ-1001" facilityId="WebStoreWarehouse" 
>>> minimumStock="2" reorderQuantity="10" daysToShip="1"/>
>>>     <ProductFacility productId="GZ-1004" facilityId="WebStoreWarehouse" 
>>> minimumStock="2" reorderQuantity="10" daysToShip="1"/>
>>> +<ProductFacility productId="SV-1001" facilityId="WebStoreWarehouse" 
>>> minimumStock="2" reorderQuantity="10" daysToShip="1"/>
>>> 
>>>     <ProductFacilityLocation productId="GZ-2644" 
>>> facilityId="WebStoreWarehouse" locationSeqId="TLTLTLUL01"/>
>>>     <ProductFacilityLocation productId="GZ-2644" 
>>> facilityId="WebStoreWarehouse" locationSeqId="TLTLTLLL01" minimumStock="2" 
>>> moveQuantity="5"/>
>>> @@ -987,6 +1004,7 @@ under the License.
>>>     <ProductFacilityLocation productId="GZ-1000" 
>>> facilityId="WebStoreWarehouse" locationSeqId="TLTLTLUL01" minimumStock="5" 
>>> moveQuantity="20"/>
>>>     <ProductFacilityLocation productId="GZ-1001" 
>>> facilityId="WebStoreWarehouse" locationSeqId="TLTLTLLL02" minimumStock="5" 
>>> moveQuantity="20"/>
>>>     <ProductFacilityLocation productId="GZ-1004" 
>>> facilityId="WebStoreWarehouse" locationSeqId="TLTLTLLL04" minimumStock="5" 
>>> moveQuantity="20"/>
>>> +<ProductFacilityLocation productId="SV-1001" 
>>> facilityId="WebStoreWarehouse" locationSeqId="TLTLTLLL04" minimumStock="5" 
>>> moveQuantity="20"/>
>>> 
>>>     <!-- some default inventory quantities, things are a bit underutilized 
>>> without these... -->
>>>     <InventoryItem facilityId="WebStoreWarehouse" 
>>> locationSeqId="TLTLTLUL01" datetimeReceived="2008-08-01 08:00:00.000"
>>> 
>>> 
> 

Reply via email to