You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by jl...@apache.org on 2016/03/28 13:14:24 UTC

svn commit: r1736868 [3/20] - in /ofbiz/trunk/applications/order: template/ template/entry/ template/entry/cart/ template/entry/catalog/ template/entry/order/ template/order/ template/product/ template/quote/ template/reports/ template/request/ templat...

Added: ofbiz/trunk/applications/order/template/entry/catalog/breadcrumbs.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/template/entry/catalog/breadcrumbs.ftl?rev=1736868&view=auto
==============================================================================
--- ofbiz/trunk/applications/order/template/entry/catalog/breadcrumbs.ftl (added)
+++ ofbiz/trunk/applications/order/template/entry/catalog/breadcrumbs.ftl Mon Mar 28 11:14:22 2016
@@ -0,0 +1,69 @@
+<#--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<div class="breadcrumbs">
+<#assign isDefaultTheme = !layoutSettings.VT_FTR_TMPLT_LOC?contains("multiflex")>
+<#if isDefaultTheme>
+  <a href="<@o...@ofbizUrl>" class="linktext">${uiLabelMap.CommonMain}</a> &gt;
+<#else>
+  <ul>
+    <li>
+      <a href="<@o...@ofbizUrl>" class="linktext">${uiLabelMap.CommonMain}</a>
+    </li>
+</#if>    
+    <#-- Show the category branch -->
+    <#assign crumbs = Static["org.ofbiz.product.category.CategoryWorker"].getTrail(request)/>
+    <#list crumbs as crumb>
+         <#if catContentWrappers?? && catContentWrappers[crumb]??>
+            <#if !isDefaultTheme>         
+              <li>
+                 <a href="<@ofbizCatalogUrl currentCategoryId=crumb previousCategoryId=previousCategoryId!""/>" class="<#if crumb_has_next>linktext<#else>buttontextdisabled</#if>">
+                   <#if catContentWrappers[crumb].get("CATEGORY_NAME", "html")??>
+                     ${catContentWrappers[crumb].get("CATEGORY_NAME", "html")}
+                   <#elseif catContentWrappers[crumb].get("DESCRIPTION", "html")??>
+                     ${catContentWrappers[crumb].get("DESCRIPTION", "html")}
+                   <#else>
+                     ${crumb}
+                   </#if>
+                 </a>
+              </li>
+            <#else>  
+               <a href="<@ofbizCatalogUrl currentCategoryId=crumb previousCategoryId=previousCategoryId!""/>" class="<#if crumb_has_next>linktext<#else>buttontextdisabled</#if>">
+                 <#if catContentWrappers[crumb].get("CATEGORY_NAME", "html")??>
+                   ${catContentWrappers[crumb].get("CATEGORY_NAME", "html")}
+                 <#elseif catContentWrappers[crumb].get("DESCRIPTION", "html")??>
+                   ${catContentWrappers[crumb].get("DESCRIPTION", "html")}
+                 <#else>
+                   ${crumb}
+                 </#if>
+               </a>
+               <#if crumb_has_next> &gt;</#if>
+            </#if>  
+            <#assign previousCategoryId = crumb />
+         </#if>
+    </#list>    
+    <#-- Show the product, if there is one -->
+    <#if productContentWrapper??>
+      <#if isDefaultTheme>
+         &nbsp;&gt; ${productContentWrapper.get("PRODUCT_NAME", "html")!}
+      <#else>
+          <li>${productContentWrapper.get("PRODUCT_NAME", "html")!}</li>
+        </ul>  
+      </#if>
+    </#if>
+</div>

Propchange: ofbiz/trunk/applications/order/template/entry/catalog/breadcrumbs.ftl
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/applications/order/template/entry/catalog/breadcrumbs.ftl
------------------------------------------------------------------------------
    svn:keywords = Date Rev Author URL Id

Propchange: ofbiz/trunk/applications/order/template/entry/catalog/breadcrumbs.ftl
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/trunk/applications/order/template/entry/catalog/category.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/template/entry/catalog/category.ftl?rev=1736868&view=auto
==============================================================================
--- ofbiz/trunk/applications/order/template/entry/catalog/category.ftl (added)
+++ ofbiz/trunk/applications/order/template/entry/catalog/category.ftl Mon Mar 28 11:14:22 2016
@@ -0,0 +1,27 @@
+<#--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+${pages.get("/entry/OrderEntryTabBar.ftl")}
+<#if productCategory?has_content>
+  ${pages.get(detailTemplate)}
+<#else>
+  <center><h2>${uiLabelMap.ProductCategoryNotFoundForCategoryID} ${requestParameters.category_id!}!</h2></center>
+</#if>
+
+

Propchange: ofbiz/trunk/applications/order/template/entry/catalog/category.ftl
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/applications/order/template/entry/catalog/category.ftl
------------------------------------------------------------------------------
    svn:keywords = Date Rev Author URL Id

