Search in sources :

Example 1 with IHandlingUnitsDAO

use of de.metas.handlingunits.IHandlingUnitsDAO in project metasfresh-webui-api by metasfresh.

the class PackingInfoProcessParams method getAvailableLuPIItems.

private List<I_M_HU_PI_Item> getAvailableLuPIItems(@NonNull final I_M_HU_PI_Item_Product pip, @Nullable final I_C_BPartner bPartner) {
    final IHandlingUnitsDAO handlingUnitsDAO = Services.get(IHandlingUnitsDAO.class);
    final I_M_HU_PI piOfCurrentPip = pip.getM_HU_PI_Item().getM_HU_PI_Version().getM_HU_PI();
    final List<I_M_HU_PI_Item> luPIItems = handlingUnitsDAO.retrieveParentPIItemsForParentPI(piOfCurrentPip, // huUnitType
    null, bPartner);
    return luPIItems;
}
Also used : IHandlingUnitsDAO(de.metas.handlingunits.IHandlingUnitsDAO) I_M_HU_PI_Item(de.metas.handlingunits.model.I_M_HU_PI_Item) I_M_HU_PI(de.metas.handlingunits.model.I_M_HU_PI)

Example 2 with IHandlingUnitsDAO

use of de.metas.handlingunits.IHandlingUnitsDAO in project metasfresh-webui-api by metasfresh.

the class WEBUI_M_ReceiptSchedule_ReceiveHUs_UsingConfig method createM_HU_LUTU_Configuration.

@Override
protected I_M_HU_LUTU_Configuration createM_HU_LUTU_Configuration(final I_M_HU_LUTU_Configuration template) {
    // Validate parameters
    final int M_LU_HU_PI_ID = p_M_LU_HU_PI_ID;
    final int M_HU_PI_Item_Product_ID = p_M_HU_PI_Item_Product_ID;
    final BigDecimal qtyCU = p_QtyCU;
    final BigDecimal qtyTU = p_QtyTU;
    final BigDecimal qtyLU = p_QtyLU;
    if (M_HU_PI_Item_Product_ID <= 0) {
        throw new FillMandatoryException(PARAM_M_HU_PI_Item_Product_ID);
    }
    if (qtyCU == null || qtyCU.signum() <= 0) {
        throw new FillMandatoryException(PARAM_QtyCU);
    }
    if (qtyTU == null || qtyTU.signum() <= 0) {
        throw new FillMandatoryException(PARAM_QtyTU);
    }
    final I_M_HU_LUTU_Configuration lutuConfigurationNew = InterfaceWrapperHelper.copy().setFrom(template).copyToNew(I_M_HU_LUTU_Configuration.class);
    // 
    // CU
    lutuConfigurationNew.setQtyCU(qtyCU);
    lutuConfigurationNew.setIsInfiniteQtyCU(false);
    // 
    // TU
    final I_M_HU_PI_Item_Product tuPIItemProduct = InterfaceWrapperHelper.create(getCtx(), M_HU_PI_Item_Product_ID, I_M_HU_PI_Item_Product.class, ITrx.TRXNAME_None);
    final I_M_HU_PI tuPI = tuPIItemProduct.getM_HU_PI_Item().getM_HU_PI_Version().getM_HU_PI();
    lutuConfigurationNew.setM_HU_PI_Item_Product(tuPIItemProduct);
    lutuConfigurationNew.setM_TU_HU_PI(tuPI);
    lutuConfigurationNew.setQtyTU(qtyTU);
    lutuConfigurationNew.setIsInfiniteQtyTU(false);
    // LU
    if (M_LU_HU_PI_ID > 0) {
        if (qtyLU == null || qtyLU.signum() <= 0) {
            throw new FillMandatoryException(PARAM_QtyLU);
        }
        final I_M_HU_PI luPI = InterfaceWrapperHelper.create(getCtx(), M_LU_HU_PI_ID, I_M_HU_PI.class, ITrx.TRXNAME_None);
        final IHandlingUnitsDAO handlingUnitsDAO = Services.get(IHandlingUnitsDAO.class);
        final I_M_HU_PI_Version luPIV = handlingUnitsDAO.retrievePICurrentVersion(luPI);
        final I_M_HU_PI_Item luPI_Item = handlingUnitsDAO.retrieveParentPIItemsForParentPI(tuPI, X_M_HU_PI_Version.HU_UNITTYPE_LoadLogistiqueUnit, lutuConfigurationNew.getC_BPartner()).stream().filter(piItem -> piItem.getM_HU_PI_Version_ID() == luPIV.getM_HU_PI_Version_ID()).findFirst().orElseThrow(() -> new AdempiereException(tuPI.getName() + " cannot be loaded to " + luPI.getName()));
        lutuConfigurationNew.setM_LU_HU_PI(luPI);
        lutuConfigurationNew.setM_LU_HU_PI_Item(luPI_Item);
        lutuConfigurationNew.setQtyLU(qtyLU);
        lutuConfigurationNew.setIsInfiniteQtyLU(false);
    } else {
        lutuConfigurationNew.setM_LU_HU_PI(null);
        lutuConfigurationNew.setM_LU_HU_PI_Item(null);
        lutuConfigurationNew.setQtyLU(BigDecimal.ZERO);
    }
    return lutuConfigurationNew;
}
Also used : IHandlingUnitsDAO(de.metas.handlingunits.IHandlingUnitsDAO) I_M_HU_PI_Item(de.metas.handlingunits.model.I_M_HU_PI_Item) I_M_HU_LUTU_Configuration(de.metas.handlingunits.model.I_M_HU_LUTU_Configuration) AdempiereException(org.adempiere.exceptions.AdempiereException) I_M_HU_PI_Item_Product(de.metas.handlingunits.model.I_M_HU_PI_Item_Product) I_M_HU_PI_Version(de.metas.handlingunits.model.I_M_HU_PI_Version) FillMandatoryException(org.adempiere.exceptions.FillMandatoryException) I_M_HU_PI(de.metas.handlingunits.model.I_M_HU_PI) BigDecimal(java.math.BigDecimal)

