blob: 6aec2242c0fe18c933ec46fddb853835a5bf406e [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.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"