svn commit: r686748 - in /ofbiz/trunk/applications: manufacturing/config/ manufacturing/src/org/ofbiz/manufacturing/jobshopmgt/ manufacturing/webapp/manufacturing/WEB-INF/actions/jobshopmgt/ manufacturing/webapp/manufacturing/jobshopmgt/ manufacturing/...

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r686748 - in /ofbiz/trunk/applications: manufacturing/config/ manufacturing/src/org/ofbiz/manufacturing/jobshopmgt/ manufacturing/webapp/manufacturing/WEB-INF/actions/jobshopmgt/ manufacturing/webapp/manufacturing/jobshopmgt/ manufacturing/...

bibryam
Author: bibryam
Date: Mon Aug 18 06:30:35 2008
New Revision: 686748

URL: http://svn.apache.org/viewvc?rev=686748&view=rev
Log:
Add possibility for entering comments for configurable product options. The comments are attached to production runs as notes.
Thanks to Jacopo and BJ for their comments.
Internationalization note: this commit contains new UI labels.

Modified:
    ofbiz/trunk/applications/manufacturing/config/ManufacturingUiLabels.xml
    ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/jobshopmgt/ProductionRunServices.java
    ofbiz/trunk/applications/manufacturing/webapp/manufacturing/WEB-INF/actions/jobshopmgt/ViewProductionRun.groovy
    ofbiz/trunk/applications/manufacturing/webapp/manufacturing/jobshopmgt/ProductionRunForms.xml
    ofbiz/trunk/applications/manufacturing/widget/manufacturing/JobshopScreens.xml
    ofbiz/trunk/applications/order/webapp/ordermgr/entry/catalog/configproductdetail.ftl
    ofbiz/trunk/applications/product/src/org/ofbiz/product/config/ProductConfigWorker.java
    ofbiz/trunk/applications/product/src/org/ofbiz/product/config/ProductConfigWrapper.java

Modified: ofbiz/trunk/applications/manufacturing/config/ManufacturingUiLabels.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/manufacturing/config/ManufacturingUiLabels.xml?rev=686748&r1=686747&r2=686748&view=diff
==============================================================================
--- ofbiz/trunk/applications/manufacturing/config/ManufacturingUiLabels.xml (original)
+++ ofbiz/trunk/applications/manufacturing/config/ManufacturingUiLabels.xml Mon Aug 18 06:30:35 2008
@@ -1379,6 +1379,9 @@
         <value xml:lang="th">รายการของการผลิตสินค้าจากสินทรัพย์ไม่ถาวร</value>
         <value xml:lang="zh">生产运行固定资产列表</value>
     </property>
+    <property key="ManufacturingListOfProductionRunNotes">
+        <value xml:lang="en">List Of Production Run Notes</value>
+    </property>    
     <property key="ManufacturingListOfProductionRunRoutingTasks">
         <value xml:lang="en">Tasks</value>
         <value xml:lang="es">Lista de tareas de la corrida de producción</value>

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=686748&r1=686747&r2=686748&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 Mon Aug 18 06:30:35 2008
@@ -2196,6 +2196,25 @@
                     componentQuantity = new Double(totalQuantity.doubleValue() + componentQuantity.doubleValue());
                 }
                 components.put(componentProductId, componentQuantity);
+                
+                //  create production run notes from comments
+                String comments = co.getComments();
+                if (UtilValidate.isNotEmpty(comments)) {
+                    resultService.clear();
+                    serviceContext.clear();
+                    serviceContext.put("workEffortId", productionRunId);
+                    serviceContext.put("internalNote", "Y");
+                    serviceContext.put("noteInfo", comments);
+                    serviceContext.put("noteName", co.getDescription());
+                    serviceContext.put("userLogin", userLogin);
+                    serviceContext.put("noteParty", userLogin.getString("partyId"));                                        
+                    try {
+                        resultService = dispatcher.runSync("createWorkEffortNote", serviceContext);
+                    } catch (GenericServiceException e) {
+                        Debug.logWarning(e.getMessage(), module);
+                        return ServiceUtil.returnError(e.getMessage());
+                    }
+                }
             }
         }
         

