You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ja...@apache.org on 2007/03/10 23:24:02 UTC

svn commit: r516798 - in /ofbiz/trunk/applications/manufacturing: servicedef/services_mrp.xml src/org/ofbiz/manufacturing/mrp/MrpServices.java src/org/ofbiz/manufacturing/mrp/ProposedOrder.java webapp/manufacturing/mrp/MrpForms.xml

Author: jacopoc
Date: Sat Mar 10 14:24:01 2007
New Revision: 516798

URL: http://svn.apache.org/viewvc?view=rev&rev=516798
Log:
Added support for facility groups in MRP: if a facility group is specified (instead of a facility id) the MRP will use the facilities in the group as warehouse facility (WAREHOUSE) and manufacturing facility (PLANT).

Modified:
    ofbiz/trunk/applications/manufacturing/servicedef/services_mrp.xml
    ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/mrp/MrpServices.java
    ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/mrp/ProposedOrder.java
    ofbiz/trunk/applications/manufacturing/webapp/manufacturing/mrp/MrpForms.xml

Modified: ofbiz/trunk/applications/manufacturing/servicedef/services_mrp.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/manufacturing/servicedef/services_mrp.xml?view=diff&rev=516798&r1=516797&r2=516798
==============================================================================
--- ofbiz/trunk/applications/manufacturing/servicedef/services_mrp.xml (original)
+++ ofbiz/trunk/applications/manufacturing/servicedef/services_mrp.xml Sat Mar 10 14:24:01 2007
@@ -28,8 +28,9 @@
     <service name="executeMrp" engine="java"
             location="org.ofbiz.manufacturing.mrp.MrpServices" invoke="executeMrp" auth="true" use-transaction="false">
         <description>Performs a run of Mrp</description>
-        <attribute name="facilityId" type="String" form-display="true" form-label="Facility" mode="IN" optional="false"/>
-        <attribute name="mrpName" type="String" form-display="true" form-label="Mrp Name" mode="IN" optional="true"/>
+        <attribute name="facilityGroupId" type="String" mode="IN" optional="true"/>
+        <attribute name="facilityId" type="String" mode="IN" optional="true"/>
+        <attribute name="mrpName" type="String" mode="IN" optional="true"/>
         <attribute name="msgResult" type="List" mode="OUT" optional="false"/>
     </service>
     <service name="initInventoryEventPlanned" engine="java"