Example 3 with IHandlingUnitsDAO

use of de.metas.handlingunits.IHandlingUnitsDAO in project metasfresh-webui-api by metasfresh.

the class SqlHUEditorViewRepository method createHUEditorRow.

private HUEditorRow createHUEditorRow(@NonNull final I_M_HU hu, final int topLevelHUId) {
    // final Stopwatch stopwatch = Stopwatch.createStarted();
    final IHandlingUnitsBL handlingUnitsBL = Services.get(IHandlingUnitsBL.class);
    final boolean aggregatedTU = handlingUnitsBL.isAggregateHU(hu);
    final String huUnitTypeCode = handlingUnitsBL.getHU_UnitType(hu);
    final HUEditorRowType huRecordType;
    if (aggregatedTU) {
        huRecordType = HUEditorRowType.TU;
    } else {
        huRecordType = HUEditorRowType.ofHU_UnitType(huUnitTypeCode);
    }
    final String huUnitTypeDisplayName = huRecordType.getName();
    final JSONLookupValue huUnitTypeLookupValue = JSONLookupValue.of(huUnitTypeCode, huUnitTypeDisplayName);
    final JSONLookupValue huStatus = createHUStatusLookupValue(hu);
    final boolean processed = rowProcessedPredicate.isProcessed(hu);
    final int huId = hu.getM_HU_ID();
    final HUEditorRowId rowId = HUEditorRowId.ofHU(huId, topLevelHUId);
    final HUEditorRow.Builder huEditorRow = HUEditorRow.builder(windowId).setRowId(rowId).setType(huRecordType).setTopLevel(topLevelHUId <= 0).setProcessed(processed).setBPartnerId(hu.getC_BPartner_ID()).setAttributesProvider(attributesProvider).setCode(hu.getValue()).setHUUnitType(huUnitTypeLookupValue).setHUStatus(huStatus).setPackingInfo(extractPackingInfo(hu, huRecordType));
    // Acquire Best Before Date if required
    if (showBestBeforeDate) {
        huEditorRow.setBestBeforeDate(extractBestBeforeDate(attributesProvider, rowId));
    }
    // Locator
    if (showLocator) {
        huEditorRow.setLocator(createLocatorLookupValue(hu.getM_Locator_ID()));
    }
    // 
    // Product/UOM/Qty if there is only one product stored
    final IHUProductStorage singleProductStorage = getSingleProductStorage(hu);
    if (singleProductStorage != null) {
        huEditorRow.setProduct(createProductLookupValue(singleProductStorage.getM_Product())).setUOM(createUOMLookupValue(singleProductStorage.getC_UOM())).setQtyCU(singleProductStorage.getQty());
    }
    // 
    // Included HUs
    final int topLevelHUIdEffective = topLevelHUId > 0 ? topLevelHUId : huId;
    if (aggregatedTU) {
        final IHUStorageFactory storageFactory = handlingUnitsBL.getStorageFactory();
        storageFactory.getStorage(hu).getProductStorages().stream().map(huStorage -> createHUEditorRow(huId, topLevelHUIdEffective, huStorage, processed)).forEach(huEditorRow::addIncludedRow);
    } else if (X_M_HU_PI_Version.HU_UNITTYPE_LoadLogistiqueUnit.equals(huUnitTypeCode)) {
        final IHandlingUnitsDAO handlingUnitsDAO = Services.get(IHandlingUnitsDAO.class);
        handlingUnitsDAO.retrieveIncludedHUs(hu).stream().map(includedHU -> createHUEditorRow(includedHU, topLevelHUIdEffective)).forEach(huEditorRow::addIncludedRow);
    } else if (X_M_HU_PI_Version.HU_UNITTYPE_TransportUnit.equals(huUnitTypeCode)) {
        final IHandlingUnitsDAO handlingUnitsDAO = Services.get(IHandlingUnitsDAO.class);
        final IHUStorageFactory storageFactory = handlingUnitsBL.getStorageFactory();
        handlingUnitsDAO.retrieveIncludedHUs(hu).stream().map(includedVHU -> storageFactory.getStorage(includedVHU)).flatMap(vhuStorage -> vhuStorage.getProductStorages().stream()).map(vhuProductStorage -> createHUEditorRow(huId, topLevelHUIdEffective, vhuProductStorage, processed)).forEach(huEditorRow::addIncludedRow);
    } else if (X_M_HU_PI_Version.HU_UNITTYPE_VirtualPI.equals(huUnitTypeCode)) {
    // do nothing
    } else {
        throw new HUException("Unknown HU_UnitType=" + huUnitTypeCode + " for " + hu);
    }
    final HUEditorRow huEditorRowBuilt = huEditorRow.build();
    return huEditorRowBuilt;
}
Also used : IHUStorageFactory(de.metas.handlingunits.storage.IHUStorageFactory) SqlViewRowIdsConverter(de.metas.ui.web.view.descriptor.SqlViewRowIdsConverter) Date(java.util.Date) ViewEvaluationCtx(de.metas.ui.web.view.ViewEvaluationCtx) ITrx(org.adempiere.ad.trx.api.ITrx) SqlDocumentFilterConverters(de.metas.ui.web.document.filter.sql.SqlDocumentFilterConverters) ResultSet(java.sql.ResultSet) IHUQueryBuilder(de.metas.handlingunits.IHUQueryBuilder) IADReferenceDAO(org.adempiere.ad.service.IADReferenceDAO) HUPackingInfos(de.metas.ui.web.handlingunits.util.HUPackingInfos) ImmutableSet(com.google.common.collect.ImmutableSet) NonNull(lombok.NonNull) Collection(java.util.Collection) Set(java.util.Set) IQueryBuilder(org.adempiere.ad.dao.IQueryBuilder) SqlViewBinding(de.metas.ui.web.view.descriptor.SqlViewBinding) PreparedStatement(java.sql.PreparedStatement) Collectors(java.util.stream.Collectors) I_M_Locator(de.metas.handlingunits.model.I_M_Locator) DBException(org.adempiere.exceptions.DBException) Services(org.adempiere.util.Services) List(java.util.List) SqlViewRowIdsOrderedSelectionFactory(de.metas.ui.web.view.SqlViewRowIdsOrderedSelectionFactory) Stream(java.util.stream.Stream) Builder(lombok.Builder) I_M_Warehouse(de.metas.handlingunits.model.I_M_Warehouse) LogManager(de.metas.logging.LogManager) IHandlingUnitsBL(de.metas.handlingunits.IHandlingUnitsBL) HUException(de.metas.handlingunits.exceptions.HUException) ViewRowIdsOrderedSelection(de.metas.ui.web.view.ViewRowIdsOrderedSelection) GuavaCollectors(org.adempiere.util.GuavaCollectors) DocumentId(de.metas.ui.web.window.datatypes.DocumentId) InterfaceWrapperHelper.loadOutOfTrx(org.adempiere.model.InterfaceWrapperHelper.loadOutOfTrx) SqlOptions(de.metas.ui.web.window.model.sql.SqlOptions) SqlAndParams(de.metas.ui.web.view.descriptor.SqlAndParams) Page(org.adempiere.util.collections.PagedIterator.Page) HUIdsFilterData(de.metas.ui.web.handlingunits.HUIdsFilterHelper.HUIdsFilterData) PlainContextAware(org.adempiere.model.PlainContextAware) SqlViewSelectData(de.metas.ui.web.view.descriptor.SqlViewSelectData) SQLException(java.sql.SQLException) DB(org.compiere.util.DB) I_M_Product(org.compiere.model.I_M_Product) ImmutableList(com.google.common.collect.ImmutableList) X_M_HU_PI_Version(de.metas.handlingunits.model.X_M_HU_PI_Version) DocumentFilter(de.metas.ui.web.document.filter.DocumentFilter) DocumentQueryOrderBy(de.metas.ui.web.window.model.DocumentQueryOrderBy) I_M_HU(de.metas.handlingunits.model.I_M_HU) LinkedHashSet(java.util.LinkedHashSet) Nullable(javax.annotation.Nullable) DocumentIdsSelection(de.metas.ui.web.window.datatypes.DocumentIdsSelection) JSONLookupValue(de.metas.ui.web.window.datatypes.json.JSONLookupValue) Logger(org.slf4j.Logger) SqlViewKeyColumnNamesMap(de.metas.ui.web.view.descriptor.SqlViewKeyColumnNamesMap) I_C_UOM(org.compiere.model.I_C_UOM) HUPackingInfoFormatter(de.metas.ui.web.handlingunits.util.HUPackingInfoFormatter) WindowId(de.metas.ui.web.window.datatypes.WindowId) ViewRowIdsOrderedSelectionFactory(de.metas.ui.web.view.ViewRowIdsOrderedSelectionFactory) IHandlingUnitsDAO(de.metas.handlingunits.IHandlingUnitsDAO) SqlViewSelectionQueryBuilder(de.metas.ui.web.view.descriptor.SqlViewSelectionQueryBuilder) SqlDocumentFilterConverter(de.metas.ui.web.document.filter.sql.SqlDocumentFilterConverter) Check(org.adempiere.util.Check) IHUProductStorage(de.metas.handlingunits.storage.IHUProductStorage) IHUStorage(de.metas.handlingunits.storage.IHUStorage) ViewId(de.metas.ui.web.view.ViewId) IHandlingUnitsBL(de.metas.handlingunits.IHandlingUnitsBL) JSONLookupValue(de.metas.ui.web.window.datatypes.json.JSONLookupValue) IHUStorageFactory(de.metas.handlingunits.storage.IHUStorageFactory) IHUProductStorage(de.metas.handlingunits.storage.IHUProductStorage) IHandlingUnitsDAO(de.metas.handlingunits.IHandlingUnitsDAO) HUException(de.metas.handlingunits.exceptions.HUException)

