diff --git a/org.adempiere.base/src/org/compiere/model/SystemIDs.java b/org.adempiere.base/src/org/compiere/model/SystemIDs.java index a452122630..b0301875e0 100644 --- a/org.adempiere.base/src/org/compiere/model/SystemIDs.java +++ b/org.adempiere.base/src/org/compiere/model/SystemIDs.java @@ -104,10 +104,12 @@ public class SystemIDs public final static int PROCESS_RPT_C_PROJECT = 217; public final static int PROCESS_RPT_C_RFQRESPONSE = 276; public final static int PROCESS_RPT_C_DUNNING = 159; + public final static int PROCESS_RPT_DD_ORDER = 53044; public final static int PROCESS_RPT_FINREPORT = 202; public final static int PROCESS_RPT_FINSTATEMENT = 204; public final static int PROCESS_RPT_M_INVENTORY = 291; public final static int PROCESS_RPT_M_MOVEMENT = 290; + public final static int PROCESS_RPT_PP_ORDER = 53028; public final static int REFERENCE_DATATYPE_ACCOUNT = 25; public final static int REFERENCE_DATATYPE_AMOUNT = 12; diff --git a/org.adempiere.base/src/org/compiere/print/ReportEngine.java b/org.adempiere.base/src/org/compiere/print/ReportEngine.java index 6b1ae47d30..d5bdc3c856 100644 --- a/org.adempiere.base/src/org/compiere/print/ReportEngine.java +++ b/org.adempiere.base/src/org/compiere/print/ReportEngine.java @@ -2401,7 +2401,21 @@ queued-job-count = 0 (class javax.print.attribute.standard.QueuedJobCount) public void setIsReplaceTabContent(boolean m_isReplaceTabContent) { this.m_isReplaceTabContent = m_isReplaceTabContent; } - + + /** + * Get Report Engine Type from Table_ID + * @param tableID + * @return Report Engine Type + * -1 if Report Engine Type was not found + */ + public static int getReportEngineType(int tableID) { + for(int i = 0; i < DOC_TABLE_ID.length; i++) { + if(DOC_TABLE_ID[i] == tableID) + return i; + } + return -1; + } + /** * build css for table from mapCssInfo * @param doc diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/ProcessInfoDialog.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/ProcessInfoDialog.java index 712c203e17..53b547ef72 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/ProcessInfoDialog.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/ProcessInfoDialog.java @@ -14,16 +14,25 @@ package org.adempiere.webui.component; +import java.io.File; +import java.io.FileInputStream; import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.List; import org.adempiere.webui.ISupportMask; import org.adempiere.webui.LayoutUtils; +import org.adempiere.webui.apps.AEnv; import org.adempiere.webui.event.DialogEvents; import org.adempiere.webui.factory.ButtonFactory; +import org.adempiere.webui.session.SessionManager; import org.adempiere.webui.util.ZKUpdateUtil; +import org.adempiere.webui.window.SimplePDFViewer; +import org.compiere.print.ReportEngine; import org.compiere.process.ProcessInfo; import org.compiere.process.ProcessInfoLog; import org.compiere.process.ProcessInfoUtil; +import org.compiere.tools.FileUtil; import org.compiere.util.DisplayType; import org.compiere.util.Env; import org.compiere.util.Msg; @@ -33,6 +42,7 @@ import org.zkoss.zk.ui.Executions; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; +import org.zkoss.zk.ui.util.Clients; import org.zkoss.zul.Hbox; import org.zkoss.zul.Image; import org.zkoss.zul.Separator; @@ -50,10 +60,13 @@ public class ProcessInfoDialog extends Window implements EventListener { private static final long serialVersionUID = -1712025652050086903L; private static final String MESSAGE_PANEL_STYLE = "text-align:left; word-break: break-all; overflow: auto; max-height: 250pt; min-width: 230pt; max-width: 450pt;"; - + private Text lblMsg = new Text(); private Button btnOk = ButtonFactory.createNamedButton(ConfirmPanel.A_OK); + private Button btnPrint = ButtonFactory.createNamedButton(ConfirmPanel.A_PRINT); private Image img = new Image(); + private ProcessInfoLog[] m_logs; + public static final String INFORMATION = "~./zul/img/msgbox/info-btn.png"; public static final String ERROR = "~./zul/img/msgbox/info-btn.png"; @@ -113,6 +126,7 @@ public class ProcessInfoDialog extends Window implements EventListener { lblMsg.setValue(header); btnOk.addEventListener(Events.ON_CLICK, this); + btnPrint.addEventListener(Events.ON_CLICK, this); Panel pnlMessage = new Panel(); pnlMessage.setStyle(MESSAGE_PANEL_STYLE); @@ -142,6 +156,8 @@ public class ProcessInfoDialog extends Window implements EventListener { ZKUpdateUtil.setHeight(pnlButtons, "52px"); pnlButtons.setAlign("center"); pnlButtons.setPack("end"); + btnPrint.setVisible(false); + pnlButtons.appendChild(btnPrint); pnlButtons.appendChild(btnOk); Separator separator = new Separator(); @@ -166,7 +182,12 @@ public class ProcessInfoDialog extends Window implements EventListener { pnlMessage.appendChild(new Text(summary)); } } - + + this.m_logs = m_logs; + + if(isPrintable()) + btnPrint.setVisible(true); + if (m_logs != null && m_logs.length > 0){ separator = new Separator(); ZKUpdateUtil.setWidth(separator, "100%"); @@ -216,6 +237,63 @@ public class ProcessInfoDialog extends Window implements EventListener { if (event.getTarget() == btnOk) { this.detach(); } + if(event.getTarget() == btnPrint) { + Clients.showBusy(Msg.getMsg(Env.getCtx(), "Processing")); + Executions.schedule(this.getDesktop(), e -> onPrint(), new Event("onPrint")); + } + } + + /** + * On Print + */ + private void onPrint() { + + Clients.clearBusy(); + // Loop through all items + List pdfList = new ArrayList(); + for (int i = 0; i < m_logs.length; i++) + { + int recordID = m_logs[i].getRecord_ID(); + int reportEngineType = ReportEngine.getReportEngineType(m_logs[i].getAD_Table_ID()); + ReportEngine re = null; + + if((reportEngineType >= 0) && (recordID > 0)) { + re = ReportEngine.get (Env.getCtx(), reportEngineType, recordID); + pdfList.add(re.getPDF()); + } + } + if (pdfList.size() > 1) { + try { + File outFile = FileUtil.createTempFile(getTitle(), ".pdf"); + AEnv.mergePdf(pdfList, outFile); + + Window win = new SimplePDFViewer(getTitle(), new FileInputStream(outFile)); + SessionManager.getAppDesktop().showWindow(win, "center"); + } catch (Exception e) { + throw new RuntimeException(e.getLocalizedMessage(), e); + } + } else if (pdfList.size() > 0) { + try { + Window win = new SimplePDFViewer(getTitle(), new FileInputStream(pdfList.get(0))); + SessionManager.getAppDesktop().showWindow(win, "center"); + } catch (Exception e) + { + throw new RuntimeException(e.getLocalizedMessage(), e); + } + } + this.detach(); + } + + /** + * Is Printable + * @return boolean + */ + public boolean isPrintable() { + for(ProcessInfoLog log : m_logs) { + if (ReportEngine.getReportEngineType(log.getAD_Table_ID()) >= 0) + return true; + } + return false; } @Override