You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by bi...@apache.org on 2008/08/18 15:30:36 UTC
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/...
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("Y")" 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;
}
Re: 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/
Posted by Jacques Le Roux <ja...@les7arts.com>.
Thanks Bilgin for the i18n reminder :o)
Jacques
From: <bi...@apache.org>
> 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("Y")" 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;
> }
>
>
Re: 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/...
Posted by BJ Freeman <bj...@free-man.net>.
some where there should be a disclaimer that using these comments may
skew the production run evaluations.
bibryam@apache.org sent the following on 8/18/2008 6:30 AM:
> 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("Y")" 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;
> }
>
>
>
>
>