/* * 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 java.awt.Dimension import org.ofbiz.entity.util.* import org.ofbiz.manufacturing.jobshopmgt.ProductionRun import org.ofbiz.manufacturing.jobshopmgt.ProductionRunHelper if (security.hasEntityPermission("MANUFACTURING", "_VIEW", session)) { context.hasPermission = Boolean.TRUE; } else { context.hasPermission = Boolean.FALSE; } // ----------------------------- // Report's parameters //groupByFeatureTypeIdParameter = "COLOR"; selectWorkEffortNameParameter = "O-PREL_A"; // sezionatura selectPrimaryCategoryIdParameter = "CABINETS"; // struttura // ----------------------------- shipmentId = request.getParameter("shipmentId"); context.shipmentId = shipmentId; shipment = delegator.findOne("Shipment", [shipmentId : shipmentId], false); context.shipment = shipment; // dimensionsByFeatureMap [key=feature; value=productsByShapeMap] // productsByShapeMap [key=dimension; value=quantityByProductsMap] // quantityByProductsMap [key=product; value=quantity] // dimension={width*, height*, qty} // product={productId*,...} productIdToQuantity = [:]; // key=productId, value=quantity productIdToProduct = [:]; // key=productId, value=product dimensionToProducts = [:]; // key=Dimension, value=list of products dimensionToQuantity = [:]; // key=Dimension, value=tot qty (of products) shipmentPlans = delegator.findList("OrderShipment", EntityCondition.makeCondition([shipmentId : shipmentId]), null, null, null, false); if (shipmentPlans) { shipmentPlans.each { shipmentPlan -> // Select the production run, if available weIds = delegator.findList("WorkOrderItemFulfillment", EntityCondition.makeCondition([orderId : shipmentPlan.orderId, orderItemSeqId : shipmentPlan.orderItemSeqId]), null, ['workEffortId'], null, false); // TODO: add shipmentId weId = EntityUtil.getFirst(weIds); productionRunTree = [] as ArrayList; // TODO if (weId) { ProductionRunHelper.getLinkedProductionRuns(delegator, dispatcher, weId.workEffortId, productionRunTree); for (int i = 0; i < productionRunTree.size(); i++) { oneProductionRun = (ProductionRun)productionRunTree.get(i); if (ProductionRunHelper.hasTask(delegator, selectWorkEffortNameParameter, oneProductionRun.getGenericValue().workEffortId)) { product = oneProductionRun.getProductProduced(); primaryCategory = product.primaryProductCategoryId; if (primaryCategory && selectPrimaryCategoryIdParameter.equals(primaryCategory)) { productId = product.productId; productIdToProduct.put(productId, product); if (!productIdToQuantity.containsKey(productId)) { productIdToQuantity.put(productId, 0.0); } qty = productIdToQuantity.get(productId); productIdToQuantity.put(productId, oneProductionRun.getGenericValue().quantityToProduce + qty); } } } } } productIdToProduct.values().each { product -> heightD = product.productHeight; height = 0; if (heightD) { height = (heightD * 1000) as int; } widthD = product.productWidth; width = 0; if (widthD) { width = (widthD * 1000) as int; } Dimension dim = new Dimension(width, height); if (!dimensionToProducts.containsKey(dim)) { dimensionToProducts.put(dim, new ArrayList()); } prodList = (List)dimensionToProducts.get(dim); prodList.add(product); // tot qty per dimension if (!dimensionToQuantity.containsKey(dim)) { dimensionToQuantity.put(dim, 0.0); } qty = dimensionToQuantity[dim]; dimensionToQuantity.put(dim, productIdToQuantity[product.productId] + qty); } // // // list1 = [] as ArrayList; dimensionToProducts.keySet().each { dim -> map1 = [:]; list1.add(map1); map1.width = (dim.getWidth() / 1000); map1.height = (dim.getHeight() / 1000); map1.quantity = dimensionToQuantity.get(dim); list2 = [] as ArrayList; map1.products = list2; products = (List)dimensionToProducts.get(dim); for (int i = 0; i < products.size(); i++) { product = products.get(i); Map map2 = [:]; list2.add(map2); map2.product = product; map2.quantity = productIdToQuantity.get(product.productId); } } context.cuttingList = list1; }