blob: 2c3704e56261446c24e56c7b79036c09b453d655 [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 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