📄 invoiceprint.java
字号:
/******************************************************************************
* The contents of this file are subject to the Compiere License Version 1.1
* ("License"); You may not use this file except in compliance with the License
* You may obtain a copy of the License at http://www.compiere.org/license.html
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
* The Original Code is Compiere ERP & CRM Smart Business Solution. The Initial
* Developer of the Original Code is Jorg Janke. Portions created by Jorg Janke
* are Copyright (C) 1999-2005 Jorg Janke.
* All parts are Copyright (C) 1999-2005 ComPiere, Inc. All Rights Reserved.
* Contributor(s): ______________________________________.
*****************************************************************************/
package org.compiere.process;
import java.io.*;
import java.sql.*;
import java.util.logging.*;
import org.compiere.model.*;
import org.compiere.print.*;
import org.compiere.util.*;
/**
* Print Invoices on Paperor send PDFs
*
* @author Jorg Janke
* @version $Id: InvoicePrint.java,v 1.21 2005/09/19 04:49:45 jjanke Exp $
*/
public class InvoicePrint extends SvrProcess
{
/** Mail PDF */
private boolean p_EMailPDF = false;
/** Mail Template */
private int p_R_MailText_ID = 0;
private Timestamp m_dateInvoiced_From = null;
private Timestamp m_dateInvoiced_To = null;
private int m_C_BPartner_ID = 0;
private int m_C_Invoice_ID = 0;
private String m_DocumentNo_From = null;
private String m_DocumentNo_To = null;
/**
* Prepare - e.g., get Parameters.
*/
protected void prepare()
{
ProcessInfoParameter[] para = getParameter();
for (int i = 0; i < para.length; i++)
{
String name = para[i].getParameterName();
if (para[i].getParameter() == null)
;
else if (name.equals("DateInvoiced"))
{
m_dateInvoiced_From = ((Timestamp)para[i].getParameter());
m_dateInvoiced_To = ((Timestamp)para[i].getParameter_To());
}
else if (name.equals("EMailPDF"))
p_EMailPDF = "Y".equals(para[i].getParameter());
else if (name.equals("R_MailText_ID"))
p_R_MailText_ID = para[i].getParameterAsInt();
else if (name.equals("C_BPartner_ID"))
m_C_BPartner_ID = para[i].getParameterAsInt();
else if (name.equals("C_Invoice_ID"))
m_C_Invoice_ID = para[i].getParameterAsInt();
else if (name.equals("DocumentNo"))
{
m_DocumentNo_From = (String)para[i].getParameter();
m_DocumentNo_To = (String)para[i].getParameter_To();
}
else
log.log(Level.SEVERE, "prepare - Unknown Parameter: " + name);
}
if (m_DocumentNo_From != null && m_DocumentNo_From.length() == 0)
m_DocumentNo_From = null;
if (m_DocumentNo_To != null && m_DocumentNo_To.length() == 0)
m_DocumentNo_To = null;
} // prepare
/**
* Perrform process.
* @return Message
* @throws Exception
*/
protected String doIt() throws java.lang.Exception
{
// Need to have Template
if (p_EMailPDF && p_R_MailText_ID == 0)
throw new CompiereUserError ("@NotFound@: @R_MailText_ID@");
MMailText mText = null;
if (p_R_MailText_ID != 0)
{
mText = new MMailText(getCtx(), p_R_MailText_ID, get_TrxName());
if (mText.get_ID() != p_R_MailText_ID)
throw new CompiereUserError ("@NotFound@: @R_MailText_ID@ - " + p_R_MailText_ID);
}
// Too broad selection
if (m_C_BPartner_ID == 0 && m_C_Invoice_ID == 0 && m_dateInvoiced_From == null && m_dateInvoiced_To == null
&& m_DocumentNo_From == null && m_DocumentNo_To == null)
throw new CompiereUserError ("@RestrictSelection@");
MClient client = MClient.get(getCtx());
// Get Info
StringBuffer sql = new StringBuffer (
"SELECT i.C_Invoice_ID,bp.AD_Language,c.IsMultiLingualDocument," // 1..3
// Prio: 1. BPartner 2. DocType, 3. PrintFormat (Org) // see ReportCtl+MInvoice
+ " COALESCE(bp.Invoice_PrintFormat_ID, dt.AD_PrintFormat_ID, pf.Invoice_PrintFormat_ID)," // 4
+ " dt.DocumentCopies+bp.DocumentCopies," // 5
+ " bpc.AD_User_ID, i.DocumentNo," // 6..7
+ " bp.C_BPartner_ID " // 8
+ "FROM C_Invoice i"
+ " INNER JOIN C_BPartner bp ON (i.C_BPartner_ID=bp.C_BPartner_ID)"
+ " LEFT OUTER JOIN AD_User bpc ON (i.AD_User_ID=bpc.AD_User_ID)"
+ " INNER JOIN AD_Client c ON (i.AD_Client_ID=c.AD_Client_ID)"
+ " INNER JOIN AD_PrintForm pf ON (i.AD_Client_ID=pf.AD_Client_ID)"
+ " INNER JOIN C_DocType dt ON (i.C_DocType_ID=dt.C_DocType_ID)")
.append(" WHERE pf.AD_Org_ID IN (0,i.AD_Org_ID) AND "); // more them 1 PF
boolean needAnd = false;
if (m_C_Invoice_ID != 0)
sql.append("i.C_Invoice_ID=").append(m_C_Invoice_ID);
else
{
if (m_C_BPartner_ID != 0)
{
sql.append ("i.C_BPartner_ID=").append (m_C_BPartner_ID);
needAnd = true;
}
if (m_dateInvoiced_From != null && m_dateInvoiced_To != null)
{
if (needAnd)
sql.append(" AND ");
sql.append("TRUNC(i.DateInvoiced) BETWEEN ")
.append(DB.TO_DATE(m_dateInvoiced_From, true)).append(" AND ")
.append(DB.TO_DATE(m_dateInvoiced_To, true));
needAnd = true;
}
else if (m_dateInvoiced_From != null)
{
if (needAnd)
sql.append(" AND ");
sql.append("TRUNC(i.DateInvoiced) >= ")
.append(DB.TO_DATE(m_dateInvoiced_From, true));
needAnd = true;
}
else if (m_dateInvoiced_To != null)
{
if (needAnd)
sql.append(" AND ");
sql.append("TRUNC(i.DateInvoiced) <= ")
.append(DB.TO_DATE(m_dateInvoiced_To, true));
needAnd = true;
}
else if (m_DocumentNo_From != null && m_DocumentNo_To != null)
{
if (needAnd)
sql.append(" AND ");
sql.append("i.DocumentNo BETWEEN ")
.append(DB.TO_STRING(m_DocumentNo_From)).append(" AND ")
.append(DB.TO_STRING(m_DocumentNo_To));
}
else if (m_DocumentNo_From != null)
{
if (needAnd)
sql.append(" AND ");
if (m_DocumentNo_From.indexOf('%') == -1)
sql.append("i.DocumentNo >= ")
.append(DB.TO_STRING(m_DocumentNo_From));
else
sql.append("i.DocumentNo LIKE ")
.append(DB.TO_STRING(m_DocumentNo_From));
}
}
sql.append(" ORDER BY i.C_Invoice_ID, pf.AD_Org_ID DESC"); // more than 1 PF record
log.fine(sql.toString());
MPrintFormat format = null;
int old_AD_PrintFormat_ID = -1;
int old_C_Invoice_ID = -1;
int C_BPartner_ID = 0;
int count = 0;
int errors = 0;
try
{
Statement stmt = DB.createStatement();
ResultSet rs = stmt.executeQuery(sql.toString());
while (rs.next())
{
int C_Invoice_ID = rs.getInt(1);
if (C_Invoice_ID == old_C_Invoice_ID) // multiple pf records
continue;
old_C_Invoice_ID = C_Invoice_ID;
// Set Language when enabled
Language language = Language.getLoginLanguage(); // Base Language
String AD_Language = rs.getString(2);
if (AD_Language != null && "Y".equals(rs.getString(3)))
language = Language.getLanguage(AD_Language);
//
int AD_PrintFormat_ID = rs.getInt(4);
int copies = rs.getInt(5);
if (copies == 0)
copies = 1;
int AD_User_ID = rs.getInt(6);
MUser to = new MUser (getCtx(), AD_User_ID, get_TrxName());
String DocumentNo = rs.getString(7);
C_BPartner_ID = rs.getInt(8);
//
String documentDir = client.getDocumentDir();
if (documentDir == null || documentDir.length() == 0)
documentDir = ".";
//
if (p_EMailPDF && (to.get_ID() == 0 || to.getEMail() == null || to.getEMail().length() == 0))
{
addLog (C_Invoice_ID, null, null, DocumentNo + " @RequestActionEMailNoTo@");
errors++;
continue;
}
if (AD_PrintFormat_ID == 0)
{
addLog (C_Invoice_ID, null, null, DocumentNo + " No Print Format");
errors++;
continue;
}
// Get Format & Data
if (AD_PrintFormat_ID != old_AD_PrintFormat_ID)
{
format = MPrintFormat.get (getCtx(), AD_PrintFormat_ID, false);
old_AD_PrintFormat_ID = AD_PrintFormat_ID;
}
format.setLanguage(language);
format.setTranslationLanguage(language);
// query
MQuery query = new MQuery("C_Invoice_Header_v");
query.addRestriction("C_Invoice_ID", MQuery.EQUAL, new Integer(C_Invoice_ID));
// Engine
PrintInfo info = new PrintInfo(
DocumentNo,
X_C_Invoice.Table_ID,
C_Invoice_ID,
C_BPartner_ID);
info.setCopies(copies);
ReportEngine re = new ReportEngine(getCtx(), format, query, info);
boolean printed = false;
if (p_EMailPDF)
{
String subject = mText.getMailHeader() + " - " + DocumentNo;
EMail email = client.createEMail(to.getEMail(), subject, null);
if (!email.isValid())
{
addLog (C_Invoice_ID, null, null,
DocumentNo + " @RequestActionEMailError@ Invalid EMail: " + to);
errors++;
continue;
}
mText.setUser(to); // Context
mText.setBPartner(C_BPartner_ID); // Context
mText.setPO(new MInvoice(getCtx(), C_Invoice_ID, get_TrxName()));
String message = mText.getMailText(true);
if (mText.isHtml())
email.setMessageHTML(subject, message);
else
{
email.setSubject (subject);
email.setMessageText (message);
}
//
File invoice = null;
if (!Ini.isClient())
invoice = new File(MInvoice.getPDFFileName(documentDir, C_Invoice_ID));
File attachment = re.getPDF(invoice);
log.fine(to + " - " + attachment);
email.addAttachment(attachment);
//
String msg = email.send();
MUserMail um = new MUserMail(mText, getAD_User_ID(), email);
um.save();
if (msg.equals(EMail.SENT_OK))
{
addLog (C_Invoice_ID, null, null,
DocumentNo + " @RequestActionEMailOK@ - " + to.getEMail());
count++;
printed = true;
}
else
{
addLog (C_Invoice_ID, null, null,
DocumentNo + " @RequestActionEMailError@ " + msg
+ " - " + to.getEMail());
errors++;
}
}
else
{
re.print();
count++;
printed = true;
}
// Print Confirm
if (printed)
{
StringBuffer sb = new StringBuffer ("UPDATE C_Invoice "
+ "SET DatePrinted=SysDate, IsPrinted='Y' WHERE C_Invoice_ID=")
.append (C_Invoice_ID);
int no = DB.executeUpdate(sb.toString(), get_TrxName());
}
} // for all entries
rs.close();
stmt.close();
}
catch (Exception e)
{
log.log(Level.SEVERE, "doIt - " + sql, e);
throw new Exception (e);
}
//
if (p_EMailPDF)
return "@Sent@=" + count + " - @Errors@=" + errors;
return "@Printed@=" + count;
} // doIt
} // InvoicePrint
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -