| /* |
| * 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.apache.ofbiz.entity.util.* |
| import org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRun |
| import org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRunHelper |
| |
| if (security.hasEntityPermission("MANUFACTURING", "_VIEW", session)) { |
| context.hasPermission = Boolean.TRUE |
| } else { |
| context.hasPermission = Boolean.FALSE |
| } |
| |
| // ----------------------------- |
| // Report's parameters |
| 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 = from("OrderShipment").where("shipmentId", shipmentId).queryList() |
| |
| if (shipmentPlans) { |
| shipmentPlans.each { shipmentPlan -> |
| // Select the production run, if available |
| weIds = from("WorkOrderItemFulfillment").where("orderId", shipmentPlan.orderId, "orderItemSeqId", shipmentPlan.orderItemSeqId).orderBy("workEffortId").queryList() // 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 |
| } |