Added: ofbiz/trunk/applications/order/template/product/productdetail.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/template/product/productdetail.ftl?rev=1736868&view=auto ============================================================================== --- ofbiz/trunk/applications/order/template/product/productdetail.ftl (added) +++ ofbiz/trunk/applications/order/template/product/productdetail.ftl Mon Mar 28 11:14:22 2016 @@ -0,0 +1,918 @@ +<#-- +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 price = priceMap! /> +<#assign productImageList = productImageList! /> +<#-- end variable setup --> + +<#-- virtual product javascript --> +${virtualJavaScript!} +${virtualVariantJavaScript!} +<script type="text/javascript"> +//<![CDATA[ + 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 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); + } + } + } + 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() { + if (document.addform.add_product_id.value == 'NULL') { + showErrorAlert("${uiLabelMap.CommonErrorMessage2}","${uiLabelMap.CommonPleaseSelectAllRequiredOptions}"); + return; + } else { + if (isVirtual(document.addform.add_product_id.value)) { + document.location = '<@ofbizUrl>product?category_id=${categoryId!}&product_id=</@ofbizUrl>' + document.addform.add_product_id.value; + return; + } else { + document.addform.submit(); + } + } + } + + function popupDetail(specificDetailImageUrl) { + if( specificDetailImageUrl ) { + detailImageUrl = specificDetailImageUrl; + } + else { + 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', '600', '600'); + } + + 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; + if (index == -1) { + <#if featureOrderFirst??> + var Variable1 = eval("list" + "${featureOrderFirst}" + "()"); + </#if> + } else { + var Variable1 = eval("list" + OPT[(currentFeatureIndex+1)] + selectedValue + "()"); + } + // set the product ID to NULL to trigger the alerts + setAddProductId('NULL'); + + // set the variant price to NULL + setVariantPrice('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; + + // display alternative packaging dropdown + ajaxUpdateArea("product_uom", "<@ofbizUrl>ProductUomDropDownOnly</@ofbizUrl>", "productId=" + sku); + + // set the product ID + setAddProductId(sku); + + // set the variant price + setVariantPrice(sku); + + // check for amount box + toggleAmt(checkAmtReq(sku)); + } + } + + function validate(x){ + var msg=new Array(); + msg[0]="Please use correct date format [yyyy-mm-dd]"; + + var y=x.split("-"); + if(y.length!=3){ showAlert(msg[0]);return false; } + if((y[2].length>2)||(parseInt(y[2])>31)) { showAlert(msg[0]); return false; } + if(y[2].length==1){ y[2]="0"+y[2]; } + if((y[1].length>2)||(parseInt(y[1])>12)){ showAlert(msg[0]); return false; } + if(y[1].length==1){ y[1]="0"+y[1]; } + if(y[0].length>4){ showAlert(msg[0]); return false; } + if(y[0].length<4) { + if(y[0].length==2) { + y[0]="20"+y[0]; + } else { + showAlert(msg[0]); + return false; + } + } + return (y[0]+"-"+y[1]+"-"+y[2]); + } + + function showAlert(msg){ + showErrorAlert("${uiLabelMap.CommonErrorMessage2}", msg); + } + + function additemSubmit(){ + <#if product.productTypeId! == "ASSET_USAGE" || product.productTypeId! == "ASSET_USAGE_OUT_IN"> + newdatevalue = validate(document.addform.reservStart.value); + if (newdatevalue == false) { + document.addform.reservStart.focus(); + } else { + document.addform.reservStart.value = newdatevalue; + document.addform.submit(); + } + <#else> + document.addform.submit(); + </#if> + } + + function addShoplistSubmit(){ + <#if product.productTypeId! == "ASSET_USAGE" || product.productTypeId! == "ASSET_USAGE_OUT_IN"> + if (document.addToShoppingList.reservStartStr.value == "") { + document.addToShoppingList.submit(); + } else { + newdatevalue = validate(document.addToShoppingList.reservStartStr.value); + if (newdatevalue == false) { + document.addToShoppingList.reservStartStr.focus(); + } else { + document.addToShoppingList.reservStartStr.value = newdatevalue; + // document.addToShoppingList.reservStart.value = ; + document.addToShoppingList.reservStartStr.value.slice(0,9)+" 00:00:00.000000000"; + document.addToShoppingList.submit(); + } + } + <#else> + document.addToShoppingList.submit(); + </#if> + } + + <#if product.virtualVariantMethodEnum! == "VV_FEATURETREE" && featureLists?has_content> + function checkRadioButton() { + var block1 = document.getElementById("addCart1"); + var block2 = document.getElementById("addCart2"); + <#list featureLists as featureList> + <#list featureList as feature> + <#if feature_index == 0> + var myList = document.getElementById("FT${feature.productFeatureTypeId}"); + if (myList.options[0].selected == true){ + block1.style.display = "none"; + block2.style.display = "block"; + return; + } + <#break> + </#if> + </#list> + </#list> + block1.style.display = "block"; + block2.style.display = "none"; + } + </#if> + + function displayProductVirtualVariantId(variantId) { + if(variantId){ + document.addform.product_id.value = variantId; + }else{ + 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); + } + + var priceElem = document.getElementById('variant_price_display'); + var price = getVariantPrice(variantId); + var priceTxt = null; + if(price){ + priceTxt = document.createTextNode(price); + }else{ + priceTxt = document.createTextNode(''); + } + if(priceElem.hasChildNodes()) { + priceElem.replaceChild(priceTxt, priceElem.firstChild); + } else { + priceElem.appendChild(priceTxt); + } + } +//]]> +$(function(){ + $('a[id^=productTag_]').click(function(){ + var id = $(this).attr('id'); + var ids = id.split('_'); + var productTagStr = ids[1]; + if (productTagStr) { + $('#productTagStr').val(productTagStr); + $('#productTagsearchform').submit(); + } + }); +}) + </script> + +<#macro showUnavailableVarients> + <#if unavailableVariants??> + <ul> + <#list unavailableVariants as prod> + <#assign features = prod.getRelated("ProductFeatureAppl", null, null, false)/> + <li> + <#list features as feature> + <em>${feature.getRelatedOne("ProductFeature", false).description}</em><#if feature_has_next>, </#if> + </#list> + <span>${uiLabelMap.ProductItemOutOfStock}</span> + </li> + </#list> + </ul> + </#if> +</#macro> + +<div id="productdetail"> + <#assign productAdditionalImage1 = productContentWrapper.get("ADDITIONAL_IMAGE_1", "url")! /> + <#assign productAdditionalImage2 = productContentWrapper.get("ADDITIONAL_IMAGE_2", "url")! /> + <#assign productAdditionalImage3 = productContentWrapper.get("ADDITIONAL_IMAGE_3", "url")! /> + <#assign productAdditionalImage4 = productContentWrapper.get("ADDITIONAL_IMAGE_4", "url")! /> + + <#-- Category next/previous --> + <#if category??> + <div id="paginationBox"> + <#if previousProductId??> + <a href="<@ofbizCatalogAltUrl productCategoryId=categoryId! productId=previousProductId!/>" class="buttontext">${uiLabelMap.CommonPrevious}</a> | + </#if> + <a href="<@ofbizCatalogAltUrl productCategoryId=categoryId!/>" class="linktext">${(category.categoryName)?default(category.description)!}</a> + <#if nextProductId??> + | <a href="<@ofbizCatalogAltUrl productCategoryId=categoryId! productId=nextProductId!/>" class="buttontext">${uiLabelMap.CommonNext}</a> + </#if> + </div> + </#if> + + <hr /> + <div id="productImageBox"> + <#if productImageList?has_content> + <#-- Product image/name/price --> + <div id="detailImageBox"> + <#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 id="detailImage" src="<@ofbizContentUrl>${contentPathPrefix!}${productLargeImageUrl!}</@ofbizContentUrl>" name="mainImage" vspace="5" hspace="5" class="cssImgXLarge" alt="" /></a> + <input type="hidden" id="originalImage" name="originalImage" value="<@ofbizContentUrl>${contentPathPrefix!}${productLargeImageUrl!}</@ofbizContentUrl>" /> + </#if> + <#if !productLargeImageUrl?string?has_content> + <img id="detailImage" src="/images/defaultImage.jpg" name="mainImage" alt="" /> + </#if> + </div> + <#-- Show Image Approved --> + <div id="additionalImageBox"> + <#if productImageList?has_content> + <#list productImageList as productImage> + <div class="additionalImage"> + <a href="javascript:void(0);" swapDetail="<@ofbizContentUrl>${productImage.productImage}</@ofbizContentUrl>"><img src="<@ofbizContentUrl>${productImage.productImageThumb}</@ofbizContentUrl>" vspace="5" hspace="5" alt="" /></a> + </div> + </#list> + </#if> + </div> + <#else> + <#-- Product image/name/price --> + <div id="detailImageBox"> + <#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 id="detailImage" src="<@ofbizContentUrl>${contentPathPrefix!}${productLargeImageUrl!}</@ofbizContentUrl>" name="mainImage" vspace="5" hspace="5" class="cssImgXLarge" alt="" /></a> + <input type="hidden" id="originalImage" name="originalImage" value="<@ofbizContentUrl>${contentPathPrefix!}${productLargeImageUrl!}</@ofbizContentUrl>" /> + </#if> + <#if !productLargeImageUrl?string?has_content> + <img id="detailImage" src="/images/defaultImage.jpg" name="mainImage" alt="" /> + </#if> + </div> + <div id="additionalImageBox"> + <#if productAdditionalImage1?string?has_content> + <div class="additionalImage"> + <a href="javascript:void(0);" swapDetail="<@ofbizContentUrl>${productAdditionalImage1}</@ofbizContentUrl>"><img src="<@ofbizContentUrl>${productAdditionalImage1}</@ofbizContentUrl>" vspace="5" hspace="5" class="cssImgXLarge" alt="" /></a> + </div> + </#if> + <#if productAdditionalImage2?string?has_content> + <div class="additionalImage"> + <a href="javascript:void(0);" swapDetail="<@ofbizContentUrl>${productAdditionalImage2}</@ofbizContentUrl>"><img src="<@ofbizContentUrl>${productAdditionalImage2}</@ofbizContentUrl>" vspace="5" hspace="5" class="cssImgXLarge" alt="" /></a> + </div> + </#if> + <#if productAdditionalImage3?string?has_content> + <div class="additionalImage"> + <a href="javascript:void(0);" swapDetail="<@ofbizContentUrl>${productAdditionalImage3}</@ofbizContentUrl>"><img src="<@ofbizContentUrl>${productAdditionalImage3}</@ofbizContentUrl>" vspace="5" hspace="5" class="cssImgXLarge" alt="" /></a> + </div> + </#if> + <#if productAdditionalImage4?string?has_content> + <div class="additionalImage"> + <a href="javascript:void(0);" swapDetail="<@ofbizContentUrl>${productAdditionalImage4}</@ofbizContentUrl>"><img src="<@ofbizContentUrl>${productAdditionalImage4}</@ofbizContentUrl>" vspace="5" hspace="5" class="cssImgXLarge" alt="" /></a> + </div> + </#if> + </div> + </#if> + + <div id="productDetailBox"> + <h2>${productContentWrapper.get("PRODUCT_NAME", "html")!}</h2> + <div>${productContentWrapper.get("DESCRIPTION", "html")!}</div> + <div>${product.productId!}</div> + <#-- example of showing a certain type of feature with the product --> + <#if sizeProductFeatureAndAppls?has_content> + <div> + <#if (sizeProductFeatureAndAppls?size == 1)> + ${uiLabelMap.OrderSizeAvailableSingle}: + <#else> + ${uiLabelMap.OrderSizeAvailableMultiple}: + </#if> + <#list sizeProductFeatureAndAppls as sizeProductFeatureAndAppl> + ${sizeProductFeatureAndAppl.description?default(sizeProductFeatureAndAppl.abbrev?default(sizeProductFeatureAndAppl.productFeatureId))}<#if sizeProductFeatureAndAppl_has_next>,</#if> + </#list> + </div> + </#if> + + <#-- for prices: + - 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 price.competitivePrice?? && price.price?? && price.price < price.competitivePrice> + <div>${uiLabelMap.ProductCompareAtPrice}: <span class="basePrice"><@ofbizCurrency amount=price.competitivePrice isoCode=price.currencyUsed /></span></div> + </#if> + <#if price.listPrice?? && price.price?? && price.price < price.listPrice> + <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 < price.defaultPrice && price.defaultPrice < price.listPrice> + <div>${uiLabelMap.ProductRegularPrice}: <span class="basePrice"><@ofbizCurrency amount=price.defaultPrice isoCode=price.currencyUsed /></span></div> + </#if> + <#if price.specialPromoPrice??> + <div>${uiLabelMap.ProductSpecialPromoPrice}: <span class="basePrice"><@ofbizCurrency amount=price.specialPromoPrice isoCode=price.currencyUsed /></span></div> + </#if> + <div> + <strong> + <#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!> ${uiLabelMap.CommonFrom} </#if><span class="${priceStyle}"><@ofbizCurrency amount=price.price isoCode=price.currencyUsed /></span> + <#if product.productTypeId! == "ASSET_USAGE" || product.productTypeId! == "ASSET_USAGE_OUT_IN"> + <#if product.reserv2ndPPPerc?? && product.reserv2ndPPPerc != 0><br /><span class="${priceStyle}">${uiLabelMap.ProductReserv2ndPPPerc}<#if !product.reservNthPPPerc?? || product.reservNthPPPerc == 0>${uiLabelMap.CommonUntil} ${product.reservMaxPersons!1}</#if> <@ofbizCurrency amount=product.reserv2ndPPPerc*price.price/100 isoCode=price.currencyUsed /></span></#if> + <#if product.reservNthPPPerc?? &&product.reservNthPPPerc != 0><br /><span class="${priceStyle}">${uiLabelMap.ProductReservNthPPPerc} <#if !product.reserv2ndPPPerc?? || product.reserv2ndPPPerc == 0>${uiLabelMap.ProductReservSecond} <#else> ${uiLabelMap.ProductReservThird} </#if> ${uiLabelMap.CommonUntil} ${product.reservMaxPersons!1}, ${uiLabelMap.ProductEach}: <@ofbizCurrency amount=product.reservNthPPPerc*price.price/100 isoCode=price.currencyUsed /></span></#if> + <#if (!product.reserv2ndPPPerc?? || product.reserv2ndPPPerc == 0) && (!product.reservNthPPPerc?? || product.reservNthPPPerc == 0)><br />${uiLabelMap.ProductMaximum} ${product.reservMaxPersons!1} ${uiLabelMap.ProductPersons}.</#if> + </#if> + </strong> + </div> + <#if price.listPrice?? && price.price?? && price.price < price.listPrice> + <#assign priceSaved = price.listPrice - price.price /> + <#assign percentSaved = (priceSaved / price.listPrice) * 100 /> + <div>${uiLabelMap.OrderSave}: <span class="basePrice"><@ofbizCurrency amount=priceSaved isoCode=price.currencyUsed /> (${percentSaved?int}%)</span></div> + </#if> + <#-- show price details ("showPriceDetails" field can be set in the screen definition) --> + <#if (showPriceDetails?? && showPriceDetails?default("N") == "Y")> + <#if price.orderItemPriceInfos??> + <#list price.orderItemPriceInfos as orderItemPriceInfo> + <div>${orderItemPriceInfo.description!}</div> + </#list> + </#if> + </#if> + + <#-- Included quantities/pieces --> + <#if product.piecesIncluded?? && product.piecesIncluded?long != 0> + <div> + ${uiLabelMap.OrderPieces}: ${product.piecesIncluded} + </div> + </#if> + <#if (product.quantityIncluded?? && product.quantityIncluded != 0) || product.quantityUomId?has_content> + <#assign quantityUom = product.getRelatedOne("QuantityUom", true)! /> + <div> + ${uiLabelMap.CommonQuantity}: ${product.quantityIncluded!} ${((quantityUom.abbreviation)?default(product.quantityUomId))!} + </div> + </#if> + + <#if (product.productWeight?? && product.productWeight != 0) || product.weightUomId?has_content> + <#assign weightUom = product.getRelatedOne("WeightUom", true)! /> + <div> + ${uiLabelMap.CommonWeight}: ${product.productWeight!} ${((weightUom.abbreviation)?default(product.weightUomId))!} + </div> + </#if> + <#if (product.productHeight?? && product.productHeight != 0) || product.heightUomId?has_content> + <#assign heightUom = product.getRelatedOne("HeightUom", true)! /> + <div> + ${uiLabelMap.CommonHeight}: ${product.productHeight!} ${((heightUom.abbreviation)?default(product.heightUomId))!} + </div> + </#if> + <#if (product.productWidth?? && product.productWidth != 0) || product.widthUomId?has_content> + <#assign widthUom = product.getRelatedOne("WidthUom", true)! /> + <div> + ${uiLabelMap.CommonWidth}: ${product.productWidth!} ${((widthUom.abbreviation)?default(product.widthUomId))!} + </div> + </#if> + <#if (product.productDepth?? && product.productDepth != 0) || product.depthUomId?has_content> + <#assign depthUom = product.getRelatedOne("DepthUom", true)! /> + <div> + ${uiLabelMap.CommonDepth}: ${product.productDepth!} ${((depthUom.abbreviation)?default(product.depthUomId))!} + </div> + </#if> + + <#if daysToShip??> + <div><strong>${uiLabelMap.ProductUsuallyShipsIn} ${daysToShip} ${uiLabelMap.CommonDays}!</strong></div> + </#if> + + <#-- show tell a friend details only in ecommerce application --> + <div> </div> + <div> + <a href="javascript:popUpSmall('<@ofbizUrl>tellafriend?productId=${product.productId}<#if categoryId??>&categoryId=${categoryId}/</#if></@ofbizUrl>','tellafriend');" class="buttontext">${uiLabelMap.CommonTellAFriend}</a> + </div> + + <#if disFeatureList?? && 0 < disFeatureList.size()> + <p> </p> + <#list disFeatureList as currentFeature> + <#assign disFeatureType = currentFeature.getRelatedOne("ProductFeatureType", true) /> + <div> + <#if disFeatureType.description??>${disFeatureType.get("description", locale)}<#else>${currentFeature.productFeatureTypeId}</#if>: ${currentFeature.description} + </div> + </#list> + <div> </div> + </#if> + </div> + + <div id="addItemForm"> + <form method="post" action="<@ofbizUrl>additem</@ofbizUrl>" name="addform" style="margin: 0;"> + <fieldset> + <#assign inStock = true /> + <#assign commentEnable = Static["org.ofbiz.entity.util.EntityUtilProperties"].getPropertyValue("order", "order.item.comment.enable", delegator)> + <#if commentEnable.equals("Y")> + <#assign orderItemAttr = Static["org.ofbiz.entity.util.EntityUtilProperties"].getPropertyValue("order", "order.item.attr.prefix", delegator)> + ${uiLabelMap.CommonComment} <input type="text" name="${orderItemAttr}comment"/> + </#if> + <#-- Variant Selection --> + <#if product.isVirtual!?upper_case == "Y"> + <#if product.virtualVariantMethodEnum! == "VV_FEATURETREE" && featureLists?has_content> + <#list featureLists as featureList> + <#list featureList as feature> + <#if feature_index == 0> + <div>${feature.description}: <select id="FT${feature.productFeatureTypeId}" name="FT${feature.productFeatureTypeId}" onchange="javascript:checkRadioButton();"> + <option value="select" selected="selected">${uiLabelMap.EcommerceSelectOption}</option> + <#else> + <option value="${feature.productFeatureId}">${feature.description} <#if feature.price??>(+ <@ofbizCurrency amount=feature.price?string isoCode=feature.currencyUomId />)</#if></option> + </#if> + </#list> + </select> + </div> + </#list> + <input type="hidden" name="add_product_id" value="${product.productId}" /> + <div id="addCart1" style="display:none;"> + <span style="white-space: nowrap;"><strong>${uiLabelMap.CommonQuantity}:</strong></span> + <input type="text" size="5" name="quantity" value="1" /> + <a href="javascript:javascript:addItem();" class="buttontext"><span style="white-space: nowrap;">${uiLabelMap.OrderAddToCart}</span></a> + + </div> + <div id="addCart2" style="display:block;"> + <span style="white-space: nowrap;"><strong>${uiLabelMap.CommonQuantity}:</strong></span> + <input type="text" size="5" value="1" disabled="disabled" /> + <a href="javascript:showErrorAlert("${uiLabelMap.CommonErrorMessage2}","${uiLabelMap.CommonPleaseSelectAllFeaturesFirst}");" class="buttontext"><span style="white-space: nowrap;">${uiLabelMap.OrderAddToCart}</span></a> + + </div> + </#if> + <#if !product.virtualVariantMethodEnum?? || product.virtualVariantMethodEnum == "VV_VARIANTTREE"> + <#if variantTree?? && (variantTree.size() > 0)> + <#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> + <span id="product_uom"></span> + <input type="hidden" name="product_id" value="${product.productId}"/> + <input type="hidden" name="add_product_id" value="NULL"/> + <div> + <strong><span id="product_id_display"> </span></strong> + <strong><div id="variant_price_display"> </div></strong> + </div> + <#else> + <input type="hidden" name="add_product_id" value="NULL"/> + <#assign inStock = false /> + </#if> + </#if> + <#else> + <input type="hidden" name="add_product_id" value="${product.productId}" /> + <#if mainProducts?has_content> + <input type="hidden" name="product_id" value=""/> + <select name="productVariantId" onchange="javascript:displayProductVirtualVariantId(this.value);"> + <option value="">Select Unit Of Measure</option> + <#list mainProducts as mainProduct> + <option value="${mainProduct.productId}">${mainProduct.uomDesc} : ${mainProduct.piecesIncluded}</option> + </#list> + </select><br/> + <div> + <strong><span id="product_id_display"> </span></strong> + <strong><div id="variant_price_display"> </div></strong> + </div> + </#if> + <#if (availableInventory??) && (availableInventory <= 0) && product.requireAmount?default("N") == "N"> + <#assign inStock = false /> + </#if> + </#if> + <#-- check to see if introductionDate hasnt passed yet --> + <#if product.introductionDate?? && nowTimestamp.before(product.introductionDate)> + <p> </p> + <div style="color: red;">${uiLabelMap.ProductProductNotYetMadeAvailable}.</div> + <#-- check to see if salesDiscontinuationDate has passed --> + <#elseif product.salesDiscontinuationDate?? && nowTimestamp.after(product.salesDiscontinuationDate)> + <div style="color: red;">${uiLabelMap.ProductProductNoLongerAvailable}.</div> + <#-- check to see if the product requires inventory check and has inventory --> + <#elseif product.virtualVariantMethodEnum! != "VV_FEATURETREE"> + <#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;"><strong>${uiLabelMap.CommonAmount}:</strong></span> + <input type="text" size="5" name="add_amount" value=""/> + </div> + <#if product.productTypeId! == "ASSET_USAGE" || product.productTypeId! == "ASSET_USAGE_OUT_IN"> + <div> + <label>Start Date(yyyy-mm-dd)</label><@htmlTemplate.renderDateTimeField event="" action="" name="reservStart" className="" alert="" title="Format: yyyy-MM-dd HH:mm:ss.SSS" value="${startDate}" size="25" maxlength="30" id="reservStart1" dateType="date" shortDateInput=true timeDropdownParamName="" defaultDateTimeString="" localizedIconTitle="" timeDropdown="" timeHourName="" classString="" hour1="" hour2="" timeMinutesName="" minutes="" isTwelveHour="" ampmName="" amSelected="" pmSelected="" compositeType="" formName=""/> + </div> + <div> + <#--td nowrap="nowrap" align="right">Number<br />of days</td><td><input type="textt" size="4" name="reservLength"/></td></tr><tr><td> </td><td align="right" nowrap="nowrap"> </td--> + Number of days<input type="text" size="4" name="reservLength" value=""/> + Number of persons<input type="text" size="4" name="reservPersons" value="2"/> + Number of rooms<input type="text" size="5" name="quantity" value="1"/> + </div> + <a href="javascript:addItem()" class="buttontext"><span style="white-space: nowrap;">${uiLabelMap.OrderAddToCart}</span></a> + <#else> + <span><input name="quantity" id="quantity" value="1" size="4" maxLength="4" type="text" <#if product.isVirtual!?upper_case == "Y">disabled="disabled"</#if> /></span><a href="javascript:addItem()" id="addToCart" name="addToCart" class="buttontext">${uiLabelMap.OrderAddToCart}</a> + <@showUnavailableVarients/> + </#if> + <#else> + <#if productStore??> + <#if productStore.requireInventory?? && productStore.requireInventory == "N"> + <span><input name="quantity" id="quantity" value="1" size="4" maxLength="4" type="text" <#if product.isVirtual!?upper_case == "Y">disabled="disabled"</#if> /></span><a href="javascript:addItem()" id="addToCart" name="addToCart" class="buttontext">${uiLabelMap.OrderAddToCart}</a> + <@showUnavailableVarients/> + <#else> + <span><input name="quantity" id="quantity" value="1" size="4" maxLength="4" type="text" disabled="disabled" /></span><a href="javascript:void(0);" disabled="disabled" class="buttontext">${uiLabelMap.OrderAddToCart}</a><br /> + <span>${uiLabelMap.ProductItemOutOfStock}<#if product.inventoryMessage??>— ${product.inventoryMessage}</#if></span> + </#if> + </#if> + </#if> + </#if> + <#if variantPriceList??> + <#list variantPriceList as vpricing> + <#assign variantName = vpricing.get("variantName")!> + <#assign secondVariantName = vpricing.get("secondVariantName")!> + <#assign minimumQuantity = vpricing.get("minimumQuantity")> + <#if minimumQuantity > 0> + <div>minimum order quantity for ${secondVariantName!} ${variantName!} is ${minimumQuantity!}</div> + </#if> + </#list> + <#elseif minimumQuantity?? && minimumQuantity?has_content && minimumQuantity > 0> + <div>minimum order quantity for ${productContentWrapper.get("PRODUCT_NAME", "html")!} is ${minimumQuantity!}</div> + </#if> + </fieldset> + </form> + </div> + <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_}</#if></@ofbizUrl>"> + <fieldset> + <input type="hidden" name="productId" value="${product.productId}" /> + <input type="hidden" name="product_id" value="${product.productId}" /> + <input type="hidden" name="productStoreId" value="${productStoreId}" /> + <input type="hidden" name="reservStart" value= "" /> + <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> + + <#--assign nowDate = Static["org.ofbiz.base.util.UtilDateTime"].nowDateString("yyyy-MM-dd")--> + <#if product.productTypeId! == "ASSET_USAGE"> + ${uiLabelMap.CommonStartDate} (yyyy-mm-dd)<@htmlTemplate.renderDateTimeField name="reservStartStr" event="" action="" value="${startDate}" className="" alert="" title="Format: yyyy-MM-dd HH:mm:ss.SSS" size="15" maxlength="30" id="reservStartStr" dateType="date" shortDateInput=false timeDropdownParamName="" defaultDateTimeString="" localizedIconTitle="" timeDropdown="" timeHourName="" classString="" hour1="" hour2="" timeMinutesName="" minutes="" isTwelveHour="" ampmName="" amSelected="" pmSelected="" compositeType="" formName=""/> Number of days <input type="text" size="4" name="reservLength" /> <br/>Number of persons <input type="text" size="4" name="reservPersons" value="1" /> Qty <input type="text" size="5" name="quantity" value="1" /> + <#elseif product.productTypeId! == "ASSET_USAGE_OUT_IN"> + ${uiLabelMap.CommonStartDate} (yyyy-mm-dd) <@htmlTemplate.renderDateTimeField name="reservStartStr" event="" action="" value="${startDate}" className="" alert="" title="Format: yyyy-MM-dd HH:mm:ss.SSS" size="15" maxlength="30" id="reservStartStr" dateType="date" shortDateInput=false timeDropdownParamName="" defaultDateTimeString="" localizedIconTitle="" timeDropdown="" timeHourName="" classString="" hour1="" hour2="" timeMinutesName="" minutes="" isTwelveHour="" ampmName="" amSelected="" pmSelected="" compositeType="" formName=""/> Number of days <input type="text" size="4" name="reservLength" /><input type="hidden" size="4" name="reservPersons" value="1" /><br/> + Qty <input type="text" size="5" name="quantity" value="1" /> + <#else> + <input type="text" size="5" name="quantity" value="1" /> + <input type="hidden" name="reservStartStr" value= "" /> + </#if> + <a href="javascript:addShoplistSubmit();" class="buttontext">${uiLabelMap.OrderAddToShoppingList}</a> + </fieldset> + </form> + <#else> <br /> + ${uiLabelMap.OrderYouMust} <a href="<@ofbizUrl>checkLogin/showcart</@ofbizUrl>" class="buttontext">${uiLabelMap.CommonBeLogged}</a> + ${uiLabelMap.OrderToAddSelectedItemsToShoppingList}. + </#if> + </div> + <#-- Prefill first select box (virtual products only) --> + <#if variantTree?? && 0 < variantTree.size()> + <script 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> </p> + <#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> + <a href="javascript:getList('FT${featureOrderFirst}','${indexer}',1);" class="linktext">${key}</a> + <a href="javascript:getList('FT${featureOrderFirst}','${indexer}',1);"><img src="<@ofbizContentUrl>${contentPathPrefix!}${imageUrl}</@ofbizContentUrl>" class="cssImgSmall" alt="" /></a> + <br /> + </#if> + <#assign indexer = indexer + 1 /> + </#list> + <#if (indexer > maxIndex)> + <div><strong>${uiLabelMap.ProductMoreOptions}</strong></div> + </#if> + </#if> + + <#-- Digital Download Files Associated with this Product --> + <#if downloadProductContentAndInfoList?has_content> + <div id="download-files"> + <div>${uiLabelMap.OrderDownloadFilesTitle}:</div> + <#list downloadProductContentAndInfoList as downloadProductContentAndInfo> + <div>${downloadProductContentAndInfo.contentName!}<#if downloadProductContentAndInfo.description?has_content> - ${downloadProductContentAndInfo.description}</#if></div> + </#list> + </div> + </#if> + + <#-- Long description of product --> + <div id="long-description"> + <div>${productContentWrapper.get("LONG_DESCRIPTION", "html")!}</div> + <div>${productContentWrapper.get("WARNINGS", "html")!}</div> + </div> + + <#-- Any attributes/etc may go here --> + + <#-- Product Reviews --> + <div id="reviews"> + <div>${uiLabelMap.OrderCustomerReviews}:</div> + <#if averageRating?? && (averageRating > 0) && numRatings?? && (numRatings > 1)> + <div>${uiLabelMap.OrderAverageRating}: ${averageRating} <#if numRatings??>(${uiLabelMap.CommonFrom} ${numRatings} ${uiLabelMap.OrderRatings})</#if></div> + </#if> + <hr /> + <#if productReviews?has_content> + <#list productReviews as productReview> + <#assign postedUserLogin = productReview.getRelatedOne("UserLogin", false) /> + <#assign postedPerson = postedUserLogin.getRelatedOne("Person", false)! /> + <div><strong>${uiLabelMap.CommonBy}: </strong><#if productReview.postedAnonymous?default("N") == "Y"> ${uiLabelMap.OrderAnonymous}<#else> ${postedPerson.firstName} ${postedPerson.lastName} </#if></div> + <div><strong>${uiLabelMap.CommonAt}: </strong>${productReview.postedDateTime!} </div> + <div><strong>${uiLabelMap.OrderRanking}: </strong>${productReview.productRating!?string}</div> + <div> </div> + <div>${productReview.productReview!}</div> + <hr /> + </#list> + <div> + <a href="<@ofbizUrl>reviewProduct?category_id=${categoryId!}&product_id=${product.productId}</@ofbizUrl>" class="linktext">${uiLabelMap.ProductReviewThisProduct}!</a> + </div> + <#else> + <div>${uiLabelMap.ProductProductNotReviewedYet}.</div> + <div> + <a href="<@ofbizUrl>reviewProduct?category_id=${categoryId!}&product_id=${product.productId}</@ofbizUrl>" class="linktext">${uiLabelMap.ProductBeTheFirstToReviewThisProduct}</a> + </div> + </div> + </#if> + <#-- Upgrades/Up-Sell/Cross-Sell --> + <#macro associated assocProducts beforeName showName afterName formNamePrefix targetRequestName> + <#assign pageProduct = product /> + <#assign targetRequest = "product" /> + <#if targetRequestName?has_content> + <#assign targetRequest = targetRequestName /> + </#if> + <#if assocProducts?has_content> + <h2>${beforeName!}<#if showName == "Y">${productContentWrapper.get("PRODUCT_NAME", "html")!}</#if>${afterName!}</h2> + + <div class="productsummary-container"> + <#list assocProducts as productAssoc> + <#if productAssoc.productId == product.productId> + <#assign assocProductId = productAssoc.productIdTo /> + <#else> + <#assign assocProductId = productAssoc.productId /> + </#if> + <div> + <a href="<@ofbizUrl>${targetRequest}/<#if categoryId??>~category_id=${categoryId}/</#if>~product_id=${assocProductId}</@ofbizUrl>" class="buttontext"> + ${assocProductId} + </a> + <#if productAssoc.reason?has_content> + - <strong>${productAssoc.reason}</strong> + </#if> + </div> + ${setRequestAttribute("optProductId", assocProductId)} + ${setRequestAttribute("listIndex", listIndex)} + ${setRequestAttribute("formNamePrefix", formNamePrefix)} + <#if targetRequestName?has_content> + ${setRequestAttribute("targetRequestName", targetRequestName)} + </#if> + ${screens.render(productsummaryScreen)} + <#assign product = pageProduct /> + <#local listIndex = listIndex + 1 /> + </#list> + </div> + + ${setRequestAttribute("optProductId", "")} + ${setRequestAttribute("formNamePrefix", "")} + ${setRequestAttribute("targetRequestName", "")} + </#if> + </#macro> + + <#assign productValue = product /> + <#assign listIndex = 1 /> + ${setRequestAttribute("productValue", productValue)} + <div id="associated-products"> + <#-- also bought --> + <@associated assocProducts=alsoBoughtProducts beforeName="" showName="N" afterName="${uiLabelMap.ProductAlsoBought}" formNamePrefix="albt" targetRequestName="" /> + <#-- obsolete --> + <@associated assocProducts=obsoleteProducts beforeName="" showName="Y" afterName=" ${uiLabelMap.ProductObsolete}" formNamePrefix="obs" targetRequestName="" /> + <#-- cross sell --> + <@associated assocProducts=crossSellProducts beforeName="" showName="N" afterName="${uiLabelMap.ProductCrossSell}" formNamePrefix="cssl" targetRequestName="crosssell" /> + <#-- up sell --> + <@associated assocProducts=upSellProducts beforeName="${uiLabelMap.ProductUpSell} " showName="Y" afterName=":" formNamePrefix="upsl" targetRequestName="upsell" /> + <#-- obsolescence --> + <@associated assocProducts=obsolenscenseProducts beforeName="" showName="Y" afterName=" ${uiLabelMap.ProductObsolescense}" formNamePrefix="obce" targetRequestName="" /> + </div> + + <#-- special cross/up-sell area using commonFeatureResultIds (from common feature product search) --> + <#if commonFeatureResultIds?has_content> + <h2>${uiLabelMap.ProductSimilarProducts}</h2> + + <div class="productsummary-container"> + <#list commonFeatureResultIds as commonFeatureResultId> + ${setRequestAttribute("optProductId", commonFeatureResultId)} + ${setRequestAttribute("listIndex", commonFeatureResultId_index)} + ${setRequestAttribute("formNamePrefix", "cfeatcssl")} + <#-- ${setRequestAttribute("targetRequestName", targetRequestName)} --> + ${screens.render(productsummaryScreen)} + </#list> + </div> + </#if> + <div class="product-tags"> + <p class="titleProductTags"><h3>${uiLabelMap.EcommerceProductTags}</h3></p> + <#if productTags??> + <p class="titleAddTags"><strong>${uiLabelMap.EcommerceProductTagsDetail}:</strong></p> + <p> + <ul> + <li> + <#assign no = 0 /> + <#list productTags?keys?sort as productTag> + <#assign tagValue = productTags.get(productTag)!/> + <#if tagValue?has_content> + <span><a href="javascript:void(0);" id="productTag_${productTag}">${productTag}</a> (${tagValue}) <#if no < (productTags.size() - 1)> | </#if></span> + <#assign no = no + 1 /> + </#if> + </#list> + </li> + </ul> + </p> + </#if> + + <p class="titleAddTags"><strong>${uiLabelMap.EcommerceAddYourTags}:</strong></p> + <p> + <form method="post" action="<@ofbizUrl>addProductTags</@ofbizUrl>" name="addProductTags"> + <input type="hidden" name="productId" value="${product.productId!}"/> + <input class="inputProductTags" type="text" value="" name="productTags" id="productTags" size="40"/> + <input class="buttonProductTags" type="submit" value="${uiLabelMap.EcommerceAddTags}" name="addTag"/> + </form> + <span>${uiLabelMap.EcommerceAddTagsDetail}</span> + </p> + </div> + <hr /> + <form action="<@ofbizUrl>tagsearch</@ofbizUrl>" method="post" name="productTagsearchform" id="productTagsearchform"> + <input type="hidden" name="keywordTypeId" value="KWT_TAG"/> + <input type="hidden" name="statusId" value="KW_APPROVED"/> + <input type="hidden" name="clearSearch" value="Y"/> + <input type="hidden" name="VIEW_SIZE" value="10"/> + <input type="hidden" name="PAGING" value="Y"/> + <input type="hidden" name="SEARCH_STRING" id="productTagStr"/> + </form> + </div> +</div> Propchange: ofbiz/trunk/applications/order/template/product/productdetail.ftl ------------------------------------------------------------------------------ svn:eol-style = native Propchange: ofbiz/trunk/applications/order/template/product/productdetail.ftl ------------------------------------------------------------------------------ svn:keywords = Date Rev Author URL Id Propchange: ofbiz/trunk/applications/order/template/product/productdetail.ftl ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: ofbiz/trunk/applications/order/template/quote/CopyQuote.ftl URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/template/quote/CopyQuote.ftl?rev=1736868&view=auto ============================================================================== --- ofbiz/trunk/applications/order/template/quote/CopyQuote.ftl (added) +++ ofbiz/trunk/applications/order/template/quote/CopyQuote.ftl Mon Mar 28 11:14:22 2016 @@ -0,0 +1,33 @@ +<#-- +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 quote??> +<form action="<@ofbizUrl>copyQuote</@ofbizUrl>" method="post"> + <input type="hidden" name="quoteId" value="${quoteId}"/> + <div> + <span class="label">${uiLabelMap.OrderCopyQuote}</span> + ${uiLabelMap.OrderOrderQuoteItems} <input type="checkbox" name="copyQuoteItems" value="Y" checked="checked" /> + ${uiLabelMap.OrderOrderQuoteAdjustments} <input type="checkbox" name="copyQuoteAdjustments" value="Y" checked="checked" /> + ${uiLabelMap.OrderOrderQuoteRoles} <input type="checkbox" name="copyQuoteRoles" value="Y" checked="checked" /> + ${uiLabelMap.OrderOrderQuoteAttributes} <input type="checkbox" name="copyQuoteAttributes" value="Y" checked="checked" /> + ${uiLabelMap.OrderOrderQuoteCoefficients} <input type="checkbox" name="copyQuoteCoefficients" value="Y" checked="checked" /> + ${uiLabelMap.OrderOrderQuoteTerms} <input type="checkbox" name="copyQuoteTerms" value="Y" checked="checked" /> + </div> + <input type="submit" class="smallSubmit" value="${uiLabelMap.CommonCopy}"/> +</form> +</#if> \ No newline at end of file Propchange: ofbiz/trunk/applications/order/template/quote/CopyQuote.ftl ------------------------------------------------------------------------------ svn:eol-style = native Propchange: ofbiz/trunk/applications/order/template/quote/CopyQuote.ftl ------------------------------------------------------------------------------ svn:keywords = Date Rev Author URL Id Propchange: ofbiz/trunk/applications/order/template/quote/CopyQuote.ftl ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: ofbiz/trunk/applications/order/template/quote/ManageQuotePrices.ftl URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/template/quote/ManageQuotePrices.ftl?rev=1736868&view=auto ============================================================================== --- ofbiz/trunk/applications/order/template/quote/ManageQuotePrices.ftl (added) +++ ofbiz/trunk/applications/order/template/quote/ManageQuotePrices.ftl Mon Mar 28 11:14:22 2016 @@ -0,0 +1,26 @@ +<#-- +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. +--> +<span class="label">${uiLabelMap.OrderOrderQuoteCoefficients}</span> +<br /> +<#list quoteCoefficients as quoteCoefficient> + <div>${quoteCoefficient.coeffName} ${quoteCoefficient.coeffValue}</div> +</#list> +<br /> +<div><span class="label">${uiLabelMap.CommonTotalCostMult}</span> ${costMult}</div> +<div><span class="label">${uiLabelMap.CommonTotalCostToPriceMult}</span> ${costToPriceMult}</div> \ No newline at end of file Propchange: ofbiz/trunk/applications/order/template/quote/ManageQuotePrices.ftl ------------------------------------------------------------------------------ svn:eol-style = native Propchange: ofbiz/trunk/applications/order/template/quote/ManageQuotePrices.ftl ------------------------------------------------------------------------------ svn:keywords = Date Rev Author URL Id Propchange: ofbiz/trunk/applications/order/template/quote/ManageQuotePrices.ftl ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: ofbiz/trunk/applications/order/template/quote/ManageQuotePricesTotals.ftl URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/template/quote/ManageQuotePricesTotals.ftl?rev=1736868&view=auto ============================================================================== --- ofbiz/trunk/applications/order/template/quote/ManageQuotePricesTotals.ftl (added) +++ ofbiz/trunk/applications/order/template/quote/ManageQuotePricesTotals.ftl Mon Mar 28 11:14:22 2016 @@ -0,0 +1,22 @@ +<#-- +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. +--> +<br /> +<div><span class="label">${uiLabelMap.CommonTotalCost}</span> ${totalCost}</div> +<div><span class="label">${uiLabelMap.CommonTotalPrice}</span> ${totalPrice}</div> +<div><span class="label">${uiLabelMap.CommonTotalCostMult}</span> ${totalCostMult}</div> \ No newline at end of file Propchange: ofbiz/trunk/applications/order/template/quote/ManageQuotePricesTotals.ftl ------------------------------------------------------------------------------ svn:eol-style = native Propchange: ofbiz/trunk/applications/order/template/quote/ManageQuotePricesTotals.ftl ------------------------------------------------------------------------------ svn:keywords = Date Rev Author URL Id Propchange: ofbiz/trunk/applications/order/template/quote/ManageQuotePricesTotals.ftl ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: ofbiz/trunk/applications/order/template/quote/ViewQuoteItemInfo.ftl URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/template/quote/ViewQuoteItemInfo.ftl?rev=1736868&view=auto ============================================================================== --- ofbiz/trunk/applications/order/template/quote/ViewQuoteItemInfo.ftl (added) +++ ofbiz/trunk/applications/order/template/quote/ViewQuoteItemInfo.ftl Mon Mar 28 11:14:22 2016 @@ -0,0 +1,159 @@ +<#-- +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="screenlet"> + <div class="screenlet-title-bar"> + <div class="boxlink"> + <#if maySelectItems?default("N") == "Y"> + <a href="javascript:document.addCommonToCartForm.add_all.value='true';document.addCommonToCartForm.submit()" class="buttontext">${uiLabelMap.OrderAddAllToCart}</a> + </#if> + </div> + <div class="h3">${uiLabelMap.OrderOrderQuoteItems}</div> + </div> + <div class="screenlet-body"> + <table cellspacing="0" class="basic-table"> + <tr valign="bottom" class="header-row"> + <td width="15%">${uiLabelMap.ProductItem}</td> + <td width="20%">${uiLabelMap.ProductProduct}</td> + <td width="10%" align="right">${uiLabelMap.ProductQuantity}</td> + <td width="10%" align="right">${uiLabelMap.OrderSelAmount}</td> + <td width="5%" align="right"> </td> + <td width="10%" align="right">${uiLabelMap.OrderOrderQuoteUnitPrice}</td> + <td width="10%" align="right">${uiLabelMap.OrderAdjustments}</td> + <td width="10%" align="right">${uiLabelMap.CommonSubtotal}</td> + </tr> + <tr valign="bottom" class="header-row"> + <td> ${uiLabelMap.OrderOrderTermType}</td> + <td> ${uiLabelMap.OrderOrderTermValue}</td> + <td> ${uiLabelMap.OrderOrderTermDays}</td> + <td> ${uiLabelMap.OrderQuoteTermDescription}</td> + <td></td> + <td></td> + <td></td> + <td align="right"> </td> + </tr> + <#assign totalQuoteAmount = 0.0> + <#assign alt_row = false/> + <#list quoteItems as quoteItem> + <#assign selectedAmount = quoteItem.selectedAmount?default(1)> + <#if selectedAmount == 0> + <#assign selectedAmount = 1/> + </#if> + <#assign quoteItemAmount = quoteItem.quoteUnitPrice?default(0) * quoteItem.quantity?default(0) * selectedAmount> + <#assign quoteItemAdjustments = quoteItem.getRelated("QuoteAdjustment", null, null, false)> + <#assign totalQuoteItemAdjustmentAmount = 0.0> + <#list quoteItemAdjustments as quoteItemAdjustment> + <#assign totalQuoteItemAdjustmentAmount = quoteItemAdjustment.amount?default(0) + totalQuoteItemAdjustmentAmount> + </#list> + <#assign totalQuoteItemAmount = quoteItemAmount + totalQuoteItemAdjustmentAmount> + <#assign totalQuoteAmount = totalQuoteAmount + totalQuoteItemAmount> + + <tr <#if alt_row>class="alternate-row" </#if>> + <td > + <div> + <#if showQuoteManagementLinks?? && quoteItem.isPromo?default("N") == "N" && quote.statusId=="QUO_CREATED"> + <a href="<@ofbizUrl>EditQuoteItem?quoteId=${quoteItem.quoteId}&quoteItemSeqId=${quoteItem.quoteItemSeqId}</@ofbizUrl>" class="buttontext">${quoteItem.quoteItemSeqId}</a> + <#else> + ${quoteItem.quoteItemSeqId} + </#if> + </div> + <#assign quoteTerms = delegator.findByAnd("QuoteTerm", {"quoteId" : quoteItem.quoteId, "quoteItemSeqId" : quoteItem.quoteItemSeqId}, null, false)> + </td> + <td valign="top"> + <div> + <#if quoteItem.productId??> + <#assign product = quoteItem.getRelatedOne("Product", false)/> + ${(product.internalName)!} + </#if> + <#if showQuoteManagementLinks??> + <a href="/catalog/control/EditProduct?productId=${quoteItem.productId!}" class="buttontext"> + <#if quoteItem.productId??> + ${quoteItem.productId} + <#else> + ${uiLabelMap.ProductCreateProduct} + </#if> + </a> + <#else> + <a href="<@ofbizUrl>product?product_id=${quoteItem.productId!}</@ofbizUrl>" class="buttontext">${quoteItem.productId!}</a> + </#if> + </div> + </td> + <td align="right" valign="top">${quoteItem.quantity!}</td> + <td align="right" valign="top">${quoteItem.selectedAmount!}</td> + <td></td> + <td align="right" valign="top"><@ofbizCurrency amount=quoteItem.quoteUnitPrice isoCode=quote.currencyUomId/></td> + <td align="right" valign="top"><@ofbizCurrency amount=totalQuoteItemAdjustmentAmount isoCode=quote.currencyUomId/></td> + <td align="right" valign="top"><@ofbizCurrency amount=totalQuoteItemAmount isoCode=quote.currencyUomId/></td> + </tr> + <#list quoteTerms as quoteTerm> + <#assign termDescription = delegator.findOne("TermType",{"termTypeId":quoteTerm.termTypeId}, false)> + <tr <#if alt_row>class="alternate-row" </#if>> + <td valign="top"> ${termDescription.description!}</td> + <td valign="top"> ${quoteTerm.termValue!}</td> + <td valign="top"><#if quoteTerm.termDays??> ${quoteTerm.termDays!}</#if></td> + <td valign="top"><#if quoteTerm.description??> ${quoteTerm.description}</#if></td> + <td align="right" valign="top"></td> + <td align="right" valign="top"></td> + <td align="right" valign="top"></td> + <td align="right" valign="top"></td> + </tr> + </#list> + <#-- now show adjustment details per line item --> + <#list quoteItemAdjustments as quoteItemAdjustment> + <#assign adjustmentType = quoteItemAdjustment.getRelatedOne("OrderAdjustmentType", false)> + <tr <#if alt_row>class="alternate-row" </#if>> + <td align="right" colspan="6"><span class="label">${adjustmentType.get("description",locale)!}</span></td> + <td align="right"><@ofbizCurrency amount=quoteItemAdjustment.amount isoCode=quote.currencyUomId/></td> + <td> </td> + </tr> + </#list> + <#-- toggle the row color --> + <#assign alt_row = !alt_row> + </#list> + <tr><td colspan="10"><hr /></td></tr> + <tr> + <td align="right" colspan="7" class="label">${uiLabelMap.CommonSubtotal}</td> + <td align="right"><@ofbizCurrency amount=totalQuoteAmount isoCode=quote.currencyUomId/></td> + </tr> + <tr><td colspan="5"></td><td colspan="6"><hr /></td></tr> + <#assign totalQuoteHeaderAdjustmentAmount = 0.0> + <#assign findAdjustment = false> + <#list quoteAdjustments as quoteAdjustment> + <#assign adjustmentType = quoteAdjustment.getRelatedOne("OrderAdjustmentType", false)> + <#if !quoteAdjustment.quoteItemSeqId??> + <#assign totalQuoteHeaderAdjustmentAmount = quoteAdjustment.amount?default(0) + totalQuoteHeaderAdjustmentAmount> + <tr> + <td align="right" colspan="6"><span class="label">${adjustmentType.get("description",locale)!}</span></td> + <td align="right"><@ofbizCurrency amount=quoteAdjustment.amount isoCode=quote.currencyUomId/></td> + </tr> + </#if> + <#assign findAdjustment = true> + </#list> + <#assign grandTotalQuoteAmount = totalQuoteAmount + totalQuoteHeaderAdjustmentAmount> + <#if findAdjustment> + <tr><td colspan="5"></td><td colspan="6"><hr /></td></tr> + </#if> + <tr> + <td align="right" colspan="7" class="label">${uiLabelMap.OrderGrandTotal}</td> + <td align="right"> + <@ofbizCurrency amount=grandTotalQuoteAmount isoCode=quote.currencyUomId/> + </td> + </tr> + </table> + </div> +</div> Propchange: ofbiz/trunk/applications/order/template/quote/ViewQuoteItemInfo.ftl ------------------------------------------------------------------------------ svn:eol-style = native Propchange: ofbiz/trunk/applications/order/template/quote/ViewQuoteItemInfo.ftl ------------------------------------------------------------------------------ svn:keywords = Date Rev Author URL Id Propchange: ofbiz/trunk/applications/order/template/quote/ViewQuoteItemInfo.ftl ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: ofbiz/trunk/applications/order/template/quote/ViewQuoteProfit.ftl URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/template/quote/ViewQuoteProfit.ftl?rev=1736868&view=auto ============================================================================== --- ofbiz/trunk/applications/order/template/quote/ViewQuoteProfit.ftl (added) +++ ofbiz/trunk/applications/order/template/quote/ViewQuoteProfit.ftl Mon Mar 28 11:14:22 2016 @@ -0,0 +1,32 @@ +<#-- +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. +--> +<span class="label">${uiLabelMap.OrderOrderQuoteCoefficients}</span> +<#list quoteCoefficients as quoteCoefficient> + <div>${quoteCoefficient.coeffName}: ${quoteCoefficient.coeffValue}</div> +</#list> +<br /> +<div><span class="label">${uiLabelMap.CommonTotalCostMult}</span> ${costMult}</div> +<div><span class="label">${uiLabelMap.CommonTotalCostToPriceMult}</span> ${costToPriceMult}</div> +<br /> +<div><span class="label">${uiLabelMap.CommonTotalCost}</span> <@ofbizCurrency amount=totalCost isoCode=quote.currencyUomId/></div> +<div><span class="label">${uiLabelMap.CommonTotalAmount}</span> <@ofbizCurrency amount=totalPrice isoCode=quote.currencyUomId/></div> +<br /> +<div><span class="label">${uiLabelMap.CommonTotalProfit}</span> <@ofbizCurrency amount=totalProfit isoCode=quote.currencyUomId/></div> +<div><span class="label">${uiLabelMap.CommonTotalPercProfit}</span> ${totalPercProfit}%</div> +<br /> \ No newline at end of file Propchange: ofbiz/trunk/applications/order/template/quote/ViewQuoteProfit.ftl ------------------------------------------------------------------------------ svn:eol-style = native Propchange: ofbiz/trunk/applications/order/template/quote/ViewQuoteProfit.ftl ------------------------------------------------------------------------------ svn:keywords = Date Rev Author URL Id Propchange: ofbiz/trunk/applications/order/template/quote/ViewQuoteProfit.ftl ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: ofbiz/trunk/applications/order/template/quote/quoteDate.ftl URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/template/quote/quoteDate.ftl?rev=1736868&view=auto ============================================================================== --- ofbiz/trunk/applications/order/template/quote/quoteDate.ftl (added) +++ ofbiz/trunk/applications/order/template/quote/quoteDate.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 class="screenlet"> + <div class="screenlet-title-bar"> + <div class="h3">${uiLabelMap.CommonDate}</div> + </div> + <div class="screenlet-body"> + <table cellspacing="0" class="basic-table"> + <tr> + <td align="right" valign="top" width="15%" class="label"> + ${uiLabelMap.OrderOrderQuoteIssueDate} + </td> + <td width="5%"> </td> + <td valign="top" width="80%"> + ${(quote.issueDate.toString())!} + </td> + </tr> + <tr><td colspan="3"><hr /></td></tr> + <tr> + <td align="right" valign="top" width="15%" class="label"> + ${uiLabelMap.CommonValidFromDate} + </td> + <td width="5%"> </td> + <td valign="top" width="80%"> + ${(quote.validFromDate.toString())!} + </td> + </tr> + <tr><td colspan="3"><hr /></td></tr> + <tr> + <td align="right" valign="top" width="15%" class="label"> + ${uiLabelMap.CommonValidThruDate} + </td> + <td width="5%"> </td> + <td valign="top" width="80%"> + ${(quote.validThruDate.toString())!} + </td> + </tr> + </table> + </div> +</div> Propchange: ofbiz/trunk/applications/order/template/quote/quoteDate.ftl ------------------------------------------------------------------------------ svn:eol-style = native Propchange: ofbiz/trunk/applications/order/template/quote/quoteDate.ftl ------------------------------------------------------------------------------ svn:keywords = Date Rev Author URL Id Propchange: ofbiz/trunk/applications/order/template/quote/quoteDate.ftl ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: ofbiz/trunk/applications/order/template/quote/quoteInfo.ftl URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/template/quote/quoteInfo.ftl?rev=1736868&view=auto ============================================================================== --- ofbiz/trunk/applications/order/template/quote/quoteInfo.ftl (added) +++ ofbiz/trunk/applications/order/template/quote/quoteInfo.ftl Mon Mar 28 11:14:22 2016 @@ -0,0 +1,125 @@ +<#-- +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="screenlet"> + <div class="screenlet-title-bar"> + <div class="h3">${uiLabelMap.OrderOrderQuoteId} ${quote.quoteId} ${uiLabelMap.CommonInformation}</div> + </div> + <div class="screenlet-body"> + <table cellspacing="0" class="basic-table"> + <#-- quote header information --> + <tr> + <td align="right" valign="top" width="15%" class="label"> + ${uiLabelMap.CommonType} + </td> + <td width="5%"> </td> + <td valign="top" width="80%"> + ${(quoteType.get("description",locale))?default(quote.quoteTypeId!)} + </td> + </tr> + <tr><td colspan="3"><hr /></td></tr> + + <#-- quote Channel information --> + <tr> + <td align="right" valign="top" width="15%" class="label"> + ${uiLabelMap.OrderSalesChannel} + </td> + <td width="5%"> </td> + <td valign="top" width="80%"> + ${(salesChannel.get("description",locale))?default(quote.salesChannelEnumId!)} + </td> + </tr> + <tr><td colspan="3"><hr /></td></tr> + + <#-- quote status information --> + <tr> + <td align="right" valign="top" width="15%" class="label"> + ${uiLabelMap.CommonStatus} + </td> + <td width="5%"> </td> + <td valign="top" width="80%"> + ${(statusItem.get("description", locale))?default(quote.statusId!)} + </td> + </tr> + <#-- party --> + <tr><td colspan="3"><hr /></td></tr> + <tr> + <td align="right" valign="top" width="15%" class="label"> + ${uiLabelMap.PartyParty} + </td> + <td width="5%"> </td> + <td valign="top" width="80%"> + <#-- Party name, as a convenience. --> + <#if toParty?has_content> + <#if toParty.groupName?has_content> + ${toParty.groupName} + <#elseif toParty.firstName?has_content && toParty.lastName?has_content> + ${toParty.firstName} ${toParty.lastName} + </#if> + </#if> + <#-- Link to the party in Party Manager --> + <a href="/partymgr/control/viewprofile?partyId=${quote.partyId}" class="buttontext">(${quote.partyId?if_exists})</a> + </td> + </tr> + <#-- quote name --> + <tr><td colspan="3"><hr /></td></tr> + <tr> + <td align="right" valign="top" width="15%" class="label"> + ${uiLabelMap.OrderOrderQuoteName} + </td> + <td width="5%"> </td> + <td valign="top" width="80%"> + ${quote.quoteName!} + </td> + </tr> + <#-- quote description --> + <tr><td colspan="3"><hr /></td></tr> + <tr> + <td align="right" valign="top" width="15%" class="label"> + ${uiLabelMap.CommonDescription} + </td> + <td width="5%"> </td> + <td valign="top" width="80%"> + ${quote.description!} + </td> + </tr> + <#-- quote currency --> + <tr><td colspan="3"><hr /></td></tr> + <tr> + <td align="right" valign="top" width="15%" class="label"> + ${uiLabelMap.CommonCurrency} + </td> + <td width="5%"> </td> + <td valign="top" width="80%"> + <#if currency??>${currency.get("description",locale)?default(quote.currencyUomId!)}</#if> + </td> + </tr> + <#-- quote currency --> + <tr><td colspan="3"><hr /></td></tr> + <tr> + <td align="right" valign="top" width="15%" class="label"> + ${uiLabelMap.ProductProductStore} + </td> + <td width="5%"> </td> + <td valign="top" width="80%"> + <#if store??>${store.storeName?default(quote.productStoreId!)}</#if> + </td> + </tr> + </table> + </div> +</div> Propchange: ofbiz/trunk/applications/order/template/quote/quoteInfo.ftl ------------------------------------------------------------------------------ svn:eol-style = native Propchange: ofbiz/trunk/applications/order/template/quote/quoteInfo.ftl ------------------------------------------------------------------------------ svn:keywords = Date Rev Author URL Id Propchange: ofbiz/trunk/applications/order/template/quote/quoteInfo.ftl ------------------------------------------------------------------------------ svn:mime-type = text/plain |
Free forum by Nabble | Edit this page |