| /* |
| * 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.apache.ofbiz.base.util.* |
| import org.apache.ofbiz.entity.* |
| import org.apache.ofbiz.entity.util.* |
| import org.apache.ofbiz.entity.condition.* |
| import org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents |
| import org.apache.ofbiz.order.shoppingcart.shipping.* |
| import org.apache.ofbiz.order.shoppinglist.* |
| import org.apache.ofbiz.party.contact.* |
| import org.apache.ofbiz.product.catalog.* |
| import org.apache.ofbiz.product.store.* |
| import org.apache.ofbiz.service.calendar.* |
| import org.apache.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 = from("ShoppingList").where(exprList).orderBy("listName").queryList() |
| shoppingLists = EntityUtil.filterByAnd(allShoppingLists, [parentShoppingListId : null]) |
| context.allShoppingLists = allShoppingLists |
| context.shoppingLists = shoppingLists |
| |
| // get all shoppingListTypes |
| shoppingListTypes = from("ShoppingListType").orderBy("description").cache(true).queryList() |
| 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 = from("ShoppingList").where("shoppingListId", shoppingListId).queryOne() |
| 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) |
| |
| calcPriceOutMap = runService('calculateProductPrice', [product : product, quantity : shoppingListItem.quantity, currencyUomId : currencyUomId, userLogin : userLogin, |
| webSiteId: webSiteId, prodCatalogId: prodCatalogId, productStoreId: productStoreId]) |
| 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 = parameters.VIEW_SIZE ?: EntityUtilProperties.getPropertyAsInteger("widget", "widget.form.defaultViewSize", 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 = from("ShoppingList").where("partyId", userLogin.partyId, "parentShoppingListId", shoppingListId).orderBy("listName").cache(true).queryList() |
| // now get prices for each child shopping list... |
| if (childShoppingLists) { |
| childShoppingListDatas = new ArrayList(childShoppingLists.size()) |
| childShoppingLists.each { childShoppingList -> |
| childShoppingListData = [:] |
| |
| childShoppingListPriceMap = runService('calculateShoppingListDeepTotalPrice', [shoppingListId : childShoppingList.shoppingListId, prodCatalogId : prodCatalogId, webSiteId : webSiteId, userLogin : userLogin, currencyUomId : currencyUomId]) |
| 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 = from("PostalAddress").where("contactMechId", shoppingList.contactMechId).queryOne() |
| 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() |
| } |
| } |
| } |
| } |
| } |