Modified: ofbiz/trunk/applications/manufacturing/webapp/manufacturing/WEB-INF/actions/jobshopmgt/ViewProductionRun.groovy
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/manufacturing/webapp/manufacturing/WEB-INF/actions/jobshopmgt/ViewProductionRun.groovy?rev=686748&r1=686747&r2=686748&view=diff
==============================================================================
--- ofbiz/trunk/applications/manufacturing/webapp/manufacturing/WEB-INF/actions/jobshopmgt/ViewProductionRun.groovy (original)
+++ ofbiz/trunk/applications/manufacturing/webapp/manufacturing/WEB-INF/actions/jobshopmgt/ViewProductionRun.groovy Mon Aug 18 06:30:35 2008
@@ -63,5 +63,11 @@
         context.quantity = productionRun.getQuantity(); // this is useful to compute the total estimates runtime in the form
         //  Product component/parts list
         context.productionRunComponents = productionRun.getProductionRunComponents();;
+        
+        // Find all the notes linked to this production run.
+        productionRunNoteData = delegator.findByAnd("WorkEffortNoteAndData", [workEffortId : productionRunId]);
+        if (productionRunNoteData) {
+            context.productionRunNoteData = productionRunNoteData;
+        }        
     }
 }

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=686748&r1=686747&r2=686748&view=diff
==============================================================================
--- ofbiz/trunk/applications/manufacturing/webapp/manufacturing/jobshopmgt/ProductionRunForms.xml (original)
+++ ofbiz/trunk/applications/manufacturing/webapp/manufacturing/jobshopmgt/ProductionRunForms.xml Mon Aug 18 06:30:35 2008
@@ -520,6 +520,15 @@
             <display-entity entity-name="StatusItem" />
         </field>
     </form>
+    <form name="ListProductionRunNotes" type="list" title="" list-name="productionRunNoteData"
+        odd-row-style="alternate-row" default-table-style="basic-table hover-bar">
+        <auto-fields-entity entity-name="WorkEffortNoteAndData" default-field-type="display" />
+        <field name="workEffortId"><hidden/></field>
+        <field name="internalNote"><hidden/></field>
+        <field name="noteId"><hidden/></field>
+        <field name="noteParty"><hidden/></field>
+        <field name="noteDateTime"><hidden/></field>
+    </form>    
     <form name="EditProductionRunTaskFixedAsset" type="single" target="EditProductionRun" title="" default-map-name="fixedAssetData"
         header-row-style="header-row" default-table-style="basic-table">
         <alt-target use-when="declarationScreen.equals(&quot;Y&quot;)" target="ProductionRunDeclaration" />

Modified: ofbiz/trunk/applications/manufacturing/widget/manufacturing/JobshopScreens.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/manufacturing/widget/manufacturing/JobshopScreens.xml?rev=686748&r1=686747&r2=686748&view=diff
==============================================================================
--- ofbiz/trunk/applications/manufacturing/widget/manufacturing/JobshopScreens.xml (original)
+++ ofbiz/trunk/applications/manufacturing/widget/manufacturing/JobshopScreens.xml Mon Aug 18 06:30:35 2008
@@ -177,7 +177,21 @@
                                     </widgets>
                                 </section>
                             </container>
-                           </container>                        
+                        </container>
+                        <container style="screenlet">
+                            <container style="screenlet-title-bar">
+                                <container style="h3">
+                                    <label text="${uiLabelMap.ManufacturingListOfProductionRunNotes}"/>
+                                </container>
+                            </container>
+                            <container style="screenlet-body">
+                                <section>
+                                    <widgets>                                        
+                                        <include-form name="ListProductionRunNotes" location="component://manufacturing/webapp/manufacturing/jobshopmgt/ProductionRunForms.xml"/>
+                                    </widgets>
+                                </section>
+                            </container>
+                        </container>
                     </decorator-section>
                 </decorator-screen>
             </widgets>

