[ofbiz-framework] branch trunk updated: Fixed: display/selection of unit of measure is broken (OFBIZ-11955)

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

[ofbiz-framework] branch trunk updated: Fixed: display/selection of unit of measure is broken (OFBIZ-11955)

jleroux@apache.org
This is an automated email from the ASF dual-hosted git repository.

jleroux pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git


The following commit(s) were added to refs/heads/trunk by this push:
     new d04f777  Fixed: display/selection of unit of measure is broken (OFBIZ-11955)
d04f777 is described below

commit d04f777389830297da80926de259d8bc4c1f8766
Author: Jacques Le Roux <[hidden email]>
AuthorDate: Fri Sep 11 10:43:13 2020 +0200

    Fixed: display/selection of unit of measure is broken (OFBIZ-11955)
   
    Improve code for UOM dropdown of products like WG-9943
   
    Thanks: Alex
---
 .../entry/catalog/InlineProductDetail.groovy       |   2 +-
 .../entry/catalog/ProductDetail.groovy             |   3 +-
 .../entry/catalog/ProductSummary.groovy            |   3 +-
 .../order/template/entry/catalog/ProductDetail.ftl | 102 +++++++--------------
 .../template/entry/catalog/ProductSummary.ftl      |   5 +-
 .../template/entry/catalog/ProductVariantJS.ftl    |  38 ++++++--
 6 files changed, 72 insertions(+), 81 deletions(-)

diff --git a/applications/order/groovyScripts/entry/catalog/InlineProductDetail.groovy b/applications/order/groovyScripts/entry/catalog/InlineProductDetail.groovy
index 46b2865..9a232c2 100644
--- a/applications/order/groovyScripts/entry/catalog/InlineProductDetail.groovy
+++ b/applications/order/groovyScripts/entry/catalog/InlineProductDetail.groovy
@@ -103,7 +103,7 @@ if (inlineProduct) {
     featureOrder = []
 
     variantInfoJS = new StringBuffer()
-    variantInfoJS.append("<script language=\"JavaScript\" type=\"text/javascript\">\n    \$(document).ready(function(\$) {\n")
+    variantInfoJS.append("<script language=\"JavaScript\" type=\"text/javascript\">\n    jQuery(document).ready(function(jQuery) {\n")
 
     // make the productContentWrapper
     productContentWrapper = new ProductContentWrapper(inlineProduct, request)
diff --git a/applications/order/groovyScripts/entry/catalog/ProductDetail.groovy b/applications/order/groovyScripts/entry/catalog/ProductDetail.groovy
index 5b338a3..7b5e234 100644
--- a/applications/order/groovyScripts/entry/catalog/ProductDetail.groovy
+++ b/applications/order/groovyScripts/entry/catalog/ProductDetail.groovy
@@ -107,7 +107,7 @@ if (product) {
     featureOrder = []
 
     variantInfoJS = new StringBuffer()
-    variantInfoJS.append("<script language=\"JavaScript\" type=\"text/javascript\">\n    \$(document).ready(function(\$) {\n")
+    variantInfoJS.append("<script language=\"JavaScript\" type=\"text/javascript\">\n    jQuery(document).ready(function(jQuery) {\n")
 
     // set this as a last viewed
     LAST_VIEWED_TO_KEEP = 10 // modify this to change the number of last viewed to keep
@@ -561,6 +561,7 @@ if (product) {
             }
         }
     }
+    variantInfoJS.append("        variantPrices['" + product.productId + "'] = '" + UtilFormatOut.formatCurrency(priceMap.basePrice, currencyUomId, locale, 10) + "';\n")
     variantInfoJS.append("    });\n</script>\n")
     context.variantInfoJavaScript = variantInfoJS
 
