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 2008/04/18 15:24:49 UTC

svn commit: r649532 - in /ofbiz/trunk/applications/manufacturing: script/org/ofbiz/manufacturing/jobshopmgt/ servicedef/ src/org/ofbiz/manufacturing/jobshopmgt/ webapp/manufacturing/WEB-INF/ webapp/manufacturing/WEB-INF/actions/jobshopmgt/ webapp/manuf...

Author: jacopoc
Date: Fri Apr 18 06:24:47 2008
New Revision: 649532

URL: http://svn.apache.org/viewvc?rev=649532&view=rev
Log:
Added ability to specify the primare/alternative locations for materials when using the quick produce form in the production run screen.

Added:
    ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/jobshopmgt/ProductionRunEvents.java   (with props)
Modified:
    ofbiz/trunk/applications/manufacturing/script/org/ofbiz/manufacturing/jobshopmgt/ProductionRunServices.xml
    ofbiz/trunk/applications/manufacturing/servicedef/services_production_run.xml
    ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/jobshopmgt/ProductionRunServices.java
    ofbiz/trunk/applications/manufacturing/webapp/manufacturing/WEB-INF/actions/jobshopmgt/ProductionRunDeclaration.bsh
    ofbiz/trunk/applications/manufacturing/webapp/manufacturing/WEB-INF/controller.xml
    ofbiz/trunk/applications/manufacturing/webapp/manufacturing/jobshopmgt/ProductionRunForms.xml
    ofbiz/trunk/applications/manufacturing/widget/manufacturing/JobshopScreens.xml

Modified: ofbiz/trunk/applications/manufacturing/script/org/ofbiz/manufacturing/jobshopmgt/ProductionRunServices.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/manufacturing/script/org/ofbiz/manufacturing/jobshopmgt/ProductionRunServices.xml?rev=649532&r1=649531&r2=649532&view=diff
==============================================================================
--- ofbiz/trunk/applications/manufacturing/script/org/ofbiz/manufacturing/jobshopmgt/ProductionRunServices.xml (original)
+++ ofbiz/trunk/applications/manufacturing/script/org/ofbiz/manufacturing/jobshopmgt/ProductionRunServices.xml Fri Apr 18 06:24:47 2008
@@ -222,8 +222,22 @@
                 <calculate field-name="quantityNotIssued" map-name="parameters"><number value="0"/></calculate>
             </if-compare>
             <if-not-empty field-name="workEffortGoodStandard">
-                <set value="WEGS_COMPLETED" field="workEffortGoodStandard.statusId"/>
-                <store-value value-name="workEffortGoodStandard"/>
+                <entity-and list-name="issuances" entity-name="WorkEffortAndInventoryAssign">
+                    <field-map field-name="workEffortId" env-name="workEffortGoodStandard.workEffortId"/>
+                    <field-map field-name="productId" env-name="workEffortGoodStandard.productId"/>
+                </entity-and>
+                <iterate list-name="issuances" entry-name="issuance">
+                    <calculate field-name="totalIssuance">
+                        <calcop operator="add">
+                            <calcop field-name="issuance.quantity" operator="get"/>
+                            <calcop field-name="totalIssuance" operator="get"/>
+                        </calcop>
+                    </calculate>
+                </iterate>
+                <if-compare-field field-name="workEffortGoodStandard.estimatedQuantity" operator="less-equals" to-field-name="totalIssuance" type="Double">
+                    <set value="WEGS_COMPLETED" field="workEffortGoodStandard.statusId"/>
+                    <store-value value-name="workEffortGoodStandard"/>
+                </if-compare-field>
             </if-not-empty>
         </if-not-empty>
     </simple-method>

Modified: ofbiz/trunk/applications/manufacturing/servicedef/services_production_run.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/manufacturing/servicedef/services_production_run.xml?rev=649532&r1=649531&r2=649532&view=diff
==============================================================================
--- ofbiz/trunk/applications/manufacturing/servicedef/services_production_run.xml (original)
+++ ofbiz/trunk/applications/manufacturing/servicedef/services_production_run.xml Fri Apr 18 06:24:47 2008
@@ -205,6 +205,7 @@
         <attribute name="lotId" type="String" mode="IN" optional="true"/>
         <attribute name="createLotIfNeeded" type="Boolean" mode="IN" optional="true"/>
         <attribute name="autoCreateLot" type="Boolean" mode="IN" optional="true"/>
