Just a quick note: this might have been easier using the "row- actions" stuff in the form widget.

-David


2007/1/30, [EMAIL PROTECTED] <[EMAIL PROTECTED]>:
Author: sichen
Date: Tue Jan 30 15:11:32 2007
New Revision: 501633

URL: http://svn.apache.org/viewvc?view=rev&rev=501633
Log:
Added QOH and ATP for the approved product requirements list. The idea is to be able to see what the inventory is before creating POs based on requirements.

Modified:
ofbiz/trunk/applications/order/script/org/ofbiz/order/order/ OrderServices.xml ofbiz/trunk/applications/order/src/org/ofbiz/order/requirement/ RequirementServices.java ofbiz/trunk/applications/order/webapp/ordermgr/requirement/ RequirementForms.xml

Modified: ofbiz/trunk/applications/order/script/org/ofbiz/order/ order/OrderServices.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/ script/org/ofbiz/order/order/OrderServices.xml? view=diff&rev=501633&r1=501632&r2=501633 ====================================================================== ======== --- ofbiz/trunk/applications/order/script/org/ofbiz/order/order/ OrderServices.xml (original) +++ ofbiz/trunk/applications/order/script/org/ofbiz/order/order/ OrderServices.xml Tue Jan 30 15:11:32 2007
@@ -127,6 +127,14 @@

<simple-method method-name="createRequirementAndCommitment" short-description="create a requirement and commitment for it"> <set value="PRODUCT_REQUIREMENT" field="inputMap.requirementTypeId"/>
+
+ <!-- Include the facilityId corresponding to this order by looking up the ProductStore --> + <entity-one entity-name="OrderHeader" value- name="orderHeader" auto-field-map="true"/> + <get-related-one value-name="orderHeader" relation- name="ProductStore" to-value-name="productStore" use-cache="true"/>
+        <if-not-empty field-name="productStore.inventoryFacilityId">
+ <set from-field="productStore.inventoryFacilityId" field="inputMap.facilityId"/>
+        </if-not-empty>
+
<call-service service-name="createRequirement" in-map- name="inputMap"> <result-to-field field-name="parameters.requirementId" result-name="requirementId"/>
         </call-service>

Modified: ofbiz/trunk/applications/order/src/org/ofbiz/order/ requirement/RequirementServices.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/ src/org/ofbiz/order/requirement/RequirementServices.java? view=diff&rev=501633&r1=501632&r2=501633 ====================================================================== ======== --- ofbiz/trunk/applications/order/src/org/ofbiz/order/requirement/ RequirementServices.java (original) +++ ofbiz/trunk/applications/order/src/org/ofbiz/order/requirement/ RequirementServices.java Tue Jan 30 15:11:32 2007
@@ -24,13 +24,14 @@
 import javolution.util.FastMap;

 import org.ofbiz.base.util.*;
+import org.ofbiz.entity.*;
+import org.ofbiz.entity.condition.*;
 import org.ofbiz.entity.GenericDelegator;
 import org.ofbiz.entity.GenericEntityException;
 import org.ofbiz.entity.GenericValue;
-import org.ofbiz.entity.*;
-import org.ofbiz.entity.condition.*;
 import org.ofbiz.entity.util.EntityUtil;
 import org.ofbiz.service.DispatchContext;
+import org.ofbiz.service.GenericServiceException;
 import org.ofbiz.service.LocalDispatcher;
 import org.ofbiz.service.ServiceUtil;

@@ -45,6 +46,7 @@

public static final Map getRequirementsForSupplier (DispatchContext ctx, Map context) {
         GenericDelegator delegator = ctx.getDelegator();
+        LocalDispatcher dispatcher = ctx.getDispatcher();
         Locale locale = (Locale) context.get("locale");

EntityCondition requirementConditions = (EntityCondition) context.get("requirementConditions");
@@ -71,27 +73,59 @@
             }
List requirementAndRoles = delegator.findByAnd ("RequirementAndRole", conditions, orderBy);

+ // maps to cache the associated suppliers and products data
+            Map suppliers = FastMap.newInstance();
+            Map gids = FastMap.newInstance();
+            Map inventories = FastMap.newInstance();
+
// join in fields with extra data about the suppliers and products
             List requirements = FastList.newInstance();
