Author: bibryam
Date: Thu Aug 14 01:37:52 2008
New Revision: 685809
URL: http://svn.apache.org/viewvc?rev=685809&view=rev
Log:
Missed these files in my previous commit.
Added:
ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/entry/catalog/InlineProductDetail.groovy
(with props)
ofbiz/trunk/applications/order/webapp/ordermgr/entry/catalog/inlineProductDetail.ftl
(with props)
Added:
ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/entry/catalog/InlineProductDetail.groovy
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/entry/catalog/InlineProductDetail.groovy?rev=685809&view=auto
==============================================================================
---
ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/entry/catalog/InlineProductDetail.groovy
(added)
+++
ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/entry/catalog/InlineProductDetail.groovy
Thu Aug 14 01:37:52 2008
@@ -0,0 +1,311 @@
+/*
+ * 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.
+ */
+
+import java.lang.*;
+import java.util.*;
+import java.text.NumberFormat;
+import org.ofbiz.base.util.*;
+import org.ofbiz.service.*;
+import org.ofbiz.entity.*;
+import org.ofbiz.entity.condition.*;
+import org.ofbiz.entity.util.*;
+import org.ofbiz.webapp.taglib.*;
+import org.ofbiz.webapp.stats.VisitHandler;
+import org.ofbiz.order.shoppingcart.ShoppingCartEvents;
+import org.ofbiz.product.catalog.*;
+import org.ofbiz.product.category.*;
+import org.ofbiz.product.product.ProductWorker;
+import org.ofbiz.product.product.ProductContentWrapper;
+import org.ofbiz.product.product.ProductSearch;
+import org.ofbiz.product.product.ProductSearchSession;
+import org.ofbiz.product.store.*;
+
+inlineProductId = request.getAttribute("inlineProductId");
+inlineCounter = request.getAttribute("inlineCounter");
+context.inlineCounter = inlineCounter;
+context.inlineProductId = inlineProductId;
+
+contentPathPrefix = CatalogWorker.getContentPathPrefix(request);
+catalogName = CatalogWorker.getCatalogName(request);
+currentCatalogId = CatalogWorker.getCurrentCatalogId(request);
+
+if (inlineProductId) {
+ inlineProduct = delegator.findByPrimaryKeyCache("Product", [productId
: inlineProductId]);
+ if (inlineProduct) {
+ context.product = inlineProduct;
+ contentWrapper = new ProductContentWrapper(inlineProduct,
request);
+ context.put("title", contentWrapper.get("PRODUCT_NAME"));
+ context.put("metaDescription", contentWrapper.get("DESCRIPTION"));
+ productTemplate = product.detailScreen;
+ if (productTemplate) {
+ detailScreen = productTemplate;
+ }
+ }
+}
+
+templatePathPrefix = CatalogWorker.getTemplatePathPrefix(request);
+if (templatePathPrefix) {
+ detailScreen = templatePathPrefix + detailScreen;
+}
+context.detailScreen = detailScreen;
+
+String buildNext(Map map, List order, String current, String prefix, Map
featureTypes) {
+ def ct = 0;
+ def buf = new StringBuffer();
+ buf.append("function listFT" + inlineCounter + current + prefix + "()
{ ");
+ buf.append("document.forms[\"configform\"].elements[\"FT" +
inlineCounter + current + "\"].options.length = 1;");
+ buf.append("document.forms[\"configform\"].elements[\"FT" +
inlineCounter + current + "\"].options[0] = new Option(\"" +
featureTypes[current] + "\",\"\",true,true);");
+ map.each { key, value ->
+ def optValue = null;
+
+ if (order.indexOf(current) == (order.size()-1)) {
+ optValue = value.iterator().next();
+ } else {
+ optValue = prefix + "_" + ct;
+ }
+
+ buf.append("document.forms[\"configform\"].elements[\"FT" +
inlineCounter + current + "\"].options[" + (ct + 1) + "] = new Option(\"" +
key + "\",\"" + optValue + "\");");
+ ct++;
+ }
+ buf.append(" }");
+ if (order.indexOf(current) < (order.size()-1)) {
+ ct = 0;
+ map.each { key, value ->
+ def nextOrder = order.get(order.indexOf(current)+1);
+ def newPrefix = prefix + "_" + ct;
+ buf.append(buildNext(value, order, nextOrder, newPrefix,
featureTypes));
+ ct++;
+ }
+ }
+ return buf.toString();
+}
+
+cart = ShoppingCartEvents.getCartObject(request);
+
+// set the content path prefix
+contentPathPrefix = CatalogWorker.getContentPathPrefix(request);
+context.contentPathPrefix = contentPathPrefix;
+
+// get the product detail information
+if (inlineProduct) {
+ inlineProductId = inlineProduct.productId;
+ productTypeId = inlineProduct.productTypeId;
+ featureTypes = [:];
+ featureOrder = [];
+
+ // make the productContentWrapper
+ productContentWrapper = new ProductContentWrapper(inlineProduct,
request);
+ context.productContentWrapper = productContentWrapper;
+
+ // get the main detail image (virtual or single product)
+ mainDetailImage = productContentWrapper.get("DETAIL_IMAGE_URL");
+ if (mainDetailImage) {
+ mainDetailImageUrl = ContentUrlTag.getContentPrefix(request) +
mainDetailImage;
+ mainDetailImageUrl =
URLEncoder.encode(Base64.base64Encode(mainDetailImage), "UTF-8");
+ context.mainDetailImageUrl = mainDetailImageUrl;
+ }
+
+
+ // get the product price
+ webSiteId = CatalogWorker.getWebSiteId(request);
+ autoUserLogin = request.getSession().getAttribute("autoUserLogin");
+ if (cart.isSalesOrder()) {
+ // sales order: run the "calculateProductPrice" service
+ priceContext = [product : inlineProduct, prodCatalogId :
currentCatalogId,
+ currencyUomId : cart.getCurrency(), autoUserLogin :
autoUserLogin];
+ priceContext.webSiteId = webSiteId;
+ priceContext.productStoreId = productStoreId;
+ priceContext.checkIncludeVat = "Y";
+ priceContext.agreementId = cart.getAgreementId();
+ priceContext.partyId = cart.getPartyId(); // IMPORTANT: must put
this in, or price will be calculated for the CSR instead of the customer
+ priceMap = dispatcher.runSync("calculateProductPrice",
priceContext);
+ context.priceMap = priceMap;
+ } else {
+ // purchase order: run the "calculatePurchasePrice" service
+ priceContext = [product : inlineProduct, currencyUomId :
cart.getCurrency(),
+ partyId : cart.getPartyId(), userLogin : userLogin];
+ priceMap = dispatcher.runSync("calculatePurchasePrice",
priceContext);
+ context.priceMap = priceMap;
+ }
+
+
+ context.variantTree = null;
+ context.variantTreeSize = null;
+ context.variantSample = null;
+ context.variantSampleKeys = null;
+ context.variantSampleSize = null;
+ if ("Y".equals(inlineProduct.isVirtual)) {
+ if
("VV_FEATURETREE".equals(ProductWorker.getProductvirtualVariantMethod(delegator,
inlineProductId))) {
+ context.featureLists =
ProductWorker.getSelectableProductFeaturesByTypesAndSeq(inlineProduct);
+ } else {
+ featureMap = dispatcher.runSync("getProductFeatureSet",
[productId : inlineProductId]);
+ featureSet = featureMap.featureSet;
+ if (featureSet) {
+ variantTreeMap =
dispatcher.runSync("getProductVariantTree", [productId : inlineProductId,
featureOrder : featureSet, productStoreId : productStoreId]);
+ variantTree = variantTreeMap.variantTree;
+ imageMap = variantTreeMap.variantSample;
+ virtualVariant = variantTreeMap.virtualVariant;
+ context.virtualVariant = virtualVariant;
+ if (variantTree) {
+ context.variantTree = variantTree;
+ context.variantTreeSize = variantTree.size();
+ }
+ if (imageMap) {
+ context.variantSample = imageMap;
+ context.variantSampleKeys = imageMap.keySet();
+ context.variantSampleSize = imageMap.size();
+ }
+ context.featureSet = featureSet;
+
+ if (variantTree) {
+ featureOrder = new LinkedList(featureSet);
+ featureOrder.each { featureKey ->
+ featureValue =
delegator.findByPrimaryKeyCache("ProductFeatureType", [productFeatureTypeId
: featureKey]);
+ fValue = featureValue.get("description") ?:
featureValue.productFeatureTypeId;
+ featureTypes[featureKey] = fValue;
+ }
+ }
+ context.featureTypes = featureTypes;
+ context.featureOrder = featureOrder;
+ if (featureOrder) {
+ context.featureOrderFirst = featureOrder[0];
+ }
+
+ if (variantTree && imageMap) {
+ jsBuf = new StringBuffer();
+ jsBuf.append("<script language=\"JavaScript\">");
+ jsBuf.append("var DET" + inlineCounter + "= new
Array(" + variantTree.size() + ");");
+ jsBuf.append("var IMG" + inlineCounter + " = new
Array(" + variantTree.size() + ");");
+ jsBuf.append("var OPT" + inlineCounter + " = new
Array(" + featureOrder.size() + ");");
+ jsBuf.append("var VIR" + inlineCounter + " = new
Array(" + virtualVariant.size() + ");");
+ jsBuf.append("var detailImageUrl" + inlineCounter + "
= null;");
+ featureOrder.eachWithIndex { feature, i ->
+ jsBuf.append("OPT" + inlineCounter + "[" + i + "]
= \"FT" + inlineCounter + feature + "\";");
+ }
+ virtualVariant.eachWithIndex { variant, i ->
+ jsBuf.append("VIR" + inlineCounter + "[" + i + "]
= \"" + variant + "\";");
+ }
+
+ // build the top level
+ topLevelName = featureOrder[0];
+ jsBuf.append("function list" + inlineCounter +
topLevelName + "() {");
+
jsBuf.append("document.forms[\"configform\"].elements[\"FT" + inlineCounter
+ topLevelName + "\"].options.length = 1;");
+
jsBuf.append("document.forms[\"configform\"].elements[\"FT" + inlineCounter
+ topLevelName + "\"].options[0] = new Option(\"" +
featureTypes[topLevelName] + "\",\"\",true,true);");
+ if (variantTree) {
+ featureOrder.each { featureKey ->
+
jsBuf.append("document.forms[\"configform\"].elements[\"FT" + inlineCounter
+ featureKey + "\"].options.length = 1;");
+ }
+ firstDetailImage = null;
+ firstLargeImage = null;
+ counter = 0;
+ variantTree.each { key, value ->
+ opt = null;
+ if (featureOrder.size() == 1) {
+ opt = value.iterator().next();
+ } else {
+ opt = counter as String;
+ }
+ // create the variant content wrapper
+ contentWrapper = new
ProductContentWrapper(imageMap[key], request);
+
+ // initial image paths
+ detailImage =
contentWrapper.get("DETAIL_IMAGE_URL") ?:
productContentWrapper.get("DETAIL_IMAGE_URL");
+ largeImage =
contentWrapper.get("LARGE_IMAGE_URL") ?:
productContentWrapper.get("LARGE_IMAGE_URL");
+
+ // full image URLs
+ detailImageUrl = null;
+ largeImageUrl = null;
+
+ // append the content prefix
+ if (detailImage) {
+ detailImageUrl =
ContentUrlTag.getContentPrefix(request) + detailImage;
+ // base64 encode the image url for a
little protection
+ detailImageUrl =
URLEncoder.encode(Base64.base64Encode(detailImageUrl), "UTF-8");
+ }
+ if (largeImage) {
+ largeImageUrl =
ContentUrlTag.getContentPrefix(request) + largeImage;
+ }
+
+
jsBuf.append("document.forms[\"configform\"].elements[\"FT" + inlineCounter
+ topLevelName + "\"].options[" + (counter+1) + "] = new Option(\"" + key +
"\",\"" + opt + "\");");
+ jsBuf.append("DET" + inlineCounter + "[" +
counter + "] = \"" + detailImageUrl +"\";");
+ jsBuf.append("IMG" + inlineCounter + "[" +
counter + "] = \"" + largeImageUrl +"\";");
+
+ if (!firstDetailImage) {
+ firstDetailImage = detailImageUrl;
+ }
+ if (!firstLargeImage) {
+ firstLargeImage = largeImage;
+ }
+ counter++;
+ }
+ context.firstDetailImage = firstDetailImage;
+ context.firstLargeImage = firstLargeImage;
+ }
+ jsBuf.append("}");
+
+ // build dynamic lists
+ if (variantTree) {
+ variantTree.values().eachWithIndex { varTree,
topLevelKeysCt ->
+ cnt = "" + topLevelKeysCt;
+ if (varTree instanceof Map) {
+ jsBuf.append(buildNext(varTree,
featureOrder, featureOrder[1], cnt, featureTypes));
+ }
+ }
+ }
+
+ // make a list of variant sku with requireAmount
+ variantsRes =
dispatcher.runSync("getAssociatedProducts", [productId : inlineProductId,
type : "PRODUCT_VARIANT", checkViewAllow : true, prodCatalogId :
currentCatalogId]);
+ variants = variantsRes.assocProducts;
+ if (variants) {
+ amt = new StringBuffer();
+ amt.append("function checkAmtReq" + inlineCounter
+ "(sku) { ");
+ // Create the javascript to return the price for
each variant
+ variantPriceJS = new StringBuffer();
+ variantPriceJS.append("function getVariantPrice" +
inlineCounter + "(sku) { ");
+ // Format to apply the currency code to the
variant price in the javascript
+ productStore =
ProductStoreWorker.getProductStore(request);
+ localeString = productStore.defaultLocaleString;
+ if (localeString) {
+ locale = UtilMisc.parseLocale(localeString);
+ }
+ numberFormat =
NumberFormat.getCurrencyInstance(locale);
+ variants.each { variantAssoc ->
+ variant =
variantAssoc.getRelatedOne("AssocProduct");
+ // Get the price for each variant. Reuse the
priceContext already setup for virtual product above and replace the product
+ if (cart.isSalesOrder()) {
+ // sales order: run the
"calculateProductPrice" service
+ priceContext.product = variant;
+ variantPriceMap =
dispatcher.runSync("calculateProductPrice", priceContext);
+ }
+ amt.append(" if (sku == \"" +
variant.productId + "\") return \"" + (variant.requireAmount ?: "N") + "\";
");
+ variantPriceJS.append(" if (sku == \"" +
variant.productId + "\") return \"" +
numberFormat.format(variantPriceMap.basePrice) + "\"; ");
+ }
+ amt.append(" } ");
+ variantPriceJS.append(" } ");
+ }
+ jsBuf.append(amt.toString());
+ jsBuf.append(variantPriceJS.toString());
+ jsBuf.append("</script>");
+
+ context.virtualJavaScript = jsBuf.toString();
+ }
+ }
+ }
+ }
+}
Propchange:
ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/entry/catalog/InlineProductDetail.groovy
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/entry/catalog/InlineProductDetail.groovy
------------------------------------------------------------------------------
svn:keywords = Date Rev Author URL Id
Propchange:
ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/entry/catalog/InlineProductDetail.groovy
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added:
ofbiz/trunk/applications/order/webapp/ordermgr/entry/catalog/inlineProductDetail.ftl
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/webapp/ordermgr/entry/catalog/inlineProductDetail.ftl?rev=685809&view=auto
==============================================================================
---
ofbiz/trunk/applications/order/webapp/ordermgr/entry/catalog/inlineProductDetail.ftl
(added)
+++
ofbiz/trunk/applications/order/webapp/ordermgr/entry/catalog/inlineProductDetail.ftl
Thu Aug 14 01:37:52 2008
@@ -0,0 +1,389 @@
+<#--
+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.
+-->
+
+${virtualJavaScript?if_exists}
+<#assign addJavaScript = requestAttributes.addJavaScript/>
+<#if (addJavaScript == 0)>
+<script language="JavaScript" type="text/javascript">
+
+ function popupDetailInline(inlineCounter) {
+ var imageField = 'detailImage' + inlineCounter;
+ var defaultDetailImage = document.getElementById(imageField);
+ if (defaultDetailImage == null || defaultDetailImage == "null") {
+ defaultDetailImage = "_NONE_";
+ }
+ var fieldName = 'detailImageUrl' + inlineCounter;
+ if (window[fieldName] == null || window[fieldName] == "null") {
+ window[fieldName] = defaultDetailImage;
+ }
+
+ if (window[fieldName] == "_NONE_") {
+ alert("No detail image available to display.");
+ return;
+ }
+ popUp("<@ofbizUrl>detailImage?detail=" + window[fieldName] +
"</@ofbizUrl>", 'detailImage', '400', '550');
+ }
+
+ function setAddProductIdInline(inlineCounter, name) {
+ var add_product_id = 'add_product_id' + inlineCounter;
+ var product_id_display = 'product_id_display' + inlineCounter;
+ document.configform[add_product_id].value = name;
+ if (name == '' || name == 'NULL' || isVirtualInline(inlineCounter,
name) == true) {
+ //document.configform.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);
+ }
+
+ checkOtion(inlineCounter);
+ } else {
+ //document.configform.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 checkOtion(inlineCounter) {
+ var option = document.getElementById(inlineCounter.substring(0,
inlineCounter.length - 2));
+ if (option.checked) {
+ option.checked=false;
+ }
+ }
+
+ function setVariantPriceInline(inlineCounter, sku) {
+ var variant_price_display = 'variant_price_display' +
inlineCounter;
+ if (sku == '' || sku == 'NULL' || isVirtualInline(inlineCounter,
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 functionName = 'getVariantPrice' + inlineCounter;
+ var price = window[functionName](sku);
+ var txt = document.createTextNode('+' + price);
+ if(elem.hasChildNodes()) {
+ elem.replaceChild(txt, elem.firstChild);
+ } else {
+ elem.appendChild(txt);
+ }
+ }
+ }
+ function isVirtualInline(inlineCounter, product) {
+ var isVirtual = false;
+ var fieldName = 'VIR' + inlineCounter;
+ <#if virtualJavaScript?exists>
+ for (i = 0; i < window[fieldName].length; i++) {
+ if (window[fieldName][i] == product) {
+ isVirtual = true;
+ }
+ }
+ </#if>
+ return isVirtual;
+ }
+
+ function toggleAmtInline(inlineCounter, toggle) {
+ var fieldName = 'add_amount' + inlineCounter;
+ if (toggle == 'Y') {
+ changeObjectVisibility(fieldName, "visible");
+ }
+
+ if (toggle == 'N') {
+ changeObjectVisibility(fieldName, "hidden");
+ }
+ }
+
+ function findIndexInline(varname, name ) {
+ for (i = 0; i < window[varname].length; i++) {
+ if ( window[varname][i] == name) {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+ function checkOptionToggle(inlineCounter, disable) {
+ var index = inlineCounter.indexOf('_');
+ var optionElementName = inlineCounter.substring(0,index);
+ var option = document.getElementById(optionElementName);
+ if ("true" == disable) {
+ option.disabled = true;
+ if (option.checked == true) {
+ option.checked == false;
+ }
+ } else {
+ //check all virtual product for the option
+ }
+ }
+
+ function checkOptionVariants(optionName) {
+ var option = document.getElementById(optionName);
+ if (option.checked == false) {
+ return false;
+ }
+
+ var fieldName = "add_product_id" + optionName + "_";
+ var index = 15 + optionName.toString().length;
+ var cform = document.forms["configform"];
+ var len = cform.elements.length;
+ for (var i = 0; i < len; i++) {
+ var element = cform.elements[i];
+ if (element.name.substring(0, index) == fieldName) {
+ if (element.value == '' || element.value == 'NULL') {
+ option.checked = false;
+ alert('Please select all features first');
+ return false;
+ }
+ }
+ }
+ }
+
+ function getListInline(inlineCounter, name, index, src) {
+ currentFeatureIndex = findIndexInline('OPT'+inlineCounter, name);
+
+ if (currentFeatureIndex == 0) {
+ // set the images for the first selection
+ if ([index] != null) {
+ if (document.images['mainImage'+ inlineCounter] != null) {
+ document.images['mainImage'+ inlineCounter].src =
window['IMG'+ inlineCounter][index];
+ window['detailImageUrl'+ inlineCounter] =
window['DET'+ inlineCounter][index];
+ }
+ }
+
+ // set the drop down index for swatch selection
+ document.forms["configform"].elements[name].selectedIndex =
(index*1)+1;
+ }
+
+ if (currentFeatureIndex < (window['OPT'+ inlineCounter].length-1))
{
+ // eval the next list if there are more
+ var selectedValue =
document.forms["configform"].elements[name].options[(index*1)+1].value;
+ if (index == -1) {
+ var featureOrderFirst = window['OPT'+
inlineCounter][(currentFeatureIndex)].toString();
+ var length = featureOrderFirst.length;
+ featureOrderFirst = featureOrderFirst.substring(2,
length);
+ var Variable1 = eval("list" + featureOrderFirst + "()");
+ } else {
+ var Variable1 = eval("list" + window['OPT'+
inlineCounter][(currentFeatureIndex+1)] + selectedValue + "()");
+ }
+
+ // set the product ID to NULL to trigger the alerts
+ setAddProductIdInline(inlineCounter, 'NULL');
+
+ // set the variant price to NULL
+ setVariantPriceInline(inlineCounter, 'NULL');
+
+ //checkOptionToggle(inlineCounter, 'false');
+ } else {
+ // this is the final selection -- locate the selected index of
the last selection
+ var indexSelected =
document.forms["configform"].elements[name].selectedIndex;
+
+ // using the selected index locate the sku
+ var sku =
document.forms["configform"].elements[name].options[indexSelected].value;
+
+ // set the product ID
+ setAddProductIdInline(inlineCounter, sku);
+
+ // set the variant price
+ setVariantPriceInline(inlineCounter, sku);
+
+ // check for amount box
+ var functionName = 'checkAmtReq' + inlineCounter;
+ toggleAmtInline(inlineCounter, window[functionName](sku));
+
+ //checkOptionToggle(inlineCounter, 'true');
+ }
+ }
+
+
+ </script>
+</#if>
+
+<#assign addedFeatureTreeJavaScript =
requestAttributes.addedFeatureTreeJavaScript?default("N")/>
+<#if product.virtualVariantMethodEnum?if_exists == "VV_FEATURETREE" &&
featureLists?has_content && ("N" == addedFeatureTreeJavaScript)>
+ ${setRequestAttribute("addedFeatureTreeJavaScript", "Y")}
+ <script language="JavaScript" type="text/javascript">
+ function checkRadioButtoninline(inlineCounter, productId) {
+ var add_product_id = 'add_product_id' + inlineCounter;
+ <#list featureLists as featureList>
+ <#list featureList as feature>
+ <#if feature_index == 0>
+ var myList = document.getElementById("FT"
+inlineCounter + "${feature.productFeatureTypeId}");
+ if (myList.options[0].selected == true) {
+ document.configform[add_product_id].value =
'NULL';
+ return;
+ }
+ <#break>
+ </#if>
+ </#list>
+ </#list>
+ document.configform[add_product_id].value = productId;
+ }
+ </script>
+</#if>
+
+
+<#assign price = priceMap?if_exists/>
+<div id="inlineproductdetail${inlineCounter}">
+<table border="0" cellpadding="2" cellspacing="0" width="100%">
+ <tr>
+ <td align="left" valign="top" width="0">
+ <#assign productLargeImageUrl =
productContentWrapper.get("LARGE_IMAGE_URL")?if_exists>
+ <#if firstLargeImage?has_content>
+ <#assign productLargeImageUrl = firstLargeImage>
+ </#if>
+ <#if productLargeImageUrl?has_content>
+ <input type="hidden" name="detailImage${inlineCounter}"
value="${firstDetailImage?default(mainDetailImageUrl?default("_NONE_"))}"/>
+ <a href="javascript:popupDetailInline('${inlineCounter}');"><img
src='<@ofbizContentUrl>${contentPathPrefix?if_exists}${productLargeImageUrl?if_exists}</@ofbizContentUrl>'
name='mainImage${inlineCounter}' vspace='5' hspace='5' border='0'
width='100' align='left'></a>
+ </#if>
+ </td>
+ <td align="right" valign="top" width="100%">
+ <#--
<h2>${productContentWrapper.get("PRODUCT_NAME")?if_exists}</h2> -->
+ <#assign inStock = true>
+ <#if product.isVirtual?if_exists?upper_case == "Y">
+ <#if product.virtualVariantMethodEnum?if_exists ==
"VV_FEATURETREE" && featureLists?has_content>
+ <#list featureLists as featureList>
+ <#list featureList as feature>
+ <#if feature_index == 0>
+ <div>${feature.description}: <select
id="FT${inlineCounter}${feature.productFeatureTypeId}"
name="FT${inlineCounter}${feature.productFeatureTypeId}"
onChange="javascript:checkRadioButtoninline('${inlineCounter}',
'${product.productId}');">
+ <option value="select" selected="selected"> select
option </option>
+ <#else>
+ <option
value="${feature.productFeatureId}">${feature.description} <#if
feature.price?exists>(+ <@ofbizCurrency amount=feature.price?string
isoCode=feature.currencyUomId/>)</#if></option>
+ </#if>
+ </#list>
+ </select>
+ </div>
+ </#list>
+ <input type="hidden" name="product_id${inlineCounter}"
value="${product.productId}"/>
+ <input type="hidden" name="add_product_id${inlineCounter}"
value="NULL"/>
+ </#if>
+ <#if !product.virtualVariantMethodEnum?exists ||
product.virtualVariantMethodEnum == "VV_VARIANTTREE">
+ <#if variantTree?exists && (variantTree.size() > 0)>
+ <#list featureSet as currentType>
+ <div>
+ <select name="FT${inlineCounter}${currentType}"
onchange="javascript:getListInline('${inlineCounter}', this.name,
(this.selectedIndex-1), 1);">
+ <option>${featureTypes.get(currentType)}</option>
+ </select>
+ </div>
+ </#list>
+ <input type="hidden" name="product_id${inlineCounter}"
value="${product.productId}"/>
+ <input type="hidden" name="add_product_id${inlineCounter}"
value="NULL"/>
+ <div>
+ <b><span id="product_id_display${inlineCounter}">
</span></b>
+ <b><div id="variant_price_display${inlineCounter}">
</div></b>
+ </div>
+ <#else>
+ <input type="hidden" name="product_id${inlineCounter}"
value="${product.productId}"/>
+ <input type="hidden" name="add_product_id${inlineCounter}"
value="NULL"/>
+ <div><b>${uiLabelMap.ProductItemOutofStock}.</b></div>
+ <#assign inStock = false>
+ </#if>
+ </#if>
+ <#else>
+ <input type="hidden" name="product_id${inlineCounter}"
value="${product.productId}"/>
+ <input type="hidden" name="add_product_id${inlineCounter}"
value="${product.productId}"/>
+ <#assign isStoreInventoryNotAvailable =
!(Static["org.ofbiz.product.store.ProductStoreWorker"].isStoreInventoryAvailable(request,
product, 1.0?double))>
+ <#assign isStoreInventoryRequired =
Static["org.ofbiz.product.store.ProductStoreWorker"].isStoreInventoryRequired(request,
product)>
+ <#if isStoreInventoryNotAvailable>
+ <#if isStoreInventoryRequired>
+ <div><b>${uiLabelMap.ProductItemOutofStock}.</b></div>
+ <#assign inStock = false>
+ <#else>
+ <div><b>${product.inventoryMessage?if_exists}</b></div>
+ </#if>
+ </#if>
+ </#if>
+ </td></tr>
+ <tr><td COLSPAN="2" align="right">
+ <#-- check to see if introductionDate hasnt passed yet -->
+ <#if product.introductionDate?exists &&
nowTimestamp.before(product.introductionDate)>
+ <p> </p>
+ <div style="color:
red;">${uiLabelMap.ProductProductNotYetMadeAvailable}.</div>
+ <#-- check to see if salesDiscontinuationDate has passed -->
+ <#elseif product.salesDiscontinuationDate?exists &&
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?if_exists !=
"VV_FEATURETREE">
+ <#if inStock>
+ <#if product.requireAmount?default("N") == "Y">
+ <#assign hiddenStyle = "visible">
+ <#else>
+ <#assign hiddenStyle = "hidden">
+ </#if>
+ <div id="add_amount${inlineCounter}" class="${hiddenStyle}">
+ <span style="white-space:
nowrap;"><b>${uiLabelMap.CommonAmount}:</b></span>
+ <input type="text" size="5"
name="add_amount${inlineCounter}" value=""/>
+ </div>
+ </#if>
+ </#if>
+ </td></tr>
+
+ <tr><td COLSPAN="2" align="right">
+ <#if variantTree?exists && 0 < variantTree.size()>
+ <script language="JavaScript" type="text/javascript">eval("list"+
"${inlineCounter}" + "${featureOrderFirst}" + "()");</script>
+ </#if>
+
+ <#-- Swatches (virtual products only) . For now commented out,
before fixing a bug
+ <#if variantSample?exists && 0 < variantSample.size()>
+ <#assign imageKeys = variantSample.keySet()>
+ <#assign imageMap = variantSample>
+ <p> </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)?if_exists>
+ <#if !imageUrl?has_content>
+ <#assign imageUrl =
productContentWrapper.get("SMALL_IMAGE_URL")?if_exists>
+ </#if>
+ <#if !imageUrl?has_content>
+ <#assign imageUrl = "/images/defaultImage.jpg">
+ </#if>
+ <td align="center" valign="bottom">
+ <a href="javascript:getListInline('${inlineCounter}',
'FT${inlineCounter}${featureOrderFirst}','${indexer}',1);"><img
src="<@ofbizContentUrl>${contentPathPrefix?if_exists}${imageUrl}</@ofbizContentUrl>"
border="0" width="60" height="60"></a>
+ <br/>
+ <a href="javascript:getListInline('${inlineCounter}',
'FT${inlineCounter}${featureOrderFirst}','${indexer}',1);"
class="linktext">${key}</a>
+ </td>
+ </#if>
+ <#assign indexer = indexer + 1>
+ </#list>
+ <#if (indexer > maxIndex)>
+ <div><b>${uiLabelMap.ProductMoreOptions}</b></div>
+ </#if>
+ </tr>
+ </table>
+ </#if> -->
+ </td>
+ </tr>
+</table>
+</div>
Propchange:
ofbiz/trunk/applications/order/webapp/ordermgr/entry/catalog/inlineProductDetail.ftl
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
ofbiz/trunk/applications/order/webapp/ordermgr/entry/catalog/inlineProductDetail.ftl
------------------------------------------------------------------------------
svn:keywords = Date Rev Author URL Id
Propchange:
ofbiz/trunk/applications/order/webapp/ordermgr/entry/catalog/inlineProductDetail.ftl
------------------------------------------------------------------------------
svn:mime-type = text/plain