Example 4 with IHandlingUnitsDAO

use of de.metas.handlingunits.IHandlingUnitsDAO in project metasfresh-webui-api by metasfresh.

the class WEBUIHUCreationWithSerialNumberService method createCUsBatch.

private Set<Integer> createCUsBatch(final HUEditorRow.HUEditorRowHierarchy huEditorRowHierarchy, final int maxCUsAllowedPerBatch) {
    final Set<Integer> splitCUIDs = new HashSet<>();
    final IHandlingUnitsDAO handlingUnitsDAO = Services.get(IHandlingUnitsDAO.class);
    final HUEditorRow cuRow = huEditorRowHierarchy.getCuRow();
    final HUEditorRow parentRow = huEditorRowHierarchy.getParentRow();
    final int initialQtyCU = cuRow.getQtyCU().intValueExact();
    I_M_HU huToSplit = cuRow.getM_HU();
    int numberOfCUsToCreate;
    if (parentRow == null) {
        // The CU will not be split when its qty gets to 1. So make sure the selected CU gets in the list of split CUs
        final int selectedCUID = huToSplit.getM_HU_ID();
        splitCUIDs.add(selectedCUID);
        numberOfCUsToCreate = maxCUsAllowedPerBatch < initialQtyCU ? maxCUsAllowedPerBatch : initialQtyCU;
        for (int i = 0; i < numberOfCUsToCreate; i++) {
            final List<I_M_HU> createdCUs = newHUTransformation().cuToNewCU(huToSplit, BigDecimal.ONE);
            splitCUIDs.addAll(createdCUs.stream().map(I_M_HU::getM_HU_ID).collect(ImmutableSet.toImmutableSet()));
        }
    } else {
        Check.assume(parentRow.isTU(), " Parent row must be TU: " + parentRow);
        I_M_HU parentHU = parentRow.getM_HU();
        if (isAggregateHU(parentRow)) {
            final HUEditorRow luRow = huEditorRowHierarchy.getTopLevelRow();
            parentHU = createNonAggregatedTU(parentRow, luRow);
            huToSplit = handlingUnitsDAO.retrieveIncludedHUs(parentHU).get(0);
        }
        final int tuCapacity = calculateTUCapacity(parentHU);
        numberOfCUsToCreate = Util.getMinimumOfThree(tuCapacity, maxCUsAllowedPerBatch, initialQtyCU);
        for (int i = 0; i < numberOfCUsToCreate; i++) {
            final List<I_M_HU> createdCUs = newHUTransformation().cuToExistingTU(huToSplit, BigDecimal.ONE, parentHU);
            splitCUIDs.addAll(createdCUs.stream().map(I_M_HU::getM_HU_ID).collect(ImmutableSet.toImmutableSet()));
        }
    }
    return splitCUIDs;
}
Also used : IHandlingUnitsDAO(de.metas.handlingunits.IHandlingUnitsDAO) I_M_HU(de.metas.handlingunits.model.I_M_HU) HUEditorRow(de.metas.ui.web.handlingunits.HUEditorRow) HashSet(java.util.HashSet)

