Jacques, Do you know Vikas has 10 Eyes :D ? -- Ashish Vijaywargiya Indore (M.P), India http://en.wikipedia.org/wiki/Indore
On Thu, Aug 21, 2008 at 4:05 PM, Jacques Le Roux < [EMAIL PROTECTED]> wrote: > Wooow, hard to find :D > > Jacques > > From: "Vikas Mayur" <[EMAIL PROTECTED]> > > On Thu, Aug 14, 2008 at 2:07 PM, <[EMAIL PROTECTED]> wrote: >> >> 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) { >>> >> >> >> I think it would be "checkOption" grammatically - but its not a big >> concern >> :) >> >> - Vikas >> >> >> + 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 >>> >>> >>> >>> >> >
