blob: 0e85df447b6392c7d4241e30f2123e0983319e34 [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.ofbiz.entity.*
import org.ofbiz.entity.util.*
import org.ofbiz.entity.condition.EntityCondition;
shipmentId = request.getParameter("shipmentId");
orderId = request.getParameter("orderId");
shipGroupSeqId = request.getParameter("shipGroupSeqId");
selectFromShipmentPlan = request.getParameter("selectFromShipmentPlan");
shipment = delegator.findOne("Shipment", [shipmentId : shipmentId], false);
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 = delegator.findOne("OrderHeader", [orderId : orderId], false);
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 = delegator.findOne("OrderItemShipGroup", [orderId : orderId, shipGroupSeqId : shipGroupSeqId], false);
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 = delegator.findList("OrderShipment", EntityCondition.makeCondition([shipmentId : shipment.shipmentId]), null, ['orderId', 'orderItemSeqId'], null, false);
orderItemDatas = [] as LinkedList;
context.isSalesOrder = true;
shipmentPlans.each { shipmentPlan ->
orderItemData = [:];
orderItem = shipmentPlan.getRelatedOne("OrderItem", false);
orderItemShipGroup = null;
if (shipGroupSeqId) {
orderItemShipGroup = delegator.findOne("OrderItemShipGroup", [orderId : orderItem.orderId, shipGroupSeqId : shipGroupSeqId], false);
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;