Propchange: ofbiz/trunk/applications/order/template/entry/catalog/category.ftl
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/trunk/applications/order/template/entry/catalog/categorydetail.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/template/entry/catalog/categorydetail.ftl?rev=1736868&view=auto
==============================================================================
--- ofbiz/trunk/applications/order/template/entry/catalog/categorydetail.ftl (added)
+++ ofbiz/trunk/applications/order/template/entry/catalog/categorydetail.ftl Mon Mar 28 11:14:22 2016
@@ -0,0 +1,172 @@
+<#--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<script type="text/javascript">
+    function callDocumentByPaginate(info) {
+        var str = info.split('~');
+        var checkUrl = '<@o...@ofbizUrl>';
+        if(checkUrl.search("http"))
+            var ajaxUrl = '<@o...@ofbizUrl>';
+        else
+            var ajaxUrl = '<@o...@ofbizUrl>';
+            
+        //jQuerry Ajax Request
+        jQuery.ajax({
+            url: ajaxUrl,
+            type: 'POST',
+            data: {"category_id" : str[0], "VIEW_SIZE" : str[1], "VIEW_INDEX" : str[2]},
+            error: function(msg) {
+                alert("An error occurred loading content! : " + msg);
+            },
+            success: function(msg) {
+                jQuery('#div3').html(msg);
+            }
+        });
+     }
+</script>
+
+<#macro paginationControls>
+    <#assign viewIndexMax = Static["java.lang.Math"].ceil((listSize)?double / viewSize?double)>
+      <#if (viewIndexMax?int > 0)>
+        <div class="product-prevnext">
+            <select name="pageSelect" onchange="callDocumentByPaginate(this[this.selectedIndex].value);">
+                <option value="#">${uiLabelMap.CommonPage} ${viewIndex?int + 1} ${uiLabelMap.CommonOf} ${viewIndexMax}</option>
+                <#if (viewIndex?int > 1)>
+                    <#list 1..viewIndexMax as curViewNum>
+                         <option value="${productCategoryId}~${viewSize}~${curViewNum-1?int}">${uiLabelMap.CommonGotoPage} ${curViewNum}</option>
+                    </#list>
+                </#if>
+            </select>
+            <#-- End Page Select Drop-Down -->
+            <#if (viewIndex?int > 0)>
+                <a href="javascript: void(0);" onclick="callDocumentByPaginate('${productCategoryId}~${viewSize}~${viewIndex?int - 1}');" class="buttontext">${uiLabelMap.CommonPrevious}</a> |
+            </#if>
+            <#if ((listSize?int - viewSize?int) > 0)>
+                <span>${lowIndex} - ${highIndex} ${uiLabelMap.CommonOf} ${listSize}</span>
+            </#if>
+            <#if highIndex?int < listSize?int>
+             | <a href="javascript: void(0);" onclick="callDocumentByPaginate('${productCategoryId}~${viewSize}~${viewIndex?int + 1}');" class="buttontext">${uiLabelMap.CommonNext}</a>
+            </#if>
+        </div>
+    </#if>
+</#macro>
+
+
+<#if productCategory??>
+    <#assign categoryName = categoryContentWrapper.get("CATEGORY_NAME", "html")!/>
+    <#assign categoryDescription = categoryContentWrapper.get("DESCRIPTION", "html")!/>
+    <#if categoryName?has_content>
+        <h1>${categoryName}</h1>
+    </#if>
+    <#if categoryDescription?has_content>
+        <h1>${categoryDescription}</h1>
+    </#if>
+    <#if hasQuantities??>
+      <form method="post" action="<@ofbizUrl>addCategoryDefaults<#if requestAttributes._CURRENT_VIEW_??>/${requestAttributes._CURRENT_VIEW_}</#...@ofbizUrl>" name="thecategoryform" style='margin: 0;'>
+        <input type='hidden' name='add_category_id' value='${productCategory.productCategoryId}'/>
+        <#if requestParameters.product_id??><input type='hidden' name='product_id' value='${requestParameters.product_id}'/></#if>
+        <#if requestParameters.category_id??><input type='hidden' name='category_id' value='${requestParameters.category_id}'/></#if>
+        <#if requestParameters.VIEW_INDEX??><input type='hidden' name='VIEW_INDEX' value='${requestParameters.VIEW_INDEX}'/></#if>
+        <#if requestParameters.SEARCH_STRING??><input type='hidden' name='SEARCH_STRING' value='${requestParameters.SEARCH_STRING}'/></#if>
+        <#if requestParameters.SEARCH_CATEGORY_ID??><input type='hidden' name='SEARCH_CATEGORY_ID' value='${requestParameters.SEARCH_CATEGORY_ID}'/></#if>
+        <a href="javascript:document.thecategoryform.submit()" class="buttontext"><span style="white-space: nowrap;">${uiLabelMap.ProductAddProductsUsingDefaultQuantities}</span></a>
+      </form>
+    </#if>
+    <#if searchInCategory?default("Y") == "Y">
+        <a href="<@o...@ofbizUrl>" class="buttontext">${uiLabelMap.ProductSearchInCategory}</a>
+    </#if>
+    <#assign longDescription = categoryContentWrapper.get("LONG_DESCRIPTION", "html")!/>
+    <#assign categoryImageUrl = categoryContentWrapper.get("CATEGORY_IMAGE_URL", "url")!/>
+    <#if categoryImageUrl?string?has_content || longDescription?has_content>
+      <div>
+        <#if categoryImageUrl?string?has_content>
+          <#assign height=100/>
+          <img src='<@o...@ofbizContentUrl>' vspace='5' hspace='5' align='left' class='cssImgLarge' />
+        </#if>
+        <#if longDescription?has_content>
+          ${longDescription}
+        </#if>
+      </div>
+  </#if>
+</#if>
+
+<#if productCategoryLinkScreen?has_content && productCategoryLinks?has_content>
+    <div class="productcategorylink-container">
+        <#list productCategoryLinks as productCategoryLink>
+            ${setRequestAttribute("productCategoryLink",productCategoryLink)}
+            ${screens.render(productCategoryLinkScreen)}
+        </#list>
+    </div>
+</#if>
+
+<#if productCategoryMembers?has_content>
+    <#-- Pagination -->
+    <#if paginateEcommerceStyle??>
+        <@paginationControls/>
+    <#else>
+        <#include "component://common/webcommon/includes/htmlTemplate.ftl"/>
+        <#assign commonUrl = "category?category_id="+ (parameters.category_id!) + "&"/>
+        <#--assign viewIndex = viewIndex - 1/-->
+        <#assign viewIndexFirst = 0/>
+        <#assign viewIndexPrevious = viewIndex - 1/>
+        <#assign viewIndexNext = viewIndex + 1/>
+        <#assign viewIndexLast = Static["org.ofbiz.base.util.UtilMisc"].getViewLastIndex(listSize, viewSize) />
+        <#assign messageMap = Static["org.ofbiz.base.util.UtilMisc"].toMap("lowCount", lowIndex, "highCount", highIndex, "total", listSize)/>
+        <#assign commonDisplaying = Static["org.ofbiz.base.util.UtilProperties"].getMessage("CommonUiLabels", "CommonDisplaying", messageMap, locale)/>
+        <@nextPrev commonUrl=commonUrl ajaxEnabled=false javaScriptEnabled=false paginateStyle="nav-pager" paginateFirstStyle="nav-first" viewIndex=viewIndex highIndex=highIndex listSize=listSize viewSize=viewSize ajaxFirstUrl="" firstUrl="" paginateFirstLabel="" paginatePreviousStyle="nav-previous" ajaxPreviousUrl="" previousUrl="" paginatePreviousLabel="" pageLabel="" ajaxSelectUrl="" selectUrl="" ajaxSelectSizeUrl="" selectSizeUrl="" commonDisplaying=commonDisplaying paginateNextStyle="nav-next" ajaxNextUrl="" nextUrl="" paginateNextLabel="" paginateLastStyle="nav-last" ajaxLastUrl="" lastUrl="" paginateLastLabel="" paginateViewSizeLabel="" />
+    </#if>
+      <#assign numCol = numCol?default(1)>
+      <#assign numCol = numCol?number>
+      <#assign tabCol = 1>
+      <div
+      <#if categoryImageUrl?string?has_content>
+        style="position: relative; margin-top: ${height}px;"
+      </#if>
+      class="productsummary-container<#if (numCol?int > 1)> matrix</#if>">
+      <#if (numCol?int > 1)>
+        <table>
+      </#if>
+        <#list productCategoryMembers as productCategoryMember>
+          <#if (numCol?int == 1)>
+            ${setRequestAttribute("optProductId", productCategoryMember.productId)}
+            ${setRequestAttribute("productCategoryMember", productCategoryMember)}
+            ${setRequestAttribute("listIndex", productCategoryMember_index)}
+            ${screens.render(productsummaryScreen)}
+          <#else>
+              <#if (tabCol?int = 1)><tr></#if>
+                  <td>
+                      ${setRequestAttribute("optProductId", productCategoryMember.productId)}
+                      ${setRequestAttribute("productCategoryMember", productCategoryMember)}
+                      ${setRequestAttribute("listIndex", productCategoryMember_index)}
+                      ${screens.render(productsummaryScreen)}
+                  </td>
+              <#if (tabCol?int = numCol)></tr></#if>
+              <#assign tabCol = tabCol+1><#if (tabCol?int > numCol)><#assign tabCol = 1></#if>
+           </#if>
+        </#list>
+      <#if (numCol?int > 1)>
+        </table>
+      </#if>
+      </div>
+    <#if paginateEcommerceStyle??>
+        <@paginationControls/>
+    </#if>
+<#else>
+    <hr />
+    <div>${uiLabelMap.ProductNoProductsInThisCategory}</div>
+</#if>

Propchange: ofbiz/trunk/applications/order/template/entry/catalog/categorydetail.ftl
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/applications/order/template/entry/catalog/categorydetail.ftl
------------------------------------------------------------------------------
    svn:keywords = Date Rev Author URL Id

Propchange: ofbiz/trunk/applications/order/template/entry/catalog/categorydetail.ftl
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/trunk/applications/order/template/entry/catalog/choosecatalog.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/template/entry/catalog/choosecatalog.ftl?rev=1736868&view=auto
==============================================================================
--- ofbiz/trunk/applications/order/template/entry/catalog/choosecatalog.ftl (added)
+++ ofbiz/trunk/applications/order/template/entry/catalog/choosecatalog.ftl Mon Mar 28 11:14:22 2016
@@ -0,0 +1,40 @@
+<#--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<#-- Only show if there is more than 1 (one) catalog, no sense selecting when there is only one option... -->
+<#if (catalogCol?size > 1)>
+<div class="screenlet">
+    <div class="screenlet-title-bar">
+        <div class="h3">${uiLabelMap.ProductChooseCatalog}</div>
+    </div>
+    <div class="screenlet-body" style="text-align: center;">
+        <form name="choosecatalogform" method="post" action="<@o...@ofbizUrl>" style='margin: 0;'>
+          <select name='CURRENT_CATALOG_ID'>
+            <option value='${currentCatalogId}'>${currentCatalogName}</option>
+            <option value='${currentCatalogId}'></option>
+            <#list catalogCol as catalogId>
+              <#assign thisCatalogName = Static["org.ofbiz.product.catalog.CatalogWorker"].getCatalogName(request, catalogId)>
+              <option value='${catalogId}'>${thisCatalogName}</option>
+            </#list>
+          </select>
+          <div><a href="javascript:document.choosecatalogform.submit()" class="buttontext">${uiLabelMap.CommonChange}</a></div>
+        </form>
+    </div>
+</div>
+</#if>