diff --git a/applications/order/groovyScripts/entry/catalog/ProductSummary.groovy b/applications/order/groovyScripts/entry/catalog/ProductSummary.groovy
index 9e07931..43cf65a 100644
--- a/applications/order/groovyScripts/entry/catalog/ProductSummary.groovy
+++ b/applications/order/groovyScripts/entry/catalog/ProductSummary.groovy
@@ -97,6 +97,7 @@ if (product) {
 categoryId = null
 reviews = null
 if (product) {
+    numberFormat = NumberFormat.getCurrencyInstance(locale)
     categoryId = parameters.category_id ?: request.getAttribute("productCategoryId")
 
     variantInfoJS = new StringBuffer()
@@ -170,7 +171,6 @@ if (product) {
             }
         }
         variantPriceList = []
-        numberFormat = NumberFormat.getCurrencyInstance(locale)
         
         if(virtualVariants){
             amt = new StringBuffer()
@@ -208,6 +208,7 @@ if (product) {
             context.virtualJavaScript = jsBuf
         }
     }
+    variantInfoJS.append("        variantPrices['" + product.productId + "'] = '" + numberFormat.format(priceMap.basePrice) + "';\n")
     variantInfoJS.append("    });\n</script>\n")
     context.variantInfoJavaScript = variantInfoJS
 
diff --git a/applications/order/template/entry/catalog/ProductDetail.ftl b/applications/order/template/entry/catalog/ProductDetail.ftl
index 6990054..c0a8f21 100644
--- a/applications/order/template/entry/catalog/ProductDetail.ftl
+++ b/applications/order/template/entry/catalog/ProductDetail.ftl
@@ -17,57 +17,31 @@ specific language governing permissions and limitations
 under the License.
 -->
 <#-- variable setup -->
-<#assign price = priceMap!/>
+<#assign price = priceMap! />
 <#-- end variable setup -->
 
 <#-- virtual product javascript -->
 ${virtualJavaScript!}
+${virtualVariantJavaScript!}
 <script type="application/javascript">
     var detailImageUrl = null;
-    function setAddProductId(name) {
-        document.addform.add_product_id.value = name;
-        if (document.addform.quantity == null) return;
-        if (name == '' || name == 'NULL' || isVirtual(name) == true) {
-            document.addform.quantity.disabled = true;
-            var elem = document.getElementById('product_id_display');
-            var txt = document.createTextNode('');
-            if(elem.hasChildNodes()) {
-                elem.replaceChild(txt, elem.firstChild);
-            } else {
-                elem.appendChild(txt);
-            }
-        } else {
-            document.addform.quantity.disabled = false;
-            var elem = document.getElementById('product_id_display');
-            var txt = document.createTextNode(name);
-            if(elem.hasChildNodes()) {
-                elem.replaceChild(txt, elem.firstChild);
-            } else {
-                elem.appendChild(txt);
-            }
+    function setAddProductId2(sku, with_bak) {
+        document.addform.add_product_id.value = sku;
+        var disable = (sku == '' || sku == 'NULL' || isVirtual(sku) == true);
+        if (document.addform.quantity != null) {
+            document.addform.quantity.disabled = disable;
         }
-    }
-    function setVariantPrice(sku) {
-        if (sku == '' || sku == 'NULL' || isVirtual(sku) == true) {
-            var elem = document.getElementById('variant_price_display');
-            var txt = document.createTextNode('');
-            if(elem.hasChildNodes()) {
-                elem.replaceChild(txt, elem.firstChild);
-            } else {
-                elem.appendChild(txt);
-            }
-        }
-        else {
-            var elem = document.getElementById('variant_price_display');
-            var price = getVariantPrice(sku);
-            var txt = document.createTextNode(price);
-            if(elem.hasChildNodes()) {
-                elem.replaceChild(txt, elem.firstChild);
-            } else {
-                elem.appendChild(txt);
-            }
+        var txt = disable ? '' : sku;
+        $('#product_id_display').text(txt);
+        if (with_bak) {
+            document.addform.product_id_bak.value = txt;
         }
     }
+    function setVariantPrice2(sku) {
+        var disable = (sku == '' || sku == 'NULL' || isVirtual(sku) == true);
+        var txt = disable ? '' : getVariantPrice2(sku);
+        $('#variant_price_display').text(txt || '');
+    }
     function isVirtual(product) {
         var isVirtual = false;
         <#if virtualJavaScript??>
@@ -158,11 +132,15 @@ ${virtualJavaScript!}
             } else {
                 var Variable1 = eval("list" + OPT[(currentFeatureIndex+1)] + selectedValue + "()");
             }
+
+            // reset uom select
+            $('#product_uom').text('');
+
             // set the product ID to NULL to trigger the alerts
-            setAddProductId('NULL');
+            setAddProductId2('NULL');
 
             // set the variant price to NULL
-            setVariantPrice('NULL');
+            setVariantPrice2('NULL');
         } else {
             // this is the final selection -- locate the selected index of the last selection
             var indexSelected = document.forms["addform"].elements[name].selectedIndex;
@@ -174,13 +152,13 @@ ${virtualJavaScript!}
             ajaxUpdateArea("product_uom", "<@ofbizUrl>ProductUomDropDownOnly</@ofbizUrl>", "productId=" + sku);
 
             // set the product ID
-            setAddProductId(sku);
+            setAddProductId2(sku, true);
 
             // set the variant price
-            setVariantPrice(sku);
+            setVariantPrice2(sku);
 
             // check for amount box
-            toggleAmt(checkAmtReq(sku));
+            toggleAmt(checkAmtReq2(sku));
         }
     }
 
@@ -207,7 +185,7 @@ ${virtualJavaScript!}
     }
 
     function showAlert(msg) {
-        showErrorAlert("${uiLabelMap.CommonErrorMessage2}",msg);
+        showErrorAlert("${uiLabelMap.CommonErrorMessage2}", msg);
     }
 
     function additemSubmit(){
@@ -265,18 +243,6 @@ ${virtualJavaScript!}
             block2.style.display = "none";
         }
     </#if>
-    
-    function displayProductVirtualVariantId(variantId) {
-        document.addform.product_id.value = variantId;
-        var elem = document.getElementById('product_id_display');
-        var txt = document.createTextNode(variantId);
-        if(elem.hasChildNodes()) {
-            elem.replaceChild(txt, elem.firstChild);
-        } else {
-            elem.appendChild(txt);
-        }
-        setVariantPrice(variantId);
-    }
  </script>
 
 ${screens.render("component://order/widget/ordermgr/OrderEntryCatalogScreens.xml#productvariantjs")}
@@ -321,9 +287,9 @@ ${variantInfoJavaScript!}
       <#if sizeProductFeatureAndAppls?has_content>
         <div>
           <#if (sizeProductFeatureAndAppls?size == 1)>
-            Size:
+          ${uiLabelMap.OrderSizeAvailableSingle}:
           <#else>
-            Sizes Available:
+          ${uiLabelMap.OrderSizeAvailableMultiple}:
           </#if>
           <#list sizeProductFeatureAndAppls as sizeProductFeatureAndAppl>
             ${sizeProductFeatureAndAppl.description?default(sizeProductFeatureAndAppl.abbrev?default(sizeProductFeatureAndAppl.productFeatureId))}<#if sizeProductFeatureAndAppl_has_next>,</#if>
@@ -482,9 +448,10 @@ ${variantInfoJavaScript!}
               </div>
             </#list>
             <span id="product_uom"></span><br/>
-            <div class="variant-price" style="display: none;">
-                <strong><span class="product_id_display"> </span></strong>
-                <strong><span class="variant_price_display"> </span></strong>
+            <input type="hidden" name="product_id_bak" value=""/>
+            <div class="variant-price" style="display: inline-block;">
+                <strong><span id="product_id_display" class="product_id_display"> </span></strong>
+                <strong><span id="variant_price_display" class="variant_price_display"> </span></strong>
             </div>
             <input type="hidden" name="product_id" value="${product.productId}"/>
             <input type="hidden" name="add_product_id" value="NULL"/>
@@ -505,7 +472,8 @@ ${variantInfoJavaScript!}
                 <option value="${mainProduct.productId}">${mainProduct.uomDesc} : ${mainProduct.piecesIncluded}</option>
               </#list>
             </select><br/>
-            <div class="variant-price" style="display: none;">
+            <input type="hidden" name="product_id_bak" value="${product.productId}"/>
+            <div class="variant-price" style="display: inline-block;">
                 <strong><span class="product_id_display"> </span></strong>
                 <strong><span class="variant_price_display"> </span></strong>
             </div>
@@ -552,7 +520,7 @@ ${variantInfoJavaScript!}
                       <td nowrap="nowrap" align="right">Number of persons</td>
                       <td><input type="text" size="4" name="reservPersons" value="2"/></td>
                     </#if>
-                      <td nowrap="nowrap" align="right">Quantity</td>
+                      <td nowrap="nowrap" align="right">${uiLabelMap.CommonQuantity}</td>
                       <td><input type="text" size="5" name="quantity" value="1"/></td>
                   </tr>
                 </table>
diff --git a/applications/order/template/entry/catalog/ProductSummary.ftl b/applications/order/template/entry/catalog/ProductSummary.ftl
index 564129e..7d20c16 100644
--- a/applications/order/template/entry/catalog/ProductSummary.ftl
+++ b/applications/order/template/entry/catalog/ProductSummary.ftl
@@ -94,6 +94,7 @@ ${variantInfoJavaScript!}
           </table>
         </div>
         <script type="application/javascript">
+          /*
           jQuery(document).ready(function(jQuery) {
           jQuery("#${productInfoLinkId}").attr('title', jQuery("#${productDetailId}").remove().html());
           jQuery("#${productInfoLinkId}").tooltip({
@@ -104,6 +105,7 @@ ${variantInfoJavaScript!}
               track: true
           });
           });
+          */
         </script>
         <div class="productbuy">
           <#-- check to see if introductionDate hasn't passed yet -->
@@ -141,7 +143,8 @@ ${variantInfoJavaScript!}
                         <option value="${mainProduct.productId}">${mainProduct.uomDesc} : ${mainProduct.piecesIncluded}</option>
                     </#list>
                 </select>
-                <div class="variant-price" style="display: none;">
+                <input type="hidden" name="product_id_bak" value="${product.productId}"/>
+                <div class="variant-price" style="display: inline-block;">
                     <strong><span class="product_id_display"> </span></strong>
                     <strong><span class="variant_price_display"> </span></strong>
                 </div>
diff --git a/applications/order/template/entry/catalog/ProductVariantJS.ftl b/applications/order/template/entry/catalog/ProductVariantJS.ftl
index 0912299..d2cfb06 100644
--- a/applications/order/template/entry/catalog/ProductVariantJS.ftl
+++ b/applications/order/template/entry/catalog/ProductVariantJS.ftl
@@ -32,20 +32,38 @@ if (typeof(checkAmtReq2) == 'undefined') {
     function variantUomSelection (select) {
         var $select = $(select);
         var form = $select.closest('form');
-        var price_div = $('.variant-price', form);
-        var variantId = $select.val() || '';
+        var variantId = $select.val();
         $("[name='product_id']", form).val(variantId);
-        $('.product_id_display', price_div).text(variantId);
+        if (!variantId) {
+            variantId = $("[name='product_id_bak']", form).val() || '';
+        }
 
+        $('.product_id_display', form).text(variantId);
         var price = getVariantPrice2(variantId);
-        if (price) {
-            $('.variant_price_display', price_div).text(price);
-            price_div.css('display', 'inline-block');
-        }
-        else {
-            price_div.hide();
-        }
+        $('.variant_price_display', form).text(price || '');
+//        var price_div = $('.variant-price', form);
+//        if (price) {
+//            price_div.css('display', 'inline-block');
+//        }
+//        else {
+//            price_div.hide();
+//        }
     }
 
+          jQuery(document).ready(function(jQuery) {
+          jQuery('.popup_link').each(
+            function(index) {
+              var $this = jQuery(this);
+              var popup = $('.popup', $this.closest('.productsummary'));
+              $this.attr('title', popup.remove().html());
+              $this.tooltip({
+                content: function(){
+                  return this.getAttribute("title");
+                },
+                tooltipClass: "popup",
+                track: true
+              });
+            });
+          });
 }
 </script>