Example 5 with IHandlingUnitsDAO

use of de.metas.handlingunits.IHandlingUnitsDAO in project metasfresh-webui-api by metasfresh.

the class WEBUI_Picking_PickQtyToNewHU method createTU.

/**
 * Creates a new M_HU within the processe's interited trx.
 *
 * @param itemProduct
 * @param locator
 * @return
 */
private static final I_M_HU createTU(@NonNull final I_M_HU_PI_Item_Product itemProduct, @NonNull final I_M_Locator locator) {
    final IHandlingUnitsDAO handlingUnitsDAO = Services.get(IHandlingUnitsDAO.class);
    final IHUTrxBL huTrxBL = Services.get(IHUTrxBL.class);
    final I_M_HU_PI huPI = itemProduct.getM_HU_PI_Item().getM_HU_PI_Version().getM_HU_PI();
    return huTrxBL.createHUContextProcessorExecutor().call(huContext -> handlingUnitsDAO.createHUBuilder(huContext).setM_HU_Item_Parent(// no parent
    null).setM_HU_PI_Item_Product(itemProduct).setM_Locator(locator).setHUStatus(X_M_HU.HUSTATUS_Active).create(huPI));
}
Also used : IHandlingUnitsDAO(de.metas.handlingunits.IHandlingUnitsDAO) IHUTrxBL(de.metas.handlingunits.hutransaction.IHUTrxBL) I_M_HU_PI(de.metas.handlingunits.model.I_M_HU_PI)

