KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > compiere > print > ReportCtl


1 /******************************************************************************
2  * The contents of this file are subject to the Compiere License Version 1.1
3  * ("License"); You may not use this file except in compliance with the License
4  * You may obtain a copy of the License at http://www.compiere.org/license.html
5  * Software distributed under the License is distributed on an "AS IS" basis,
6  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
7  * the specific language governing rights and limitations under the License.
8  * The Original Code is Compiere ERP & CRM Business Solution
9  * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc.
10  * Portions created by Jorg Janke are Copyright (C) 1999-2002 Jorg Janke, parts
11  * created by ComPiere are Copyright (C) ComPiere, Inc.; All Rights Reserved.
12  * Contributor(s): ______________________________________.
13  *****************************************************************************/

14 package org.compiere.print;
15
16 import java.sql.*;
17
18 import org.compiere.apps.*;
19 import org.compiere.model.*;
20 import org.compiere.util.*;
21 import org.compiere.process.*;
22
23 /**
24  * Report Controller.
25  *
26  * @author Jorg Janke
27  * @version $Id: ReportCtl.java,v 1.23 2003/08/18 15:49:30 jjanke Exp $
28  */

29 public class ReportCtl
30 {
31     /**
32      * Constructor - prevent instance
33      */

34     private ReportCtl()
35     {
36     } // ReportCtrl
37

38     /**
39      * Create Report.
40      * Called from ProcessCtl.
41      * - Check special reports first, if not, create standard Report
42      *
43      * @param pi process info
44      * @param IsDirectPrint if true, prints directly - otherwise View
45      * @return true if created
46      */

47     static public boolean start (ProcessInfo pi, boolean IsDirectPrint)
48     {
49         Log.trace(Log.l2_Sub, "ReportCtl.start", pi);
50
51         /**
52          * Order Print
53          */

54         if (pi.getAD_Process_ID() == 110) // C_Order
55
return startDocumentPrint(ORDER, pi.getRecord_ID(), IsDirectPrint);
56         else if (pi.getAD_Process_ID() == 116) // C_Invoice
57
return startDocumentPrint(INVOICE, pi.getRecord_ID(), IsDirectPrint);
58         else if (pi.getAD_Process_ID() == 117) // M_InOut
59
return startDocumentPrint(SHIPMENT, pi.getRecord_ID(), IsDirectPrint);
60         else if (pi.getAD_Process_ID() == 217) // C_Project
61
return startDocumentPrint(PROJECT, pi.getRecord_ID(), IsDirectPrint);
62         /**
63         else if (pi.AD_Process_ID == 9999999) // PaySelection
64             return startDocumentPrint(CHECK, pi, IsDirectPrint);
65         else if (pi.AD_Process_ID == 9999999) // PaySelection
66             return startDocumentPrint(REMITTANCE, pi, IsDirectPrint);
67         else if (pi.AD_Process_ID == 9999999) // Dunning
68             return startDocumentPrint(DUNNING, pi, IsDirectPrint);
69         **/

70        else if (pi.getAD_Process_ID() == 202 // Financial Report
71
|| pi.getAD_Process_ID() == 204) // Financial Statement
72
return startFinReport (pi);
73         /********************
74          * Standard Report
75          *******************/

76         return startStandardReport (pi, IsDirectPrint);
77     } // create
78

79     /*************************************************************************/
80
81     /**
82      * Start Standard Report.
83      * - Get Table Info & submit
84      * @param pi Process Info
85      * @param IsDirectPrint if true, prints directly - otherwise View
86      * @return true if OK
87      */

88     static public boolean startStandardReport (ProcessInfo pi, boolean IsDirectPrint)
89     {
90         int AD_Client_ID = Env.getContextAsInt(Env.getCtx(), "#AD_Client_ID");
91         //
92
int AD_Table_ID = 0;
93         int AD_ReportView_ID = 0;
94         String JavaDoc TableName = null;
95         String JavaDoc whereClause = "";
96         int AD_PrintFormat_ID = 0;
97         int Client_ID = -1;
98
99         // Get AD_Table_ID and TableName
100
String JavaDoc sql = "SELECT rv.AD_ReportView_ID,rv.WhereClause,"
101             + " t.AD_Table_ID,t.TableName, pf.AD_PrintFormat_ID, pf.AD_Client_ID "
102             + "FROM AD_PInstance pi"
103             + " INNER JOIN AD_Process p ON (pi.AD_Process_ID=p.AD_Process_ID)"
104             + " INNER JOIN AD_ReportView rv ON (p.AD_ReportView_ID=rv.AD_ReportView_ID)"
105             + " INNER JOIN AD_Table t ON (rv.AD_Table_ID=t.AD_Table_ID)"
106             + " LEFT OUTER JOIN AD_PrintFormat pf ON (p.AD_ReportView_ID=pf.AD_ReportView_ID AND pf.AD_Client_ID IN (0,?)) "
107             + "WHERE pi.AD_PInstance_ID=?" // #2
108
+ "ORDER BY pf.AD_Client_ID DESC"; // own first
109
try
110         {
111             PreparedStatement pstmt = DB.prepareStatement(sql);
112             pstmt.setInt(1, AD_Client_ID);
113             pstmt.setInt(2, pi.getAD_PInstance_ID());
114             ResultSet rs = pstmt.executeQuery();
115             // Just get first
116
if (rs.next())
117             {
118                 AD_ReportView_ID = rs.getInt(1);
119                 whereClause = rs.getString(2);
120                 if (rs.wasNull())
121                     whereClause = "";
122                 //
123
AD_Table_ID = rs.getInt(3);
124                 TableName = rs.getString(4);
125                 AD_PrintFormat_ID = rs.getInt(5);
126                 Client_ID = rs.getInt(6);
127             }
128             rs.close();
129             pstmt.close();
130         }
131         catch (SQLException e1)
132         {
133             Log.error("ReportCtrl.startStandardReport", e1);
134         }
135
136         // Create Query from Parameters
137
MQuery query = getQuery (pi.getAD_PInstance_ID(), TableName);
138         // Add to static where clause from ReportView
139
if (whereClause.length() != 0)
140             query.addRestriction(whereClause);
141
142         // Get PrintFormat
143
MPrintFormat format = null;
144         if (AD_PrintFormat_ID != 0)
145         {
146             // We have a PrintFormat with the correct Client
147
if (Client_ID == AD_Client_ID)
148                 format = MPrintFormat.get (AD_PrintFormat_ID, false);
149             else
150                 format = MPrintFormat.copyToClient (Env.getCtx(), AD_PrintFormat_ID, AD_Client_ID);
151         }
152         if (format == null)
153             format = MPrintFormat.createFromReportView(Env.getCtx(), AD_ReportView_ID, pi.getTitle());
154
155         ReportEngine re = new ReportEngine(Env.getCtx(), format, query);
156         if (IsDirectPrint)
157             re.print(false, 1, false, format.getPrinterName());
158         else
159             new Viewer(re);
160         return true;
161     } // startStandardReport
162

163     /**
164      * Start Financial Report.
165      * @param pi Process Info
166      * @return true if OK
167      */

168     static public boolean startFinReport (ProcessInfo pi)
169     {
170         int AD_Client_ID = Env.getContextAsInt(Env.getCtx(), "#AD_Client_ID");
171
172         // Create Query from Parameters
173
String JavaDoc TableName = pi.getAD_Process_ID() == 202 ? "T_Report" : "T_ReportStatement";
174         MQuery query = getQuery (pi.getAD_PInstance_ID(), TableName);
175
176         // Get PrintFormat
177
if (pi.getTransientObject() == null)
178         {
179             Log.error("ReportCtl.startFinReport - No PrintFormat");
180             return false;
181         }
182         MPrintFormat format = (MPrintFormat)pi.getTransientObject();
183
184         ReportEngine re = new ReportEngine(Env.getCtx(), format, query);
185         new Viewer(re);
186         return true;
187     } // startFinReport
188

189     /**
190      * Get Query from Parameter
191      * @param AD_PInstance_ID instance
192      * @param TableName table name
193      * @return where clause
194      */

195     static private MQuery getQuery (int AD_PInstance_ID, String JavaDoc TableName)
196     {
197         MQuery query = new MQuery(TableName);
198         // Temporary Tables - add qualifier (not displayed)
199
if (TableName.startsWith("T_"))
200             query.addRestriction(TableName + ".AD_PInstance_ID=" + AD_PInstance_ID);
201
202         // How many rows do we have?
203
int rows = 0;
204         String JavaDoc SQL = "SELECT COUNT(*) FROM AD_PInstance_Para WHERE AD_PInstance_ID=?";
205         try
206         {
207             PreparedStatement pstmt = DB.prepareStatement(SQL);
208             pstmt.setInt(1, AD_PInstance_ID);
209             ResultSet rs = pstmt.executeQuery();
210             if (rs.next())
211                 rows = rs.getInt(1);
212             rs.close();
213             pstmt.close();
214         }
215         catch (SQLException e1)
216         {
217             Log.error("ReportCtrl.getQuery (ParameterCount)", e1);
218         }
219
220         if (rows < 1)
221             return query;
222
223         // Msg.getMsg(Env.getCtx(), "Parameter")
224
boolean trl = !Env.isBaseLanguage(Env.getCtx(), "AD_Process_Para");
225         if (!trl)
226             SQL = "SELECT ip.ParameterName,ip.P_String,ip.P_String_To," // 1..3
227
+ "ip.P_Number,ip.P_Number_To," // 4..5
228
+ "ip.P_Date,ip.P_Date_To, ip.Info,ip.Info_To, pp.Name " // 6..10
229
+ "FROM AD_PInstance_Para ip, AD_PInstance i, AD_Process_Para pp "
230                 + "WHERE i.AD_PInstance_ID=ip.AD_PInstance_ID"
231                 + " AND pp.AD_Process_ID=i.AD_Process_ID"
232                 + " AND pp.ColumnName=ip.ParameterName"
233                 + " AND ip.AD_PInstance_ID=?";
234         else
235             SQL = "SELECT ip.ParameterName,ip.P_String,ip.P_String_To, ip.P_Number,ip.P_Number_To,"
236                 + "ip.P_Date,ip.P_Date_To, ip.Info,ip.Info_To, ppt.Name "
237                 + "FROM AD_PInstance_Para ip, AD_PInstance i, AD_Process_Para pp, AD_Process_Para_Trl ppt "
238                 + "WHERE i.AD_PInstance_ID=ip.AD_PInstance_ID"
239                 + " AND pp.AD_Process_ID=i.AD_Process_ID"
240                 + " AND pp.ColumnName=ip.ParameterName"
241                 + " AND pp.AD_Process_Para_ID=ppt.AD_Process_Para_ID"
242                 + " AND ip.AD_PInstance_ID=?"
243                 + " AND ppt.AD_Language=?";
244         try
245         {
246             PreparedStatement pstmt = DB.prepareStatement(SQL);
247             pstmt.setInt(1, AD_PInstance_ID);
248             if (trl)
249                 pstmt.setString(2, Env.getAD_Language(Env.getCtx()));
250             ResultSet rs = pstmt.executeQuery();
251             // all records
252
for (int row = 0; rs.next(); row++)
253             {
254                 if (row == rows)
255                 {
256                     Log.error("ReportCtrl.getQuery (Parameter) - more rows than expected");
257                     break;
258                 }
259                 String JavaDoc ParameterName = rs.getString(1);
260                 String JavaDoc P_String = rs.getString(2);
261                 String JavaDoc P_String_To = rs.getString(3);
262                 //
263
Double JavaDoc P_Number = null;
264                 double d = rs.getDouble(4);
265                 if (!rs.wasNull())
266                     P_Number = new Double JavaDoc(d);
267                 Double JavaDoc P_Number_To = null;
268                 d = rs.getDouble(5);
269                 if (!rs.wasNull())
270                     P_Number_To = new Double JavaDoc(d);
271                 //
272
Timestamp P_Date = rs.getTimestamp(6);
273                 Timestamp P_Date_To = rs.getTimestamp(7);
274                 //
275
String JavaDoc Info = rs.getString(8);
276                 String JavaDoc Info_To = rs.getString(9);
277                 //
278
String JavaDoc Name = rs.getString(10);
279                 Log.trace(9, "ReportCtrl.getQuery", ParameterName + " S=" + P_String + "-" + P_String_To
280                     + ", N=" + P_Number + "-" + P_Number_To + ", D=" + P_Date + "-" + P_Date_To
281                     + " - " + Name + " - " + Info + "-" + Info_To);
282
283                 //-------------------------------------------------------------
284
if (P_String != null)
285                 {
286                     if (P_String_To == null)
287                     {
288                         if (P_String.indexOf("%") == -1)
289                             query.addRestriction(ParameterName, MQuery.EQUAL, P_String, Name, Info);
290                         else
291                             query.addRestriction(ParameterName, MQuery.LIKE, P_String, Name, Info);
292                     }
293                     else
294                         query.addRangeRestriction(ParameterName, P_String, P_String_To,
295                             Name, Info, Info_To);
296                 }
297                 else if (P_Number != null)
298                 {
299                     if (P_Number_To == null)
300                         query.addRestriction(ParameterName, MQuery.EQUAL, P_Number, Name, Info);
301                     else
302                         query.addRangeRestriction(ParameterName, P_Number, P_Number_To,
303                             Name, Info, Info_To);
304                 }
305                 else if (P_Date != null)
306                 {
307                     if (P_Date_To == null)
308                         query.addRestriction("TRUNC("+ParameterName+")", MQuery.EQUAL, P_Date, Name, Info);
309                     else
310                         query.addRangeRestriction("TRUNC("+ParameterName+")", P_Date, P_Date_To,
311                             Name, Info, Info_To);
312                 }
313             }
314             rs.close();
315             pstmt.close();
316         }
317         catch (SQLException e2)
318         {
319             Log.error("ReportDispatcher.getQuery (Parameter)", e2);
320         }
321         Log.trace(9, query.getWhereClause(true));
322         return query;
323     } // getQuery
324

325     /*************************************************************************/
326
327     public static final int ORDER = 0;
328     public static final int SHIPMENT = 1;
329     public static final int INVOICE = 2;
330     public static final int PROJECT = 3;
331     //
332
public static final int REMITTANCE = 4;
333     public static final int CHECK = 5;
334     public static final int DUNNING = 6;
335
336     private static final String JavaDoc[] DOC_TABLES = new String JavaDoc[] {
337         "C_Order_Header_v", "M_InOut_Header_v", "C_Invoice_Header_v", "C_Project_Header_v",
338         "C_PaySelection_Check_v", "C_PaySelection_Check_v", "C_DunningRunEntry_v" };
339     private static final String JavaDoc[] DOC_BASETABLES = new String JavaDoc[] {
340         "C_Order", "M_InOut", "C_Invoice", "C_Project",
341         "C_PaySelectionCheck", "C_PaySelectionCheck", "C_DunningRunEntry" };
342     private static final String JavaDoc[] DOC_IDS = new String JavaDoc[] {
343         "C_Order_ID", "M_InOut_ID", "C_Invoice_ID", "C_Project_ID",
344         "C_PaySelectionCheck_ID", "C_PaySelectionCheck_ID", "C_DunningRunEntry_ID", };
345
346     /**
347      * Start Document Print of Type.
348      * Called also directly from ProcessDialog, VInOutGen, VInvoiceGen, VPayPrint
349      * @param type document type
350      * @param Record_ID id
351      * @param IsDirectPrint if true, prints directly - otherwise View
352      * @return true if success
353      */

354     public static boolean startDocumentPrint (int type, int Record_ID, boolean IsDirectPrint)
355     {
356         // Order - Print Shipment or Invoice
357
if (type == ORDER)
358         {
359             int[] what = getDocumentWhat (Record_ID);
360             if (what != null)
361             {
362                 type = what[0];
363                 Record_ID = what[1];
364             }
365         } // Order
366

367         String JavaDoc JobName = DOC_BASETABLES[type] + "_Print";
368         int AD_PrintFormat_ID = 0;
369         int copies = 1;
370
371         // Get Document Info
372
Language language = Language.getLanguage(); // Base Language
373
String JavaDoc sql = null;
374         if (type == CHECK)
375             sql = "SELECT bad.Check_PrintFormat_ID," // 1
376
+ " c.IsMultiLingualDocument,bp.AD_Language " // 2..3
377
+ "FROM C_PaySelectionCheck d"
378                 + " INNER JOIN C_PaySelection ps ON (d.C_PaySelection_ID=ps.C_PaySelection_ID)"
379                 + " INNER JOIN C_BankAccountDoc bad ON (ps.C_BankAccount_ID=bad.C_BankAccount_ID AND d.PaymentRule=bad.PaymentRule)"
380                 + " INNER JOIN AD_Client c ON (d.AD_Client_ID=c.AD_Client_ID)"
381                 + " INNER JOIN C_BPartner bp ON (d.C_BPartner_ID=bp.C_BPartner_ID) "
382                 + "WHERE d.C_PaySelectionCheck_ID=?"; // info from BankAccount
383
else if (type == DUNNING)
384             sql = "SELECT dl.Dunning_PrintFormat_ID,"
385                 + " c.IsMultiLingualDocument,bp.AD_Language "
386                 + "FROM C_DunningRunEntry d"
387                 + " INNER JOIN AD_Client c ON (d.AD_Client_ID=c.AD_Client_ID)"
388                 + " INNER JOIN C_BPartner bp ON (d.C_BPartner_ID=bp.C_BPartner_ID)"
389                 + " INNER JOIN C_DunningRun dr ON (d.C_DunningRun_ID=dr.C_DunningRun_ID)"
390                 + " INNER JOIN C_DunningLevel dl ON (dr.C_DunningLevel_ID=dr.C_DunningLevel_ID) "
391                 + "WHERE d.C_DunningRunEntry_ID=?"; // info from Dunning
392
else if (type == REMITTANCE)
393             sql = "SELECT pf.Remittance_PrintFormat_ID,"
394                 + " c.IsMultiLingualDocument,bp.AD_Language "
395                 + "FROM C_PaySelectionCheck d"
396                 + " INNER JOIN AD_Client c ON (d.AD_Client_ID=c.AD_Client_ID)"
397                 + " INNER JOIN AD_PrintForm pf ON (c.AD_Client_ID=pf.AD_Client_ID)"
398                 + " INNER JOIN C_BPartner bp ON (d.C_BPartner_ID=bp.C_BPartner_ID) "
399                 + "WHERE d.C_PaySelectionCheck_ID=?" // info from PrintForm
400
+ " AND pf.AD_Org_ID IN (0,d.AD_Org_ID) ORDER BY pf.AD_Org_ID DESC";
401         else if (type == PROJECT)
402             sql = "SELECT pf.Project_PrintFormat_ID,"
403                 + " c.IsMultiLingualDocument,bp.AD_Language "
404                 + "FROM C_Project d"
405                 + " INNER JOIN AD_Client c ON (d.AD_Client_ID=c.AD_Client_ID)"
406                 + " INNER JOIN AD_PrintForm pf ON (c.AD_Client_ID=pf.AD_Client_ID)"
407                 + " LEFT OUTER JOIN C_BPartner bp ON (d.C_BPartner_ID=bp.C_BPartner_ID) "
408                 + "WHERE d.C_Project_ID=?" // info from PrintForm
409
+ " AND pf.AD_Org_ID IN (0,d.AD_Org_ID) ORDER BY pf.AD_Org_ID DESC";
410         else // Get PrintFormat from Org or 0 of document client
411
sql = "SELECT pf.Order_PrintFormat_ID,pf.Shipment_PrintFormat_ID," // 1..2
412
+ " pf.Invoice_PrintFormat_ID, pf.Project_PrintFormat_ID, pf.Remittance_PrintFormat_ID," // 3..5
413
+ " c.IsMultiLingualDocument,bp.AD_Language," // 6..7
414
+ " COALESCE(dt.DocumentCopies,0)+COALESCE(bp.DocumentCopies,1), " // 8
415
+ " dt.AD_PrintFormat_ID " // 9
416
+ "FROM " + DOC_BASETABLES[type] + " d"
417                 + " INNER JOIN AD_Client c ON (d.AD_Client_ID=c.AD_Client_ID)"
418                 + " INNER JOIN AD_PrintForm pf ON (c.AD_Client_ID=pf.AD_Client_ID)"
419                 + " INNER JOIN C_BPartner bp ON (d.C_BPartner_ID=bp.C_BPartner_ID)"
420                 + " LEFT OUTER JOIN C_DocType dt ON (d.C_DocType_ID=dt.C_DocType_ID) "
421                 + "WHERE d." + DOC_IDS[type] + "=?" // info from PrintForm
422
+ " AND pf.AD_Org_ID IN (0,d.AD_Org_ID) "
423                 + "ORDER BY pf.AD_Org_ID DESC";
424         //
425
try
426         {
427             PreparedStatement pstmt = DB.prepareStatement(sql);
428             pstmt.setInt(1, Record_ID);
429             ResultSet rs = pstmt.executeQuery();
430             if (rs.next()) // first record only
431
{
432                 if (type == CHECK || type == DUNNING || type == REMITTANCE || type == PROJECT)
433                 {
434                     AD_PrintFormat_ID = rs.getInt(1);
435                     copies = 1;
436                     // Set Language when enabled
437
String JavaDoc AD_Language = rs.getString(3);
438                     if (AD_Language != null && "Y".equals(rs.getString(2))) // IsMultiLingualDocument
439
language = Language.getLanguage(AD_Language);
440                 }
441                 else
442                 {
443                     // Set PrintFormat
444
AD_PrintFormat_ID = rs.getInt(type+1);
445                     if (rs.getInt(9) != 0) // C_DocType.AD_PrintFormat_ID
446
AD_PrintFormat_ID = rs.getInt(9);
447                     copies = rs.getInt(8);
448                     // Set Language when enabled
449
String JavaDoc AD_Language = rs.getString(7);
450                     if (AD_Language != null && "Y".equals(rs.getString(6))) // IsMultiLingualDocument
451
language = Language.getLanguage(AD_Language);
452                 }
453             }
454             rs.close();
455             pstmt.close();
456         }
457         catch (SQLException e)
458         {
459             Log.error("ReportCtl.startDocumentPrint - Record_ID=" + Record_ID + ", SQL=" + sql, e);
460         }
461         if (AD_PrintFormat_ID == 0)
462         {
463             ADialog.error(0, null, "NoDocPrintFormat");
464             return false;
465         }
466         // Get Format & Data
467
MPrintFormat format = MPrintFormat.get (AD_PrintFormat_ID, false);
468         format.setLanguage(language);
469     // if (!Env.isBaseLanguage(language, DOC_TABLES[type]))
470
format.setTranslationLanguage(language);
471         // query
472
MQuery query = new MQuery(DOC_TABLES[type]);
473         query.addRestriction(DOC_IDS[type], MQuery.EQUAL, new Integer JavaDoc(Record_ID));
474     // Log.trace(Log.l3_Util, "ReportCtrl.startDocumentPrint - " + format, query + " - " + language.getAD_Language());
475

476         // Engine
477
ReportEngine re = new ReportEngine(Env.getCtx(), format, query);
478         if (IsDirectPrint)
479         {
480         // re.print (false, copies, true, format.getPrinterName()); // prints original and "copy"
481
re.print (false, copies, false, format.getPrinterName()); // prints only original
482
printConfirm (type, Record_ID);
483         }
484         else
485             new Viewer(re);
486         return true;
487     } // startDocumentPrint
488

489     /**
490      * Determine what Order document to print.
491      * @param C_Order_ID id
492      * @return int Array with [printWhat, ID]
493      */

494     private static int[] getDocumentWhat (int C_Order_ID)
495     {
496         int[] what = new int[2];
497         what[0] = ORDER;
498         what[1] = C_Order_ID;
499         //
500
String JavaDoc SQL = "SELECT dt.DocSubTypeSO "
501             + "FROM C_DocType dt, C_Order o "
502             + "WHERE o.C_DocType_ID=dt.C_DocType_ID"
503             + " AND o.C_Order_ID=?";
504         String JavaDoc DocSubTypeSO = null;
505         try
506         {
507             PreparedStatement pstmt = DB.prepareStatement(SQL);
508             pstmt.setInt(1, C_Order_ID);
509             ResultSet rs = pstmt.executeQuery();
510             if (rs.next())
511                 DocSubTypeSO = rs.getString(1);
512             rs.close();
513             pstmt.close();
514         }
515         catch (SQLException e1)
516         {
517             Log.error ("ReportCtrl.getDocumentWhat DocSubType", e1);
518             return null; // error
519
}
520         if (DocSubTypeSO == null)
521             DocSubTypeSO = "";
522         // WalkIn Receipt, WalkIn Invoice,
523
if (DocSubTypeSO.equals("WR") || DocSubTypeSO.equals("WI"))
524             what[0] = INVOICE;
525         // WalkIn Pickup,
526
else if (DocSubTypeSO.equals("WP"))
527             what[0] = SHIPMENT;
528         // Offer Binding, Offer Nonbinding, Standard Order
529
else
530             return what;
531
532         // Get Record_ID of Invoice/Receipt
533
if (what[0] == INVOICE)
534             SQL = "SELECT C_Invoice_ID REC FROM C_Invoice WHERE C_Order_ID=?" // 1
535
+ " ORDER BY C_Invoice_ID DESC";
536         else
537             SQL = "SELECT M_InOut_ID REC FROM M_InOut WHERE C_Order_ID=?" // 1
538
+ " ORDER BY M_InOut_ID DESC";
539         try
540         {
541             PreparedStatement pstmt = DB.prepareStatement(SQL);
542             pstmt.setInt(1, C_Order_ID);
543             ResultSet rs = pstmt.executeQuery();
544             if (rs.next())
545             {
546             // if (i == 1 && ADialog.ask(0, null, what[0] == INVOICE ? "PrintOnlyRecentInvoice?" : "PrintOnlyRecentShipment?")) break;
547
what[1] = rs.getInt(1);
548             }
549             else // No Document Found
550
what[0] = ORDER;
551
552             rs.close();
553             pstmt.close();
554         }
555         catch (SQLException e2)
556         {
557             Log.error("ReportCtrl.getDocumentWhat Record_ID", e2);
558             return null;
559         }
560         Log.trace(Log.l4_Data, "ReportCtrl.getDocumentWhat", "Order => " + what[0] + " ID=" + what[1]);
561         return what;
562     } // getDocumentWhat
563

564     /**
565      * Print Confirm.
566      * Update Date Printed
567      * @param type document type
568      * @param Record_ID record id
569      */

570     public static void printConfirm (int type, int Record_ID)
571     {
572         StringBuffer JavaDoc sql = new StringBuffer JavaDoc();
573         if (type == ORDER || type == SHIPMENT || type == INVOICE)
574             sql.append("UPDATE ").append(DOC_BASETABLES[type])
575                 .append(" SET DatePrinted=SysDate, IsPrinted='Y' WHERE ")
576                 .append(DOC_IDS[type]).append("=").append(Record_ID);
577         //
578
if (sql.length() > 0)
579         {
580             int no = DB.executeUpdate(sql.toString());
581             if (no != 1)
582                 Log.error("ReportCtl.printConfirm - Updated records=" + no + " - should be just one");
583         }
584     } // printConfirm
585

586 } // ReportCtl
587
Popular Tags