Propchange: ofbiz/trunk/applications/order/template/entry/catalog/choosecatalog.ftl
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/applications/order/template/entry/catalog/choosecatalog.ftl
------------------------------------------------------------------------------
    svn:keywords = Date Rev Author URL Id

Propchange: ofbiz/trunk/applications/order/template/entry/catalog/choosecatalog.ftl
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/trunk/applications/order/template/entry/catalog/compareproducts.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/template/entry/catalog/compareproducts.ftl?rev=1736868&view=auto
==============================================================================
--- ofbiz/trunk/applications/order/template/entry/catalog/compareproducts.ftl (added)
+++ ofbiz/trunk/applications/order/template/entry/catalog/compareproducts.ftl Mon Mar 28 11:14:22 2016
@@ -0,0 +1,189 @@
+<#--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<table>
+<#-- Header row, contains product small image, product name, price -->
+    <tr>
+        <td>&nbsp;</td>
+<#list compareList as product>
+    <#assign tdWidth = 100/compareList?size />
+    <#assign productData = productDataMap[product.productId]/>
+    <#assign productContentWrapper = productData.productContentWrapper/>
+    <#assign price = productData.priceMap/>
+    <#assign productUrl><@ofbizCatalogAltUrl productId=product.productId/></#assign>
+    <#assign smallImageUrl = productContentWrapper.get("SMALL_IMAGE_URL", "url")/>
+    <#if smallImageUrl!?length == 0>
+        <#assign smallImageUrl = "/images/defaultImage.jpg"/>
+    </#if>
+        <td style="width:${tdWidth?c}%;">
+            <img src="<@o...@ofbizContentUrl>" alt="Small Image"/><br />
+            ${productContentWrapper.get("PRODUCT_NAME", "html")}<br />
+    <#if totalPrice??>
+            <div>${uiLabelMap.ProductAggregatedPrice}: <span class='basePrice'><@ofbizCurrency amount=totalPrice isoCode=totalPrice.currencyUsed/></span></div>
+    <#else>
+        <#if price.isSale?? && price.isSale>
+            <#assign priceStyle = "salePrice">
+        <#else>
+            <#assign priceStyle = "regularPrice">
+        </#if>
+
+        <#if (price.price?default(0) > 0 && product.requireAmount?default("N") == "N")>
+                <#if "Y" = product.isVirtual!> ${uiLabelMap.CommonFrom} </#if><span class="${priceStyle}"><@ofbizCurrency amount=price.price isoCode=price.currencyUsed/></span>
+        </#if>
+    </#if>
+            <div class="productbuy">
+    <#-- check to see if introductionDate hasn't passed yet -->
+    <#if product.introductionDate?? && nowTimestamp.before(product.introductionDate)>
+                <div style="color: red;">${uiLabelMap.ProductNotYetAvailable}</div>
+    <#-- check to see if salesDiscontinuationDate has passed -->
+    <#elseif product.salesDiscontinuationDate?? && nowTimestamp.after(product.salesDiscontinuationDate)/>
+                <div style="color: red;">${uiLabelMap.ProductNoLongerAvailable}</div>
+    <#-- check to see if it is a rental item; will enter parameters on the detail screen-->
+    <#elseif product.productTypeId! == "ASSET_USAGE"/>
+                <a href="javascript:doGetViaParent('${productUrl}');" class="buttontext">${uiLabelMap.OrderMakeBooking}...</a>
+    <#elseif product.productTypeId! == "ASSET_USAGE_OUT_IN"/>
+                <a href="javascript:doGetViaParent('${productUrl}');" class="buttontext">${uiLabelMap.OrderRent}...</a>
+    <#-- check to see if it is an aggregated or configurable product; will enter parameters on the detail screen-->
+    <#elseif product.productTypeId! == "AGGREGATED" || product.productTypeId! == "AGGREGATED_SERVICE"/>
+                <a href="javascript:doGetViaParent('${productUrl}');" class="buttontext">${uiLabelMap.OrderConfigure}...</a>
+    <#-- check to see if the product is a virtual product -->
+    <#elseif product.isVirtual?? && product.isVirtual == "Y"/>
+                <a href="javascript:doGetViaParent('${productUrl}');" class="buttontext">${uiLabelMap.OrderChooseVariations}...</a>
+    <#-- check to see if the product requires an amount -->
+    <#elseif product.requireAmount?? && product.requireAmount == "Y"/>
+                <a href="javascript:doGetViaParent('${productUrl}');" class="buttontext">${uiLabelMap.OrderChooseAmount}...</a>
+    <#else/>
+                <form method="post" action="<@ofbizUrl secure="${request.isSecure()?string}">additem</...@ofbizUrl>" name="compareFormAdd${product_index}">
+                    <input type="hidden" name="add_product_id" value="${product.productId}"/>
+                    <input type="text" size="5" name="quantity" value="1"/>
+                    <input type="hidden" name="clearSearch" value="N"/>
+                </form>
+                <a href="javascript:doPostViaParent('compareFormAdd${product_index}');" class="buttontext">${uiLabelMap.OrderAddToCart}</a>
+
+        <#if prodCatMem?? && prodCatMem.quantity?? && 0.00 < prodCatMem.quantity?double>
+                <form method="post" action="<@ofbizUrl secure="${request.isSecure()?string}">additem</...@ofbizUrl>" name="compareFormAddDefault${product_index}" style="margin: 0;">
+                    <input type="hidden" name="add_product_id" value="${prodCatMem.productId!}"/>
+                    <input type="hidden" name="quantity" value="${prodCatMem.quantity!}"/>
+                    <input type="hidden" name="clearSearch" value="N"/>
+                </form>
+                <a href="javascript:doPostViaParent('compareFormAddDefault${product_index}');" class="buttontext">${uiLabelMap.CommonAddDefault}(${prodCatMem.quantity?string.number}) ${uiLabelMap.OrderToCart}</a>
+        </#if>
+    </#if>
+            </div>
+        </td>
+</#list>
+    </tr>
+    <#-- Brand name -->
+    <tr>
+        <td>${uiLabelMap.ProductBrandName}</td>
+<#list compareList as product>
+        <td>${product.brandName?default("&nbsp;")}</td>
+</#list>
+    </tr>
+    <#-- Description -->
+    <tr>
+        <td>${uiLabelMap.ProductProductDescription}</td>
+<#list compareList as product>
+    <#assign productData = productDataMap[product.productId]/>
+    <#assign productContentWrapper = productData.productContentWrapper/>
+        <td>${productContentWrapper.get("DESCRIPTION", "html")?default("&nbsp;")}</td>
+</#list>
+    </tr>
+    <#-- Long Description -->
+    <tr>
+        <td>${uiLabelMap.ProductLongDescription}</td>
+<#list compareList as product>
+    <#assign productData = productDataMap[product.productId]/>
+    <#assign productContentWrapper = productData.productContentWrapper/>
+        <td>${productContentWrapper.get("LONG_DESCRIPTION", "html")?default("&nbsp;")}</td>
+</#list>
+    </tr>
+<#list productFeatureTypeIds as productFeatureTypeId>
+    <#assign productFeatureType = productFeatureTypeMap[productFeatureTypeId]/>
+    <tr>
+        <td>${productFeatureType.get("description", locale)}</td>
+    <#list compareList as product>
+        <#assign productData = productDataMap[product.productId]/>
+        <#assign applMap = productData[productFeatureTypeId]!/>
+        <td>
+        <#if applMap.STANDARD_FEATURE?has_content>
+            <#assign features = applMap.STANDARD_FEATURE/>
+            <#list features as feature>
+            <div>${feature.get("description", locale)}</div>
+            </#list>
+        </#if>
+        <#if applMap.DISTINGUISHING_FEAT?has_content>
+            <#assign features = applMap.DISTINGUISHING_FEAT/>
+            <#list features as feature>
+            <div>${feature.get("description", locale)}</div>
+            </#list>
+        </#if>
+        <#if applMap.SELECTABLE_FEATURE?has_content>
+            <#assign features = applMap.SELECTABLE_FEATURE/>
+            <div>Available Options:</div>
+            <ul>
+            <#list features as feature>
+                <li>${feature.get("description", locale)}</li>
+            </#list>
+            </ul>
+        </#if>
+        </td>
+    </#list>
+    </tr>
+</#list>
+    <tr>
+        <td>&nbsp;</td>
+<#list compareList as product>
+        <td>
+            <div class="productbuy">
+    <#-- check to see if introductionDate hasn't passed yet -->
+    <#if product.introductionDate?? && nowTimestamp.before(product.introductionDate)>
+                <div style="color: red;">${uiLabelMap.ProductNotYetAvailable}</div>
+    <#-- check to see if salesDiscontinuationDate has passed -->
+    <#elseif product.salesDiscontinuationDate?? && nowTimestamp.after(product.salesDiscontinuationDate)/>
+                <div style="color: red;">${uiLabelMap.ProductNoLongerAvailable}</div>
+    <#-- check to see if it is a rental item; will enter parameters on the detail screen-->
+    <#elseif product.productTypeId! == "ASSET_USAGE"/>
+                <a href="javascript:doGetViaParent('${productUrl}');" class="buttontext">${uiLabelMap.OrderMakeBooking}...</a>
+    <#elseif product.productTypeId! == "ASSET_USAGE_OUT_IN"/>
+                <a href="javascript:doGetViaParent('${productUrl}');" class="buttontext">${uiLabelMap.OrderRent}...</a>
+    <#-- check to see if it is an aggregated or configurable product; will enter parameters on the detail screen-->
+    <#elseif product.productTypeId! == "AGGREGATED" || product.productTypeId! == "AGGREGATED_SERVICE"/>
+                <a href="javascript:doGetViaParent('${productUrl}');" class="buttontext">${uiLabelMap.OrderConfigure}...</a>
+    <#-- check to see if the product is a virtual product -->
+    <#elseif product.isVirtual?? && product.isVirtual == "Y"/>
+                <a href="javascript:doGetViaParent('${productUrl}');" class="buttontext">${uiLabelMap.OrderChooseVariations}...</a>
+    <#-- check to see if the product requires an amount -->
+    <#elseif product.requireAmount?? && product.requireAmount == "Y"/>
+                <a href="javascript:doGetViaParent('${productUrl}');" class="buttontext">${uiLabelMap.OrderChooseAmount}...</a>
+    <#else/>
+                <form method="post" action="<@ofbizUrl secure="${request.isSecure()?string}">additem</...@ofbizUrl>" name="compare2FormAdd${product_index}">
+                    <input type="hidden" name="add_product_id" value="${product.productId}"/>
+                    <input type="text" size="5" name="quantity" value="1"/>
+                    <input type="hidden" name="clearSearch" value="N"/>
+                </form>
+                <a href="javascript:doPostViaParent('compare2FormAdd${product_index}');" class="buttontext">${uiLabelMap.OrderAddToCart}</a>
+        <#if prodCatMem?? && prodCatMem.quantity?? && 0.00 < prodCatMem.quantity?double>
+                <a href="javascript:doPostViaParent('compareFormAddDefault${product_index}');" class="buttontext">${uiLabelMap.CommonAddDefault}(${prodCatMem.quantity?string.number}) ${uiLabelMap.OrderToCart}</a>
+        </#if>
+    </#if>
+            </div>
+        </td>
+</#list>
+    </tr>
+</table>