+        <attribute name="componentsLocationMap" mode="IN" type="Map" optional="true"/>
     </service>
     <service name="productionRunTaskProduce" engine="java"
             location="org.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="productionRunTaskProduce" auth="true">
@@ -266,6 +267,7 @@
         <attribute name="addTaskTime" type="Double" mode="IN" optional="true"/>
         <attribute name="comments" type="String" mode="IN" optional="true"/>
         <attribute name="issueRequiredComponents" type="Boolean" mode="IN" optional="true"/>
+        <attribute name="componentsLocationMap" mode="IN" type="Map" optional="true"/>
     </service>
     <service name="quickRunProductionRunTask" engine="java"
             location="org.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="quickRunProductionRunTask" auth="true">

Added: ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/jobshopmgt/ProductionRunEvents.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/jobshopmgt/ProductionRunEvents.java?rev=649532&view=auto
==============================================================================
--- ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/jobshopmgt/ProductionRunEvents.java (added)
+++ ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/jobshopmgt/ProductionRunEvents.java Fri Apr 18 06:24:47 2008
@@ -0,0 +1,101 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *******************************************************************************/
+package org.ofbiz.manufacturing.jobshopmgt;
+
+import java.sql.Timestamp;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import org.ofbiz.base.util.Debug;
+import org.ofbiz.base.util.GeneralException;
+import org.ofbiz.base.util.UtilHttp;
+import org.ofbiz.base.util.UtilMisc;
+import org.ofbiz.entity.GenericDelegator;
+import org.ofbiz.entity.GenericPK;
+import org.ofbiz.service.GenericServiceException;
+import org.ofbiz.entity.GenericValue;
+import org.ofbiz.service.LocalDispatcher;
+
+import javolution.util.FastMap;
+
+public class ProductionRunEvents {
+
+    public static final String module = ProductionRunEvents.class.getName();
+
+    public static String productionRunDeclareAndProduce(HttpServletRequest request, HttpServletResponse response) {
+        HttpSession session = request.getSession();
+        GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
+        LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
+        GenericValue userLogin = (GenericValue) session.getAttribute("userLogin");
+        
+        Map parameters = UtilHttp.getParameterMap(request);
+
+        Double quantity = null;
+        try {
+            quantity = Double.valueOf((String)parameters.get("quantity"));
+        } catch(NumberFormatException nfe) {
+            String errMsg = "Invalid format for quantity field: " + nfe.toString();
+            Debug.logError(nfe, errMsg, module);
+            request.setAttribute("_ERROR_MESSAGE_", errMsg);
+            return "error";
+        }
+
+        Collection<Map<String, Object>> componentRows = UtilHttp.parseMultiFormData(parameters);
+        Map componentsLocationMap = FastMap.newInstance();
+        for (Map<String, Object>componentRow : componentRows) {
+            Timestamp fromDate = null;
+            try {
+                fromDate = Timestamp.valueOf((String)componentRow.get("fromDate"));
+            } catch(IllegalArgumentException iae) {
+                String errMsg = "Invalid format for date field: " + iae.toString();
+                Debug.logError(iae, errMsg, module);
+                request.setAttribute("_ERROR_MESSAGE_", errMsg);
+                return "error";
+            }
+            GenericPK key = GenericPK.create(delegator.getModelEntity("WorkEffortGoodStandard"), UtilMisc.toMap("workEffortId", (String)componentRow.get("productionRunTaskId"),
+                                                                                                                "productId", (String)componentRow.get("productId"),
+                                                                                                                "fromDate", fromDate,
+                                                                                                                "workEffortGoodStdTypeId", "PRUNT_PROD_NEEDED"));
+            componentsLocationMap.put(key, UtilMisc.toMap("locationSeqId", (String)componentRow.get("locationSeqId"),
+                                                          "secondaryLocationSeqId", (String)componentRow.get("secondaryLocationSeqId"),
+                                                          "failIfItemsAreNotAvailable", (String)componentRow.get("failIfItemsAreNotAvailable")));
+        }
+
+        try {
+            Map inputMap = UtilMisc.toMap("workEffortId", parameters.get("workEffortId"), "inventoryItemTypeId", parameters.get("inventoryItemTypeId"));
+            inputMap.put("componentsLocationMap", componentsLocationMap);
+            inputMap.put("quantity", quantity);
+            inputMap.put("userLogin", userLogin);
+            Map result = dispatcher.runSync("productionRunDeclareAndProduce", inputMap);
+        } catch (GenericServiceException e) {
+            String errMsg = "Error issuing materials: " + e.toString();
+            Debug.logError(e, errMsg, module);
+            request.setAttribute("_ERROR_MESSAGE_", errMsg);
+            return "error";
+        }
+
+        return "success";
+    }
+}

