Wow very good catch ... Jacques. Though I never imagine about it :-) BTW I guess Vikas will be more then happy to see himself as like the Ravana :D
-- Ashish Vijaywargiya Indore (M.P), India http://en.wikipedia.org/wiki/Indore On Mon, Aug 25, 2008 at 10:07 PM, Jacques Le Roux < [EMAIL PROTECTED]> wrote: > Mmm... I see... kind of Ravana > http://fr.wikipedia.org/wiki/Image:Ravana.jpg ? > > I will take care ;o) > > Jacques > > PS : sorry Vikas, I don't know much about Hinduism, and this one seems to > be a demon :/. Anyway it's Ashish's fault :p > > From: "Ashish Vijaywargiya" <[EMAIL PROTECTED]> > > 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 >>>>> >>>>> >>>>> >>>>> >>>>> >>>> >>> >> >