Propchange: ofbiz/trunk/applications/order/template/entry/catalog/compareproducts.ftl
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/applications/order/template/entry/catalog/compareproducts.ftl
------------------------------------------------------------------------------
    svn:keywords = Date Rev Author URL Id

Propchange: ofbiz/trunk/applications/order/template/entry/catalog/compareproducts.ftl
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/trunk/applications/order/template/entry/catalog/compareproductslist.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/template/entry/catalog/compareproductslist.ftl?rev=1736868&view=auto
==============================================================================
--- ofbiz/trunk/applications/order/template/entry/catalog/compareproductslist.ftl (added)
+++ ofbiz/trunk/applications/order/template/entry/catalog/compareproductslist.ftl Mon Mar 28 11:14:22 2016
@@ -0,0 +1,56 @@
+<#--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<div id="productcomparelist" class="screenlet">
+  <div class="screenlet-title-bar">
+    <ul>
+      <li class="h3">${uiLabelMap.ProductCompareProducts}</li>
+    </ul>
+    <br class="clear"/>
+  </div>
+  <div class="screenlet-body">
+  <#assign productCompareList = Static["org.ofbiz.product.product.ProductEvents"].getProductCompareList(request)/>
+  <#if productCompareList?has_content>
+    <table>
+    <#list productCompareList as product>
+      <tr>
+        <td>
+          ${Static["org.ofbiz.product.product.ProductContentWrapper"].getProductContentAsText(product, "PRODUCT_NAME", request, "html")}
+        </td>
+        <td>
+          <form method="post" action="<@o...@ofbizUrl>" name="removeFromCompare${product_index}form">
+            <input type="hidden" name="productId" value="${product.productId}"/>
+          </form>
+          <a href="javascript:document.removeFromCompare${product_index}form.submit()" class="buttontext">${uiLabelMap.CommonRemove}</a>
+        </td>
+      </tr>
+    </#list>
+  </table>
+  <div>
+    <a href="<@o...@ofbizUrl>" class="buttontext">${uiLabelMap.CommonClearAll}</a>
+  </div>
+  <div>
+    <a href="javascript:popUp('<@ofbizUrl secure="${request.isSecure()?string}">compareProducts</...@ofbizUrl>', 'compareProducts', '650', '750')" class="buttontext">${uiLabelMap.ProductCompareProducts}</a>
+  </div>
+<#else/>
+  <div>
+    ${uiLabelMap.ProductNoProductsToCompare}
+  </div>
+</#if>
+  </div>
+</div>
\ No newline at end of file

Propchange: ofbiz/trunk/applications/order/template/entry/catalog/compareproductslist.ftl
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/applications/order/template/entry/catalog/compareproductslist.ftl
------------------------------------------------------------------------------
    svn:keywords = Date Rev Author URL Id

