Skip to content

Commit

Permalink
#10325 Print manufacturing order label (#10387)
Browse files Browse the repository at this point in the history
* #10325 Try to use AD_Pinstance

* #10325 Create T_Selection to use

* #10325 Create proper selection

* #10325 Minor refacotoring

* #10325 Fix selection

* #10325  Fix build
  • Loading branch information
cristinamghita committed Dec 9, 2020
1 parent bd3b511 commit a8c3495
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 42 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2239,6 +2239,15 @@ public PInstanceId createT_Selection(final Set<? extends RepoIdAware> selection,
return createT_Selection(ids, trxName);
}

public void createT_Selection(
@NonNull final PInstanceId selectionId,
@NonNull final Set<? extends RepoIdAware> selection,
@Nullable final String trxName)
{
final ImmutableList<Integer> ids = RepoIdAwares.asRepoIds(selection);
createT_Selection(selectionId, ids, trxName);
}

public PInstanceId createT_Selection(@NonNull final TableRecordReferenceSet recordRefs, final String trxName)
{
final Set<Integer> ids = recordRefs.toIntSet();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,12 @@ public boolean isBOMLine()
|| this == BOMLine_ByCoProduct;
}

public boolean isMainProduct()
{
return this == MainProduct;
}


public boolean isHUOrHUStorage()
{
return this == HU_LU
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,18 @@

package de.metas.ui.web.pporder.process;

import java.util.HashSet;
import java.util.Objects;
import java.util.Set;

import org.adempiere.ad.trx.api.ITrx;
import org.compiere.util.DB;

import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;

import de.metas.handlingunits.HuId;
import de.metas.i18n.AdMessageKey;
import de.metas.i18n.IMsgBL;
import de.metas.process.AdProcessId;
import de.metas.process.IADPInstanceDAO;
import de.metas.process.IProcessPrecondition;
Expand All @@ -39,30 +47,26 @@
import de.metas.report.server.OutputType;
import de.metas.report.server.ReportResult;
import de.metas.ui.web.pporder.PPOrderLineRow;
import de.metas.ui.web.pporder.PPOrderLineType;
import de.metas.ui.web.window.datatypes.DocumentIdsSelection;
import de.metas.util.Services;
import lombok.NonNull;

public class WEBUI_PP_Order_PrintLabel
extends WEBUI_PP_Order_Template
implements IProcessPrecondition
public class WEBUI_PP_Order_PrintLabel extends WEBUI_PP_Order_Template implements IProcessPrecondition
{
final private static AdProcessId LabelPdf_AD_Process_ID = AdProcessId.ofRepoId(584768);
protected static final AdMessageKey MSG_MustBe_TopLevel_HU = AdMessageKey.of("WEBUI_PP_Order_PrintLabel.MustBe_TopLevel_HU");
protected static final AdMessageKey MSG_MustBe_TopLevel_HU = AdMessageKey
.of("WEBUI_PP_Order_PrintLabel.MustBe_TopLevel_HU");

final private IADPInstanceDAO adPInstanceDAO = Services.get(IADPInstanceDAO.class);
final private IMsgBL msgBL = Services.get(IMsgBL.class);

@Override
protected ProcessPreconditionsResolution checkPreconditionsApplicable()
{
if (!getSelectedRowIds().isSingleDocumentId())
{
return ProcessPreconditionsResolution.rejectBecauseNotSingleSelection();
}

if (!getSingleSelectedRow().isTopLevelHU())
final Set<HuId> distinctHuIds = retrieveSelectedHuIds();
if (distinctHuIds.isEmpty())
{
return ProcessPreconditionsResolution.reject(msgBL.getTranslatableMsgText(MSG_MustBe_TopLevel_HU));
return ProcessPreconditionsResolution.rejectBecauseNoSelection();
}

return ProcessPreconditionsResolution.accept();
Expand All @@ -73,55 +77,77 @@ protected ProcessPreconditionsResolution checkPreconditionsApplicable()
protected String doIt()
{

// create selection
final Set<HuId> distinctHuIds = retrieveSelectedHuIds();
DB.createT_Selection(getPinstanceId(), distinctHuIds, ITrx.TRXNAME_None);

// print
final PPOrderLineRow row = getSingleSelectedRow();
final ReportResult label = printLabel(row);
final ReportResult label = printLabel();

// preview
getResult().setReportData(
label.getReportContent(),
buildFilename(row),
OutputType.PDF.getContentType());
getResult().setReportData(label.getReportContent(), buildFilename(), OutputType.PDF.getContentType());

return MSG_OK;

}

private ReportResult printLabel(@NonNull final PPOrderLineRow row)
private Set<HuId> retrieveSelectedHuIds()
{
final PInstanceRequest pinstanceRequest = createPInstanceRequest(row);
final DocumentIdsSelection selectedRowIds = getSelectedRowIds();

final ImmutableList<PPOrderLineRow> selectedRows = getView()
.streamByIds(selectedRowIds)
.collect(ImmutableList.toImmutableList());

final Set<HuId> huIds = new HashSet<HuId>();

for (final PPOrderLineRow row : selectedRows)
{
final PPOrderLineType type = row.getType();
if (type.isMainProduct())
{
final ImmutableList<PPOrderLineRow> includedRows = row.getIncludedRows();
includedRows.stream()
.filter(ppOrderLineRow -> ppOrderLineRow.getType().isHUOrHUStorage())
.map(PPOrderLineRow::getHuId)
.filter(Objects::nonNull)
.forEach(huIds::add);
}
else if (row.getHuId() != null && type.isHUOrHUStorage())
{
huIds.add(row.getHuId());
}
}

return huIds;
}

private ReportResult printLabel()
{
final PInstanceRequest pinstanceRequest = createPInstanceRequest();
final PInstanceId pinstanceId = adPInstanceDAO.createADPinstanceAndADPInstancePara(pinstanceRequest);

final ProcessInfo jasperProcessInfo = ProcessInfo.builder()
.setCtx(getCtx())
.setAD_Process_ID(LabelPdf_AD_Process_ID)
.setAD_PInstance(adPInstanceDAO.getById(pinstanceId))
.setReportLanguage(getProcessInfo().getReportLanguage())
.setJRDesiredOutputType(OutputType.PDF)
.build();
final ProcessInfo jasperProcessInfo = ProcessInfo.builder().setCtx(getCtx())
.setAD_Process_ID(LabelPdf_AD_Process_ID).setAD_PInstance(adPInstanceDAO.getById(pinstanceId))
.setReportLanguage(getProcessInfo().getReportLanguage()).setJRDesiredOutputType(OutputType.PDF).build();

final ReportsClient reportsClient = ReportsClient.get();
return reportsClient.report(jasperProcessInfo);
}

private static PInstanceRequest createPInstanceRequest(@NonNull final PPOrderLineRow row)
private PInstanceRequest createPInstanceRequest()
{
return PInstanceRequest.builder()
.processId(LabelPdf_AD_Process_ID)
.processParams(ImmutableList.of(
ProcessInfoParameter.of("RECORD_ID", row.getHuId())))
.build();

return PInstanceRequest.builder().processId(LabelPdf_AD_Process_ID)
.processParams(ImmutableList.of(ProcessInfoParameter.of("AD_PInstance_ID", getPinstanceId()))).build();
}

private static String buildFilename(@NonNull final PPOrderLineRow row)
private String buildFilename()
{
final String huValue = String.valueOf(row.getHuId().getRepoId());
final String product = row.getPackingInfo();
final String instance = String.valueOf(getPinstanceId().getRepoId());
final String title = getProcessInfo().getTitle();

return Joiner.on("_")
.skipNulls()
.join(huValue, product)
+ ".pdf";
return Joiner.on("_").skipNulls().join(instance, title) + ".pdf";
}

}
}

0 comments on commit a8c3495

Please sign in to comment.