@Override public ILUTUProducerAllocationDestination createLUTUProducerAllocationDestination( final I_M_HU_LUTU_Configuration lutuConfiguration) { Check.assumeNotNull(lutuConfiguration, "lutuConfiguration not null"); final IHandlingUnitsBL handlingUnitsBL = Services.get(IHandlingUnitsBL.class); final ILUTUProducerAllocationDestination luProducerDestination = new LUTUProducerDestination(); luProducerDestination.setM_HU_LUTU_Configuration(lutuConfiguration); // // LU Configuration final I_M_HU_PI_Item luPIItem = lutuConfiguration.getM_LU_HU_PI_Item(); final int qtyLU = lutuConfiguration.getQtyLU().intValueExact(); final boolean qtyLUInfinite = lutuConfiguration.isInfiniteQtyLU(); final int qtyTU = lutuConfiguration.getQtyTU().intValueExact(); final boolean qtyTUInfinite = lutuConfiguration.isInfiniteQtyTU(); if (!handlingUnitsBL.isNoPI(luPIItem)) { final I_M_HU_PI luPI = luPIItem.getM_HU_PI_Version().getM_HU_PI(); luProducerDestination.setLUItemPI(luPIItem); luProducerDestination.setLUPI(luPI); if (qtyLUInfinite) { luProducerDestination.setMaxLUsInfinite(); // // 07378: Fix behavior when max LUs are infinite, created max TUs are the ones we specify // (otherwise we end up creating infinite HUs for 3 x Tomatoes) luProducerDestination.setMaxTUsForRemainingQty(qtyTU); } else { luProducerDestination.setMaxLUs(qtyLU); } // TU configuration Check.assume(!qtyTUInfinite, "qtyTUInfinite shall be false when dealing with concrete LUs"); luProducerDestination.setMaxTUsPerLU(qtyTU); luProducerDestination.setCreateTUsForRemainingQty(false); } else { luProducerDestination.setLUItemPI(null); luProducerDestination.setLUPI(null); luProducerDestination.setMaxLUs(0); // TU configuration // luProducerDestination.setMaxTUsPerLU(0); // no need to set luProducerDestination.setCreateTUsForRemainingQty(true); // we will create only TUs if (qtyTUInfinite) { luProducerDestination.setMaxTUsForRemainingQtyInfinite(); } else { luProducerDestination.setMaxTUsForRemainingQty(qtyTU); } } // // TU Configuration final I_M_HU_PI tuPI = lutuConfiguration.getM_TU_HU_PI(); luProducerDestination.setTUPI(tuPI); // TU Capacity final I_M_Product cuProduct = lutuConfiguration.getM_Product(); final I_C_UOM cuUOM = lutuConfiguration.getC_UOM(); final boolean qtyCUInfinite = lutuConfiguration.isInfiniteQtyCU(); final BigDecimal qtyCUPerTU = qtyCUInfinite ? IHUCapacityDefinition.INFINITY : lutuConfiguration.getQtyCU(); luProducerDestination.addTUCapacity(cuProduct, qtyCUPerTU, cuUOM); // // Misc configuration luProducerDestination.setC_BPartner(lutuConfiguration.getC_BPartner()); luProducerDestination.setC_BPartner_Location_ID(lutuConfiguration.getC_BPartner_Location_ID()); luProducerDestination.setHUStatus(lutuConfiguration.getHUStatus()); luProducerDestination.setM_Locator(lutuConfiguration.getM_Locator()); // // Return it return luProducerDestination; }
private ArrayKey createKeyForHUProducer(final I_M_HU_LUTU_Configuration lutuConfiguration) { Check.assumeNotNull(lutuConfiguration, "lutuConfiguration not null"); final List<Object> keyItems = new ArrayList<Object>(); // // LU: PI final int luPIItemId = lutuConfiguration.getM_LU_HU_PI_Item_ID(); final boolean hasLU; if (luPIItemId > 0) { final int luPIId = lutuConfiguration.getM_LU_HU_PI_ID(); Check.assume(luPIId > 0, "LU PI ID shall be set for {}", lutuConfiguration); keyItems.add(luPIItemId); // LU M_HU_PI_Item_ID keyItems.add(luPIId); // LU M_HU_PI_ID hasLU = true; } else { keyItems.add(-1); // LU M_HU_PI_Item_ID keyItems.add(-1); // LU M_HU_PI_ID hasLU = false; } // // LU: Qty // NOTE: we skip QtyLU because it's not relevant when we check if the configuration is still // compliant with an HU // // TU: PI final int tuPIId = lutuConfiguration.getM_TU_HU_PI_ID(); if (tuPIId > 0) { keyItems.add(tuPIId); // TU M_HU_PI_ID } else { keyItems.add(-1); // TU M_HU_PI_ID } // // TU: Qty if (lutuConfiguration.isInfiniteQtyTU()) { keyItems.add(true); // IsInfiniteQtyTU keyItems.add(0); // Qty TU } // case: there is no LU. In this case we can ignore the QtyTU because it's not relevant when we // check if configuration is still compiant with an HU else if (!hasLU) { keyItems.add(false); // IsInfiniteQtyTU keyItems.add("QtyTU_NA"); // Qty TU: N/A } else { keyItems.add(false); // IsInfiniteQtyTU keyItems.add(lutuConfiguration.getQtyTU().intValue()); // Qty TU } // // CU final int productId = lutuConfiguration.getM_Product_ID(); final int uomId = lutuConfiguration.getC_UOM_ID(); keyItems.add(productId > 0 ? productId : -1); keyItems.add(uomId > 0 ? uomId : -1); if (lutuConfiguration.isInfiniteQtyCU()) { keyItems.add(true); // IsInfiniteQtyCU keyItems.add(BigDecimal.ZERO); // Qty CU } else { final BigDecimal qtyCU = NumberUtils.stripTrailingDecimalZeros(lutuConfiguration.getQtyCU()); keyItems.add(false); // IsInfiniteQtyCU keyItems.add(qtyCU); // Qty CU } // // Misc final int locatorId = lutuConfiguration.getM_Locator_ID(); final int bpartnerId = lutuConfiguration.getC_BPartner_ID(); final int bpartnerLocationId = lutuConfiguration.getC_BPartner_Location_ID(); final String huStatus = lutuConfiguration.getHUStatus(); keyItems.add(locatorId > 0 ? locatorId : -1); keyItems.add(bpartnerId > 0 ? bpartnerId : -1); keyItems.add(bpartnerLocationId > 0 ? bpartnerLocationId : -1); keyItems.add(huStatus); keyItems.add(lutuConfiguration.isActive()); return Util.mkKey(keyItems.toArray()); }