Propchange: ofbiz/trunk/applications/order/template/entry/catalog/compareproductslist.ftl
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/trunk/applications/order/template/entry/catalog/configproductdetail.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/template/entry/catalog/configproductdetail.ftl?rev=1736868&view=auto
==============================================================================
--- ofbiz/trunk/applications/order/template/entry/catalog/configproductdetail.ftl (added)
+++ ofbiz/trunk/applications/order/template/entry/catalog/configproductdetail.ftl Mon Mar 28 11:14:22 2016
@@ -0,0 +1,686 @@
+<#--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<#-- variable setup -->
+<#assign productContentWrapper = productContentWrapper!>
+<#assign price = priceMap!>
+<#-- end variable setup -->
+
+<#-- virtual product javascript -->
+${virtualJavaScript!}
+<script language="JavaScript" type="text/javascript">
+<!--
+    var detailImageUrl = null;
+     function setAddProductId(name) {
+        document.addform.add_product_id.value = name;
+        if (document.addform.quantity == null) return;
+        if (name == 'NULL' || isVirtual(name) == true) {
+            document.addform.quantity.disabled = true;
+        } else {
+            document.addform.quantity.disabled = false;
+        }
+     }
+     function isVirtual(product) {
+        var isVirtual = false;
+        <#if virtualJavaScript??>
+        for (i = 0; i < VIR.length; i++) {
+            if (VIR[i] == product) {
+                isVirtual = true;
+            }
+        }
+        </#if>
+        return isVirtual;
+     }
+
+    function addItem() {
+        document.configform.action = document.addform.action;
+        document.configform.quantity.value = document.addform.quantity.value;
+        document.configform.submit();
+    }
+    function verifyConfig() {
+        document.configform.submit();
+    }
+
+    function popupDetail() {
+        var defaultDetailImage = "${firstDetailImage?default(mainDetailImageUrl?default("_NONE_"))}";
+        if (defaultDetailImage == null || defaultDetailImage == "null" || defaultDetailImage == "") {
+            defaultDetailImage = "_NONE_";
+        }
+
+        if (detailImageUrl == null || detailImageUrl == "null") {
+            detailImageUrl = defaultDetailImage;
+        }
+
+        if (detailImageUrl == "_NONE_") {
+            hack = document.createElement('span');
+            hack.innerHTML="${uiLabelMap.CommonNoDetailImageAvailableToDisplay}";
+            showErrorAlert("${uiLabelMap.CommonErrorMessage2}","${uiLabelMap.CommonNoDetailImageAvailableToDisplay}");
+            return;
+        }
+        detailImageUrl = detailImageUrl.replace(/\&\#47;/g, "/");
+        popUp("<@ofbizUrl>detailImage?detail=" + detailImageUrl + "</...@ofbizUrl>", 'detailImage', '400', '550');
+    }
+
+    function toggleAmt(toggle) {
+        if (toggle == 'Y') {
+            changeObjectVisibility("add_amount", "visible");
+        }
+
+        if (toggle == 'N') {
+            changeObjectVisibility("add_amount", "hidden");
+        }
+    }
+
+    function findIndex(name) {
+        for (i = 0; i < OPT.length; i++) {
+            if (OPT[i] == name) {
+                return i;
+            }
+        }
+        return -1;
+    }
+
+    function getList(name, index, src) {
+        currentFeatureIndex = findIndex(name);
+
+        if (currentFeatureIndex == 0) {
+            // set the images for the first selection
+            if (IMG[index] != null) {
+                if (document.images['mainImage'] != null) {
+                    document.images['mainImage'].src = IMG[index];
+                    detailImageUrl = DET[index];
+                }
+            }
+
+            // set the drop down index for swatch selection
+            document.forms["addform"].elements[name].selectedIndex = (index*1)+1;
+        }
+
+        if (currentFeatureIndex < (OPT.length-1)) {
+            // eval the next list if there are more
+            var selectedValue = document.forms["addform"].elements[name].options[(index*1)+1].value;
+            eval("list" + OPT[(currentFeatureIndex+1)] + selectedValue + "()");
+
+            // set the product ID to NULL to trigger the alerts
+            setAddProductId('NULL');
+        } else {
+            // this is the final selection -- locate the selected index of the last selection
+            var indexSelected = document.forms["addform"].elements[name].selectedIndex;
+
+            // using the selected index locate the sku
+            var sku = document.forms["addform"].elements[name].options[indexSelected].value;
+
+            // set the product ID
+            setAddProductId(sku);
+
+            // check for amount box
+            toggleAmt(checkAmtReq(sku));
+        }
+    }
+ //-->
+ </script>
+
+<script language="JavaScript" type="text/javascript">
+<!--
+
+jQuery(document).ready( function() {
+  jQuery('#configFormId').change(getConfigDetails);
+});
+
+function getConfigDetails() {
+       var element = jQuery(this);
+       if (element.attr("id").is("[id^='comments_']")) {
+         //  don't update the price for comment change
+         return;
+       }
+
+       jQuery.ajax({
+           url: '/ordermgr/control/getConfigDetailsEvent',
+           data: jQuery('configFormId').serialize(),
+           type: "POST",
+           success: function(data) {
+                  var totalPrice = data.totalPrice;
+                  var configId = data.configId;
+                  document.getElementById('totalPrice').innerHTML = totalPrice;
+                  document.addToShoppingList.configId.value = configId;
+                }
+           },
+           error: function(data) {
+
+           }
+       });
+}
+
+-->
+</script>
+
+<div id="productdetail">
+
+<table border="0" cellpadding="2" cellspacing="0" width="100%">
+
+  <#-- Category next/previous -->
+  <#if category??>
+    <tr>
+      <td colspan="2" align="right">
+        <#if previousProductId??>
+          <a href='<@o...@ofbizUrl>' class="buttontext">${uiLabelMap.CommonPrevious}</a>&nbsp;|&nbsp;
+        </#if>
+        <a href="<@o...@ofbizUrl>" class="buttontext">${(category.categoryName)?default(category.description)!}</a>
+        <#if nextProductId??>
+          &nbsp;|&nbsp;<a href='<@o...@ofbizUrl>' class="buttontext">${uiLabelMap.CommonNext}</a>
+        </#if>
+      </td>
+    </tr>
+  </#if>
+
+  <tr><td colspan="2"><hr class='sepbar'/></td></tr>
+
+  <#-- Product image/name/price -->
+  <tr>
+    <td valign="top" width="0">
+      <#assign productLargeImageUrl = productContentWrapper.get("LARGE_IMAGE_URL", "url")!>
+      <#-- remove the next two lines to always display the virtual image first (virtual images must exist) -->
+      <#if firstLargeImage?has_content>
+        <#assign productLargeImageUrl = firstLargeImage>
+      </#if>
+      <#if productLargeImageUrl?string?has_content>
+        <a href="javascript:popupDetail();"><img src='<@o...@ofbizContentUrl>' name='mainImage' vspace='5' hspace='5' class='cssImgLarge' align='left' alt="" /></a>
+      </#if>
+    </td>
+    <td align="right" valign="top">
+      <h2>${productContentWrapper.get("PRODUCT_NAME", "html")!}</h2>
+      <div>${productContentWrapper.get("DESCRIPTION", "html")!}</div>
+      <div><b>${product.productId!}</b></div>
+      <#-- example of showing a certain type of feature with the product -->
+      <#if sizeProductFeatureAndAppls?has_content>
+        <div>
+          <#if (sizeProductFeatureAndAppls?size == 1)>
+            <#-- TODO : i18n -->
+            Size:
+          <#else>
+            Sizes Available:
+          </#if>
+          <#list sizeProductFeatureAndAppls as sizeProductFeatureAndAppl>
+            ${sizeProductFeatureAndAppl.description?default(sizeProductFeatureAndAppl.abbrev?default(sizeProductFeatureAndAppl.productFeatureId))}<#if sizeProductFeatureAndAppl_has_next>,</#if>
+          </#list>
+        </div>
+      </#if>
+
+      <#-- for prices:
+              - if totalPrice is present, use it (totalPrice is the price calculated from the parts)
+              - if price < competitivePrice, show competitive or "Compare At" price
+              - if price < listPrice, show list price
+              - if price < defaultPrice and defaultPrice < listPrice, show default
+              - if isSale show price with salePrice style and print "On Sale!"
+      -->
+      <#if totalPrice??>
+        <div>${uiLabelMap.ProductAggregatedPrice}: <span id='totalPrice' class='basePrice'><@ofbizCurrency amount=totalPrice isoCode=totalPrice.currencyUsed/></span></div>
+      <#else>
+      <#if price.competitivePrice?? && price.price?? && price.price?double < price.competitivePrice?double>
+        <div>${uiLabelMap.ProductCompareAtPrice}: <span class='basePrice'><@ofbizCurrency amount=price.competitivePrice isoCode=price.currencyUsed/></span></div>
+      </#if>
+      <#if price.listPrice?? && price.price?? && price.price?double < price.listPrice?double>
+        <div>${uiLabelMap.ProductListPrice}: <span class='basePrice'><@ofbizCurrency amount=price.listPrice isoCode=price.currencyUsed/></span></div>
+      </#if>
+      <#if price.listPrice?? && price.defaultPrice?? && price.price?? && price.price?double < price.defaultPrice?double && price.defaultPrice?double < price.listPrice?double>
+        <div>${uiLabelMap.ProductRegularPrice}: <span class='basePrice'><@ofbizCurrency amount=price.defaultPrice isoCode=price.currencyUsed/></span></div>
+      </#if>
+      <div>
+        <b>
+          <#if price.isSale?? && price.isSale>
+            <span class='salePrice'>${uiLabelMap.OrderOnSale}!</span>
+            <#assign priceStyle = "salePrice">
+          <#else>
+            <#assign priceStyle = "regularPrice">
+          </#if>
+            ${uiLabelMap.OrderYourPrice}: <#if "Y" = product.isVirtual!> from </#if><span class='${priceStyle}'><@ofbizCurrency amount=price.price isoCode=price.currencyUsed/></span>
+        </b>
+      </div>
+      <#if price.listPrice?? && price.price?? && price.price?double < price.listPrice?double>
+        <#assign priceSaved = price.listPrice?double - price.price?double>
+        <#assign percentSaved = (priceSaved?double / price.listPrice?double) * 100>
+        <div>${uiLabelMap.OrderSave}: <span class="basePrice"><@ofbizCurrency amount=priceSaved isoCode=price.currencyUsed/> (${percentSaved?int}%)</span></div>
+      </#if>
+      </#if>
+
+      <#-- Included quantities/pieces -->
+      <#if product.quantityIncluded?? && product.quantityIncluded?double != 0>
+        <div>${uiLabelMap.OrderIncludes}:
+          ${product.quantityIncluded!}
+          ${product.quantityUomId!}
+        </div>
+      </#if>
+      <#if product.piecesIncluded?? && product.piecesIncluded?long != 0>
+        <div>${uiLabelMap.OrderPieces}:
+          ${product.piecesIncluded}
+        </div>
+      </#if>
+      <#if daysToShip??>
+        <div><b>${uiLabelMap.ProductUsuallyShipsIn} <font color='red'>${daysToShip}</font> ${uiLabelMap.CommonDays}!<b></div>
+      </#if>
+
+      <#if disFeatureList?? && 0 < disFeatureList.size()>
+        <p>&nbsp;</p>
+        <#list disFeatureList as currentFeature>
+            <div>
+                ${currentFeature.productFeatureTypeId}:&nbsp;${currentFeature.description}
+            </div>
+        </#list>
+            <div>&nbsp;</div>
+      </#if>
+
+      <form method="post" action="<@ofbizUrl>additem<#if requestAttributes._CURRENT_VIEW_??>/${requestAttributes._CURRENT_VIEW_}</#...@ofbizUrl>" name="addform" style='margin: 0;'>
+        <#assign inStock = true>
+        <#-- Variant Selection -->
+        <#if product.isVirtual?? && product.isVirtual?upper_case == "Y">
+          <#if variantTree?? && 0 < variantTree.size()>
+            <#list featureSet as currentType>
+              <div>
+                <select name="FT${currentType}" onchange="javascript:getList(this.name, (this.selectedIndex-1), 1);">
+                  <option>${featureTypes.get(currentType)}</option>
+                </select>
+              </div>
+            </#list>
+            <input type='hidden' name="product_id" value='${product.productId}' />
+            <input type='hidden' name="add_product_id" value='NULL' />
+          <#else>
+            <input type='hidden' name="product_id" value='${product.productId}' />
+            <input type='hidden' name="add_product_id" value='NULL' />
+            <div class='tabletext'><b>${uiLabelMap.ProductItemOutOfStock}.</b></div>
+            <#assign inStock = false>
+          </#if>
+        <#else>
+          <input type='hidden' name="product_id" value='${product.productId}' />
+          <input type='hidden' name="add_product_id" value='${product.productId}' />
+          <#if productNotAvailable??>
+            <#assign isStoreInventoryRequired = Static["org.ofbiz.product.store.ProductStoreWorker"].isStoreInventoryRequired(request, product)>
+            <#if isStoreInventoryRequired>
+              <div class='tabletext'><b>${uiLabelMap.ProductItemOutOfStock}.</b></div>
+              <#assign inStock = false>
+            <#else>
+              <div class='tabletext'><b>${product.inventoryMessage!}</b></div>
+            </#if>
+          </#if>
+        </#if>
+
+        </td></tr><tr><td colspan="2" align="right">
+
+        <#-- check to see if introductionDate hasn't passed yet -->
+        <#if product.introductionDate?? && nowTimestamp.before(product.introductionDate)>
+          <p>&nbsp;</p>
+          <div class='tabletext' style='color: red;'>${uiLabelMap.ProductProductNotYetMadeAvailable}.</div>
+        <#-- check to see if salesDiscontinuationDate has passed -->
+        <#elseif product.salesDiscontinuationDate?? && nowTimestamp.after(product.salesDiscontinuationDate)>
+          <div class='tabletext' style='color: red;'>${uiLabelMap.ProductProductNoLongerAvailable}.</div>
+        <#-- check to see if the product requires inventory check and has inventory -->
+        <#else>
+          <#if inStock>
+            <#if product.requireAmount?default("N") == "Y">
+              <#assign hiddenStyle = "visible">
+            <#else>
+              <#assign hiddenStyle = "hidden">
+            </#if>
+            <div id="add_amount" class="${hiddenStyle}">
+              <span style="white-space: nowrap;"><b>Amount:</b></span>&nbsp;
+              <input type="text" size="5" name="add_amount" value="" />
+            </div>
+            <#if !configwrapper.isCompleted()>
+              <div>[${uiLabelMap.EcommerceProductNotConfigured}]&nbsp;
+              <input type="text" size="5" name="quantity" value="0" disabled="disabled" /></div>
+            <#else>
+              <a href="javascript:addItem()" class="buttontext"><span style="white-space: nowrap;">${uiLabelMap.OrderAddToCart}</span></a>&nbsp;
+              <input type="text" size="5" name="quantity" value="1" />
+            </#if>
+          </#if>
+          <#if requestParameters.category_id??>
+            <input type='hidden' name='category_id' value='${requestParameters.category_id}' />
+          </#if>
+        </#if>
+      </form>
+    <div>
+      <#if sessionAttributes.userLogin?has_content && sessionAttributes.userLogin.userLoginId != "anonymous">
+        <hr />
+        <form name="addToShoppingList" method="post" action="<@ofbizUrl>addItemToShoppingList<#if requestAttributes._CURRENT_VIEW_??>/${requestAttributes._CURRENT_VIEW_}</#...@ofbizUrl>">
+          <input type="hidden" name="productId" value="${product.productId}" />
+          <input type="hidden" name="product_id" value="${product.productId}" />
+          <input type="hidden" name="configId" value="${configId!}" />
+          <select name="shoppingListId">
+            <#if shoppingLists?has_content>
+              <#list shoppingLists as shoppingList>
+                <option value="${shoppingList.shoppingListId}">${shoppingList.listName}</option>
+              </#list>
+            </#if>
+            <option value="">---</option>
+            <option value="">${uiLabelMap.OrderNewShoppingList}</option>
+          </select>
+          &nbsp;&nbsp;
+          <input type="text" size="5" name="quantity" value="1" />
+          <a href="javascript:document.addToShoppingList.submit();" class="buttontext">[${uiLabelMap.OrderAddToShoppingList}]</a>
+        </form>
+      <#else> <br />
+        ${uiLabelMap.OrderYouMust} <a href="<@o...@ofbizUrl>" class="buttontext">${uiLabelMap.CommonBeLogged}</a>
+        ${uiLabelMap.OrderToAddSelectedItemsToShoppingList}.&nbsp;
+      </#if>
+      </div>
+      <#-- Prefill first select box (virtual products only) -->
+      <#if variantTree?? && 0 < variantTree.size()>
+        <script language="JavaScript" type="text/javascript">eval("list" + "${featureOrderFirst}" + "()");</script>
+      </#if>
+
+      <#-- Swatches (virtual products only) -->
+      <#if variantSample?? && 0 < variantSample.size()>
+        <#assign imageKeys = variantSample.keySet()>
+        <#assign imageMap = variantSample>
+        <p>&nbsp;</p>
+        <table cellspacing="0" cellpadding="0">
+          <tr>
+            <#assign maxIndex = 7>
+            <#assign indexer = 0>
+            <#list imageKeys as key>
+              <#assign swatchProduct = imageMap.get(key)>
+              <#if swatchProduct?has_content && indexer < maxIndex>
+                <#assign imageUrl = Static["org.ofbiz.product.product.ProductContentWrapper"].getProductContentAsText(swatchProduct, "SMALL_IMAGE_URL", request, "url")!>
+                <#if !imageUrl?string?has_content>
+                  <#assign imageUrl = productContentWrapper.get("SMALL_IMAGE_URL", "url")!>
+                </#if>
+                <#if !imageUrl?string?has_content>
+                  <#assign imageUrl = "/images/defaultImage.jpg">
+                </#if>
+                <td align="center" valign="bottom">
+                  <a href="javascript:getList('FT${featureOrderFirst}','${indexer}',1);"><img src="<@o...@ofbizContentUrl>" class='cssImgStandard' alt="" /></a>
+                  <br />
+                  <a href="javascript:getList('FT${featureOrderFirst}','${indexer}',1);" class="buttontext">${key}</a>
+                </td>
+              </#if>
+              <#assign indexer = indexer + 1>
+            </#list>
+            <#if (indexer > maxIndex)>
+              <div><b>${uiLabelMap.OrderMoreOptionsAvailable}.</b></div>
+            </#if>
+          </tr>
+        </table>
+      </#if>
+    </td>
+  </tr>
+
+  <tr><td colspan="2"><hr class='sepbar'/></td></tr>
+
+  <#-- Long description of product -->
+  <tr>
+    <td colspan="2">
+      <div>${productContentWrapper.get("LONG_DESCRIPTION", "html")!}</div>
+    </td>
+  </tr>
+
+  <tr><td colspan="2"><hr class='sepbar'/></td></tr>
+
+  <#-- Any attributes/etc may go here -->
+  <#-- Product Configurator -->
+  <tr>
+    <td colspan="2">
+      <form name="configform" id="configFormId" method="post" action="<@ofbizUrl>product<#if requestAttributes._CURRENT_VIEW_??>/${requestAttributes._CURRENT_VIEW_}</#...@ofbizUrl>">
+        <input type='hidden' name='add_product_id' value='${product.productId}' />
+        <input type='hidden' name='add_category_id' value='' />
+        <input type='hidden' name='quantity' value='1' />
+
+        <input type='hidden' name='product_id' value='${product.productId}' />
+        <table >
+          <tr>
+            <td>
+                <div>
+                    <a href="javascript:verifyConfig();" class="buttontext">${uiLabelMap.OrderVerifyConfiguration}</a>
+                </div>
+            </td>
+          </tr>
+          <tr><td><hr /></td></tr>
+          <#assign counter = 0>
+          <#assign questions = configwrapper.questions>
+          <#list questions as question>
+          <tr>
+            <td>
+              <div>${question.question}</div>
+              <#if question.isFirst()>
+                <a name='#${question.getConfigItem().getString("configItemId")}'></a>
+                <div>${question.description!}</div>
+                <#assign instructions = question.content.get("INSTRUCTIONS", "html")!>
+                <#if instructions?has_content>
+                  <a href="javascript:showErrorAlert("${uiLabelMap.CommonErrorMessage2}","${instructions}");" class="buttontext">Instructions</a>
+                </#if>
+                <#assign image = question.content.get("IMAGE_URL", "url")!>
+                <#if image?has_content>
+                  <img src='<@o...@ofbizContentUrl>' vspace='5' hspace='5' class='cssImgSmall' align='left' alt="" />
+                </#if>
+              <#else>
+                <div><a href='#${question.getConfigItem().getString("configItemId")}' class="buttontext">Details</a></div>
+              </#if>
+            </td>
+          </tr>
+          <tr>
+            <td>
+            <#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!}' /></div>
+                <#assign optionCounter = optionCounter + 1>
+              </#list>
+            <#else>
+              <#if question.isSingleChoice()>
+                <#-- Single choice question -->
+                <#assign options = question.options>
+                <#assign selectedOption = question.getSelected()!>
+                <#assign selectedPrice = 0.0>
+                <#if selectedOption?has_content>
+                  <#assign selectedPrice = selectedOption.getPrice()>
+                </#if>
+                <#-- The single choice input can be implemented with radio buttons or a select field -->
+                <#if renderSingleChoiceWithRadioButtons?? && "Y" == renderSingleChoiceWithRadioButtons>
+                <#-- This is the radio button implementation -->
+                <#if !question.isMandatory()>
+                  <div><input type="radio" name='${counter}' value='<#if !question.isSelected()>checked="checked"</#if>' /> No option</div>
+                </#if>
+                <#assign optionComment = "">
+                <#assign optionCounter = 0>
+                <#list options as option>
+                  <#assign componentCounter = 0>
+                  <#if showOffsetPrice?? && "Y" == showOffsetPrice>
+                    <#assign shownPrice = option.price - selectedPrice>
+                  <#else>
+                    <#assign shownPrice = option.price>
+                  </#if>
+                  <#if option.isSelected()>
+                    <#assign optionComment = option.getComments()!>
+                  </#if>
+                    <#-- Render virtual compoennts -->
+                    <#if option.hasVirtualComponent()>
+                      <div >
+                        <input type='radio' name='${counter}' id="${counter}_${optionCounter}" value='${optionCounter}' onclick="javascript:checkOptionVariants('${counter}_${optionCounter}');" />
+                        ${option.description} <#if !option.isAvailable()> (*)</#if>
+                        <#assign components = option.getComponents()>
+                        <#list components as component>
+                          <#if (option.isVirtualComponent(component))>
+                            ${setRequestAttribute("inlineProductId", component.productId)}
+                            ${setRequestAttribute("inlineCounter", counter+ "_" +optionCounter + "_"+componentCounter)}
+                            ${setRequestAttribute("addJavaScript", componentCounter)}
+                            ${screens.render(inlineProductDetailScreen)}
+                            <#assign componentCounter = componentCounter + 1>
+                          </#if>
+                        </#list>
+                      </div>
+                    <#else>
+                      <div>
+                        <input type="radio" name='${counter}' value='${optionCounter}' <#if option.isSelected() || (!question.isSelected() && optionCounter == 0 && question.isMandatory())>checked="checked"</#if> />
+                        ${option.description}&nbsp;
+                        <#if (shownPrice > 0)>+<@ofbizCurrency amount=shownPrice isoCode=price.currencyUsed/>&nbsp;</#if>
+                        <#if (shownPrice < 0)>-<@ofbizCurrency amount=(-1*shownPrice) isoCode=price.currencyUsed/>&nbsp;</#if>
+                        <#if !option.isAvailable()>(*)</#if>
+                      </div>
+                    </#if>
+                  <#assign optionCounter = optionCounter + 1>
+                </#list>
+                <div>${uiLabelMap.CommonComments}: <input type="text" name='comments_${counter}_0' id='comments_${counter}_0' value='${optionComment!}' /></div>
+                <#else>
+                <#-- And this is the select box implementation -->
+                <select name='${counter}'>
+                <#if !question.isMandatory()>
+                  <option value=''>---</option>
+                </#if>
+                <#assign options = question.options>
+                <#assign optionCounter = 0>
+                <#assign optionComment = "">
+                <#list options as option>
+                  <#if showOffsetPrice?? && "Y" == showOffsetPrice>
+                    <#assign shownPrice = option.price - selectedPrice>
+                  <#else>
+                    <#assign shownPrice = option.price>
+                  </#if>
+                  <#if option.isSelected()>
+                    <#assign optionComment = option.getComments()>
+                    <#assign optionCounter = optionCounter + 1>
+                  </#if>
+                  <option value='${optionCounter}' <#if option.isSelected()>selected="selected"</#if>>
+                    ${option.description}&nbsp;
+                    <#if (shownPrice > 0)>+<@ofbizCurrency amount=shownPrice isoCode=price.currencyUsed/>&nbsp;</#if>
+                    <#if (shownPrice < 0)>-<@ofbizCurrency amount=(-1*shownPrice) isoCode=price.currencyUsed/>&nbsp;</#if>
+                    <#if !option.isAvailable()> (*)</#if>
+                  </option>
+                  <#assign optionCounter = optionCounter + 1>
+                </#list>
+                </select>
+                <div>${uiLabelMap.CommonComments}: <input type="text" name='comments_${counter}_0' id='comments_${counter}_0' value='${optionComment!}' /></div>
+                </#if>
+              <#else>
+                <#-- Multi choice question -->
+                <#assign options = question.options>
+                <#assign optionCounter = 0>
+                <#list options as option>
+                    <#assign componentCounter = 0>
+                    <#-- Render virtual compoennts -->
+                    <#if option.hasVirtualComponent()>
+                      <div >
+                        <input type='CHECKBOX' name='${counter}' id="${counter}_${optionCounter}" value='${optionCounter}' onclick="javascript:checkOptionVariants('${counter}_${optionCounter}');" />
+                        ${option.description} <#if !option.isAvailable()> (*)</#if>
+                        <#assign components = option.getComponents()>
+                        <#list components as component>
+                          <#if (option.isVirtualComponent(component))>
+                            ${setRequestAttribute("inlineProductId", component.productId)}
+                            ${setRequestAttribute("inlineCounter", counter+ "_" +optionCounter + "_"+componentCounter)}
+                            ${setRequestAttribute("addJavaScript", componentCounter)}
+                            ${screens.render(inlineProductDetailScreen)}
+                            <#assign componentCounter = componentCounter + 1>
+                          </#if>
+                        </#list>
+                      </div>
+                    <#else>
+                    <div>
+                      <input type='CHECKBOX' name='${counter}' value='${optionCounter}' <#if option.isSelected()>checked="checked"</#if> />
+                      ${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!}' /></div>
+                  <#assign optionCounter = optionCounter + 1>
+                </#list>
+              </#if>
+            </#if>
+            </td>
+          </tr>
+          <#if question_has_next>
+            <tr><td><hr /></td></tr>
+          </#if>
+          <#assign counter = counter + 1>
+        </#list>
+        </table>
+      </form>
+    </td>
+  </tr>
+  <tr><td colspan="2"><hr class='sepbar'/></td></tr>
+
+<#-- Upgrades/Up-Sell/Cross-Sell -->
+  <#macro associated assocProducts beforeName showName afterName formNamePrefix targetRequestName>
+  <#assign targetRequest = "product">
+  <#if targetRequestName?has_content>
+    <#assign targetRequest = targetRequestName>
+  </#if>
+  <#if assocProducts?has_content>
+    <tr><td>&nbsp;</td></tr>
+    <tr><td colspan="2"><h2>${beforeName!}<#if showName == "Y">${productContentWrapper.get("PRODUCT_NAME", "html")!}</#if>${afterName!}</h2></td></tr>
+    <tr><td><hr /></td></tr>
+    <#list assocProducts as productAssoc>
+      <tr><td>
+        <div>
+          <a href='<@ofbizUrl>${targetRequest}/<#if categoryId??>~category_id=${categoryId}/</#...@ofbizUrl>' class="buttontext">
+            ${productAssoc.productIdTo!}
+          </a>
+          - <b>${productAssoc.reason!}</b>
+        </div>
+      </td></tr>
+      ${setRequestAttribute("optProductId", productAssoc.productIdTo)}
+      ${setRequestAttribute("listIndex", listIndex)}
+      ${setRequestAttribute("formNamePrefix", formNamePrefix)}
+      <#if targetRequestName?has_content>
+        ${setRequestAttribute("targetRequestName", targetRequestName)}
+      </#if>
+      <tr>
+        <td>
+          ${screens.render(productsummaryScreen)}
+        </td>
+      </tr>
+      <#local listIndex = listIndex + 1>
+      <tr><td><hr /></td></tr>
+    </#list>
+    ${setRequestAttribute("optProductId", "")}
+    ${setRequestAttribute("formNamePrefix", "")}
+    ${setRequestAttribute("targetRequestName", "")}
+  </#if>
+</#macro>
+<#assign productValue = product>
+<#assign listIndex = 1>
+${setRequestAttribute("productValue", productValue)}
+
+<table >
+  <#-- obsolete -->
+  <@associated assocProducts=obsoleteProducts beforeName="" showName="Y" afterName=" is made obsolete by these products:" formNamePrefix="obs" targetRequestName=""/>
+  <#-- cross sell -->
+  <@associated assocProducts=crossSellProducts beforeName="" showName="N" afterName="You might be interested in these as well:" formNamePrefix="cssl" targetRequestName="crosssell"/>
+  <#-- up sell -->
+  <@associated assocProducts=upSellProducts beforeName="Try these instead of " showName="Y" afterName=":" formNamePrefix="upsl" targetRequestName="upsell"/>
+  <#-- obsolescence -->
+  <@associated assocProducts=obsolenscenseProducts beforeName="" showName="Y" afterName=" makes these products obsolete:" formNamePrefix="obce" targetRequestName=""/>
+</table>
+
+<#-- special cross/up-sell area using commonFeatureResultIds (from common feature product search) -->
+<#if commonFeatureResultIds?has_content>
+  <h2>Similar Products That Might Interest You...</h2>
+  <hr />
+
+  <#list commonFeatureResultIds as commonFeatureResultId>
+    <div>
+      ${setRequestAttribute("optProductId", commonFeatureResultId)}
+      ${setRequestAttribute("listIndex", commonFeatureResultId_index)}
+      ${setRequestAttribute("formNamePrefix", "cfeatcssl")}
+      <#-- ${setRequestAttribute("targetRequestName", targetRequestName)} -->
+      ${screens.render(productsummaryScreen)}
+    </div>
+    <#if commonFeatureResultId_has_next>
+      <hr />
+    </#if>
+  </#list>
+</#if>
+</div>