Aggregations

IHandlingUnitsDAO (de.metas.handlingunits.IHandlingUnitsDAO)5 I_M_HU_PI (de.metas.handlingunits.model.I_M_HU_PI)3 I_M_HU (de.metas.handlingunits.model.I_M_HU)2 I_M_HU_PI_Item (de.metas.handlingunits.model.I_M_HU_PI_Item)2 ImmutableList (com.google.common.collect.ImmutableList)1 ImmutableSet (com.google.common.collect.ImmutableSet)1 IHUQueryBuilder (de.metas.handlingunits.IHUQueryBuilder)1 IHandlingUnitsBL (de.metas.handlingunits.IHandlingUnitsBL)1 HUException (de.metas.handlingunits.exceptions.HUException)1 IHUTrxBL (de.metas.handlingunits.hutransaction.IHUTrxBL)1 I_M_HU_LUTU_Configuration (de.metas.handlingunits.model.I_M_HU_LUTU_Configuration)1 I_M_HU_PI_Item_Product (de.metas.handlingunits.model.I_M_HU_PI_Item_Product)1 I_M_HU_PI_Version (de.metas.handlingunits.model.I_M_HU_PI_Version)1 I_M_Locator (de.metas.handlingunits.model.I_M_Locator)1 I_M_Warehouse (de.metas.handlingunits.model.I_M_Warehouse)1 X_M_HU_PI_Version (de.metas.handlingunits.model.X_M_HU_PI_Version)1 IHUProductStorage (de.metas.handlingunits.storage.IHUProductStorage)1 IHUStorage (de.metas.handlingunits.storage.IHUStorage)1 IHUStorageFactory (de.metas.handlingunits.storage.IHUStorageFactory)1 LogManager (de.metas.logging.LogManager)1