Propchange: ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/jobshopmgt/ProductionRunEvents.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/jobshopmgt/ProductionRunEvents.java
------------------------------------------------------------------------------
    svn:keywords = Date Rev Author URL Id

Propchange: ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/jobshopmgt/ProductionRunEvents.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/jobshopmgt/ProductionRunServices.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/jobshopmgt/ProductionRunServices.java?rev=649532&r1=649531&r2=649532&view=diff
==============================================================================
--- ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/jobshopmgt/ProductionRunServices.java (original)
+++ ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/jobshopmgt/ProductionRunServices.java Fri Apr 18 06:24:47 2008
@@ -40,6 +40,7 @@
 import org.ofbiz.entity.GenericDelegator;
 import org.ofbiz.entity.GenericEntityException;
 import org.ofbiz.entity.GenericValue;
+import org.ofbiz.entity.GenericPK;
 import org.ofbiz.entity.util.EntityUtil;
 import org.ofbiz.entity.condition.EntityExpr;
 import org.ofbiz.entity.condition.EntityOperator;
@@ -1636,6 +1637,7 @@
         
         // Optional input fields
         Double quantity = (Double)context.get("quantity");
+        Map componentsLocationMap = (Map)context.get("componentsLocationMap");
        
         // The production run is loaded
         ProductionRun productionRun = new ProductionRun(productionRunId, delegator, dispatcher);
@@ -1667,6 +1669,7 @@
                         Map serviceContext = UtilMisc.toMap("productionRunId", productionRunId, "productionRunTaskId", taskId);
                         serviceContext.put("addQuantityProduced", new Double(minimumQuantityProducedByTask - quantityDeclared.doubleValue()));
                         serviceContext.put("issueRequiredComponents", Boolean.TRUE);
+                        serviceContext.put("componentsLocationMap", componentsLocationMap);
                         serviceContext.put("userLogin", userLogin);
                         Map resultService = dispatcher.runSync("updateProductionRunTask", serviceContext);
                     } catch (GenericServiceException e) {
@@ -1677,7 +1680,10 @@
             }
         }
         try {
-            result = dispatcher.runSync("productionRunProduce", context);
+            Map inputMap = FastMap.newInstance();
+            inputMap.putAll(context);
+            inputMap.remove("componentsLocationMap");
+            result = dispatcher.runSync("productionRunProduce", inputMap);
         } catch (GenericServiceException e) {
             Debug.logError(e, "Problem calling the changeProductionRunTaskStatus service", module);
             return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ManufacturingProductionRunStatusNotChanged", locale));
@@ -1877,6 +1883,7 @@
         Double addTaskTime = (Double)context.get("addTaskTime");
         String comments = (String)context.get("comments");
         Boolean issueRequiredComponents = (Boolean)context.get("issueRequiredComponents");
+        Map componentsLocationMap = (Map)context.get("componentsLocationMap");
         
         if (issueRequiredComponents == null) {
             issueRequiredComponents = Boolean.FALSE;
@@ -1970,8 +1977,18 @@
                         }
                         double requiredQuantity = totalRequiredMaterialQuantity - totalIssued;
                         if (requiredQuantity > 0) {
+                            GenericPK key = component.getPrimaryKey();
+                            Map componentsLocation = null;
+                            if (componentsLocationMap != null) {
+                                componentsLocation = (Map)componentsLocationMap.get(key);
+                            }
                             Map serviceContext = UtilMisc.toMap("workEffortId", workEffortId, "productId", component.getString("productId"), "fromDate", component.getTimestamp("fromDate"));
                             serviceContext.put("quantity", new Double(requiredQuantity));
+                            if (componentsLocation != null) {
+                                serviceContext.put("locationSeqId", (String)componentsLocation.get("locationSeqId"));
+                                serviceContext.put("secondaryLocationSeqId", (String)componentsLocation.get("secondaryLocationSeqId"));
+                                serviceContext.put("failIfItemsAreNotAvailable", (String)componentsLocation.get("failIfItemsAreNotAvailable"));
+                            }
                             serviceContext.put("userLogin", userLogin);
                             Map resultService = dispatcher.runSync("issueProductionRunTaskComponent", serviceContext);
                         }

Modified: ofbiz/trunk/applications/manufacturing/webapp/manufacturing/WEB-INF/actions/jobshopmgt/ProductionRunDeclaration.bsh
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/manufacturing/webapp/manufacturing/WEB-INF/actions/jobshopmgt/ProductionRunDeclaration.bsh?rev=649532&r1=649531&r2=649532&view=diff
==============================================================================
--- ofbiz/trunk/applications/manufacturing/webapp/manufacturing/WEB-INF/actions/jobshopmgt/ProductionRunDeclaration.bsh (original)
+++ ofbiz/trunk/applications/manufacturing/webapp/manufacturing/WEB-INF/actions/jobshopmgt/ProductionRunDeclaration.bsh Fri Apr 18 06:24:47 2008
@@ -240,10 +240,9 @@
                     componentData.put("isRunning", "null");
                 }
                 productionRunComponentsData.add(componentData);