Modified: ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/mrp/MrpServices.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/mrp/MrpServices.java?view=diff&rev=516798&r1=516797&r2=516798
==============================================================================
--- ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/mrp/MrpServices.java (original)
+++ ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/mrp/MrpServices.java Sat Mar 10 14:24:01 2007
@@ -463,15 +463,51 @@
      */
     public static Map executeMrp(DispatchContext ctx, Map context) {
         Debug.logInfo("executeMrp called", module);
-        //Context
+
         GenericDelegator delegator = ctx.getDelegator();
         LocalDispatcher dispatcher = ctx.getDispatcher();
         GenericValue userLogin = (GenericValue) context.get("userLogin");
         Timestamp now = UtilDateTime.nowTimestamp();
         
         String mrpName = (String)context.get("mrpName");
+        String facilityGroupId = (String)context.get("facilityGroupId");
         String facilityId = (String)context.get("facilityId");
-        // Variable declaration
+        String manufacturingFacilityId = null;
+        if (UtilValidate.isEmpty(facilityId) && UtilValidate.isEmpty(facilityGroupId)) {
+            return ServiceUtil.returnError("facilityId and facilityGroupId cannot be both null");
+        }
+        if (UtilValidate.isEmpty(facilityId)) {
+            try {
+                GenericValue facilityGroup = delegator.findByPrimaryKey("FacilityGroup", UtilMisc.toMap("facilityGroupId", facilityGroupId));
+                if (UtilValidate.isEmpty(facilityGroup)) {
+                    return ServiceUtil.returnError("facilityGroupId [" + facilityGroupId + "] is not valid");
+                }
+                List facilities = facilityGroup.getRelated("FacilityGroupMember", UtilMisc.toList("sequenceNum"));
+                if (UtilValidate.isEmpty(facilities)) {
+                    return ServiceUtil.returnError("No facility associated to facilityGroupId [" + facilityGroupId + "]");
+                }
+                Iterator facilitiesIt = facilities.iterator();
+                while (facilitiesIt.hasNext()) {
+                    GenericValue facilityMember = (GenericValue)facilitiesIt.next();
+                    GenericValue facility = facilityMember.getRelatedOne("Facility");
+                    if ("WAREHOUSE".equals(facility.getString("facilityTypeId")) && UtilValidate.isEmpty(facilityId)) {
+                        facilityId = facility.getString("facilityId");
+                    }
+                    if ("PLANT".equals(facility.getString("facilityTypeId")) && UtilValidate.isEmpty(manufacturingFacilityId)) {
+                        manufacturingFacilityId = facility.getString("facilityId");
+                    }
+                }
+            } catch (GenericEntityException e) {
+                return ServiceUtil.returnError("Problem loading facility group information: " + e.getMessage());
+            }
+        } else {
+            manufacturingFacilityId = facilityId;
+        }
+
+        if (UtilValidate.isEmpty(facilityId) || UtilValidate.isEmpty(manufacturingFacilityId)) {
+            return ServiceUtil.returnError("facilityId and manufacturingFacilityId cannot be both null");
+        }
+        
         int bomLevelWithNoEvent = 0;
         double stockTmp = 0;
         String oldProductId = null;
@@ -486,7 +522,7 @@
         double minimumStock = 0;
         int daysToShip = 0;
         List components = null;
-        boolean isbuild = false;
+        boolean isBuilt = false;
         GenericValue routing = null;
         
         Map result = null;
@@ -565,9 +601,9 @@
                         components = (List)serviceResponse.get("components");
                         if (components != null && components.size() > 0) {
                             BOMNode node = ((BOMNode)components.get(0)).getParentNode();
-                            isbuild = node.isManufactured();
+                            isBuilt = node.isManufactured();
                         } else {
-                            isbuild = false;
+                            isBuilt = false;
                         }
                         // #####################################################
 
@@ -581,7 +617,7 @@
                         eventDate = inventoryEventForMRP.getTimestamp("eventDate");
                         // to be just before the requirement
                         eventDate.setTime(eventDate.getTime()-1);
-                        ProposedOrder proposedOrder = new ProposedOrder(product, facilityId, isbuild, eventDate, qtyToStock);
+                        ProposedOrder proposedOrder = new ProposedOrder(product, facilityId, manufacturingFacilityId, isBuilt, eventDate, qtyToStock);
                         proposedOrder.setMrpName(mrpName);
                         // calculate the ProposedOrder quantity and update the quantity object property.
                         proposedOrder.calculateQuantityToSupply(reorderQuantity, minimumStock, iteratorListInventoryEventForMRP);
@@ -607,15 +643,15 @@
                         }
                         if (components != null && components.size() > 0) {
                             BOMNode node = ((BOMNode)components.get(0)).getParentNode();
-                            isbuild = node.isManufactured();
+                            isBuilt = node.isManufactured();
                         } else {
-                            isbuild = false;
+                            isBuilt = false;
                         }
                         // #####################################################
                         
                         // calculate the ProposedOrder requirementStartDate and update the requirementStartDate object property.
                         Map routingTaskStartDate = proposedOrder.calculateStartDate(daysToShip, routing, delegator, dispatcher, userLogin);
