blob: 9edd1b6289c6e56de783193a88f4f7b3023bf9c2 [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 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;
}