/* * 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. */ productId = request.getParameter("productId"); if (!productId) { productId = session.getAttribute("productId"); } if (productId) { product = from("Product").where("productId", productId).cache(true).queryOne(); context.product = product; facilityId = request.getParameter("facilityId"); resultOutput = runService('getInventoryAvailableByFacility', [productId : productId, facilityId : facilityId]); quantitySummary = [:]; quantitySummary.facilityId = facilityId; quantitySummary.atp_qoh = ((Double)resultOutput.availableToPromiseTotal).intValue() + " / " + ((Double)resultOutput.quantityOnHandTotal).intValue(); context.quantitySummary = quantitySummary; // For now this just generates a visual list of locations set against the product for this facility. // todo: Will need to be able to edit and change these values at some point in the future. productFacilityLocList = from("ProductFacilityLocation").where("productId", productId, "facilityId", facilityId).queryList(); facStr = null; productFacilityLocList.each { facilityLoc -> if (!facStr) { facStr = facilityLoc.locationSeqId; } else { facStr = facStr + ", " + facilityLoc.locationSeqId; } } context.productFacilityLocations = facStr; // Now we build a list of locations for inventory items against the facility. // todo: change this to a select from inv_items where productId and facilityId matches distinct (locationSeqId). invItemList = from("InventoryItem").where("productId", productId, "facilityId", facilityId).queryList(); locations = [:]; boolean negativeQOH = false; invItemList.each { invItem -> int qoh = ((Double)invItem.quantityOnHandTotal).intValue(); if (qoh < 0) { negativeQOH = true; } locationFound = (String)invItem.locationSeqId; if (!locationFound) { locationFound = "nullField"; } if (!locations.get(locationFound)) { locations.put(locationFound, locationFound); } } // Go through and build the list of atp/qoh against each location productFacilityLocations = new ArrayList(); locationsIter = locations.keySet().iterator(); while (locationsIter.hasNext()) { location = locationsIter.next(); resultOutput = runService('getInventoryAvailableByLocation', [productId : productId, facilityId : facilityId, locationSeqId : location]); quantitySummary = [:]; quantitySummary.productId = productId; quantitySummary.facilityId = facilityId; if ("nullField".equals( location ) == true) { quantitySummary.locationSeqId = ""; } else { quantitySummary.locationSeqId = location; } quantitySummary.atp_qoh = ((Double)resultOutput.availableToPromiseTotal).intValue() + " / " + ((Double)resultOutput.quantityOnHandTotal).intValue(); productFacilityLocations.add(quantitySummary); } context.productQtyByLocations = productFacilityLocations; if (negativeQOH) { context.negativeQOH = "true"; } }