blob: 76753af79b5295f5760a68ec9f1c09a9c27c2399 [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.util.*;
import java.awt.Dimension;
import org.ofbiz.entity.*;
import org.ofbiz.base.util.*;
import org.ofbiz.entity.util.*;
import org.ofbiz.widget.html.*;
import org.ofbiz.manufacturing.jobshopmgt.ProductionRun;
import org.ofbiz.manufacturing.jobshopmgt.ProductionRunHelper;
security = request.getAttribute("security");
delegator = request.getAttribute("delegator");
dispatcher = request.getAttribute("dispatcher");
if(security.hasEntityPermission("MANUFACTURING", "_VIEW", session)) {
context.put("hasPermission", Boolean.TRUE);
} else {
context.put("hasPermission", Boolean.FALSE);
}
// -----------------------------
// Report's parameters
//groupByFeatureTypeIdParameter = "COLOR";
selectWorkEffortNameParameter = "O-PREL_A"; // sezionatura
selectPrimaryCategoryIdParameter = "CABINETS"; // struttura
// -----------------------------
shipmentId = request.getParameter("shipmentId");
context.put("shipmentId", shipmentId);
shipment = delegator.findByPrimaryKey("Shipment", UtilMisc.toMap("shipmentId", shipmentId));
context.put("shipment", shipment);
// dimensionsByFeatureMap [key=feature; value=productsByShapeMap]
// productsByShapeMap [key=dimension; value=quantityByProductsMap]
// quantityByProductsMap [key=product; value=quantity]
// dimension={width*, height*, qty}
// product={productId*,...}
productIdToQuantity = new HashMap(); // key=productId, value=quantity
productIdToProduct = new HashMap(); // key=productId, value=product
dimensionToProducts = new HashMap(); // key=Dimension, value=list of products
dimensionToQuantity = new HashMap(); // key=Dimension, value=tot qty (of products)
shipmentPlans = delegator.findByAnd("OrderShipment", UtilMisc.toMap("shipmentId", shipmentId));
if (shipmentPlans != null) {
shipmentPlansIt = shipmentPlans.iterator();
while (shipmentPlansIt.hasNext()) {
shipmentPlan = shipmentPlansIt.next();
// Select the production run, if available
weIds = delegator.findByAnd("WorkOrderItemFulfillment", UtilMisc.toMap("orderId", shipmentPlan.getString("orderId"), "orderItemSeqId", shipmentPlan.getString("orderItemSeqId")), UtilMisc.toList("workEffortId")); // TODO: add shipmentId
weId = EntityUtil.getFirst(weIds);
ArrayList productionRunTree = new ArrayList();
// TODO
if (weId != null) {
ProductionRunHelper.getLinkedProductionRuns(delegator, dispatcher, weId.getString("workEffortId"), productionRunTree);
for (int i = 0; i < productionRunTree.size(); i++) {
ProductionRun oneProductionRun = (ProductionRun)productionRunTree.get(i);
if (ProductionRunHelper.hasTask(delegator, selectWorkEffortNameParameter, oneProductionRun.getGenericValue().getString("workEffortId"))) {
GenericValue product = oneProductionRun.getProductProduced();
String primaryCategory = product.getString("primaryProductCategoryId");
if (primaryCategory != null && selectPrimaryCategoryIdParameter.equals(primaryCategory)) {
String productId = product.getString("productId");
productIdToProduct.put(productId, product);
if (!productIdToQuantity.containsKey(productId)) {
productIdToQuantity.put(productId, new Double(0));
}
Double qty = (Double)productIdToQuantity.get(productId);
productIdToQuantity.put(productId, new Double(oneProductionRun.getGenericValue().getDouble("quantityToProduce").doubleValue() + qty.doubleValue()));
}
}
}
}
}
Iterator productsIterator = productIdToProduct.values().iterator();
while (productsIterator.hasNext()) {
GenericValue product = (GenericValue)productsIterator.next();
Double heightD = product.getDouble("productHeight");
int height = 0;
if (heightD != null) height = (int)(heightD.doubleValue() * 1000);
Double widthD = product.getDouble("productWidth");
int width = 0;
if (widthD != null) width = (int)(widthD.doubleValue() * 1000);
Dimension dim = new Dimension(width, height);
if (!dimensionToProducts.containsKey(dim)) {
dimensionToProducts.put(dim, new ArrayList());
}
List prodList = (List)dimensionToProducts.get(dim);
prodList.add(product);
// tot qty per dimension
if (!dimensionToQuantity.containsKey(dim)) {
dimensionToQuantity.put(dim, new Double(0));
}
Double qty = (Double)dimensionToQuantity.get(dim);
dimensionToQuantity.put(dim, new Double(((Double)productIdToQuantity.get(product.getString("productId"))).doubleValue() + qty.doubleValue()));
}
//
//
//
List list1 = new ArrayList();
Iterator dimIt = dimensionToProducts.keySet().iterator();
while (dimIt.hasNext()) {
Dimension dim = (Dimension)dimIt.next();
Map map1 = new HashMap();
list1.add(map1);
map1.put("width", new Double(dim.getWidth() / 1000));
map1.put("height", new Double(dim.getHeight() / 1000));
map1.put("quantity", dimensionToQuantity.get(dim));
List list2 = new ArrayList();
map1.put("products", list2);
List products = (List)dimensionToProducts.get(dim);
for (int i = 0; i < products.size(); i++) {
GenericValue product = (GenericValue)products.get(i);
Map map2 = new HashMap();
list2.add(map2);
map2.put("product", product);
map2.put("quantity", productIdToQuantity.get(product.getString("productId")));
}
}
context.put("cuttingList", list1);
}
/*
// Data structure example
Map map1, map2 = null;
List list1, list2 = null;
//
GenericValue productA = delegator.findByPrimaryKey("Product", UtilMisc.toMap("productId", "AR202"));
GenericValue productB = delegator.findByPrimaryKey("Product", UtilMisc.toMap("productId", "PENS45_001_BePoBi"));
GenericValue productC = delegator.findByPrimaryKey("Product", UtilMisc.toMap("productId", "ST_001_Bi"));
GenericValue productD = delegator.findByPrimaryKey("Product", UtilMisc.toMap("productId", "25-00"));
// products
list2 = new ArrayList();
map2 = new HashMap();
map2.put("product", productA);
map2.put("quantity", new Integer(12));
list2.add(map2);
map2 = new HashMap();
map2.put("product", productB);
map2.put("quantity", new Integer(4));
list2.add(map2);
// dimensions
list1 = new ArrayList();
map1 = new HashMap();
map1.put("width", new Double(123.5));
map1.put("length", new Double(243.8));
map1.put("quantity", new Integer(16));
map1.put("products", list2);
list1.add(map1);
// products
list2 = new ArrayList();
map2 = new HashMap();
map2.put("product", productA);
map2.put("quantity", new Integer(3));
list2.add(map2);
map2 = new HashMap();
map2.put("product", productC);
map2.put("quantity", new Integer(20));
list2.add(map2);
map2 = new HashMap();
map2.put("product", productD);
map2.put("quantity", new Integer(7));
list2.add(map2);
// dimensions
map1 = new HashMap();
map1.put("width", new Double(150.5));
map1.put("length", new Double(145.3));
map1.put("quantity", new Integer(30));
map1.put("products", list2);
list1.add(map1);
context.put("cuttingList", list1);
*/