-                if (component.getString("workEffortId").equals(issueTaskId)) {
+                if (productionRunTask.getString("currentStatusId").equals("PRUN_RUNNING") && "WEGS_CREATED".equals(component.getString("statusId"))) {
                     productionRunComponentsDataReadyForIssuance.add(componentData);
-                }
-                if (totalIssued > 0.0) {
+                } else if (totalIssued > 0.0) {
                     productionRunComponentsAlreadyIssued.add(componentData);
                 }
             }

Modified: ofbiz/trunk/applications/manufacturing/webapp/manufacturing/WEB-INF/controller.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/manufacturing/webapp/manufacturing/WEB-INF/controller.xml?rev=649532&r1=649531&r2=649532&view=diff
==============================================================================
--- ofbiz/trunk/applications/manufacturing/webapp/manufacturing/WEB-INF/controller.xml (original)
+++ ofbiz/trunk/applications/manufacturing/webapp/manufacturing/WEB-INF/controller.xml Fri Apr 18 06:24:47 2008
@@ -655,7 +655,7 @@
     </request-map>
     <request-map uri="productionRunDeclareAndProduce">
         <security https="true" auth="true"/>
-        <event type="service" invoke="productionRunDeclareAndProduce"/>
+        <event type="java" path="org.ofbiz.manufacturing.jobshopmgt.ProductionRunEvents" invoke="productionRunDeclareAndProduce"/>
         <response name="success" type="view" value="ProductionRunDeclaration"/>
         <response name="error" type="view" value="ProductionRunDeclaration"/>
     </request-map>

Modified: ofbiz/trunk/applications/manufacturing/webapp/manufacturing/jobshopmgt/ProductionRunForms.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/manufacturing/webapp/manufacturing/jobshopmgt/ProductionRunForms.xml?rev=649532&r1=649531&r2=649532&view=diff
==============================================================================
--- ofbiz/trunk/applications/manufacturing/webapp/manufacturing/jobshopmgt/ProductionRunForms.xml (original)
+++ ofbiz/trunk/applications/manufacturing/webapp/manufacturing/jobshopmgt/ProductionRunForms.xml Fri Apr 18 06:24:47 2008
@@ -252,7 +252,7 @@
             <submit button-type="button"/>
         </field>
     </form>
-    <form name="ProductionRunDeclareAndProduce" type="single" target="productionRunDeclareAndProduce" title="" default-map-name="productionRunData"
+    <form name="ProductionRunDeclareAndProduceTop" type="single" skip-end="true" target="productionRunDeclareAndProduce" title="" default-map-name="productionRunData"
         header-row-style="header-row" default-table-style="basic-table">
         <field name="workEffortId"><hidden/></field>
         <field name="quantity" title="${uiLabelMap.ManufacturingProduceQuantity}" tooltip="If required, materials will be issued as well."><text/></field>
