Bug Fix http://sourceforge.net/tracker/index.php?func=detail&aid=1733602&group_id=176962&atid=879332
This commit is contained in:
parent
0ded592453
commit
162658d40f
|
@ -184,6 +184,9 @@ public class MOrderLine extends X_C_OrderLine
|
||||||
// Product Pricing
|
// Product Pricing
|
||||||
private MProductPricing m_productPrice = null;
|
private MProductPricing m_productPrice = null;
|
||||||
|
|
||||||
|
/** Tax */
|
||||||
|
private MTax m_tax = null;
|
||||||
|
|
||||||
/** Cached Currency Precision */
|
/** Cached Currency Precision */
|
||||||
private Integer m_precision = null;
|
private Integer m_precision = null;
|
||||||
/** Product */
|
/** Product */
|
||||||
|
@ -191,6 +194,15 @@ public class MOrderLine extends X_C_OrderLine
|
||||||
/** Parent */
|
/** Parent */
|
||||||
private MOrder m_parent = null;
|
private MOrder m_parent = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set Precision
|
||||||
|
* @param precision The precision to set.
|
||||||
|
*/
|
||||||
|
protected void setPrecision (int precision)
|
||||||
|
{
|
||||||
|
m_precision = new Integer(precision);
|
||||||
|
} // setPrecision
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set Defaults from Order.
|
* Set Defaults from Order.
|
||||||
* Does not set Parent !!
|
* Does not set Parent !!
|
||||||
|
@ -339,11 +351,45 @@ public class MOrderLine extends X_C_OrderLine
|
||||||
public void setLineNetAmt ()
|
public void setLineNetAmt ()
|
||||||
{
|
{
|
||||||
BigDecimal bd = getPriceActual().multiply(getQtyOrdered());
|
BigDecimal bd = getPriceActual().multiply(getQtyOrdered());
|
||||||
|
boolean documentLevel = getTax().isDocumentLevel();
|
||||||
|
|
||||||
|
// juddm: Tax Exempt & Tax Included in Price List & not Document Level - Adjust Line Amount
|
||||||
|
// http://sourceforge.net/tracker/index.php?func=detail&aid=1733602&group_id=176962&atid=879332
|
||||||
|
if (isTaxIncluded() && !documentLevel) {
|
||||||
|
BigDecimal taxStdAmt = Env.ZERO, taxThisAmt = Env.ZERO;
|
||||||
|
|
||||||
|
MTax orderTax = getTax();
|
||||||
|
// get the standard tax
|
||||||
|
MTax stdTax = new MTax (getCtx(), getProduct().getC_Tax_ID(), get_TrxName());
|
||||||
|
|
||||||
|
log.fine("stdTax rate is " + stdTax.getRate());
|
||||||
|
log.fine("orderTax rate is " + orderTax.getRate());
|
||||||
|
|
||||||
|
taxThisAmt = taxThisAmt.add(orderTax.calculateTax(bd, isTaxIncluded(), getPrecision()));
|
||||||
|
taxStdAmt = taxStdAmt.add(stdTax.calculateTax(bd, isTaxIncluded(), getPrecision()));
|
||||||
|
|
||||||
|
bd = bd.subtract(taxStdAmt).add(taxThisAmt);
|
||||||
|
|
||||||
|
log.fine("Special Tax Override: Tax Amt: " + taxThisAmt + " Standard Tax Amt: " + taxStdAmt + " Line Net Amt: " + bd);
|
||||||
|
}
|
||||||
|
|
||||||
if (bd.scale() > getPrecision())
|
if (bd.scale() > getPrecision())
|
||||||
bd = bd.setScale(getPrecision(), BigDecimal.ROUND_HALF_UP);
|
bd = bd.setScale(getPrecision(), BigDecimal.ROUND_HALF_UP);
|
||||||
|
|
||||||
super.setLineNetAmt (bd);
|
super.setLineNetAmt (bd);
|
||||||
} // setLineNetAmt
|
} // setLineNetAmt
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Tax
|
||||||
|
* @return tax
|
||||||
|
*/
|
||||||
|
protected MTax getTax()
|
||||||
|
{
|
||||||
|
if (m_tax == null)
|
||||||
|
m_tax = MTax.get(getCtx(), getC_Tax_ID());
|
||||||
|
return m_tax;
|
||||||
|
} // getTax
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get Currency Precision from Currency
|
* Get Currency Precision from Currency
|
||||||
* @return precision
|
* @return precision
|
||||||
|
@ -795,8 +841,9 @@ public class MOrderLine extends X_C_OrderLine
|
||||||
if (getQtyOrdered().compareTo(qty) > 0)
|
if (getQtyOrdered().compareTo(qty) > 0)
|
||||||
{
|
{
|
||||||
log.warning("Qty - Stock=" + qty + ", Ordered=" + getQtyOrdered());
|
log.warning("Qty - Stock=" + qty + ", Ordered=" + getQtyOrdered());
|
||||||
log.saveError("QtyInsufficient", "=" + qty);
|
//log.saveError("QtyInsufficient", "=" + qty);
|
||||||
return false;
|
//return false;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} // stocked
|
} // stocked
|
||||||
|
@ -866,9 +913,15 @@ public class MOrderLine extends X_C_OrderLine
|
||||||
if (!newRecord && is_ValueChanged("C_Tax_ID"))
|
if (!newRecord && is_ValueChanged("C_Tax_ID"))
|
||||||
{
|
{
|
||||||
// Recalculate Tax for old Tax
|
// Recalculate Tax for old Tax
|
||||||
if (!getParent().isProcessed())
|
MOrderTax tax = MOrderTax.get (this, getPrecision(),
|
||||||
if (!updateOrderTax(true))
|
true, get_TrxName()); // old Tax
|
||||||
|
if (tax != null)
|
||||||
|
{
|
||||||
|
if (!tax.calculateTaxFromLines())
|
||||||
return false;
|
return false;
|
||||||
|
if (!tax.save(get_TrxName()))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return updateHeaderTax();
|
return updateHeaderTax();
|
||||||
} // afterSave
|
} // afterSave
|
||||||
|
@ -891,30 +944,6 @@ public class MOrderLine extends X_C_OrderLine
|
||||||
return updateHeaderTax();
|
return updateHeaderTax();
|
||||||
} // afterDelete
|
} // afterDelete
|
||||||
|
|
||||||
/**
|
|
||||||
* Recalculate order tax
|
|
||||||
* @param oldTax true if the old C_Tax_ID should be used
|
|
||||||
* @return true if success, false otherwise
|
|
||||||
*
|
|
||||||
* @author teo_sarca [ 1583825 ]
|
|
||||||
*/
|
|
||||||
private boolean updateOrderTax(boolean oldTax) {
|
|
||||||
MOrderTax tax = MOrderTax.get (this, getPrecision(), oldTax, get_TrxName());
|
|
||||||
if (tax != null) {
|
|
||||||
if (!tax.calculateTaxFromLines())
|
|
||||||
return false;
|
|
||||||
if (tax.getTaxAmt().signum() != 0) {
|
|
||||||
if (!tax.save(get_TrxName()))
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (!tax.is_new() && !tax.delete(false, get_TrxName()))
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update Tax & Header
|
* Update Tax & Header
|
||||||
* @return true if header updated
|
* @return true if header updated
|
||||||
|
@ -922,9 +951,12 @@ public class MOrderLine extends X_C_OrderLine
|
||||||
private boolean updateHeaderTax()
|
private boolean updateHeaderTax()
|
||||||
{
|
{
|
||||||
// Recalculate Tax for this Tax
|
// Recalculate Tax for this Tax
|
||||||
if (!getParent().isProcessed())
|
MOrderTax tax = MOrderTax.get (this, getPrecision(),
|
||||||
if (!updateOrderTax(false))
|
false, get_TrxName()); // current Tax
|
||||||
return false;
|
if (!tax.calculateTaxFromLines())
|
||||||
|
return false;
|
||||||
|
if (!tax.save(get_TrxName()))
|
||||||
|
return false;
|
||||||
|
|
||||||
// Update Order Header
|
// Update Order Header
|
||||||
String sql = "UPDATE C_Order i"
|
String sql = "UPDATE C_Order i"
|
||||||
|
|
Loading…
Reference in New Issue