/* * 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 org.apache.ofbiz.product.product.* import org.apache.ofbiz.order.shoppingcart.* import org.apache.ofbiz.product.catalog.* import org.apache.ofbiz.product.store.* import org.apache.ofbiz.entity.condition.* import org.apache.ofbiz.entity.util.* import org.apache.ofbiz.base.util.* compareList = ProductEvents.getProductCompareList(request) context.compareList = compareList cart = ShoppingCartEvents.getCartObject(request) catalogId = CatalogWorker.getCurrentCatalogId(request) productStore = ProductStoreWorker.getProductStore(request) productStoreId = productStore.productStoreId productDataMap = [:] context.productDataMap = productDataMap productFeatureTypeIds = [] as LinkedHashSet context.productFeatureTypeIds = productFeatureTypeIds productFeatureTypeMap = [:] context.productFeatureTypeMap = productFeatureTypeMap compareList.each { product -> productData = [:] productDataMap[product.productId] = productData productData.productContentWrapper = ProductContentWrapper.makeProductContentWrapper(product, request) priceContext = [product : product, currencyUomId : cart.getCurrency(), autoUserLogin : autoUserLogin, userLogin : userLogin] priceContext.webSiteId = webSiteId priceContext.prodCatalogId = catalogId priceContext.productStoreId = productStoreId priceContext.agreementId = cart.getAgreementId() priceContext.partyId = cart.getPartyId() // IMPORTANT: otherwise it'll be calculating prices using the logged in user which could be a CSR instead of the customer priceContext.checkIncludeVat = "Y" productData.priceMap = runService('calculateProductPrice', priceContext) condList = [ EntityCondition.makeCondition("productId", product.productId), EntityUtil.getFilterByDateExpr(), EntityCondition.makeCondition("productFeatureApplTypeId", EntityOperator.IN, ["STANDARD_FEATURE", "DISTINGUISHING_FEAT", "SELECTABLE_FEATURE"]) ] productFeatureAppls = from("ProductFeatureAppl").where(condList).orderBy("sequenceNum").cache(true).queryList() productFeatureAppls.each { productFeatureAppl -> productFeature = productFeatureAppl.getRelatedOne("ProductFeature", true) if (!productData[productFeature.productFeatureTypeId]) { productData[productFeature.productFeatureTypeId] = [:] } if (!productData[productFeature.productFeatureTypeId][productFeatureAppl.productFeatureApplTypeId]) { productData[productFeature.productFeatureTypeId][productFeatureAppl.productFeatureApplTypeId] = [] } productData[productFeature.productFeatureTypeId][productFeatureAppl.productFeatureApplTypeId] << productFeature productFeatureTypeIds << productFeature.productFeatureTypeId } } productFeatureTypeIds.each { productFeatureTypeId -> productFeatureTypeMap[productFeatureTypeId] = from("ProductFeatureType").where("productFeatureTypeId", productFeatureTypeId).cache(true).queryOne() }