1 14 package org.compiere.print; 15 16 import java.sql.*; 17 import java.util.*; 18 19 import java.awt.*; 20 import java.awt.event.*; 21 import javax.swing.*; 22 23 import org.compiere.util.*; 24 import org.compiere.model.*; 25 import org.compiere.apps.*; 26 27 37 public class AReport implements ActionListener 38 { 39 46 public AReport (int AD_Table_ID, JComponent invoker, MQuery query) 47 { 48 Log.trace(Log.l3_Util, "AReport", "AD_Table_ID=" + AD_Table_ID + " " + query); 49 if (!MRole.getDefault().isCanReport(AD_Table_ID)) 50 { 51 ADialog.error(0, invoker, "AccessCannotReport", query.getTableName()); 52 return; 53 } 54 55 m_query = query; 56 57 getPrintFormats (AD_Table_ID, invoker); 59 } 61 62 private MQuery m_query; 63 64 private JPopupMenu m_popup = new JPopupMenu("MyMenu"); 65 66 private ArrayList m_list = new ArrayList(); 67 68 69 75 private void getPrintFormats (int AD_Table_ID, JComponent invoker) 76 { 77 int AD_Client_ID = Env.getContextAsInt(Env.getCtx(), "#AD_Client_ID"); 78 String sql = MRole.getDefault().addAccessSQL ( 80 "SELECT AD_PrintFormat_ID, Name, AD_Client_ID " 81 + "FROM AD_PrintFormat " 82 + "WHERE AD_Table_ID=? AND IsTableBased='Y' " 83 + "ORDER BY AD_Client_ID DESC", "AD_PrintFormat", MRole.SQL_NOTQUALIFIED, MRole.SQL_RO); 85 KeyNamePair pp = null; 86 try 87 { 88 PreparedStatement pstmt = DB.prepareStatement(sql); 89 pstmt.setInt(1, AD_Table_ID); 90 ResultSet rs = pstmt.executeQuery(); 91 while (rs.next()) 92 { 93 pp = new KeyNamePair (rs.getInt(1), rs.getString(2)); 94 if (rs.getInt(3) == AD_Client_ID) 95 { 96 m_list.add(pp); 97 m_popup.add(pp.toString()).addActionListener(this); 98 } 99 } 100 rs.close(); 101 pstmt.close(); 102 } 103 catch (SQLException e) 104 { 105 Log.error("AReport.getPrintFormats", e); 106 } 107 108 if (m_list.size() == 0) 110 { 111 if (pp == null) 112 createNewFormat (AD_Table_ID); else 114 copyFormat(pp.getKey(), AD_Client_ID); 115 } 116 else if (m_list.size() == 1 || invoker == null) 118 launchReport ((KeyNamePair)m_list.get(0)); 119 else 121 m_popup.show(invoker, 0, invoker.getHeight()); } 124 128 private void createNewFormat (int AD_Table_ID) 129 { 130 MPrintFormat pf = MPrintFormat.createFromTable(Env.getCtx(), AD_Table_ID); 131 launchReport (pf); 132 } 134 139 private void copyFormat (int AD_PrintFormat_ID, int To_Client_ID) 140 { 141 MPrintFormat pf = MPrintFormat.copyToClient(Env.getCtx(), AD_PrintFormat_ID, To_Client_ID); 142 launchReport (pf); 143 } 145 149 private void launchReport (KeyNamePair pp) 150 { 151 MPrintFormat pf = MPrintFormat.get(pp.getKey(), false); 152 launchReport (pf); 153 } 155 159 private void launchReport (MPrintFormat pf) 160 { 161 ReportEngine re = new ReportEngine (Env.getCtx(), pf, m_query); 162 new Viewer(re); 163 } 167 171 public void actionPerformed(ActionEvent e) 172 { 173 m_popup.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); 174 String cmd = e.getActionCommand(); 175 for (int i = 0; i < m_list.size(); i++) 176 { 177 KeyNamePair pp = (KeyNamePair)m_list.get(i); 178 if (cmd.equals(pp.getName())) 179 { 180 launchReport (pp); 181 return; 182 } 183 } 184 } 186 187 188 193 static public int getAD_Table_ID (String TableName) 194 { 195 int AD_Table_ID = 0; 196 String sql = "SELECT AD_Table_ID FROM AD_Table WHERE TableName=?"; 197 try 198 { 199 PreparedStatement pstmt = DB.prepareStatement(sql); 200 pstmt.setString(1, TableName); 201 ResultSet rs = pstmt.executeQuery(); 202 if (rs.next()) 203 AD_Table_ID = rs.getInt(1); 204 rs.close(); 205 pstmt.close(); 206 } 207 catch (SQLException e) 208 { 209 Log.error("AReport.getAD_Table_ID", e); 210 } 211 return AD_Table_ID; 212 } 214 } 216 | Popular Tags |