📄 minvoice.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.model;
import java.io.*;
import java.math.*;
import java.sql.*;
import java.util.*;
import java.util.logging.*;
import org.compiere.print.*;
import org.compiere.process.*;
import org.compiere.util.*;
/**
* Invoice Model.
* Please do not set DocStatus and C_DocType_ID directly.
* They are set in the process() method.
* Use DocAction and C_DocTypeTarget_ID instead.
*
* @author Jorg Janke
* @version $Id: MInvoice.java,v 1.106 2006/01/05 06:39:28 jjanke Exp $
*/
public class MInvoice extends X_C_Invoice implements DocAction
{
/**
* Get Payments Of BPartner
* @param ctx context
* @param C_BPartner_ID id
* @return array
*/
public static MInvoice[] getOfBPartner (Properties ctx, int C_BPartner_ID, String trxName)
{
ArrayList<MInvoice> list = new ArrayList<MInvoice>();
String sql = "SELECT * FROM C_Invoice WHERE C_BPartner_ID=?";
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement(sql, trxName);
pstmt.setInt(1, C_BPartner_ID);
ResultSet rs = pstmt.executeQuery();
while (rs.next())
list.add(new MInvoice(ctx,rs, trxName));
rs.close();
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
s_log.log(Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
//
MInvoice[] retValue = new MInvoice[list.size()];
list.toArray(retValue);
return retValue;
} // getOfBPartner
/**
* Create new Invoice by copying
* @param from invoice
* @param dateDoc date of the document date
* @param C_DocTypeTarget_ID target doc type
* @param isSOTrx sales order
* @param counter create counter links
* @param trxName trx
* @param setOrder set Order links
* @return Invoice
*/
public static MInvoice copyFrom (MInvoice from, Timestamp dateDoc,
int C_DocTypeTarget_ID, boolean isSOTrx, boolean counter,
String trxName, boolean setOrder)
{
MInvoice to = new MInvoice (from.getCtx(), 0, null);
to.set_TrxName(trxName);
PO.copyValues (from, to, from.getAD_Client_ID(), from.getAD_Org_ID());
to.set_ValueNoCheck ("C_Invoice_ID", I_ZERO);
to.set_ValueNoCheck ("DocumentNo", null);
//
to.setDocStatus (DOCSTATUS_Drafted); // Draft
to.setDocAction(DOCACTION_Complete);
//
to.setC_DocType_ID(0);
to.setC_DocTypeTarget_ID (C_DocTypeTarget_ID);
to.setIsSOTrx(isSOTrx);
//
to.setDateInvoiced (dateDoc);
to.setDateAcct (dateDoc);
to.setDatePrinted(null);
to.setIsPrinted (false);
//
to.setIsApproved (false);
to.setC_Payment_ID(0);
to.setC_CashLine_ID(0);
to.setIsPaid (false);
to.setIsInDispute(false);
//
// Amounts are updated by trigger when adding lines
to.setGrandTotal(Env.ZERO);
to.setTotalLines(Env.ZERO);
//
to.setIsTransferred (false);
to.setPosted (false);
to.setProcessed (false);
// delete references
to.setIsSelfService(false);
if (!setOrder)
to.setC_Order_ID(0);
if (counter)
{
to.setRef_Invoice_ID(from.getC_Invoice_ID());
// Try to find Order link
if (from.getC_Order_ID() != 0)
{
MOrder peer = new MOrder (from.getCtx(), from.getC_Order_ID(), from.get_TrxName());
if (peer.getRef_Order_ID() != 0)
to.setC_Order_ID(peer.getRef_Order_ID());
}
}
else
to.setRef_Invoice_ID(0);
if (!to.save(trxName))
throw new IllegalStateException("Could not create Invoice");
if (counter)
from.setRef_Invoice_ID(to.getC_Invoice_ID());
// Lines
if (to.copyLinesFrom(from, counter, setOrder) == 0)
throw new IllegalStateException("Could not create Invoice Lines");
return to;
} // copyFrom
/**
* Get PDF File Name
* @param documentDir directory
* @param C_Invoice_ID invoice
* @return file name
*/
public static String getPDFFileName (String documentDir, int C_Invoice_ID)
{
StringBuffer sb = new StringBuffer (documentDir);
if (sb.length() == 0)
sb.append(".");
if (!sb.toString().endsWith(File.separator))
sb.append(File.separator);
sb.append("C_Invoice_ID_")
.append(C_Invoice_ID)
.append(".pdf");
return sb.toString();
} // getPDFFileName
/**
* Get MInvoice from Cache
* @param ctx context
* @param C_Invoice_ID id
* @return MInvoice
*/
public static MInvoice get (Properties ctx, int C_Invoice_ID)
{
Integer key = new Integer (C_Invoice_ID);
MInvoice retValue = (MInvoice) s_cache.get (key);
if (retValue != null)
return retValue;
retValue = new MInvoice (ctx, C_Invoice_ID, null);
if (retValue.get_ID () != 0)
s_cache.put (key, retValue);
return retValue;
} // get
/** Cache */
private static CCache<Integer,MInvoice> s_cache = new CCache<Integer,MInvoice>("C_Invoice", 20, 2); // 2 minutes
/**************************************************************************
* Invoice Constructor
* @param ctx context
* @param C_Invoice_ID invoice or 0 for new
* @param trxName trx name
*/
public MInvoice (Properties ctx, int C_Invoice_ID, String trxName)
{
super (ctx, C_Invoice_ID, trxName);
if (C_Invoice_ID == 0)
{
setDocStatus (DOCSTATUS_Drafted); // Draft
setDocAction (DOCACTION_Complete);
//
setPaymentRule(PAYMENTRULE_OnCredit); // Payment Terms
setDateInvoiced (new Timestamp (System.currentTimeMillis ()));
setDateAcct (new Timestamp (System.currentTimeMillis ()));
//
setChargeAmt (Env.ZERO);
setTotalLines (Env.ZERO);
setGrandTotal (Env.ZERO);
//
setIsSOTrx (true);
setIsTaxIncluded (false);
setIsApproved (false);
setIsDiscountPrinted (false);
setIsPaid (false);
setSendEMail (false);
setIsPrinted (false);
setIsTransferred (false);
setIsSelfService(false);
setIsPayScheduleValid(false);
setIsInDispute(false);
setPosted(false);
super.setProcessed (false);
setProcessing(false);
}
} // MInvoice
/**
* Load Constructor
* @param ctx context
* @param rs result set record
*/
public MInvoice (Properties ctx, ResultSet rs, String trxName)
{
super(ctx, rs, trxName);
} // MInvoice
/**
* Create Invoice from Order
* @param order order
* @param C_DocTypeTarget_ID target document type
* @param invoiceDate date or null
*/
public MInvoice (MOrder order, int C_DocTypeTarget_ID, Timestamp invoiceDate)
{
this (order.getCtx(), 0, order.get_TrxName());
setClientOrg(order);
setOrder(order); // set base settings
//
if (C_DocTypeTarget_ID == 0)
C_DocTypeTarget_ID = DB.getSQLValue(null,
"SELECT C_DocTypeInvoice_ID FROM C_DocType WHERE C_DocType_ID=?",
order.getC_DocType_ID());
setC_DocTypeTarget_ID(C_DocTypeTarget_ID);
if (invoiceDate != null)
setDateInvoiced(invoiceDate);
setDateAcct(getDateInvoiced());
//
setSalesRep_ID(order.getSalesRep_ID());
//
setC_BPartner_ID(order.getBill_BPartner_ID());
setC_BPartner_Location_ID(order.getBill_Location_ID());
setAD_User_ID(order.getBill_User_ID());
} // MInvoice
/**
* Create Invoice from Shipment
* @param ship shipment
* @param invoiceDate date or null
*/
public MInvoice (MInOut ship, Timestamp invoiceDate)
{
this (ship.getCtx(), 0, ship.get_TrxName());
setClientOrg(ship);
setShipment(ship); // set base settings
//
setC_DocTypeTarget_ID();
if (invoiceDate != null)
setDateInvoiced(invoiceDate);
setDateAcct(getDateInvoiced());
//
setSalesRep_ID(ship.getSalesRep_ID());
setAD_User_ID(ship.getAD_User_ID());
} // MInvoice
/**
* Create Invoice from Batch Line
* @param batch batch
* @param line batch line
*/
public MInvoice (MInvoiceBatch batch, MInvoiceBatchLine line)
{
this (line.getCtx(), 0, line.get_TrxName());
setClientOrg(line);
setDocumentNo(line.getDocumentNo());
//
setIsSOTrx(batch.isSOTrx());
MBPartner bp = new MBPartner (line.getCtx(), line.getC_BPartner_ID(), line.get_TrxName());
setBPartner(bp); // defaults
//
setIsTaxIncluded(line.isTaxIncluded());
// May conflict with default price list
setC_Currency_ID(batch.getC_Currency_ID());
setC_ConversionType_ID(batch.getC_ConversionType_ID());
//
// setPaymentRule(order.getPaymentRule());
// setC_PaymentTerm_ID(order.getC_PaymentTerm_ID());
// setPOReference("");
setDescription(batch.getDescription());
// setDateOrdered(order.getDateOrdered());
//
setAD_OrgTrx_ID(line.getAD_OrgTrx_ID());
setC_Project_ID(line.getC_Project_ID());
// setC_Campaign_ID(line.getC_Campaign_ID());
setC_Activity_ID(line.getC_Activity_ID());
setUser1_ID(line.getUser1_ID());
setUser2_ID(line.getUser2_ID());
//
setC_DocTypeTarget_ID(line.getC_DocType_ID());
setDateInvoiced(line.getDateInvoiced());
setDateAcct(line.getDateAcct());
//
setSalesRep_ID(batch.getSalesRep_ID());
//
setC_BPartner_ID(line.getC_BPartner_ID());
setC_BPartner_Location_ID(line.getC_BPartner_Location_ID());
setAD_User_ID(line.getAD_User_ID());
} // MInvoice
/** Open Amount */
private BigDecimal m_openAmt = null;
/** Invoice Lines */
private MInvoiceLine[] m_lines;
/** Invoice Taxes */
private MInvoiceTax[] m_taxes;
/** Logger */
private static CLogger s_log = CLogger.getCLogger(MInvoice.class);
/**
* Overwrite Client/Org if required
* @param AD_Client_ID client
* @param AD_Org_ID org
*/
public void setClientOrg (int AD_Client_ID, int AD_Org_ID)
{
super.setClientOrg(AD_Client_ID, AD_Org_ID);
} // setClientOrg
/**
* Set Business Partner Defaults & Details
* @param bp business partner
*/
public void setBPartner (MBPartner bp)
{
if (bp == null)
return;
setC_BPartner_ID(bp.getC_BPartner_ID());
// Set Defaults
int ii = 0;
if (isSOTrx())
ii = bp.getC_PaymentTerm_ID();
else
ii = bp.getPO_PaymentTerm_ID();
if (ii != 0)
setC_PaymentTerm_ID(ii);
//
if (isSOTrx())
ii = bp.getM_PriceList_ID();
else
ii = bp.getPO_PriceList_ID();
if (ii != 0)
setM_PriceList_ID(ii);
//
String ss = bp.getPaymentRule();
if (ss != null)
setPaymentRule(ss);
// Set Locations
MBPartnerLocation[] locs = bp.getLocations(false);
if (locs != null)
{
for (int i = 0; i < locs.length; i++)
{
if ((locs[i].isBillTo() && isSOTrx())
|| (locs[i].isPayFrom() && !isSOTrx()))
setC_BPartner_Location_ID(locs[i].getC_BPartner_Location_ID());
}
// set to first
if (getC_BPartner_Location_ID() == 0 && locs.length > 0)
setC_BPartner_Location_ID(locs[0].getC_BPartner_Location_ID());
}
if (getC_BPartner_Location_ID() == 0)
log.log(Level.SEVERE, "Has no To Address: " + bp);
// Set Contact
MUser[] contacts = bp.getContacts(false);
if (contacts != null && contacts.length > 0) // get first User
setAD_User_ID(contacts[0].getAD_User_ID());
} // setBPartner
/**
* Set Order References
* @param order order
*/
public void setOrder (MOrder order)
{
if (order == null)
return;
setC_Order_ID(order.getC_Order_ID());
setIsSOTrx(order.isSOTrx());
setIsDiscountPrinted(order.isDiscountPrinted());
setIsSelfService(order.isSelfService());
setSendEMail(order.isSendEMail());
//
setM_PriceList_ID(order.getM_PriceList_ID());
setIsTaxIncluded(order.isTaxIncluded());
setC_Currency_ID(order.getC_Currency_ID());
setC_ConversionType_ID(order.getC_ConversionType_ID());
//
setPaymentRule(order.getPaymentRule());
setC_PaymentTerm_ID(order.getC_PaymentTerm_ID());
setPOReference(order.getPOReference());
setDescription(order.getDescription());
setDateOrdered(order.getDateOrdered());
//
setAD_OrgTrx_ID(order.getAD_OrgTrx_ID());
setC_Project_ID(order.getC_Project_ID());
setC_Campaign_ID(order.getC_Campaign_ID());
setC_Activity_ID(order.getC_Activity_ID());
setUser1_ID(order.getUser1_ID());
setUser2_ID(order.getUser2_ID());
} // setOrder
/**
* Set Shipment References
* @param ship shipment
*/
public void setShipment (MInOut ship)
{
if (ship == null)
return;
setIsSOTrx(ship.isSOTrx());
//
MBPartner bp = new MBPartner (getCtx(), ship.getC_BPartner_ID(), null);
setBPartner (bp);
//
setSendEMail(ship.isSendEMail());
//
setPOReference(ship.getPOReference());
setDescription(ship.getDescription());
setDateOrdered(ship.getDateOrdered());
//
setAD_OrgTrx_ID(ship.getAD_OrgTrx_ID());
setC_Project_ID(ship.getC_Project_ID());
setC_Campaign_ID(ship.getC_Campaign_ID());
setC_Activity_ID(ship.getC_Activity_ID());
setUser1_ID(ship.getUser1_ID());
setUser2_ID(ship.getUser2_ID());
//
if (ship.getC_Order_ID() != 0)
{
setC_Order_ID(ship.getC_Order_ID());
MOrder order = new MOrder (getCtx(), ship.getC_Order_ID(), get_TrxName());
setIsDiscountPrinted(order.isDiscountPrinted());
setM_PriceList_ID(order.getM_PriceList_ID());
setIsTaxIncluded(order.isTaxIncluded());
setC_Currency_ID(order.getC_Currency_ID());
setC_ConversionType_ID(order.getC_ConversionType_ID());
setPaymentRule(order.getPaymentRule());
setC_PaymentTerm_ID(order.getC_PaymentTerm_ID());
//
MDocType dt = MDocType.get(getCtx(), order.getC_DocType_ID());
if (dt.getC_DocTypeInvoice_ID() != 0)
setC_DocTypeTarget_ID(dt.getC_DocTypeInvoice_ID());
// Overwrite Invoice Address
setC_BPartner_Location_ID(order.getBill_Location_ID());
}
} // setShipment
/**
* Set Target Document Type
* @param DocBaseType doc type MDocType.DOCBASETYPE_
*/
public void setC_DocTypeTarget_ID (String DocBaseType)
{
String sql = "SELECT C_DocType_ID FROM C_DocType "
+ "WHERE AD_Client_ID=? AND DocBaseType=? "
+ "ORDER BY IsDefault DESC";
int C_DocType_ID = DB.getSQLValue(null, sql, getAD_Client_ID(), DocBaseType);
if (C_DocType_ID <= 0)
log.log(Level.SEVERE, "Not found for AC_Client_ID="
+ getAD_Client_ID() + " - " + DocBaseType);
else
{
log.fine(DocBaseType);
setC_DocTypeTarget_ID (C_DocType_ID);
boolean isSOTrx = MDocType.DOCBASETYPE_ARInvoice.equals(DocBaseType)
|| MDocType.DOCBASETYPE_ARCreditMemo.equals(DocBaseType);
setIsSOTrx (isSOTrx);
}
} // setC_DocTypeTarget_ID
/**
* Set Target Document Type.
* Based on SO flag AP/AP Invoice
*/
public void setC_DocTypeTarget_ID ()
{
if (getC_DocTypeTarget_ID() > 0)
return;
if (isSOTrx())
setC_DocTypeTarget_ID(MDocType.DOCBASETYPE_ARInvoice);
else
setC_DocTypeTarget_ID(MDocType.DOCBASETYPE_APInvoice);
} // setC_DocTypeTarget_ID
/**
* Get Grand Total
* @param creditMemoAdjusted adjusted for CM (negative)
* @return grand total
*/
public BigDecimal getGrandTotal (boolean creditMemoAdjusted)
{
if (!creditMemoAdjusted)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -