/******************************************************************************
* Product: Adempiere ERP & CRM Smart Business Solution *
* Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. *
* This program is free software; you can redistribute it and/or modify it *
* under the terms version 2 of the GNU General Public License as published *
* by the Free Software Foundation. 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, write to the Free Software Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
* For the text or an alternative of this public license, you may reach us *
* ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA *
* or via info@compiere.org or http://www.compiere.org/license.html *
* Contributor: phib [ 1566335 ] Report View scrolling (Bug 1566328) *
* Teo Sarca [ 1619449 ] Minor typo problem *
*****************************************************************************/
package org.compiere.print;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Event;
import java.awt.GraphicsConfiguration;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowEvent;
import java.awt.event.WindowStateListener;
import java.io.File;
import java.io.IOException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Properties;
import java.util.logging.Level;
import javax.swing.AbstractAction;
import javax.swing.AbstractButton;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JSpinner;
import javax.swing.JToolBar;
import javax.swing.KeyStroke;
import javax.swing.SpinnerNumberModel;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.adempiere.pdf.Document;
import org.compiere.apps.ADialog;
import org.compiere.apps.AEnv;
import org.compiere.apps.AMenu;
import org.compiere.apps.AWindow;
import org.compiere.apps.AWindowListener;
import org.compiere.apps.AppsAction;
import org.compiere.apps.EMailDialog;
import org.compiere.apps.StatusBar;
import org.compiere.apps.WindowMenu;
import org.compiere.apps.search.Find;
import org.compiere.model.GridField;
import org.compiere.model.MArchive;
import org.compiere.model.MClient;
import org.compiere.model.MQuery;
import org.compiere.model.MRole;
import org.compiere.model.MUser;
import org.compiere.model.PrintInfo;
import org.compiere.model.X_C_Invoice;
import org.compiere.swing.CButton;
import org.compiere.swing.CCheckBox;
import org.compiere.swing.CComboBox;
import org.compiere.swing.CFrame;
import org.compiere.swing.CLabel;
import org.compiere.swing.CMenuItem;
import org.compiere.swing.CPanel;
import org.compiere.util.CLogMgt;
import org.compiere.util.CLogger;
import org.compiere.util.DB;
import org.compiere.util.Env;
import org.compiere.util.ExtensionFileFilter;
import org.compiere.util.KeyNamePair;
import org.compiere.util.Language;
import org.compiere.util.Login;
import org.compiere.util.Msg;
import org.compiere.util.NamePair;
import org.compiere.util.ValueNamePair;
import org.omidp.util.LocaleUtil;
/**
* Print View Frame
*
* @author Jorg Janke
* @version $Id: Viewer.java,v 1.2 2006/07/30 00:51:28 jjanke Exp $
* globalqss: integrate phib contribution from
* http://sourceforge.net/tracker/index.php?func=detail&aid=1566335&group_id=176962&atid=879334
* globalqss: integrate Teo Sarca bug fixing
* Colin Rooney 2007/03/20 RFE#1670185 & BUG#1684142
* Extend security to Info queries
*
* @author Teo Sarca, www.arhipac.ro
* <li>FR [ 1762466 ] Add "Window" menu to report viewer.
* <li>FR [ 1779403 ] Report Viewer: add PgUp and PgDown key handlers
* <li>BF [ 1836908 ] Report customize NPE when no window access
* <li>FR [ 1894640 ] Report Engine: Excel Export support
* <li>FR [ 2539927 ] Display Zoom combobox
* https://sourceforge.net/tracker/?func=detail&atid=879335&aid=2539927&group_id=176962
* @author victor.perez@e-evolution.com
* <li>FR [ 1966328 ] New Window Info to MRP and CRP into View http://sourceforge.net/tracker/index.php?func=detail&aid=1966328&group_id=176962&atid=879335
* <li>FR [ 2011569 ] Implementing new Summary flag in Report View http://sourceforge.net/tracker/index.php?func=detail&aid=2011569&group_id=176962&atid=879335
*
*/
public class Viewer extends CFrame
implements ActionListener, ChangeListener, WindowStateListener
{
/**
*
*/
private static final long serialVersionUID = 7306392362119021781L;
/**
* @deprecated
* Viewer Constructor
* @param re report engine
*/
public Viewer (ReportEngine re)
{
this(null, re);
}
/**
* Viewer Constructor
* @param gc
* @param re report engine
*/
public Viewer (GraphicsConfiguration gc, ReportEngine re)
{
super(gc);
log.info("");
m_WindowNo = Env.createWindowNo(this);
m_reportEngine = re;
m_AD_Table_ID = re.getPrintFormat().getAD_Table_ID();
if (!MRole.getDefault().isCanReport(m_AD_Table_ID))
{
ADialog.error(m_WindowNo, this, "AccessCannotReport", m_reportEngine.getName());
this.dispose();
}
m_isCanExport = MRole.getDefault().isCanExport(m_AD_Table_ID);
try
{
m_viewPanel = re.getView();
m_ctx = m_reportEngine.getCtx();
jbInit();
dynInit();
if (!m_viewPanel.isArchivable())
log.warning("Cannot archive Document");
AEnv.showCenterScreen(this);
}
catch(Exception e)
{
log.log(Level.SEVERE, "", e);
ADialog.error(m_WindowNo, this, "LoadError", e.getLocalizedMessage());
this.dispose();
}
} // Viewer
/** Window No */
private int m_WindowNo;
/** Print Context */
private Properties m_ctx;
/** Page No */
private int m_pageNo = 1;
/** Max Page Number */
private int m_pageMax = 1;
/** View Pane */
private View m_viewPanel;
/** Setting Values */
private boolean m_setting = false;
/** Report Engine */
private ReportEngine m_reportEngine;
/** Drill Down/Across */
private boolean m_drillDown = true;
/** Table ID */
private int m_AD_Table_ID = 0;
private boolean m_isCanExport;
private MQuery m_ddQ = null;
private MQuery m_daQ = null;
private CMenuItem m_ddM = null;
private CMenuItem m_daM = null;
/** Logger */
private static CLogger log = CLogger.getCLogger(Viewer.class);
//
private CPanel northPanel = new CPanel();
private JScrollPane centerScrollPane = new JScrollPane();
private StatusBar statusBar = new StatusBar(false);
private JMenuBar menuBar = new JMenuBar();
private JToolBar toolBar = new JToolBar();
private CButton bPrint = new CButton();
private CButton bSendMail = new CButton();
private CButton bPageSetup = new CButton();
private CButton bArchive = new CButton();
private BorderLayout northLayout = new BorderLayout();
private CButton bCustomize = new CButton();
private CButton bEnd = new CButton();
private CButton bFind = new CButton();
private CButton bExport = new CButton();
private CComboBox comboReport = new CComboBox();
private CButton bPrevious = new CButton();
private CButton bNext = new CButton();
private SpinnerNumberModel spinnerModel = new SpinnerNumberModel(1,1,100,1);
private JSpinner spinner = new JSpinner(spinnerModel);
private CLabel labelDrill = new CLabel();
private CComboBox comboDrill = new CComboBox();
//FR 201156
private CCheckBox summary = new CCheckBox();
private CComboBox comboZoom = new CComboBox(View.ZOOM_OPTIONS);
/**
* Static Layout
* @throws Exception
*/
private void jbInit() throws Exception
{
this.setIconImage(Env.getImage("mReport.gif"));
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
//
northPanel.setLayout(northLayout);
this.getContentPane().add(northPanel, BorderLayout.NORTH);
northPanel.add(toolBar, BorderLayout.EAST);
this.getContentPane().add(centerScrollPane, BorderLayout.CENTER);
centerScrollPane.getViewport().add(m_viewPanel, null);
// pb add: set scrolling with scrollbar buttons to move by 20 pixels
// each press
centerScrollPane.getVerticalScrollBar().setUnitIncrement(20);
centerScrollPane.getHorizontalScrollBar().setUnitIncrement(20);
// end pb
this.getContentPane().add(statusBar, BorderLayout.SOUTH);
//omid
LocaleUtil.applyComponentOrientation(menuBar, toolBar);
// ToolBar
this.setJMenuBar(menuBar);
// Page Control
toolBar.add(bPrevious);
toolBar.add(spinner);
spinner.setToolTipText(Msg.getMsg(m_ctx, "GoToPage"));
toolBar.add(bNext);
// Add PgUp and PgDown key handlers - teo_sarca FR [ 1779403 ]
m_viewPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
.put(KeyStroke.getKeyStroke(KeyEvent.VK_PAGE_UP, 0), "PAGE_UP");
m_viewPanel.getActionMap().put("PAGE_UP", new AbstractAction() {
private static final long serialVersionUID = -6439939910196779649L;
public void actionPerformed(ActionEvent e) {
setPage(m_pageNo-1);
}
});
//
m_viewPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
.put(KeyStroke.getKeyStroke(KeyEvent.VK_PAGE_DOWN, 0), "PAGE_DOWN");
m_viewPanel.getActionMap().put("PAGE_DOWN", new AbstractAction() {
private static final long serialVersionUID = -4468272400181368278L;
public void actionPerformed(ActionEvent e) {
setPage(m_pageNo+1);
}
});
// Zoom Level
toolBar.addSeparator();
toolBar.add(comboZoom, null);
comboZoom.setToolTipText(Msg.getMsg(m_ctx, "Zoom"));
// Drill
toolBar.addSeparator();
labelDrill.setText(Msg.getMsg(m_ctx, "Drill") + ": ");
toolBar.add(labelDrill);
toolBar.add(comboDrill);
comboDrill.setToolTipText(Msg.getMsg(m_ctx, "Drill"));
// Format, Customize, Find
toolBar.addSeparator();
toolBar.add(comboReport);
comboReport.setToolTipText(Msg.translate(m_ctx, "AD_PrintFormat_ID"));
//FR 201156
toolBar.add(summary);
summary.setText(Msg.getMsg(m_ctx, "Summary"));
toolBar.add(bCustomize);
bCustomize.setToolTipText(Msg.getMsg(m_ctx, "PrintCustomize"));
toolBar.add(bFind);
bFind.setToolTipText(Msg.getMsg(m_ctx, "Find"));
toolBar.addSeparator();
// Print/Export
toolBar.add(bPrint);
toolBar.addSeparator();
toolBar.add(bPageSetup);
bPageSetup.setToolTipText(Msg.getMsg(m_ctx, "PageSetup"));
toolBar.add(bSendMail);
toolBar.add(bArchive);
if (m_isCanExport)
{
bExport.setToolTipText(Msg.getMsg(m_ctx, "Export"));
toolBar.add(bExport);
}
// End
toolBar.addSeparator();
toolBar.add(bEnd, null);
bEnd.setToolTipText(Msg.getMsg(m_ctx, "End"));
} // jbInit
/**
* Dynamic Init
*/
private void dynInit()
{
createMenu();
comboZoom.setSelectedIndex(m_viewPanel.getZoomLevel());
comboZoom.addActionListener(this);
// Change Listener to set Page no
//pb comment this out so that scrolling works normally
//centerScrollPane.getViewport().addChangeListener(this);
// end pb
//FR 201156
summary.addActionListener(this);
// Max Page
m_pageMax = m_viewPanel.getPageCount();
spinnerModel.setMaximum(new Integer(m_pageMax));
spinner.addChangeListener(this);
fillComboReport(m_reportEngine.getPrintFormat().get_ID());
// View Panel Mouse Listener
m_viewPanel.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
if (SwingUtilities.isRightMouseButton(e))
mouse_clicked(e,true);
else if (e.getClickCount() > 1)
mouse_clicked(e,false);
}
});
// fill Drill Options (Name, TableName)
comboDrill.addItem(new ValueNamePair (null,""));
String sql = "SELECT t.AD_Table_ID, t.TableName, e.PrintName, NULLIF(e.PO_PrintName,e.PrintName) "
+ "FROM AD_Column c "
+ " INNER JOIN AD_Column used ON (c.ColumnName=used.ColumnName)"
+ " INNER JOIN AD_Table t ON (used.AD_Table_ID=t.AD_Table_ID AND t.IsView='N' AND t.AD_Table_ID <> c.AD_Table_ID)"
+ " INNER JOIN AD_Column cKey ON (t.AD_Table_ID=cKey.AD_Table_ID AND cKey.IsKey='Y')"
+ " INNER JOIN AD_Element e ON (cKey.ColumnName=e.ColumnName) "
+ "WHERE c.AD_Table_ID=? AND c.IsKey='Y' "
+ "ORDER BY 3";
boolean trl = !Env.isBaseLanguage(Env.getCtx(), "AD_Element");
if (trl)
sql = "SELECT t.AD_Table_ID, t.TableName, et.PrintName, NULLIF(et.PO_PrintName,et.PrintName) "
+ "FROM AD_Column c"
+ " INNER JOIN AD_Column used ON (c.ColumnName=used.ColumnName)"
+ " INNER JOIN AD_Table t ON (used.AD_Table_ID=t.AD_Table_ID AND t.IsView='N' AND t.AD_Table_ID <> c.AD_Table_ID)"
+ " INNER JOIN AD_Column cKey ON (t.AD_Table_ID=cKey.AD_Table_ID AND cKey.IsKey='Y')"
+ " INNER JOIN AD_Element e ON (cKey.ColumnName=e.ColumnName)"
+ " INNER JOIN AD_Element_Trl et ON (e.AD_Element_ID=et.AD_Element_ID) "
+ "WHERE c.AD_Table_ID=? AND c.IsKey='Y'"
+ " AND et.AD_Language=? "
+ "ORDER BY 3";
try
{
PreparedStatement pstmt = DB.prepareStatement(sql, null);
pstmt.setInt(1, m_reportEngine.getPrintFormat().getAD_Table_ID());
if (trl)
pstmt.setString(2, Env.getAD_Language(Env.getCtx()));
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
String tableName = rs.getString(2);
String name = rs.getString(3);
String poName = rs.getString(4);
if (poName != null)
name += "/" + poName;
comboDrill.addItem(new ValueNamePair (tableName, name));
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
log.log(Level.SEVERE, sql, e);
}
if (comboDrill.getItemCount() == 1)
{
labelDrill.setVisible(false);
comboDrill.setVisible(false);
}
else
comboDrill.addActionListener(this);
revalidate();
} // dynInit
/**
* Fill ComboBox comboReport (report options)
* @param AD_PrintFormat_ID item to be selected
*/
private void fillComboReport(int AD_PrintFormat_ID)
{
comboReport.removeActionListener(this);
comboReport.removeAllItems();
KeyNamePair selectValue = null;
// fill Report Options
String sql = MRole.getDefault().addAccessSQL(
"SELECT AD_PrintFormat_ID, Name, Description "
+ "FROM AD_PrintFormat "
+ "WHERE AD_Table_ID=? "
//Added Lines by Armen
+ "AND IsActive='Y' "
//End of Added Lines
+ "ORDER BY Name",
"AD_PrintFormat", MRole.SQL_NOTQUALIFIED, MRole.SQL_RO);
int AD_Table_ID = m_reportEngine.getPrintFormat().getAD_Table_ID();
try
{
PreparedStatement pstmt = DB.prepareStatement(sql, null);
pstmt.setInt(1, AD_Table_ID);
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
KeyNamePair pp = new KeyNamePair(rs.getInt(1), rs.getString(2));
comboReport.addItem(pp);
if (rs.getInt(1) == AD_PrintFormat_ID)
selectValue = pp;
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
log.log(Level.SEVERE, sql, e);
}
StringBuffer sb = new StringBuffer("** ").append(Msg.getMsg(m_ctx, "NewReport")).append(" **");
KeyNamePair pp = new KeyNamePair(-1, sb.toString());
comboReport.addItem(pp);
if (selectValue != null)
comboReport.setSelectedItem(selectValue);
comboReport.addActionListener(this);
} // fillComboReport
/**
* Revalidate settings after change of environment
*/
private void revalidate()
{
m_pageMax = m_viewPanel.getPageCount();
spinnerModel.setMaximum(new Integer(m_pageMax));
// scroll area (page size dependent)
centerScrollPane.setPreferredSize(new Dimension
(m_viewPanel.getPaperWidth()+30, m_viewPanel.getPaperHeight()+15));
centerScrollPane.getViewport().setViewSize(new Dimension
(m_viewPanel.getPaperWidth()+2*m_viewPanel.getMarginSize(true),
m_viewPanel.getPaperHeight()+2*m_viewPanel.getMarginSize(true)));
// Report Info
setTitle(Msg.getMsg(m_ctx, "Report") + ": " + m_reportEngine.getName() + " " + Env.getHeader(m_ctx, 0));
StringBuffer sb = new StringBuffer ();
sb.append(m_viewPanel.getPaper().toString(m_ctx))
.append(" - ").append(Msg.getMsg(m_ctx, "DataCols")).append("=")
.append(m_reportEngine.getColumnCount())
.append(", ").append(Msg.getMsg(m_ctx, "DataRows")).append("=")
.append(m_reportEngine.getRowCount());
statusBar.setStatusLine(sb.toString());
//
setPage(m_pageNo);
} // revalidate
/**
* Create Menu
*/
private void createMenu()
{
// File
JMenu mFile = AEnv.getMenu("File");
menuBar.add(mFile);
AEnv.addMenuItem("PrintScreen", null, KeyStroke.getKeyStroke(KeyEvent.VK_PRINTSCREEN, 0), mFile, this);
AEnv.addMenuItem("ScreenShot", null, KeyStroke.getKeyStroke(KeyEvent.VK_PRINTSCREEN, Event.SHIFT_MASK), mFile, this);
AEnv.addMenuItem("Report", null, KeyStroke.getKeyStroke(KeyEvent.VK_P, Event.ALT_MASK), mFile, this);
mFile.addSeparator();
AEnv.addMenuItem("PrintCustomize", "Preference", null, mFile, this);
AEnv.addMenuItem("Translate", null, null, mFile, this);
AEnv.addMenuItem("Find", null, KeyStroke.getKeyStroke(KeyEvent.VK_F, Event.CTRL_MASK), mFile, this);
mFile.addSeparator();
AEnv.addMenuItem("PageSetup", null, null, mFile, this);
AEnv.addMenuItem("Print", null, KeyStroke.getKeyStroke(KeyEvent.VK_P, Event.CTRL_MASK), mFile, this);
if (m_isCanExport)
AEnv.addMenuItem("Export", null, null, mFile, this);
mFile.addSeparator();
AEnv.addMenuItem("End", null, KeyStroke.getKeyStroke(KeyEvent.VK_X, Event.ALT_MASK), mFile, this);
AEnv.addMenuItem("Logout", null, KeyStroke.getKeyStroke(KeyEvent.VK_L, Event.SHIFT_MASK+Event.ALT_MASK), mFile, this);
AEnv.addMenuItem("Exit", null, KeyStroke.getKeyStroke(KeyEvent.VK_X, Event.SHIFT_MASK+Event.ALT_MASK), mFile, this);
// View
JMenu mView = AEnv.getMenu("View");
menuBar.add(mView);
if (MRole.getDefault().isAllow_Info_Product())
{
AEnv.addMenuItem("InfoProduct", null, KeyStroke.getKeyStroke(KeyEvent.VK_I, Event.ALT_MASK), mView, this);
}
if (MRole.getDefault().isAllow_Info_BPartner())
{
AEnv.addMenuItem("InfoBPartner", null, KeyStroke.getKeyStroke(KeyEvent.VK_I, Event.ALT_MASK+Event.CTRL_MASK), mView, this);
}
if (MRole.getDefault().isShowAcct() && MRole.getDefault().isAllow_Info_Account())
{
AEnv.addMenuItem("InfoAccount", null, KeyStroke.getKeyStroke(KeyEvent.VK_I, Event.ALT_MASK+Event.CTRL_MASK), mView, this);
}
if (MRole.getDefault().isAllow_Info_Schedule())
{
AEnv.addMenuItem("InfoSchedule", null, null, mView, this);
}
//FR [ 1966328 ]
if (MRole.getDefault().isAllow_Info_MRP())
{
AEnv.addMenuItem("InfoMRP", "Info", null, mView, this);
}
if (MRole.getDefault().isAllow_Info_CRP())
{
AEnv.addMenuItem("InfoCRP", "Info", null, mView, this);
}
mView.addSeparator();
if (MRole.getDefault().isAllow_Info_Order())
{
AEnv.addMenuItem("InfoOrder", "Info", null, mView, this);
}
if (MRole.getDefault().isAllow_Info_Invoice())
{
AEnv.addMenuItem("InfoInvoice", "Info", null, mView, this);
}
if (MRole.getDefault().isAllow_Info_InOut())
{
AEnv.addMenuItem("InfoInOut", "Info", null, mView, this);
}
if (MRole.getDefault().isAllow_Info_Payment())
{
AEnv.addMenuItem("InfoPayment", "Info", null, mView, this);
}
if (MRole.getDefault().isAllow_Info_CashJournal())
{
AEnv.addMenuItem("InfoCashLine", "Info", null, mView, this);
}
if (MRole.getDefault().isAllow_Info_Resource())
{
AEnv.addMenuItem("InfoAssignment", "Info", null, mView, this);
}
if (MRole.getDefault().isAllow_Info_Asset())
{
AEnv.addMenuItem("InfoAsset", "Info", null, mView, this);
}
// Go
JMenu mGo = AEnv.getMenu("Go");
menuBar.add(mGo);
AEnv.addMenuItem("First", "First", KeyStroke.getKeyStroke(KeyEvent.VK_PAGE_UP, Event.ALT_MASK), mGo, this);
AEnv.addMenuItem("PreviousPage", "Previous", KeyStroke.getKeyStroke(KeyEvent.VK_UP, Event.ALT_MASK), mGo, this);
AEnv.addMenuItem("NextPage", "Next", KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, Event.ALT_MASK), mGo, this);
AEnv.addMenuItem("Last", "Last", KeyStroke.getKeyStroke(KeyEvent.VK_PAGE_DOWN, Event.ALT_MASK), mGo, this);
// Tools
JMenu mTools = AEnv.getMenu("Tools");
menuBar.add(mTools);
AEnv.addMenuItem("Calculator", null, null, mTools, this);
AEnv.addMenuItem("Calendar", null, null, mTools, this);
MUser user = MUser.get(Env.getCtx());
if (user.isAdministrator())
AEnv.addMenuItem("Editor", null, null, mTools, this);
AEnv.addMenuItem("Script", null, null, mTools, this);
mTools.addSeparator();
AEnv.addMenuItem("Preference", null, null, mTools, this);
// Window
AMenu aMenu = (AMenu)Env.getWindow(0);
JMenu mWindow = new WindowMenu(aMenu.getWindowManager(), this);
menuBar.add(mWindow);
// Help
JMenu mHelp = AEnv.getMenu("Help");
menuBar.add(mHelp);
AEnv.addMenuItem("Online", null, null, mHelp, this);
AEnv.addMenuItem("SendMail", null, null, mHelp, this);
AEnv.addMenuItem("About", null, null, mHelp, this);
// ---- ToolBar ----
//
setButton(bPrint, "Print", "Print");
setButton(bSendMail, "SendMail", "SendMail");
setButton(bPageSetup, "PageSetup", "PageSetup");
setButton(bArchive, "Archive", "Archive");
if (m_isCanExport)
setButton(bExport, "Export", "Export");
//
setButton(bNext, "NextPage", "Next");
setButton(bPrevious, "PreviousPage", "Previous");
//
setButton(bFind, "Find", "Find");
setButton(bCustomize, "PrintCustomize", "Preference");
//
setButton(bEnd, "End", "End");
} // createMenu
/**
* Set Button
* @param button button
* @param cmd command
* @param file fine mame
*/
private void setButton (AbstractButton button, String cmd, String file)
{
String text = Msg.getMsg(m_ctx, cmd);
button.setToolTipText(text);
button.setActionCommand(cmd);
//
ImageIcon ii24 = Env.getImageIcon(file+"24.gif");
if (ii24 != null)
button.setIcon(ii24);
button.setMargin(AppsAction.BUTTON_INSETS);
button.setPreferredSize(AppsAction.BUTTON_SIZE);
button.addActionListener(this);
} // setButton
/**
* Dispose
*/
public void dispose()
{
Env.clearWinContext(m_WindowNo);
m_reportEngine = null;
m_viewPanel = null;
m_ctx = null;
super.dispose();
} // dispose
/**************************************************************************
* Action Listener
* @param e event
*/
public void actionPerformed (ActionEvent e)
{
if (m_setting)
return;
String cmd = e.getActionCommand();
log.config(cmd);
this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
//
if (e.getSource() == comboZoom)
cmd_zoom();
else if (e.getSource() == comboReport)
cmd_report();
else if (e.getSource() == comboDrill)
cmd_drill();
else if (e.getSource() == summary) //FR 201156
{
m_reportEngine.setSummary(summary.isSelected());
cmd_report();
}
else if (cmd.equals("First"))
setPage(1);
else if (cmd.equals("PreviousPage") || cmd.equals("Previous"))
setPage(m_pageNo-1);
else if (cmd.equals("NextPage") || cmd.equals("Next"))
setPage(m_pageNo+1);
else if (cmd.equals("Last"))
setPage(m_pageMax);
else if (cmd.equals("Find"))
cmd_find();
else if (cmd.equals("Export"))
cmd_export();
else if (cmd.equals("Print"))
cmd_print();
else if (cmd.equals("SendMail"))
cmd_sendMail();
else if (cmd.equals("Archive"))
cmd_archive();
else if (cmd.equals("PrintCustomize"))
cmd_customize();
else if (cmd.equals("PageSetup"))
cmd_pageSetup();
else if (cmd.equals("Translate"))
cmd_translate();
else if (cmd.equals("End"))
dispose();
//
else if (e.getSource() == m_ddM)
cmd_window(m_ddQ);
else if (e.getSource() == m_daM)
cmd_window(m_daQ);
//
else if (!AEnv.actionPerformed(e.getActionCommand(), m_WindowNo, this))
log.log(Level.SEVERE, "unknown action=" + e.getActionCommand());
//
this.setCursor(Cursor.getDefaultCursor());
} // actionPerformed
/**
* Change Listener (spinner, viewpoint)
* @param e event
*/
public void stateChanged (ChangeEvent e)
{
if (m_setting)
return;
// log.config( "Viewer.stateChanged", e);
m_setting = true;
int newPage = 0;
if (e.getSource() == spinner)
{
newPage = ((Integer)spinnerModel.getValue()).intValue();
}
// pb with the viewport change listener disabled the following is
// superfluous and should be removed
else // Viewpoint
{
Point p = centerScrollPane.getViewport().getViewPosition();
newPage = Math.round(m_viewPanel.getPageNoAt(p));
}
setPage(newPage);
m_setting = false;
} // stateChanged
/**
* Set Page No
* @param page page no
*/
private void setPage (int page)
{
m_setting = true;
m_pageNo = page;
if (m_pageNo < 1)
m_pageNo = 1;
if (page > m_pageMax)
m_pageNo = m_pageMax;
bPrevious.setEnabled (m_pageNo != 1);
bNext.setEnabled (m_pageNo != m_pageMax);
//
Rectangle pageRectangle = m_viewPanel.getRectangleOfPage(m_pageNo);
pageRectangle.x -= m_viewPanel.getMarginSize(true);
pageRectangle.y -= m_viewPanel.getMarginSize(true);
centerScrollPane.getViewport().setViewPosition(pageRectangle.getLocation());
// System.out.println("scrollTo " + pageRectangle);
// Set Page
spinnerModel.setValue(new Integer(m_pageNo));
StringBuffer sb = new StringBuffer (Msg.getMsg(m_ctx, "Page"))
.append(" ").append(m_pageNo)
.append(m_viewPanel.getPageInfo(m_pageNo))
.append(" ").append(Msg.getMsg(m_ctx, "of")).append(" ")
.append(m_pageMax)
.append(m_viewPanel.getPageInfoMax());
statusBar.setStatusDB(sb.toString());
m_setting = false;
} // setPage
/**************************************************************************
* (Re)Set Drill Accross Cursor
*/
private void cmd_drill()
{
m_drillDown = comboDrill.getSelectedIndex() < 1; // -1 or 0
if (m_drillDown)
setCursor(Cursor.getDefaultCursor());
else
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
} // cmd_drill
/**
* Mouse clicked
* @param e event
* @param rightClick true if right click
*/
private void mouse_clicked (MouseEvent e, boolean rightClick)
{
Point point = e.getPoint();
log.info("Right=" + rightClick + " - " + point.toString());
if (rightClick)
{
m_ddQ = m_viewPanel.getDrillDown(point);
m_daQ = m_viewPanel.getDrillAcross(point);
m_ddM = null;
m_daM = null;
if (m_ddQ == null && m_daQ == null)
return;
// Create Menu
JPopupMenu pop = new JPopupMenu();
Icon wi = Env.getImageIcon("mWindow.gif");
if (m_ddQ != null)
{
m_ddM = new CMenuItem(m_ddQ.getDisplayName(Env.getCtx()), wi);
m_ddM.setToolTipText(m_ddQ.toString());
m_ddM.addActionListener(this);
pop.add(m_ddM);
}
if (m_daQ != null)
{
m_daM = new CMenuItem(m_daQ.getDisplayName(Env.getCtx()), wi);
m_daM.setToolTipText(m_daQ.toString());
m_daM.addActionListener(this);
pop.add(m_daM);
}
Point pp = e.getPoint();
pop.show((Component)e.getSource(), pp.x, pp.y);
return;
}
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
if (m_drillDown)
{
MQuery query = m_viewPanel.getDrillDown(point);
if (query != null)
{
log.info("Drill Down: " + query.getWhereClause(true));
executeDrill(query);
}
}
else if (comboDrill.getSelectedItem() != null && comboDrill.getSelectedIndex() > 0)
{
MQuery query = m_viewPanel.getDrillAcross(point);
if (query != null)
{
NamePair pp = (NamePair)comboDrill.getSelectedItem();
query.setTableName(pp.getID());
log.info("Drill Accross: " + query.getWhereClause(true));
executeDrill(query);
}
}
cmd_drill(); // setCursor
} // mouse_clicked
/**
* Execute Drill to Query
* @param query query
*/
private void executeDrill (MQuery query)
{
int AD_Table_ID = AReport.getAD_Table_ID(query.getTableName());
if (!MRole.getDefault().isCanReport(AD_Table_ID))
{
ADialog.error(m_WindowNo, this, "AccessCannotReport", query.getTableName());
return;
}
if (AD_Table_ID != 0)
new AReport (AD_Table_ID, null, query);
else
log.warning("No Table found for " + query.getWhereClause(true));
} // executeDrill
/**
* Open Window
* @param query query
*/
private void cmd_window (MQuery query)
{
if (query == null)
return;
AEnv.zoom(query);
} // cmd_window
/**************************************************************************
* Print Report
*/
private void cmd_print()
{
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
m_reportEngine.getPrintInfo().setWithDialog(true);
m_reportEngine.print();
cmd_drill(); // setCursor
} // cmd_print
/**
* Send Mail
*/
private void cmd_sendMail()
{
String to = "";
MUser from = MUser.get(Env.getCtx(), Env.getAD_User_ID(Env.getCtx()));
String subject = m_reportEngine.getName();
String message = "";
File attachment = null;
try
{
attachment = File.createTempFile("mail", ".pdf");
m_reportEngine.getPDF(attachment);
}
catch (Exception e)
{
log.log(Level.SEVERE, "", e);
}
new EMailDialog (this,
Msg.getMsg(Env.getCtx(), "SendMail"),
from, to, subject, message, attachment);
} // cmd_sendMail
/**
* Archive Report directly
*/
private void cmd_archive ()
{
boolean success = false;
byte[] data = Document.getPDFAsArray(m_reportEngine.getLayout().getPageable(false)); // No Copy
if (data != null)
{
MArchive archive = new MArchive (Env.getCtx(), m_reportEngine.getPrintInfo(), null);
archive.setBinaryData(data);
success = archive.save();
}
if (success)
ADialog.info(m_WindowNo, this, "Archived");
else
ADialog.error(m_WindowNo, this, "ArchiveError");
} // cmd_archive
/**
* Print Setup Dialog
*/
private void cmd_pageSetup()
{
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
m_reportEngine.pageSetupDialog();
revalidate();
cmd_drill(); // setCursor
} // cmd_pageSetup
/**
* Export
*/
private void cmd_export()
{
log.config("");
if (!m_isCanExport)
{
ADialog.error(m_WindowNo, this, "AccessCannotExport", getTitle());
return;
}
//
JFileChooser chooser = new JFileChooser();
chooser.setDialogType(JFileChooser.SAVE_DIALOG);
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
chooser.setDialogTitle(Msg.getMsg(m_ctx, "Export") + ": " + getTitle());
//
chooser.addChoosableFileFilter(new ExtensionFileFilter("ps", Msg.getMsg(m_ctx, "FilePS")));
chooser.addChoosableFileFilter(new ExtensionFileFilter("xml", Msg.getMsg(m_ctx, "FileXML")));
chooser.addChoosableFileFilter(new ExtensionFileFilter("pdf", Msg.getMsg(m_ctx, "FilePDF")));
chooser.addChoosableFileFilter(new ExtensionFileFilter("html", Msg.getMsg(m_ctx, "FileHTML")));
chooser.addChoosableFileFilter(new ExtensionFileFilter("txt", Msg.getMsg(m_ctx, "FileTXT")));
chooser.addChoosableFileFilter(new ExtensionFileFilter("ssv", Msg.getMsg(m_ctx, "FileSSV")));
chooser.addChoosableFileFilter(new ExtensionFileFilter("csv", Msg.getMsg(m_ctx, "FileCSV")));
chooser.addChoosableFileFilter(new ExtensionFileFilter("xls", Msg.getMsg(m_ctx, "FileXLS")));
//
if (chooser.showSaveDialog(this) != JFileChooser.APPROVE_OPTION)
return;
// Create File
File outFile = ExtensionFileFilter.getFile(chooser.getSelectedFile(), chooser.getFileFilter());
try
{
outFile.createNewFile();
}
catch (IOException e)
{
log.log(Level.SEVERE, "", e);
ADialog.error(m_WindowNo, this, "FileCannotCreate", e.getLocalizedMessage());
return;
}
String ext = outFile.getPath();
// no extension
if (ext.lastIndexOf('.') == -1)
{
ADialog.error(m_WindowNo, this, "FileInvalidExtension");
return;
}
ext = ext.substring(ext.lastIndexOf('.')+1).toLowerCase();
log.config( "File=" + outFile.getPath() + "; Type=" + ext);
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
try {
if (ext.equals("pdf"))
m_reportEngine.createPDF(outFile);
else if (ext.equals("ps"))
m_reportEngine.createPS(outFile);
else if (ext.equals("xml"))
m_reportEngine.createXML(outFile);
else if (ext.equals("csv"))
m_reportEngine.createCSV(outFile, ',', m_reportEngine.getPrintFormat().getLanguage());
else if (ext.equals("ssv"))
m_reportEngine.createCSV(outFile, ';', m_reportEngine.getPrintFormat().getLanguage());
else if (ext.equals("txt"))
m_reportEngine.createCSV(outFile, '\t', m_reportEngine.getPrintFormat().getLanguage());
else if (ext.equals("html") || ext.equals("htm"))
m_reportEngine.createHTML(outFile, false, m_reportEngine.getPrintFormat().getLanguage());
else if (ext.equals("xls"))
m_reportEngine.createXLS(outFile, m_reportEngine.getPrintFormat().getLanguage());
else
ADialog.error(m_WindowNo, this, "FileInvalidExtension");
}
catch (Exception e) {
ADialog.error(m_WindowNo, this, "Error", e.getLocalizedMessage());
if (CLogMgt.isLevelFinest())
e.printStackTrace();
}
cmd_drill(); // setCursor
} // cmd_export
/**
* Report Combo - Start other Report or create new one
*/
private void cmd_report()
{
KeyNamePair pp = (KeyNamePair)comboReport.getSelectedItem();
if (pp == null)
return;
//
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
MPrintFormat pf = null;
int AD_PrintFormat_ID = pp.getKey();
// create new
if (AD_PrintFormat_ID == -1)
{
int AD_ReportView_ID = m_reportEngine.getPrintFormat().getAD_ReportView_ID();
if (AD_ReportView_ID != 0)
{
String name = m_reportEngine.getName();
int index = name.lastIndexOf('_');
if (index != -1)
name = name.substring(0,index);
pf = MPrintFormat.createFromReportView(m_ctx, AD_ReportView_ID, name);
}
else
{
int AD_Table_ID = m_reportEngine.getPrintFormat().getAD_Table_ID();
pf = MPrintFormat.createFromTable(m_ctx, AD_Table_ID);
}
if (pf != null)
fillComboReport(pf.get_ID());
else
return;
}
else
pf = MPrintFormat.get (Env.getCtx(), AD_PrintFormat_ID, true);
// Get Language from previous - thanks Gunther Hoppe
if (m_reportEngine.getPrintFormat() != null)
{
pf.setLanguage(m_reportEngine.getPrintFormat().getLanguage()); // needs to be re-set - otherwise viewer will be blank
pf.setTranslationLanguage(m_reportEngine.getPrintFormat().getLanguage());
}
m_reportEngine.setPrintFormat(pf);
revalidate();
cmd_drill(); // setCursor
} // cmd_report
/**
* Query Report
*/
private void cmd_find()
{
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
int AD_Table_ID = m_reportEngine.getPrintFormat().getAD_Table_ID();
String title = null;
String tableName = null;
// Get Find Tab Info
String sql = "SELECT t.AD_Tab_ID "
// ,w.Name, t.Name, w.IsDefault, t.SeqNo, ABS (tt.AD_Window_ID-t.AD_Window_ID)
+ "FROM AD_Tab t"
+ " INNER JOIN AD_Window w ON (t.AD_Window_ID=w.AD_Window_ID)"
+ " INNER JOIN AD_Table tt ON (t.AD_Table_ID=tt.AD_Table_ID) "
+ "WHERE tt.AD_Table_ID=? "
+ "ORDER BY w.IsDefault DESC, t.SeqNo, ABS (tt.AD_Window_ID-t.AD_Window_ID)";
int AD_Tab_ID = DB.getSQLValue(null, sql, AD_Table_ID);
// ASP
MClient client = MClient.get(Env.getCtx());
String ASPFilter = "";
if (client.isUseASP())
ASPFilter =
" AND ( AD_Tab_ID IN ( "
// Just ASP subscribed tabs for client "
+ " SELECT t.AD_Tab_ID "
+ " FROM ASP_Tab t, ASP_Window w, ASP_Level l, ASP_ClientLevel cl "
+ " WHERE w.ASP_Level_ID = l.ASP_Level_ID "
+ " AND cl.AD_Client_ID = " + client.getAD_Client_ID()
+ " AND cl.ASP_Level_ID = l.ASP_Level_ID "
+ " AND t.ASP_Window_ID = w.ASP_Window_ID "
+ " AND t.IsActive = 'Y' "
+ " AND w.IsActive = 'Y' "
+ " AND l.IsActive = 'Y' "
+ " AND cl.IsActive = 'Y' "
+ " AND t.ASP_Status = 'S') " // Show
+ " OR AD_Tab_ID IN ( "
// + show ASP exceptions for client
+ " SELECT AD_Tab_ID "
+ " FROM ASP_ClientException ce "
+ " WHERE ce.AD_Client_ID = " + client.getAD_Client_ID()
+ " AND ce.IsActive = 'Y' "
+ " AND ce.AD_Tab_ID IS NOT NULL "
+ " AND ce.AD_Field_ID IS NULL "
+ " AND ce.ASP_Status = 'S') " // Show
+ " ) "
+ " AND AD_Tab_ID NOT IN ( "
// minus hide ASP exceptions for client
+ " SELECT AD_Tab_ID "
+ " FROM ASP_ClientException ce "
+ " WHERE ce.AD_Client_ID = " + client.getAD_Client_ID()
+ " AND ce.IsActive = 'Y' "
+ " AND ce.AD_Tab_ID IS NOT NULL "
+ " AND ce.AD_Field_ID IS NULL "
+ " AND ce.ASP_Status = 'H')"; // Hide
//
sql = "SELECT Name, TableName FROM AD_Tab_v WHERE AD_Tab_ID=? " + ASPFilter;
if (!Env.isBaseLanguage(Env.getCtx(), "AD_Tab"))
sql = "SELECT Name, TableName FROM AD_Tab_vt WHERE AD_Tab_ID=?"
+ " AND AD_Language='" + Env.getAD_Language(Env.getCtx()) + "' " + ASPFilter;
try
{
PreparedStatement pstmt = DB.prepareStatement(sql, null);
pstmt.setInt(1, AD_Tab_ID);
ResultSet rs = pstmt.executeQuery();
//
if (rs.next())
{
title = rs.getString(1);
tableName = rs.getString(2);
}
//
rs.close();
pstmt.close();
}
catch (SQLException e)
{
log.log(Level.SEVERE, sql, e);
}
GridField[] findFields = null;
if (tableName != null)
findFields = GridField.createFields(m_ctx, m_WindowNo, 0, AD_Tab_ID);
if (findFields == null) // No Tab for Table exists
bFind.setEnabled(false);
else
{
Find find = new Find (this, m_reportEngine.getWindowNo(), title,
AD_Tab_ID, AD_Table_ID, tableName, m_reportEngine.getWhereExtended(), findFields, 1);
m_reportEngine.setQuery(find.getQuery());
find.dispose();
find = null;
revalidate();
}
cmd_drill(); // setCursor
} // cmd_find
/**
* Call Customize
*/
private void cmd_customize()
{
AWindow win = new AWindow (getGraphicsConfiguration());
new AWindowListener (win, this); // forwards Window Events
int AD_Window_ID = 240; // hardcoded
int AD_PrintFormat_ID = m_reportEngine.getPrintFormat().get_ID();
boolean loadedOK = win.initWindow(AD_Window_ID, MQuery.getEqualQuery("AD_PrintFormat_ID", AD_PrintFormat_ID));
if (loadedOK)
{
AEnv.addToWindowManager(win);
AEnv.showCenterScreen(win);
}
// see windowStateChanged for applying change
} // cmd_customize
/**
* Window State Listener for Customize Window
* @param e event
*/
public void windowStateChanged (WindowEvent e)
{
// The Customize Window was closed
if (e.getID() == WindowEvent.WINDOW_CLOSED && m_reportEngine != null)
{
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
log.info("Re-read PrintFormat");
int AD_PrintFormat_ID = m_reportEngine.getPrintFormat().get_ID();
Language language = m_reportEngine.getPrintFormat().getLanguage();
MPrintFormat pf = MPrintFormat.get (Env.getCtx(), AD_PrintFormat_ID, true);
pf.setLanguage (language); // needs to be re-set - otherwise viewer will be blank
pf.setTranslationLanguage (language);
m_reportEngine.setPrintFormat(pf);
revalidate();
cmd_drill(); // setCursor
}
} // windowStateChanged
/**
* Set Zoom Level
*/
private void cmd_zoom()
{
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
m_viewPanel.setZoomLevel(comboZoom.getSelectedIndex());
revalidate();
cmd_drill(); // setCursor
} // cmd_zoom
/**
* Show Translation Dialog.
* Translate base table entry, will be copied to trl tables if not multi-lingual
*/
private void cmd_translate()
{
ArrayList<ValueNamePair> list = new ArrayList<ValueNamePair>();
ValueNamePair pp = null;
String sql = "SELECT Name, AD_Language FROM AD_Language WHERE IsSystemLanguage='Y' ORDER BY 1";
try
{
PreparedStatement pstmt = DB.prepareStatement(sql, null);
ResultSet rs = pstmt.executeQuery();
while (rs.next())
list.add(new ValueNamePair (rs.getString(2), rs.getString(1)));
rs.close();
pstmt.close();
}
catch (SQLException e)
{
log.log(Level.SEVERE, sql, e);
}
if (list.size() == 0)
{
ADialog.warn(m_WindowNo, this, "NoTranslation");
return;
}
// Dialog
String title = Msg.getMsg(Env.getCtx(), "PrintFormatTrl", true);
String message = Msg.getMsg(Env.getCtx(), "PrintFormatTrl", false);
int choice = JOptionPane.showOptionDialog
(this, message, title,
JOptionPane.OK_OPTION, JOptionPane.QUESTION_MESSAGE, null,
list.toArray(), null);
if (choice == JOptionPane.CLOSED_OPTION)
return;
//
pp = (ValueNamePair)list.get(choice);
String AD_Language = pp.getValue();
int AD_PrintFormat_ID = m_reportEngine.getPrintFormat().get_ID();
log.config(AD_Language + " - AD_PrintFormat_ID=" + AD_PrintFormat_ID);
StringBuffer sb = new StringBuffer();
// English
if (Language.isBaseLanguage (AD_Language))
{
sb.append("UPDATE AD_PrintFormatItem pfi "
+ "SET Name = (SELECT e.Name FROM AD_Element e, AD_Column c"
+ " WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=pfi.AD_Column_ID),"
+ "PrintName = (SELECT e.PrintName FROM AD_Element e, AD_Column c"
+ " WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=pfi.AD_Column_ID) "
+ "WHERE AD_PrintFormat_ID=").append(AD_PrintFormat_ID).append(
" AND EXISTS (SELECT * FROM AD_Element e, AD_Column c"
+ " WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=pfi.AD_Column_ID)");
}
else
{
AD_Language = "'" + AD_Language + "'";
sb.append("UPDATE AD_PrintFormatItem pfi "
+ "SET Name = (SELECT e.Name FROM AD_Element_Trl e, AD_Column c"
+ " WHERE e.AD_Language=").append(AD_Language).append(
" AND e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=pfi.AD_Column_ID), "
+ "PrintName = (SELECT e.PrintName FROM AD_Element_Trl e, AD_Column c"
+ " WHERE e.AD_Language=").append(AD_Language).append(
" AND e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=pfi.AD_Column_ID) "
+ "WHERE AD_PrintFormat_ID=").append(AD_PrintFormat_ID).append(
" AND EXISTS (SELECT * FROM AD_Element_Trl e, AD_Column c"
+ " WHERE e.AD_Language=").append(AD_Language).append(
" AND e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=pfi.AD_Column_ID)");
}
int count = DB.executeUpdate(sb.toString(), null);
log.config("Count=" + count);
//
m_reportEngine.setPrintFormat(MPrintFormat.get (Env.getCtx(), AD_PrintFormat_ID, true));
revalidate();
} // cmd_translate
/*************************************************************************/
/**
* Test
* @param args args
*/
static public void main (String[] args)
{
Login.initTest(true);
MQuery q = new MQuery("C_Invoice");
q.addRestriction("C_Invoice_ID", MQuery.EQUAL, new Integer(103));
// 102 = Invoice - 100 = Order
PrintInfo i = new PrintInfo("test", X_C_Invoice.Table_ID, 102, 0);
MPrintFormat f = MPrintFormat.get (Env.getCtx(), 102, false);
ReportEngine re = new ReportEngine(Env.getCtx(), f, q, i);
// MPrintFormat f = new MPrintFormat(Env.getCtx(), 101);
// ReportEngine re = new ReportEngine(f, null);
new Viewer(re);
} // main
} // Viewer