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; } |
Free forum by Nabble | Edit this page |