| /* |
| * 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.base.util.* |
| |
| inventoryStock = [:] |
| shipmentId = parameters.shipmentId |
| shipment = from("Shipment").where("shipmentId", shipmentId).queryOne() |
| |
| context.shipmentIdPar = shipment.shipmentId |
| context.estimatedReadyDatePar = shipment.estimatedReadyDate |
| context.estimatedShipDatePar = shipment.estimatedShipDate |
| records = [] |
| if (shipment) { |
| shipmentPlans = from("OrderShipment").where("shipmentId", shipmentId).queryList() |
| shipmentPlans.each { shipmentPlan -> |
| orderLine = from("OrderItem").where("orderId", shipmentPlan.orderId , "orderItemSeqId", shipmentPlan.orderItemSeqId).queryOne() |
| recordGroup = [:] |
| recordGroup.ORDER_ID = shipmentPlan.orderId |
| recordGroup.ORDER_ITEM_SEQ_ID = shipmentPlan.orderItemSeqId |
| recordGroup.SHIPMENT_ID = shipmentPlan.shipmentId |
| recordGroup.SHIPMENT_ITEM_SEQ_ID = shipmentPlan.shipmentItemSeqId |
| |
| recordGroup.PRODUCT_ID = orderLine.productId |
| recordGroup.QUANTITY = shipmentPlan.quantity |
| product = from("Product").where("productId", orderLine.productId).queryOne() |
| recordGroup.PRODUCT_NAME = product.internalName |
| |
| inputPar = [productId : orderLine.productId, |
| quantity : shipmentPlan.quantity, |
| fromDate : "" + new Date(), |
| userLogin: userLogin] |
| |
| result = [:] |
| result = runService('getNotAssembledComponents',inputPar) |
| if (result) { |
| components = (List)result.get("notAssembledComponents") |
| } |
| components.each { oneComponent -> |
| record = new HashMap(recordGroup) |
| record.componentId = oneComponent.getProduct().productId |
| record.componentName = oneComponent.getProduct().internalName |
| record.componentQuantity = new Float(oneComponent.getQuantity()) |
| facilityId = shipment.originFacilityId |
| float qty = 0 |
| if (facilityId) { |
| if (!inventoryStock.containsKey(oneComponent.getProduct().productId)) { |
| serviceInput = [productId : oneComponent.getProduct().productId , facilityId : facilityId] |
| serviceOutput = runService('getInventoryAvailableByFacility',serviceInput) |
| qha = serviceOutput.quantityOnHandTotal ?: 0.0 |
| inventoryStock.put(oneComponent.getProduct().productId, qha) |
| } |
| qty = inventoryStock[oneComponent.getProduct().productId] |
| qty = qty - oneComponent.getQuantity() |
| inventoryStock.put(oneComponent.getProduct().productId, qty) |
| } |
| record.componentOnHand = qty |
| // Now we get the products qty already reserved by production runs |
| serviceInput = [productId : oneComponent.getProduct().productId, |
| userLogin : userLogin] |
| serviceOutput = runService('getProductionRunTotResQty', serviceInput) |
| resQty = serviceOutput.reservedQuantity |
| record.reservedQuantity = resQty |
| records.add(record) |
| } |
| } |
| context.records = records |
| |
| // check permission |
| hasPermission = false |
| if (security.hasEntityPermission("MANUFACTURING", "_VIEW", session)) { |
| hasPermission = true |
| } |
| context.hasPermission = hasPermission |
| } |
| |
| return "success" |