-                        if (isbuild) {
+                        if (isBuilt) {
                             // process the product components
                             processBomComponent(product, proposedOrder.getQuantity(), proposedOrder.getRequirementStartDate(), routingTaskStartDate, components);
                         }
@@ -625,7 +661,7 @@
                         }
                         Map eventMap = UtilMisc.toMap("productId", product.getString("productId"),
                                                       "eventDate", eventDate,
-                                                      "inventoryEventPlanTypeId", (isbuild? "PROP_MANUF_O_RECP" : "PROP_PUR_O_RECP"));
+                                                      "inventoryEventPlanTypeId", (isBuilt? "PROP_MANUF_O_RECP" : "PROP_PUR_O_RECP"));
                         try {
                             InventoryEventPlannedServices.createOrUpdateInventoryEventPlanned(eventMap, new Double(proposedOrder.getQuantity()), null, delegator);
                         } catch (GenericEntityException e) {

Modified: ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/mrp/ProposedOrder.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/mrp/ProposedOrder.java?view=diff&rev=516798&r1=516797&r2=516798
==============================================================================
--- ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/mrp/ProposedOrder.java (original)
+++ ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/mrp/ProposedOrder.java Sat Mar 10 14:24:01 2007
@@ -50,20 +50,22 @@
     public static final String resource = "ManufacturingUiLabels";
     
     protected GenericValue product;
-    protected boolean isbuild;
+    protected boolean isBuilt;
     protected String productId;
     protected String facilityId;
+    protected String manufacturingFacilityId;
     protected String mrpName;
     protected Timestamp requiredByDate;
     protected Timestamp requirementStartDate;
     protected double quantity;
     
     
-    public ProposedOrder(GenericValue product, String facilityId, boolean isbuild, Timestamp requiredByDate, double quantity) {
+    public ProposedOrder(GenericValue product, String facilityId, String manufacturingFacilityId, boolean isBuilt, Timestamp requiredByDate, double quantity) {
         this.product = product;
         this.productId = product.getString("productId");
         this.facilityId = facilityId;
-        this.isbuild = isbuild;
+        this.manufacturingFacilityId = manufacturingFacilityId;
+        this.isBuilt = isBuilt;
         this.requiredByDate = requiredByDate;
         this.quantity = quantity;
         this.requirementStartDate = null;
@@ -97,7 +99,7 @@
         Map result = null;
         Timestamp endDate = (Timestamp) requiredByDate.clone();
         Timestamp startDate = endDate;
-        if (isbuild) {
+        if (isBuilt) {
             List listRoutingTaskAssoc = null;
             if (routing == null) {
                 try {
@@ -211,11 +213,11 @@
         Map parameters = UtilMisc.toMap("userLogin", userLogin);
         
         parameters.put("productId", productId);
-        parameters.put("facilityId", facilityId);
+        parameters.put("facilityId", (isBuilt? manufacturingFacilityId: facilityId));
         parameters.put("requiredByDate", requiredByDate);
         parameters.put("requirementStartDate", requirementStartDate);
         parameters.put("quantity", new Double(quantity));
-        parameters.put("requirementTypeId", (isbuild? "INTERNAL_REQUIREMENT" : "PRODUCT_REQUIREMENT"));
+        parameters.put("requirementTypeId", (isBuilt? "INTERNAL_REQUIREMENT" : "PRODUCT_REQUIREMENT"));
         if (mrpName != null) {
             parameters.put("description", "MRP_" + mrpName);
         } else {

Modified: ofbiz/trunk/applications/manufacturing/webapp/manufacturing/mrp/MrpForms.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/manufacturing/webapp/manufacturing/mrp/MrpForms.xml?view=diff&rev=516798&r1=516797&r2=516798
==============================================================================
--- ofbiz/trunk/applications/manufacturing/webapp/manufacturing/mrp/MrpForms.xml (original)
+++ ofbiz/trunk/applications/manufacturing/webapp/manufacturing/mrp/MrpForms.xml Sat Mar 10 14:24:01 2007
@@ -20,10 +20,16 @@
 
 <forms xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:noNamespaceSchemaLocation="http://www.ofbiz.org/dtds/widget-form.xsd">
+
     <form name="RunMrp" type="single" target="runMrpGo" title="">
         <field name="mrpName"  title="${uiLabelMap.ManufacturingMrpName}"><text size="20"/></field>
+        <field name="facilityGroupId" title="${uiLabelMap.ProductFacilityGroup}">
+            <drop-down allow-empty="true">
+                <entity-options entity-name="FacilityGroup" description="${facilityGroupName} [${facilityGroupId}]"/>
+            </drop-down>
+        </field>
         <field name="facilityId" title="${uiLabelMap.ProductFacility}">
-            <drop-down allow-empty="false">
+            <drop-down allow-empty="true">
                 <entity-options entity-name="Facility" description="${facilityName} [${facilityId}]"/>
             </drop-down>
         </field>