| /* |
| * 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 |