@@ -261,9 +261,44 @@
                 <entity-options entity-name="InventoryItemType" description="${description}"/>
             </drop-down>
         </field>
-        <field name="submitButton" title="${uiLabelMap.CommonAdd}">
-            <submit button-type="button"/>
+    </form>
+    <form name="ProductionRunDeclareAndProduceBottom" skip-start="true" type="multi" title="" list-name="productionRunComponentsDataReadyForIssuance"
+        odd-row-style="alternate-row" default-table-style="basic-table hover-bar">
+        <field name="productionRunTaskId" entry-name="workEffortId"><hidden/></field>
+        <field name="productId"><hidden/></field>
+        <field name="fromDate"><hidden/></field>
+        <field name="failIfItemsAreNotAvailable">
+            <drop-down allow-empty="false">
+                <option key="Y" description="${uiLabelMap.CommonYes}"/>
+                <option key="N" description="${uiLabelMap.CommonNo}"/>
+            </drop-down>
+        </field>
+        <field name="task" entry-name="workEffortId" title="${uiLabelMap.ManufacturingRoutingTaskId}">
+            <display description="${workEffortName} [${workEffortId}]" also-hidden="false"/>
+        </field>
+        <field name="internalName" title="${uiLabelMap.ProductProductName}">
+            <display description="${productName} [${productId}]" also-hidden="false"/>
+        </field> 
+        <field name="estimatedQuantity" title="${uiLabelMap.ManufacturingQuantity}"><display also-hidden="false"/></field>
+        <field name="issuedQuantity" title="${uiLabelMap.ManufacturingIssuedQuantity}"><display also-hidden="false"/></field>
+        <field name="locationSeqId">
+            <drop-down allow-empty="true">
+                <entity-options entity-name="ProductFacilityLocation" description="${locationSeqId}">
+                    <entity-constraint name="productId" env-name="productId"/>
+                    <entity-constraint name="facilityId" env-name="facilityId"/>
+                </entity-options>
+            </drop-down>
+        </field>
+        <field name="secondaryLocationSeqId">
+            <drop-down allow-empty="true">
+                <entity-options entity-name="ProductFacilityLocation" description="${locationSeqId}" key-field-name="locationSeqId">
+                    <entity-constraint name="productId" env-name="productId"/>
+                    <entity-constraint name="facilityId" env-name="facilityId"/>
+                </entity-options>
+            </drop-down>
         </field>
+        <field name="_rowSubmit"><hidden value="Y"/></field>
+        <field name="submitButton" title="${uiLabelMap.CommonSubmit}"><submit/></field>
     </form>
    
     <form name="ListProductionRunDeclRoutingTasks" type="list" target="ProductionRunDeclaration" title="" list-name="productionRunRoutingTasks"

Modified: ofbiz/trunk/applications/manufacturing/widget/manufacturing/JobshopScreens.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/manufacturing/widget/manufacturing/JobshopScreens.xml?rev=649532&r1=649531&r2=649532&view=diff
==============================================================================
--- ofbiz/trunk/applications/manufacturing/widget/manufacturing/JobshopScreens.xml (original)
+++ ofbiz/trunk/applications/manufacturing/widget/manufacturing/JobshopScreens.xml Fri Apr 18 06:24:47 2008
@@ -274,8 +274,9 @@
                                     </container>
                                     <container style="screenlet-body">
                                         <section>
-                                            <widgets>                                        
-                                                <include-form name="ProductionRunDeclareAndProduce" location="component://manufacturing/webapp/manufacturing/jobshopmgt/ProductionRunForms.xml"/>
+                                            <widgets>
+                                                <include-form name="ProductionRunDeclareAndProduceTop" location="component://manufacturing/webapp/manufacturing/jobshopmgt/ProductionRunForms.xml"/>
+                                                <include-form name="ProductionRunDeclareAndProduceBottom" location="component://manufacturing/webapp/manufacturing/jobshopmgt/ProductionRunForms.xml"/>
                                             </widgets>
                                         </section>
                                     </container>