blob: 2a29c72de9a6dd6ceea2fb3c7f6e3d4ae3052c8f [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.*
import org.apache.ofbiz.entity.util.*
import org.apache.ofbiz.entity.condition.EntityCondition
shipmentId = request.getParameter("shipmentId")
orderId = request.getParameter("orderId")
shipGroupSeqId = request.getParameter("shipGroupSeqId")
selectFromShipmentPlan = request.getParameter("selectFromShipmentPlan")
shipment = from("Shipment").where("shipmentId", shipmentId).queryOne()
if (shipment) {
context.originFacility = shipment.getRelatedOne("OriginFacility", false)
context.destinationFacility = shipment.getRelatedOne("DestinationFacility", false)
}
if (!orderId && shipment && !selectFromShipmentPlan) {
orderId = shipment.primaryOrderId
}
if (!shipGroupSeqId && shipment) {
shipGroupSeqId = shipment.primaryShipGroupSeqId
}
if (orderId && shipment) {
orderHeader = from("OrderHeader").where("orderId", orderId).queryOne()
context.orderHeader = orderHeader
if (orderHeader) {
context.orderHeaderStatus = orderHeader.getRelatedOne("StatusItem", false)
context.orderType = orderHeader.getRelatedOne("OrderType", false)
isSalesOrder = "SALES_ORDER".equals(orderHeader.orderTypeId)
context.isSalesOrder = isSalesOrder
orderItemShipGroup = null
if (shipGroupSeqId) {
orderItemShipGroup = from("OrderItemShipGroup").where("orderId", orderId, "shipGroupSeqId", shipGroupSeqId).queryOne()
context.orderItemShipGroup = orderItemShipGroup
}
oiasgaLimitMap = null
if (orderItemShipGroup) {
oiasgaLimitMap = [shipGroupSeqId : shipGroupSeqId]
}
orderItems = orderHeader.getRelated("OrderItemAndShipGroupAssoc", oiasgaLimitMap, ['shipGroupSeqId', 'orderItemSeqId'], false)
orderItemDatas = [] as LinkedList
orderItems.each { orderItemAndShipGroupAssoc ->
orderItemData = [:]
product = orderItemAndShipGroupAssoc.getRelatedOne("Product", false)
itemIssuances = orderItemAndShipGroupAssoc.getRelated("ItemIssuance", null, null, false)
totalQuantityIssued = 0
itemIssuances.each { itemIssuance ->
if (itemIssuance.quantity) {
totalQuantityIssued += itemIssuance.getDouble("quantity")
}
if (itemIssuance.cancelQuantity) {
totalQuantityIssued -= itemIssuance.getDouble("cancelQuantity")
}
}
if (isSalesOrder) {
oisgirLimitMap = null
if (orderItemShipGroup) {
oisgirLimitMap = [shipGroupSeqId : shipGroupSeqId]
}
orderItemShipGrpInvResList = orderItemAndShipGroupAssoc.getRelated("OrderItemShipGrpInvRes", oisgirLimitMap, ['reservedDatetime'], false)
orderItemShipGrpInvResDatas = [] as LinkedList
totalQuantityReserved = 0
orderItemShipGrpInvResList.each { orderItemShipGrpInvRes ->
inventoryItem = orderItemShipGrpInvRes.getRelatedOne("InventoryItem", false)
orderItemShipGrpInvResData = [:]
orderItemShipGrpInvResData.orderItemShipGrpInvRes = orderItemShipGrpInvRes
orderItemShipGrpInvResData.inventoryItem = inventoryItem
orderItemShipGrpInvResData.inventoryItemFacility = inventoryItem.getRelatedOne("Facility", false)
orderItemShipGrpInvResDatas.add(orderItemShipGrpInvResData)
if (orderItemShipGrpInvRes.quantity) {
totalQuantityReserved += orderItemShipGrpInvRes.getDouble("quantity")
}
}
orderItemData.orderItemShipGrpInvResDatas = orderItemShipGrpInvResDatas
orderItemData.totalQuantityReserved = totalQuantityReserved
orderItemData.totalQuantityIssuedAndReserved = totalQuantityReserved + totalQuantityIssued
}
orderItemData.orderItemAndShipGroupAssoc = orderItemAndShipGroupAssoc
orderItemData.product = product
orderItemData.itemIssuances = itemIssuances
orderItemData.totalQuantityIssued = totalQuantityIssued
orderItemDatas.add(orderItemData)
}
context.orderItemDatas = orderItemDatas
}
}
if (shipment && selectFromShipmentPlan) {
shipmentPlans = from("OrderShipment").where("shipmentId", shipment.shipmentId).orderBy("orderId", "orderItemSeqId").queryList()
orderItemDatas = [] as LinkedList
context.isSalesOrder = true
shipmentPlans.each { shipmentPlan ->
orderItemData = [:]
orderItem = shipmentPlan.getRelatedOne("OrderItem", false)
orderItemShipGroup = null
if (shipGroupSeqId) {
orderItemShipGroup = from("OrderItemShipGroup").where("orderId", orderItem.orderId, "shipGroupSeqId", shipGroupSeqId).queryOne()
context.orderItemShipGroup = orderItemShipGroup
}
oiasgaLimitMap = null
if (orderItemShipGroup) {
oiasgaLimitMap = [shipGroupSeqId : shipGroupSeqId]
}
orderItemShipGroupAssoc = null
orderItemShipGroupAssocs = orderItem.getRelated("OrderItemShipGroupAssoc", oiasgaLimitMap, null, false)
if (orderItemShipGroupAssocs) {
orderItemShipGroupAssoc = EntityUtil.getFirst(orderItemShipGroupAssocs)
}
plannedQuantity = shipmentPlan.getDouble("quantity")
totalProposedQuantity = 0.0
product = orderItem.getRelatedOne("Product", false)
itemIssuances = orderItem.getRelated("ItemIssuance", null, null, false)
totalQuantityIssued = 0
totalQuantityIssuedInShipment = 0
itemIssuances.each { itemIssuance ->
if (itemIssuance.quantity) {
totalQuantityIssued += itemIssuance.getDouble("quantity")
}
if (itemIssuance.cancelQuantity) {
totalQuantityIssued -= itemIssuance.getDouble("cancelQuantity")
}
if (itemIssuance.shipmentId && itemIssuance.shipmentId.equals(shipmentId)) {
totalQuantityIssuedInShipment += itemIssuance.getDouble("quantity")
if (itemIssuance.cancelQuantity) {
totalQuantityIssuedInShipment -= itemIssuance.getDouble("cancelQuantity")
}
}
}
orderItemShipGrpInvResList = orderItem.getRelated("OrderItemShipGrpInvRes", null, ['reservedDatetime'], false)
orderItemShipGrpInvResDatas = [] as LinkedList
totalQuantityReserved = 0
orderItemShipGrpInvResList.each { orderItemShipGrpInvRes ->
inventoryItem = orderItemShipGrpInvRes.getRelatedOne("InventoryItem", false)
orderItemShipGrpInvResData = [:]
orderItemShipGrpInvResData.orderItemShipGrpInvRes = orderItemShipGrpInvRes
orderItemShipGrpInvResData.inventoryItem = inventoryItem
orderItemShipGrpInvResData.inventoryItemFacility = inventoryItem.getRelatedOne("Facility", false)
orderItemShipGrpInvResDatas.add(orderItemShipGrpInvResData)
reservedQuantity = 0.0
quantityNotAvailable = 0.0
proposedQuantity = 0.0
if (orderItemShipGrpInvRes.quantity) {
reservedQuantity = orderItemShipGrpInvRes.getDouble("quantity")
totalQuantityReserved += reservedQuantity
}
if (orderItemShipGrpInvRes.quantityNotAvailable) {
quantityNotAvailable = orderItemShipGrpInvRes.getDouble("quantityNotAvailable")
}
proposedQuantity = reservedQuantity - quantityNotAvailable
if (plannedQuantity - totalProposedQuantity < proposedQuantity) {
proposedQuantity = plannedQuantity - totalProposedQuantity
}
if (proposedQuantity < 0) {
proposedQuantity = 0.0
}
totalProposedQuantity += proposedQuantity
orderItemShipGrpInvResData.shipmentPlanQuantity = proposedQuantity
}
orderItemShipGroupAssocMap = new HashMap(orderItemShipGroupAssoc)
orderItemShipGroupAssocMap.quantity = orderItemShipGroupAssoc.getDouble("quantity")
orderItemData.orderItemAndShipGroupAssoc = orderItemShipGroupAssocMap
orderItemData.orderItemShipGrpInvResDatas = orderItemShipGrpInvResDatas
orderItemData.totalQuantityReserved = totalQuantityReserved
orderItemData.totalQuantityIssuedAndReserved = totalQuantityReserved + totalQuantityIssued
orderItemData.orderItem = orderItem
orderItemData.product = product
orderItemData.itemIssuances = itemIssuances
orderItemData.totalQuantityIssued = totalQuantityIssued
orderItemDatas.add(orderItemData)
}
context.orderItemDatas = orderItemDatas
}
context.shipmentId = shipmentId
context.shipment = shipment
context.orderId = orderId
context.shipGroupSeqId = shipGroupSeqId