for (Iterator iter = requirementAndRoles.iterator(); iter.hasNext(); ) { GenericValue requirement = (GenericValue) iter.next (); + String productId = requirement.getString ("productId");
+                partyId = requirement.getString("partyId");
+ String facilityId = requirement.getString ("facilityId");
                 Map union = FastMap.newInstance();

                 // get an available supplier product
-                conditions = UtilMisc.toList(
- new EntityExpr("partyId", EntityOperator.EQUALS, requirement.get("partyId")), - new EntityExpr("productId", EntityOperator.EQUALS, requirement.get("productId")), - EntityUtil.getFilterByDateExpr ("availableFromDate", "availableThruDate")
-                        );
- GenericValue supplierProduct = EntityUtil.getFirst ( delegator.findByAnd("SupplierProduct", conditions) );
-                if (supplierProduct != null) {
-                    union.putAll(supplierProduct.getAllFields());
+                String supplierKey =  partyId + "^" + productId;
+ GenericValue supplierProduct = (GenericValue) suppliers.get(supplierKey);
+                if (supplierProduct == null) {
+                    conditions = UtilMisc.toList(
+ new EntityExpr("partyId", EntityOperator.EQUALS, partyId), + new EntityExpr("productId", EntityOperator.EQUALS, productId), + EntityUtil.getFilterByDateExpr ("availableFromDate", "availableThruDate")
+                            );
+ supplierProduct = EntityUtil.getFirst ( delegator.findByAnd("SupplierProduct", conditions) );
+                    suppliers.put(supplierKey, supplierProduct);
                 }
+ if (supplierProduct != null) union.putAll (supplierProduct.getAllFields());

// for good identification, get the UPCA type (UPC code) - GenericValue gid = delegator.findByPrimaryKey ("GoodIdentification", UtilMisc.toMap("goodIdentificationTypeId", "UPCA", "productId", requirement.get("productId"))); + GenericValue gid = (GenericValue) gids.get (productId);
+                if (gid == null) {
+ gid = delegator.findByPrimaryKey ("GoodIdentification", UtilMisc.toMap("goodIdentificationTypeId", "UPCA", "productId", requirement.get("productId")));
+                    gids.put(productId, gid);
+                }
if (gid != null) union.put("idValue", gid.get ("idValue"));

+                // the ATP and QOH quantities
+                if (UtilValidate.isNotEmpty(facilityId)) {
+ String inventoryKey = facilityId + "^" + productId; + Map inventory = (Map) inventories.get (inventoryKey);
+                    if (inventory == null) {
+ inventory = dispatcher.runSync ("getInventoryAvailableByFacility", UtilMisc.toMap("productId", productId, "facilityId", facilityId));
+                        if (ServiceUtil.isError(inventory)) {
+                            return inventory;
+                        }
+                        inventories.put(inventoryKey, inventory);
+                    }
+                    if (inventory != null) {
+ union.put("qoh", inventory.get ("quantityOnHandTotal")); + union.put("atp", inventory.get ("availableToPromiseTotal"));
+                    }
+                }
+
// add all the requirement fields last, to overwrite any conflicting fields
                 union.putAll(requirement.getAllFields());
                 requirements.add(union);
@@ -100,6 +134,9 @@
             Map results = ServiceUtil.returnSuccess();
             results.put("requirementsForSupplier", requirements);
             return results;
+        } catch (GenericServiceException e) {
+            Debug.logError(e, module);
+ return ServiceUtil.returnError (UtilProperties.getMessage(resource_error, "OrderServiceExceptionSeeLogs", locale));
         } catch (GenericEntityException e) {
             Debug.logError(e, module);
return ServiceUtil.returnError (UtilProperties.getMessage(resource_error, "OrderEntityExceptionSeeLogs", locale));

Modified: ofbiz/trunk/applications/order/webapp/ordermgr/ requirement/RequirementForms.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/ webapp/ordermgr/requirement/RequirementForms.xml? view=diff&rev=501633&r1=501632&r2=501633 ====================================================================== ======== --- ofbiz/trunk/applications/order/webapp/ordermgr/requirement/ RequirementForms.xml (original) +++ ofbiz/trunk/applications/order/webapp/ordermgr/requirement/ RequirementForms.xml Tue Jan 30 15:11:32 2007
@@ -320,6 +320,8 @@
<field name="minimumOrderQuantity" widget-area- style="tabletextright"><display/></field> <field name="lastPrice" widget-area- style="tabletextright"><display type="currency" currency="$ {currencyUomId}"/></field>
         <field name="requiredByDate"><display/></field>
+ <field name="atp" title="${uiLabelMap.ProductAtp}" widget- area-style="tabletextright"><display/></field> + <field name="qoh" title="${uiLabelMap.ProductQoh}" widget- area-style="tabletextright"><display/></field>
         <field name="quantity"><text size="4"/></field>
         <field name="comments"><display/></field>
<field name="_rowSubmit" title="$ {uiLabelMap.CommonSelect}"><check/></field>



Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to