| /* |
| * 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.entity.condition.* |
| import org.apache.ofbiz.entity.util.EntityUtil |
| import org.apache.ofbiz.base.util.* |
| import org.apache.ofbiz.order.shoppingcart.ShoppingCart |
| import org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents |
| import org.apache.ofbiz.order.order.OrderReadHelper |
| |
| // This script can take quite a while to run with a decent amount of data |
| // so we'll take a best effort approach to limit the size of the results |
| maxRows = null |
| // TODO: Find a way to get the pagination parameters for a given form |
| if (!parameters.containsKey("VIEW_INDEX_2")) { |
| // There's only one set of pagination parameters so it must be for us |
| if (parameters.VIEW_SIZE_1) { |
| if (parameters.VIEW_INDEX_1) { |
| viewSize = Integer.valueOf(parameters.VIEW_SIZE_1) |
| viewIndex = Integer.valueOf(parameters.VIEW_INDEX_1) |
| maxRows = viewSize * (viewIndex + 1) |
| } |
| } |
| } |
| if (!maxRows) { |
| maxRows = 50 |
| } |
| |
| productId = parameters.productId |
| supplier = null |
| supplierPartyId = null |
| |
| orderId = parameters.orderId |
| if (orderId) { |
| orderItemShipGroup = from("OrderItemShipGroup").orderBy("orderId").queryFirst() |
| orderHeader = from("OrderHeader").where("orderId", orderId).queryOne() |
| supplier = from("OrderHeaderAndRoles").where("orderId", orderId, "roleTypeId", "BILL_FROM_VENDOR").queryFirst() |
| context.shipGroupSeqId = orderItemShipGroup.shipGroupSeqId |
| context.orderHeader = orderHeader |
| } |
| |
| ShoppingCart shoppingCart = ShoppingCartEvents.getCartObject(request) |
| |
| conditionList = [] |
| |
| if (productId) { |
| // make sure the look up is case insensitive |
| conditionList.add(EntityCondition.makeCondition(EntityFunction.UPPER(EntityFieldValue.makeFieldValue("productId")), |
| EntityOperator.LIKE, productId.toUpperCase() + "%")) |
| } |
| if (!supplier) { |
| supplierPartyId = shoppingCart.getOrderPartyId() |
| } else { |
| supplierPartyId = supplier.getString("partyId") |
| } |
| conditionList.add(EntityCondition.makeCondition("partyId", EntityOperator.EQUALS, supplierPartyId)) |
| |
| conditionList.add(EntityCondition.makeCondition("currencyUomId", EntityOperator.EQUALS, shoppingCart.getCurrency())) |
| conditionList.add(EntityCondition.makeConditionDate("availableFromDate", "availableThruDate")) |
| |
| supplierProducts = select("productId", "supplierProductId", "supplierProductName", "lastPrice", "minimumOrderQuantity", "orderQtyIncrements").from("SupplierProduct") |
| .where(conditionList) |
| .orderBy("productId") |
| .queryList() |
| |
| newProductList = [] |
| for (supplierProduct in supplierProducts) { |
| productId = supplierProduct.productId |
| |
| String facilityId = parameters.facilityId |
| if (facilityId) { |
| productFacilityList = from("ProductFacility").where("productId", productId, "facilityId", facilityId).cache(true).queryList() |
| } else { |
| productFacilityList = from("ProductFacility").where("productId", productId).cache(true).queryList() |
| } |
| if (newProductList.size() >= maxRows) { |
| // We've got enough results to display, keep going to get the result size but skip the heavy stuff |
| newProductList.add(null) |
| } else { |
| quantityOnOrder = 0.0 |
| // find approved purchase orders |
| orderHeaders = from("OrderHeader").where("orderTypeId", "PURCHASE_ORDER", "statusId", "ORDER_APPROVED").orderBy("orderId DESC").queryList() |
| orderHeaders.each { orderHeader -> |
| orderReadHelper = new OrderReadHelper(orderHeader) |
| orderItems = orderReadHelper.getOrderItems() |
| orderItems.each { orderItem -> |
| if (productId.equals(orderItem.productId) && "ITEM_APPROVED".equals(orderItem.statusId)) { |
| if (!orderItem.cancelQuantity) { |
| cancelQuantity = 0.0 |
| } |
| shippedQuantity = orderReadHelper.getItemShippedQuantity(orderItem) |
| quantityOnOrder += orderItem.quantity - cancelQuantity - shippedQuantity |
| } |
| } |
| } |
| product = from("Product").where("productId", productId).cache(true).queryOne() |
| productFacilityList.each { productFacility -> |
| result = runService('getInventoryAvailableByFacility', ["productId" : productId, "facilityId" : productFacility.facilityId]) |
| qohAtp = result.quantityOnHandTotal.toPlainString() + "/" + result.availableToPromiseTotal.toPlainString() |
| productInfoMap = [:] |
| |
| productInfoMap.internalName = product.internalName |
| |
| productInfoMap.productId = productId |
| productInfoMap.qohAtp = qohAtp |
| productInfoMap.quantityOnOrder = quantityOnOrder |
| |
| productInfoMap.supplierProductId = supplierProduct.supplierProductId |
| productInfoMap.lastPrice = supplierProduct.lastPrice |
| productInfoMap.orderQtyIncrements = supplierProduct.orderQtyIncrements |
| productInfoMap.minimumOrderQuantity = supplierProduct.minimumOrderQuantity |
| |
| productInfoMap.minimumStock = productFacility.minimumStock |
| |
| newProductList.add(productInfoMap) |
| } |
| } |
| } |
| context.productListSize = newProductList.size() |
| context.productList = newProductList |