blob: aace0e765c8353c482efafd9d367928237681458 [file] [log] [blame]
/*
* 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.util.*;
import org.ofbiz.base.util.*;
import org.ofbiz.entity.*;
import org.ofbiz.entity.util.*;
import org.ofbiz.entity.condition.*;
import org.ofbiz.order.shoppingcart.ShoppingCartEvents;
import org.ofbiz.order.shoppingcart.shipping.*;
import org.ofbiz.order.shoppinglist.*;
import org.ofbiz.party.contact.*;
import org.ofbiz.product.catalog.*;
import org.ofbiz.product.store.*;
import org.ofbiz.service.calendar.*;
import org.ofbiz.webapp.website.WebSiteWorker;
if (userLogin)
{
party = userLogin.getRelatedOne("Party", false);
} else {
return; // session ended, prevents a NPE
}
cart = ShoppingCartEvents.getCartObject(request);
currencyUomId = cart.getCurrency();
productStoreId = ProductStoreWorker.getProductStoreId(request);
prodCatalogId = CatalogWorker.getCurrentCatalogId(request);
webSiteId = WebSiteWorker.getWebSiteId(request);
context.productStoreId = productStoreId;
context.currencyUomId = currencyUomId;
// get the top level shopping lists for the logged in user
exprList = [EntityCondition.makeCondition("partyId", EntityOperator.EQUALS, userLogin.partyId),
EntityCondition.makeCondition("listName", EntityOperator.NOT_EQUAL, "auto-save")];
condition = EntityCondition.makeCondition(exprList, EntityOperator.AND);
allShoppingLists = delegator.findList("ShoppingList", condition, null, ["listName"], null, false);
shoppingLists = EntityUtil.filterByAnd(allShoppingLists, [parentShoppingListId : null]);
context.allShoppingLists = allShoppingLists;
context.shoppingLists = shoppingLists;
// get all shoppingListTypes
shoppingListTypes = delegator.findList("ShoppingListType", null, null, ["description"], null, true);
context.shoppingListTypes = shoppingListTypes;
// get the shoppingListId for this reqest
parameterMap = UtilHttp.getParameterMap(request);
shoppingListId = parameterMap.shoppingListId ?: request.getAttribute("shoppingListId") ?: session.getAttribute("currentShoppingListId");
context.shoppingListId = shoppingListId;
// no passed shopping list id default to first list
if (!shoppingListId) {
firstList = EntityUtil.getFirst(shoppingLists);
if (firstList) {
shoppingListId = firstList.shoppingListId;
}
}
session.setAttribute("currentShoppingListId", shoppingListId);
// if we passed a shoppingListId get the shopping list info
if (shoppingListId) {
shoppingList = delegator.findOne("ShoppingList", [shoppingListId : shoppingListId], false);
context.shoppingList = shoppingList;
if (shoppingList) {
shoppingListItemTotal = 0.0;
shoppingListChildTotal = 0.0;
shoppingListItems = shoppingList.getRelated("ShoppingListItem", null, null, true);
if (shoppingListItems) {
shoppingListItemDatas = new ArrayList(shoppingListItems.size());
shoppingListItems.each { shoppingListItem ->
shoppingListItemData = [:];
product = shoppingListItem.getRelatedOne("Product", true);
calcPriceInMap = [product : product, quantity : shoppingListItem.quantity, currencyUomId : currencyUomId, userLogin : userLogin];
calcPriceInMap.webSiteId = webSiteId;
calcPriceInMap.prodCatalogId = prodCatalogId;
calcPriceInMap.productStoreId = productStoreId;
calcPriceOutMap = dispatcher.runSync("calculateProductPrice", calcPriceInMap);
price = calcPriceOutMap.price;
totalPrice = price * shoppingListItem.quantity;
// similar code at ShoppingCartItem.java getRentalAdjustment
if ("ASSET_USAGE".equals(product.productTypeId) || "ASSET_USAGE_OUT_IN".equals(product.productTypeId)) {
persons = shoppingListItem.reservPersons ?: 0;
reservNthPPPerc = product.reservNthPPPerc ?: 0;
reserv2ndPPPerc = product.reserv2ndPPPerc ?: 0;
rentalValue = 0;
if (persons) {
if (persons > 2) {
persons -= 2;
if (reservNthPPPerc) {
rentalValue = persons * reservNthPPPerc;
} else if (reserv2ndPPPerc) {
rentalValue = persons * reserv2ndPPPerc;
}
persons = 2;
}
if (persons == 2) {
if (reserv2ndPPPerc) {
rentalValue += reserv2ndPPPerc;
} else if (reservNthPPPerc) {
rentalValue = persons * reservNthPPPerc;
}
}
}
rentalValue += 100; // add final 100 percent for first person
reservLength = shoppingListItem.reservLength ?: 0;
totalPrice *= (rentalValue/100 * reservLength);
}
shoppingListItemTotal += totalPrice;
productVariantAssocs = null;
if ("Y".equals(product.isVirtual)) {
productVariantAssocs = product.getRelated("MainProductAssoc", [productAssocTypeId : "PRODUCT_VARIANT"], ["sequenceNum"], true);
productVariantAssocs = EntityUtil.filterByDate(productVariantAssocs);
}
shoppingListItemData.shoppingListItem = shoppingListItem;
shoppingListItemData.product = product;
shoppingListItemData.unitPrice = price;
shoppingListItemData.totalPrice = totalPrice;
shoppingListItemData.productVariantAssocs = productVariantAssocs;
shoppingListItemDatas.add(shoppingListItemData);
}
context.shoppingListItemDatas = shoppingListItemDatas;
// pagination for the shopping list
viewIndex = Integer.valueOf(parameters.VIEW_INDEX ?: 1);
viewSize = Integer.valueOf(parameters.VIEW_SIZE ?: 20);
listSize = shoppingListItemDatas ? shoppingListItemDatas.size() : 0;
lowIndex = ((viewIndex - 1) * viewSize) + 1;
highIndex = viewIndex * viewSize;
highIndex = highIndex > listSize ? listSize : highIndex;
lowIndex = lowIndex > highIndex ? highIndex : lowIndex;
context.viewIndex = viewIndex;
context.viewSize = viewSize;
context.listSize = listSize;
context.lowIndex = lowIndex;
context.highIndex = highIndex;
}
shoppingListType = shoppingList.getRelatedOne("ShoppingListType", false);
context.shoppingListType = shoppingListType;
// get the child shopping lists of the current list for the logged in user
childShoppingLists = delegator.findByAnd("ShoppingList", [partyId : userLogin.partyId, parentShoppingListId : shoppingListId], ["listName"], true);
// now get prices for each child shopping list...
if (childShoppingLists) {
childShoppingListDatas = new ArrayList(childShoppingLists.size());
childShoppingLists.each { childShoppingList ->
childShoppingListData = [:];
calcListPriceInMap = [shoppingListId : childShoppingList.shoppingListId, prodCatalogId : prodCatalogId, webSiteId : webSiteId, userLogin : userLogin, currencyUomId : currencyUomId];
childShoppingListPriceMap = dispatcher.runSync("calculateShoppingListDeepTotalPrice", calcListPriceInMap);
totalPrice = childShoppingListPriceMap.totalPrice;
shoppingListChildTotal += totalPrice;
childShoppingListData.childShoppingList = childShoppingList;
childShoppingListData.totalPrice = totalPrice;
childShoppingListDatas.add(childShoppingListData);
}
context.childShoppingListDatas = childShoppingListDatas;
}
context.shoppingListTotalPrice = shoppingListItemTotal + shoppingListChildTotal;
context.shoppingListItemTotal = shoppingListItemTotal;
context.shoppingListChildTotal = shoppingListChildTotal;
// get the parent shopping list if there is one
parentShoppingList = shoppingList.getRelatedOne("ParentShoppingList", false);
context.parentShoppingList = parentShoppingList;
context.canView = userLogin.partyId.equals(shoppingList.partyId);
// auto-reorder info
if ("SLT_AUTO_REODR".equals(shoppingListType?.shoppingListTypeId)) {
recurrenceVo = shoppingList.getRelatedOne("RecurrenceInfo", false);
context.recurrenceInfo = recurrenceVo;
if (userLogin.partyId.equals(shoppingList.partyId)) {
listCart = ShoppingListServices.makeShoppingListCart(dispatcher, shoppingListId, locale);
// get customer's shipping & payment info
context.chosenShippingMethod = shoppingList.shipmentMethodTypeId + "@" + shoppingList.carrierPartyId;
context.shippingContactMechList = ContactHelper.getContactMech(party, "SHIPPING_LOCATION", "POSTAL_ADDRESS", false);
context.paymentMethodList = EntityUtil.filterByDate(party.getRelated("PaymentMethod", null, ["paymentMethodTypeId"], false));
shipAddress = delegator.findOne("PostalAddress", ["contactMechId" : shoppingList.contactMechId], false);
Debug.log("SL - address : " + shipAddress);
if (shipAddress) {
listCart = ShoppingListServices.makeShoppingListCart(dispatcher, shoppingListId, locale);
if (listCart) {
shippingEstWpr = new ShippingEstimateWrapper(dispatcher, listCart, 0);
carrierShipMeths = shippingEstWpr.getShippingMethods();
context.listCart = listCart;
context.shippingEstWpr = shippingEstWpr;
context.carrierShipMethods = carrierShipMeths;
}
}
if (recurrenceVo) {
recInfo = new RecurrenceInfo(recurrenceVo);
context.recInfo = recInfo;
lastSlOrderDate = shoppingList.lastOrderedDate;
context.lastSlOrderDate = lastSlOrderDate;
if (!lastSlOrderDate) {
lastSlOrderDate = recurrenceVo.startDateTime;
}
context.lastSlOrderTime = lastSlOrderDate.getTime();
}
}
}
}
}