Skip to content

Commit

Permalink
#181 prototype transform actions
Browse files Browse the repository at this point in the history
  • Loading branch information
teosarca committed Feb 24, 2017
1 parent bf7e834 commit ec67aad
Show file tree
Hide file tree
Showing 3 changed files with 313 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package de.metas.ui.web.handlingunits.process;

/*
* #%L
* metasfresh-webui-api
* %%
* Copyright (C) 2017 metas GmbH
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-2.0.html>.
* #L%
*/

/**
* Join selected CUs to a new TU or to an existing TU
*
* @author metas-dev <dev@metasfresh.com>
*
*/
public class WEBUI_M_HU_JoinCUsToTU
{

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package de.metas.ui.web.handlingunits.process;

/*
* #%L
* metasfresh-webui-api
* %%
* Copyright (C) 2017 metas GmbH
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-2.0.html>.
* #L%
*/

/**
* Join selected TUs to a new LU or to an existing LU
*
* @author metas-dev <dev@metasfresh.com>
*
*/
public class WEBUI_M_HU_JoinTUsToLU
{

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,245 @@
package de.metas.ui.web.handlingunits.process;

import java.math.BigDecimal;
import java.util.List;
import java.util.Set;

import org.adempiere.ad.trx.api.ITrx;
import org.adempiere.exceptions.AdempiereException;
import org.adempiere.model.InterfaceWrapperHelper;
import org.adempiere.util.Services;
import org.adempiere.util.collections.ListUtils;
import org.compiere.Adempiere;
import org.compiere.model.I_C_BPartner;
import org.compiere.model.I_C_UOM;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Profile;

import de.metas.adempiere.model.I_M_Product;
import de.metas.handlingunits.IHandlingUnitsBL;
import de.metas.handlingunits.IHandlingUnitsDAO;
import de.metas.handlingunits.IMutableHUContext;
import de.metas.handlingunits.allocation.transfer.IHUSplitBuilder;
import de.metas.handlingunits.allocation.transfer.impl.HUSplitBuilder;
import de.metas.handlingunits.document.IHUDocumentLine;
import de.metas.handlingunits.model.I_M_HU;
import de.metas.handlingunits.model.I_M_HU_PI;
import de.metas.handlingunits.model.I_M_HU_PI_Item;
import de.metas.handlingunits.model.I_M_HU_PI_Item_Product;
import de.metas.handlingunits.model.X_M_HU_PI_Version;
import de.metas.printing.esb.base.util.Check;
import de.metas.process.IProcessDefaultParameter;
import de.metas.process.IProcessDefaultParametersProvider;
import de.metas.process.IProcessPrecondition;
import de.metas.process.IProcessPreconditionsContext;
import de.metas.process.JavaProcess;
import de.metas.process.Param;
import de.metas.process.ProcessPreconditionsResolution;
import de.metas.process.RunOutOfTrx;
import de.metas.ui.web.WebRestApiApplication;
import de.metas.ui.web.handlingunits.HUDocumentView;
import de.metas.ui.web.handlingunits.HUDocumentViewSelection;
import de.metas.ui.web.process.ProcessInstance;
import de.metas.ui.web.view.IDocumentViewsRepository;
import de.metas.ui.web.window.datatypes.DocumentId;

/*
* #%L
* metasfresh-webui-api
* %%
* Copyright (C) 2017 metas GmbH
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-2.0.html>.
* #L%
*/

@Profile(value = WebRestApiApplication.PROFILE_Webui)
public class WEBUI_M_HU_Transform extends JavaProcess implements IProcessPrecondition, IProcessDefaultParametersProvider
{
@Override
public ProcessPreconditionsResolution checkPreconditionsApplicable(final IProcessPreconditionsContext context)
{
if (!context.isSingleSelection())
{
return ProcessPreconditionsResolution.rejectBecauseNotSingleSelection();
}
return ProcessPreconditionsResolution.accept();
}

@Override
public Object getParameterDefaultValue(final IProcessDefaultParameter parameter)
{
return DEFAULT_VALUE_NOTAVAILABLE;
}

//
// Services
@Autowired
private transient IDocumentViewsRepository documentViewsRepo;
private final transient IHandlingUnitsBL handlingUnitsBL = Services.get(IHandlingUnitsBL.class);
private final transient IHandlingUnitsDAO handlingUnitsDAO = Services.get(IHandlingUnitsDAO.class);

//
// View (internal) parameters
@Param(parameterName = ProcessInstance.PARAM_ViewId, mandatory = true)
private String p_WebuiViewId;
@Param(parameterName = ProcessInstance.PARAM_ViewSelectedIds, mandatory = true)
private String p_WebuiViewSelectedIdsStr;

//
// Parameters
private static final String PARAM_M_HU_PI_Item_Product_ID = "M_HU_PI_Item_Product_ID";
@Param(parameterName = PARAM_M_HU_PI_Item_Product_ID)
private int p_M_HU_PI_Item_Product_ID;
//
private static final String PARAM_M_LU_HU_PI_ID = "M_LU_HU_PI_ID";
@Param(parameterName = PARAM_M_LU_HU_PI_ID)
private int p_M_LU_HU_PI_ID;
//
private static final String PARAM_QtyCU = "QtyCU";
@Param(parameterName = PARAM_QtyCU)
private BigDecimal p_QtyCU;
//
private static final String PARAM_QtyTU = "QtyTU";
@Param(parameterName = PARAM_QtyTU)
private BigDecimal p_QtyTU;

// TODO: handle HUPlanningReceiptOwnerPM

public WEBUI_M_HU_Transform()
{
Adempiere.autowire(this);
}

@Override
@RunOutOfTrx
protected String doIt() throws Exception
{
final HUDocumentView cuRow = getSelectedRow();

actionSplitCUToNew(cuRow);

return MSG_OK;
}

private HUDocumentViewSelection getView()
{
return documentViewsRepo.getView(p_WebuiViewId, HUDocumentViewSelection.class);
}

private HUDocumentView getSelectedRow()
{
final Set<DocumentId> selectedDocumentIds = DocumentId.ofCommaSeparatedString(p_WebuiViewSelectedIdsStr);
final DocumentId documentId = ListUtils.singleElement(selectedDocumentIds);
return getView().getById(documentId);
}

private void actionSplitCUToNew(final HUDocumentView cuRow)
{
Check.assume(cuRow.isCU(), "CU Row: {}", cuRow);

final IMutableHUContext huContextInitial = handlingUnitsBL.createMutableHUContextForProcessing(this);
final IHUSplitBuilder splitBuilder = new HUSplitBuilder(huContextInitial);

//
// "Our" HU, the one which the user selected for split
final I_M_HU huToSplit = InterfaceWrapperHelper.create(getCtx(), cuRow.getM_HU_ID(), I_M_HU.class, ITrx.TRXNAME_ThreadInherited);
splitBuilder.setHUToSplit(huToSplit);

//
// DocumentLine / Trx Referenced model (if available)
final IHUDocumentLine documentLine = null; // TODO huToSplitKey.findDocumentLineOrNull();
splitBuilder.setDocumentLine(documentLine);
splitBuilder.setCUTrxReferencedModel(documentLine == null ? null : documentLine.getTrxReferencedModel());

splitBuilder.setCUProduct(InterfaceWrapperHelper.create(getCtx(), cuRow.getM_Product_ID(), I_M_Product.class, ITrx.TRXNAME_None));
splitBuilder.setCUQty(cuRow.getQtyCU());
splitBuilder.setCUUOM(InterfaceWrapperHelper.create(getCtx(), cuRow.getC_UOM_ID(), I_C_UOM.class, ITrx.TRXNAME_None));

splitBuilder.setCUPerTU(p_QtyCU);
splitBuilder.setTUPerLU(p_QtyTU);
splitBuilder.setMaxLUToAllocate(BigDecimal.valueOf(Integer.MAX_VALUE));

final I_M_HU_PI_Item_Product tuPI_ItemProduct = InterfaceWrapperHelper.create(getCtx(), p_M_HU_PI_Item_Product_ID, I_M_HU_PI_Item_Product.class, ITrx.TRXNAME_None);
final I_M_HU_PI_Item tuPI_Item = tuPI_ItemProduct.getM_HU_PI_Item();
splitBuilder.setTU_M_HU_PI_Item(tuPI_Item);

// LU
final I_M_HU_PI tuPI = tuPI_Item.getM_HU_PI_Version().getM_HU_PI();
final I_C_BPartner bpartner = huToSplit.getC_BPartner();
final I_M_HU_PI_Item luPI_Item = handlingUnitsDAO.retrieveParentPIItemsForParentPI(tuPI, X_M_HU_PI_Version.HU_UNITTYPE_LoadLogistiqueUnit, bpartner)
.stream()
.filter(piItem -> piItem.getM_HU_PI_Version().getM_HU_PI_ID() == p_M_LU_HU_PI_ID)
.findFirst()
.orElseThrow(() -> new AdempiereException(tuPI.getName() + " cannot be loaded to " + p_M_LU_HU_PI_ID));
splitBuilder.setLU_M_HU_PI_Item(luPI_Item);

final List<I_M_HU> husAfterSplit = splitBuilder.split();
getView().addHUsAndInvalidate(husAfterSplit);
}


// Params:
// * QtyCU to split
private void action_SplitCU_To_NewCU()
{

}

// Params:
// * Existing TU (M_HU_ID)
// * QtyCU to split
private void action_SplitCU_To_ExistingTU()
{

}

// Params:
// * TU's M_HU_PI_Item_Product_ID
// * total QtyCU to split
// * HUPlanningReceiptOwnerPM
private void action_SplitCU_To_NewTUs()
{

}

// Params:
// * TU's M_HU_PI_Item_Product_ID
// * QtyTUs
// * HUPlanningReceiptOwnerPM
private void action_SplitTU_To_NewTUs()
{

}

// Params:
// * TU's M_HU_PI_Item_Product_ID
// * LU's M_HU_PI_Item_ID
// * QtyTUs
// * (only one LU)
// * HUPlanningReceiptOwnerPM
private void action_SplitTU_To_NewLU()
{

}

// Params:
// * existing LU (M_HU_ID)
// * QtyTUs
private void action_SplitTU_To_ExistingLU()
{

}
}

0 comments on commit ec67aad

Please sign in to comment.