📄 mordertax.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.math.*;
import java.sql.*;
import java.util.*;
import java.util.logging.*;
import org.compiere.util.*;
/**
* Order Tax Model
*
* @author Jorg Janke
* @version $Id: MOrderTax.java,v 1.17 2006/02/12 02:18:12 jjanke Exp $
*/
public class MOrderTax extends X_C_OrderTax
{
/**
* Get Tax Line for Order Line
* @param line Order line
* @param precision currenct precision
* @param oldTax get old tax
* @return existing or new tax
*/
public static MOrderTax get (MOrderLine line, int precision,
boolean oldTax, String trxName)
{
MOrderTax retValue = null;
if (line == null || line.getC_Order_ID() == 0)
{
s_log.fine("get - No Order");
return null;
}
int C_Tax_ID = line.getC_Tax_ID();
if (oldTax && line.is_ValueChanged("C_Tax_ID"))
{
Object old = line.get_ValueOld("C_Tax_ID");
if (old == null)
{
s_log.fine("get - No Old Tax");
return null;
}
C_Tax_ID = ((Integer)old).intValue();
}
if (C_Tax_ID == 0)
{
s_log.fine("get - No Tax");
return null;
}
String sql = "SELECT * FROM C_OrderTax WHERE C_Order_ID=? AND C_Tax_ID=?";
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement (sql, trxName);
pstmt.setInt (1, line.getC_Order_ID());
pstmt.setInt (2, C_Tax_ID);
ResultSet rs = pstmt.executeQuery ();
if (rs.next ())
retValue = new MOrderTax (line.getCtx(), rs, trxName);
rs.close ();
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
s_log.log(Level.SEVERE, "get", e);
}
try
{
if (pstmt != null)
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
if (retValue != null)
{
retValue.setPrecision(precision);
retValue.set_TrxName(trxName);
s_log.fine("get (old=" + oldTax + ") " + retValue);
return retValue;
}
// Create New
retValue = new MOrderTax(line.getCtx(), 0, trxName);
retValue.set_TrxName(trxName);
retValue.setClientOrg(line);
retValue.setC_Order_ID(line.getC_Order_ID());
retValue.setC_Tax_ID(line.getC_Tax_ID());
retValue.setPrecision(precision);
retValue.setIsTaxIncluded(line.isTaxIncluded());
s_log.fine("get (new) " + retValue);
return retValue;
} // get
/** Static Logger */
private static CLogger s_log = CLogger.getCLogger (MOrderTax.class);
/**************************************************************************
* Persistency Constructor
* @param ctx context
* @param ignored ignored
*/
public MOrderTax (Properties ctx, int ignored, String trxName)
{
super(ctx, 0, trxName);
if (ignored != 0)
throw new IllegalArgumentException("Multi-Key");
setTaxAmt (Env.ZERO);
setTaxBaseAmt (Env.ZERO);
setIsTaxIncluded(false);
} // MOrderTax
/**
* Load Constructor.
* Set Precision and TaxIncluded for tax calculations!
* @param ctx context
* @param rs result set
*/
public MOrderTax (Properties ctx, ResultSet rs, String trxName)
{
super(ctx, rs, trxName);
} // MOrderTax
/** Tax */
private MTax m_tax = null;
/** Cached Precision */
private Integer m_precision = null;
/**
* Get Precision
* @return Returns the precision or 2
*/
private int getPrecision ()
{
if (m_precision == null)
return 2;
return m_precision.intValue();
} // getPrecision
/**
* Set Precision
* @param precision The precision to set.
*/
protected void setPrecision (int precision)
{
m_precision = new Integer(precision);
} // setPrecision
/**
* Get Tax
* @return tax
*/
protected MTax getTax()
{
if (m_tax == null)
m_tax = MTax.get(getCtx(), getC_Tax_ID());
return m_tax;
} // getTax
/**************************************************************************
* Calculate/Set Tax Amt from Order Lines
*/
public boolean calculateTaxFromLines ()
{
BigDecimal taxBaseAmt = Env.ZERO;
BigDecimal taxAmt = Env.ZERO;
//
boolean documentLevel = getTax().isDocumentLevel();
MTax tax = getTax();
//
String sql = "SELECT LineNetAmt FROM C_OrderLine WHERE C_Order_ID=? AND C_Tax_ID=?";
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement (sql, get_TrxName());
pstmt.setInt (1, getC_Order_ID());
pstmt.setInt (2, getC_Tax_ID());
ResultSet rs = pstmt.executeQuery ();
while (rs.next ())
{
BigDecimal baseAmt = rs.getBigDecimal(1);
taxBaseAmt = taxBaseAmt.add(baseAmt);
//
if (!documentLevel) // calculate line tax
taxAmt = taxAmt.add(tax.calculateTax(baseAmt, isTaxIncluded(), getPrecision()));
}
rs.close ();
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
log.log(Level.SEVERE, get_TrxName(), e);
taxBaseAmt = null;
}
try
{
if (pstmt != null)
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
//
if (taxBaseAmt == null)
return false;
// Calculate Tax
if (documentLevel) // document level
taxAmt = tax.calculateTax(taxBaseAmt, isTaxIncluded(), getPrecision());
setTaxAmt(taxAmt);
// Set Base
if (isTaxIncluded())
setTaxBaseAmt (taxBaseAmt.subtract(taxAmt));
else
setTaxBaseAmt (taxBaseAmt);
log.fine(toString());
return true;
} // calculateTaxFromLines
/**
* String Representation
* @return info
*/
public String toString ()
{
StringBuffer sb = new StringBuffer ("MOrderTax[");
sb.append("C_Order_ID=").append(getC_Order_ID())
.append(",C_Tax_ID=").append(getC_Tax_ID())
.append(", Base=").append(getTaxBaseAmt()).append(",Tax=").append(getTaxAmt())
.append ("]");
return sb.toString ();
} // toString
} // MOrderTax
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -