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/...

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

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/...

BJ Freeman
some where there should be a disclaimer that using these comments may
skew the production run evaluations.

[hidden email] 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(&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;
>          }
>
>
>
>
>