Propchange: ofbiz/trunk/applications/order/template/entry/catalog/configproductdetail.ftl
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/applications/order/template/entry/catalog/configproductdetail.ftl
------------------------------------------------------------------------------
    svn:keywords = Date Rev Author URL Id

Propchange: ofbiz/trunk/applications/order/template/entry/catalog/configproductdetail.ftl
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/trunk/applications/order/template/entry/catalog/editProduct.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/template/entry/catalog/editProduct.ftl?rev=1736868&view=auto
==============================================================================
--- ofbiz/trunk/applications/order/template/entry/catalog/editProduct.ftl (added)
+++ ofbiz/trunk/applications/order/template/entry/catalog/editProduct.ftl Mon Mar 28 11:14:22 2016
@@ -0,0 +1,24 @@
+<#--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<#if security.hasEntityPermission("CATALOG", "_CREATE", session)>
+<div>
+<a href="/catalog/control/EditProduct?productId=${productId}${externalKeyParam!}" target="catalog" class="buttontext">${uiLabelMap.ProductEditProduct}</a>
+</div>
+</#if>

Propchange: ofbiz/trunk/applications/order/template/entry/catalog/editProduct.ftl
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/applications/order/template/entry/catalog/editProduct.ftl
------------------------------------------------------------------------------
    svn:keywords = Date Rev Author URL Id

Propchange: ofbiz/trunk/applications/order/template/entry/catalog/editProduct.ftl
------------------------------------------------------------------------------
    svn:mime-type = text/plain