Thanks Bilgin for the i18n reminder :o)

Jacques

From: <[EMAIL PROTECTED]>
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;
        }



Reply via email to