Modified: ofbiz/trunk/applications/order/webapp/ordermgr/entry/catalog/configproductdetail.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/webapp/ordermgr/entry/catalog/configproductdetail.ftl?rev=686748&r1=686747&r2=686748&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/webapp/ordermgr/entry/catalog/configproductdetail.ftl (original)
+++ ofbiz/trunk/applications/order/webapp/ordermgr/entry/catalog/configproductdetail.ftl Mon Aug 18 06:30:35 2008
@@ -140,7 +140,13 @@
 });
 
 function getConfigDetails(event) {
-        new Ajax.Request('/ordermgr/control/getConfigDetailsEvent',{parameters: $('configFormId').serialize(),  requestHeaders: {Accept: 'application/json'},
+       var element = Event.element(event);
+       if (element.identify().startsWith('comments_')) {
+         //  don't update the price for comment change
+         return;
+       }
+
+       new Ajax.Request('/ordermgr/control/getConfigDetailsEvent',{parameters: $('configFormId').serialize(),  requestHeaders: {Accept: 'application/json'},
         
            onSuccess: function(transport){    
                 var data = transport.responseText.evalJSON(true);
@@ -477,8 +483,11 @@
             <#if question.isStandard()>
               <#-- Standard item: all the options are always included -->
               <#assign options = question.options>
+              <#assign optionCounter = 0>              
               <#list options as option>
                 <div>${option.description} <#if !option.isAvailable()> (*)</#if></div>
+                <div>${uiLabelMap.CommonComments}: <input type='text' name='comments_${counter}_${optionCounter}' id='comments_${counter}_${optionCounter}' value='${option.comments?if_exists}' ></div>                                  
+                <#assign optionCounter = optionCounter + 1>                
               </#list>
             <#else>
               <#if question.isSingleChoice()>
@@ -495,6 +504,7 @@
                 <#if !question.isMandatory()>
                   <div><input type="radio" name='${counter}' value='<#if !question.isSelected()>checked</#if>'> No option</div>
                 </#if>
+                <#assign optionComment = "">
                 <#assign optionCounter = 0>              
                 <#list options as option>
                   <#assign componentCounter = 0>                  
@@ -503,6 +513,9 @@
                   <#else>
                     <#assign shownPrice = option.price>
                   </#if>
+                  <#if option.isSelected()>
+                    <#assign optionComment = option.getComments()?if_exists>
+                  </#if>                  
                     <#-- Render virtual compoennts -->
                     <#if option.hasVirtualComponent()>
                       <div >
@@ -530,6 +543,7 @@
                     </#if>
                   <#assign optionCounter = optionCounter + 1>
                 </#list>
+                <div>${uiLabelMap.CommonComments}: <input type="text" name='comments_${counter}_0' id='comments_${counter}_0' value='${optionComment?if_exists}' /></div>                
                 <#else>
                 <#-- And this is the select box implementation -->
                 <select name='${counter}'>
@@ -538,6 +552,7 @@
                 </#if>
                 <#assign options = question.options>
                 <#assign optionCounter = 0>
+                <#assign optionComment = "">
                 <#list options as option>
                   <#if showOffsetPrice?exists && "Y" == showOffsetPrice>
                     <#assign shownPrice = option.price - selectedPrice>
@@ -545,6 +560,7 @@
                     <#assign shownPrice = option.price>
                   </#if>
                   <#if option.isSelected()>
+                    <#assign optionComment = option.getComments()>
                     <#assign optionCounter = optionCounter + 1>
                   </#if>
                   <option value='${optionCounter}' <#if option.isSelected()>selected</#if>>
@@ -556,6 +572,7 @@
                   <#assign optionCounter = optionCounter + 1>
                 </#list>
                 </select>
+                <div>${uiLabelMap.CommonComments}: <input type="text" name='comments_${counter}_0' id='comments_${counter}_0' value='${optionComment?if_exists}' /></div>                
                 </#if>
               <#else>
                 <#-- Multi choice question -->
@@ -585,13 +602,16 @@
                       ${option.description} +<@ofbizCurrency amount=option.price isoCode=price.currencyUsed/><#if !option.isAvailable()> (*)</#if>
                     </div>
                     </#if>
+                    <div>${uiLabelMap.CommonComments}: <input type="text" name='comments_${counter}_${optionCounter}' id='comments_${counter}_${optionCounter}' value='${option.comments?if_exists}'></div>                    
                   <#assign optionCounter = optionCounter + 1>
                 </#list>
               </#if>
             </#if>
             </td>
           </tr>
-          <tr><td><hr/></td></tr>
+          <#if question_has_next>
+            <tr><td><hr/></td></tr>
+          </#if>
           <#assign counter = counter + 1>
         </#list>
         </table>

Modified: ofbiz/trunk/applications/product/src/org/ofbiz/product/config/ProductConfigWorker.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/src/org/ofbiz/product/config/ProductConfigWorker.java?rev=686748&r1=686747&r2=686748&view=diff
==============================================================================
--- ofbiz/trunk/applications/product/src/org/ofbiz/product/config/ProductConfigWorker.java (original)
+++ ofbiz/trunk/applications/product/src/org/ofbiz/product/config/ProductConfigWorker.java Mon Aug 18 06:30:35 2008
@@ -87,13 +87,41 @@
         for (int k = 0; k < numOfQuestions; k++) {
             String[] opts = request.getParameterValues("" + k);
             if (opts == null) {
+                
+                //  check for standard item comments
+                ProductConfigWrapper.ConfigItem question = (ProductConfigWrapper.ConfigItem) configWrapper.getQuestions().get(k);
+                if (question.isStandard()) {
+                    int i = 0;
+                    while (i <= (question.getOptions().size() -1)) {
+                        String comments = request.getParameter("comments_" + k + "_" + i);
+                        if (UtilValidate.isNotEmpty(comments)) {
+                            try {
+                                configWrapper.setSelected(k, i, comments);
+                            } catch(Exception e) {
+                                Debug.logWarning(e.getMessage(), module);
+                            }                            
+                        }
+                        i++;
+                    }
+                }
                 continue;
             }
             for (int h = 0; h < opts.length; h++) {
                 int cnt = -1;
                 try {
                     cnt = Integer.parseInt(opts[h]);
+                    String comments = null;
+                    ProductConfigWrapper.ConfigItem question = (ProductConfigWrapper.ConfigItem) configWrapper.getQuestions().get(k);
+                    if (question.isSingleChoice()) {
+                        comments = request.getParameter("comments_" + k + "_" + "0");
+                    } else {
+                        comments = request.getParameter("comments_" + k + "_" + cnt);
+                    }
+                                        
+                    configWrapper.setSelected(k, cnt, comments);
                     ProductConfigWrapper.ConfigOption option = configWrapper.getItemOtion(k, cnt);
+                    
+                    //  set selected variant products
                     if (UtilValidate.isNotEmpty(option) && (option.hasVirtualComponent())) {
                         List components = option.getComponents();
                         int variantIndex = 0;
@@ -105,7 +133,8 @@
                                 if (UtilValidate.isEmpty(selectedProdcutId)) {
                                     Debug.logWarning("ERROR: Request param [" + productParamName + "] not found!", module);
                                 } else {
-                                    //  handle both types of virtual variant methods
+                                    
+                                    //  handle also feature tree virtual variant methods
                                     if (ProductWorker.isVirtual((GenericDelegator)request.getAttribute("delegator"), selectedProdcutId)) {
                                         if ("VV_FEATURETREE".equals(ProductWorker.getProductvirtualVariantMethod((GenericDelegator)request.getAttribute("delegator"), selectedProdcutId))) {
                                             // get the selected features
@@ -136,10 +165,7 @@
                                 variantIndex ++;
                             }
                         }
-                    } else {
-                        configWrapper.setSelected(k, cnt);
-                    }
-
+                    }
                 } catch(Exception e) {
                     Debug.logWarning(e.getMessage(), module);
                 }
@@ -190,9 +216,12 @@
                         Iterator selOpIt = selectedOptions.iterator();
                         while (selOpIt.hasNext()) {
                             ConfigOption oneOption = (ConfigOption)selOpIt.next();
-                            String configOptionId = oneOption.configOption.getString("configOptionId");
+                            String configOptionId = oneOption.configOption.getString("configOptionId");                            
                             if (productConfigConfig.getString("configOptionId").equals(configOptionId)) {
-                                configsToCheck.add(productConfigConfig);
+                                String comments = oneOption.getComments() != null ? oneOption.getComments() : "";
+                                if ((UtilValidate.isEmpty(comments) && UtilValidate.isEmpty(productConfigConfig.getString("description"))) || comments.equals(productConfigConfig.getString("description"))) {
+                                    configsToCheck.add(productConfigConfig);
+                                }                                                              
                             }
                         }
                     }
@@ -315,11 +344,13 @@
                     List toBeStored = new LinkedList();
                     ConfigOption oneOption = (ConfigOption)selOpIt.next();
                     String configOptionId = oneOption.configOption.getString("configOptionId");
+                    String description = oneOption.getComments();
                     GenericValue productConfigConfig = delegator.makeValue("ProductConfigConfig");
                     productConfigConfig.put("configId", configId);
                     productConfigConfig.put("configItemId", configItemId);
                     productConfigConfig.put("sequenceNum", sequenceNum);
                     productConfigConfig.put("configOptionId", configOptionId);
+                    productConfigConfig.put("description", description);                    
                     toBeStored.add(productConfigConfig);
 
                     if (oneOption.hasVirtualComponent()) {                        

Modified: ofbiz/trunk/applications/product/src/org/ofbiz/product/config/ProductConfigWrapper.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/src/org/ofbiz/product/config/ProductConfigWrapper.java?rev=686748&r1=686747&r2=686748&view=diff
==============================================================================
--- ofbiz/trunk/applications/product/src/org/ofbiz/product/config/ProductConfigWrapper.java (original)
+++ ofbiz/trunk/applications/product/src/org/ofbiz/product/config/ProductConfigWrapper.java Mon Aug 18 06:30:35 2008
@@ -145,13 +145,14 @@
                     String configItemId = pcc.getString("configItemId");
                     String configOptionId = pcc.getString("configOptionId");
                     Long sequenceNum = pcc.getLong("sequenceNum");
-                    this.setSelected(configItemId, sequenceNum, configOptionId);
+                    String comments = pcc.getString("description");
+                    this.setSelected(configItemId, sequenceNum, configOptionId, comments);
                 }
             }
         }
     }
 
-    public void setSelected(String configItemId, Long sequenceNum, String configOptionId) throws Exception {
+    public void setSelected(String configItemId, Long sequenceNum, String configOptionId, String comments) throws Exception {
         for (int i = 0; i < questions.size(); i++) {
             ConfigItem ci = (ConfigItem)questions.get(i);
             if (ci.configItemAssoc.getString("configItemId").equals(configItemId) && ci.configItemAssoc.getLong("sequenceNum").equals(sequenceNum)) {
@@ -159,7 +160,7 @@
                 for (int j = 0; j < avalOptions.size(); j++) {
                     ConfigOption oneOption = (ConfigOption)avalOptions.get(j);
                     if (oneOption.configOption.getString("configOptionId").equals(configOptionId)) {
-                        setSelected(i, j);
+                        setSelected(i, j, comments);
                         break;
                     }
                 }
@@ -175,6 +176,7 @@
                 for (int j = 0; j < options.size(); j++) {
                     ConfigOption co = (ConfigOption)options.get(j);
                     co.setSelected(false);
+                    co.setComments(null);
                 }
             }
         }
@@ -233,13 +235,14 @@
         return product;
     }
     
-    public void setSelected(int question, int option) throws Exception {
+    public void setSelected(int question, int option, String comments) throws Exception {
         ConfigItem ci = (ConfigItem)questions.get(question);
         List avalOptions = ci.getOptions();
         if (ci.isSingleChoice()) {
             for (int j = 0; j < avalOptions.size(); j++) {
                 ConfigOption oneOption = (ConfigOption)avalOptions.get(j);
                 oneOption.setSelected(false);
+                oneOption.setComments(null);
             }
         }
         ConfigOption theOption = null;
@@ -248,11 +251,11 @@
         }
         if (theOption != null) {
             theOption.setSelected(true);
+            theOption.setComments(comments);
         }
     }
     
     public void setSelected(int question, int option, int component, String componentOption) throws Exception {
-        setSelected(question, option);
         //  set variant products
         ConfigOption theOption = getItemOtion(question, option);
         List components = theOption.getComponents();
@@ -527,6 +530,7 @@
         boolean selected = false;
         boolean available = true;
         ConfigItem parentConfigItem = null;
+        String comments = null;  //  comments for production run entered during ordering
         
         public ConfigOption(GenericDelegator delegator, LocalDispatcher dispatcher, GenericValue option, ConfigItem configItem, String catalogId, String webSiteId, String currencyUomId, GenericValue autoUserLogin) throws Exception {
             configOption = option;
@@ -572,6 +576,7 @@
             optionPrice = co.optionPrice;
             available = co.available;
             selected = co.selected;
+            comments = co.getComments();
         }
         
         public void recalculateOptionPrice(ProductConfigWrapper pcw) throws Exception {
@@ -621,6 +626,14 @@
             return configOption.getString("configOptionId");
         }
         
+        public String getComments() {
+            return comments;
+        }
+        
+        public void setComments(String comments) {
+            this.comments = comments;
+        }
+        
         public double getPrice() {
             return optionPrice;
         }