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.xmlModified: 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 productsList 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 fieldsunion.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>
smime.p7s
Description: S/MIME cryptographic signature
