diff --git a/org.adempiere.base/src/org/compiere/model/MOrderLine.java b/org.adempiere.base/src/org/compiere/model/MOrderLine.java index 4126920d38..952d216f9e 100644 --- a/org.adempiere.base/src/org/compiere/model/MOrderLine.java +++ b/org.adempiere.base/src/org/compiere/model/MOrderLine.java @@ -1019,12 +1019,19 @@ public class MOrderLine extends X_C_OrderLine { if (!success) return success; - MTax tax = new MTax(getCtx(), getC_Tax_ID(), get_TrxName()); - MTaxProvider provider = new MTaxProvider(tax.getCtx(), tax.getC_TaxProvider_ID(), tax.get_TrxName()); - ITaxProvider calculator = Core.getTaxProvider(provider); - if (calculator == null) - throw new AdempiereException(Msg.getMsg(getCtx(), "TaxNoProvider")); - return calculator.recalculateTax(provider, this, newRecord); + if (getParent().isProcessed()) + return success; + if ( newRecord + || is_ValueChanged(MOrderLine.COLUMNNAME_C_Tax_ID) + || is_ValueChanged(MOrderLine.COLUMNNAME_LineNetAmt)) { + MTax tax = new MTax(getCtx(), getC_Tax_ID(), get_TrxName()); + MTaxProvider provider = new MTaxProvider(tax.getCtx(), tax.getC_TaxProvider_ID(), tax.get_TrxName()); + ITaxProvider calculator = Core.getTaxProvider(provider); + if (calculator == null) + throw new AdempiereException(Msg.getMsg(getCtx(), "TaxNoProvider")); + return calculator.recalculateTax(provider, this, newRecord); + } + return success; } // afterSave /** diff --git a/org.adempiere.base/src/org/compiere/model/StandardTaxProvider.java b/org.adempiere.base/src/org/compiere/model/StandardTaxProvider.java index 1b55e21931..a508cc3250 100644 --- a/org.adempiere.base/src/org/compiere/model/StandardTaxProvider.java +++ b/org.adempiere.base/src/org/compiere/model/StandardTaxProvider.java @@ -79,7 +79,7 @@ public class StandardTaxProvider implements ITaxProvider { for (int j = 0; j < cTaxes.length; j++) { MTax cTax = cTaxes[j]; - BigDecimal taxAmt = cTax.calculateTax(oTax.getTaxBaseAmt(), order.isTaxIncluded(), order.getPrecision()); + BigDecimal taxAmt = cTax.calculateTax(oTax.getTaxBaseAmt(), false, order.getPrecision()); // MOrderTax newOTax = new MOrderTax(order.getCtx(), 0, order.get_TrxName()); newOTax.setClientOrg(order); @@ -210,7 +210,7 @@ public class StandardTaxProvider implements ITaxProvider { for (int j = 0; j < cTaxes.length; j++) { MTax cTax = cTaxes[j]; - BigDecimal taxAmt = cTax.calculateTax(iTax.getTaxBaseAmt(), invoice.isTaxIncluded(), invoice.getPrecision()); + BigDecimal taxAmt = cTax.calculateTax(iTax.getTaxBaseAmt(), false, invoice.getPrecision()); // MInvoiceTax newITax = new MInvoiceTax(invoice.getCtx(), 0, invoice.get_TrxName()); newITax.setClientOrg(invoice); @@ -336,7 +336,7 @@ public class StandardTaxProvider implements ITaxProvider { for (int j = 0; j < cTaxes.length; j++) { MTax cTax = cTaxes[j]; - BigDecimal taxAmt = cTax.calculateTax(oTax.getTaxBaseAmt(), rma.isTaxIncluded(), rma.getPrecision()); + BigDecimal taxAmt = cTax.calculateTax(oTax.getTaxBaseAmt(), false, rma.getPrecision()); // MRMATax newOTax = new MRMATax(rma.getCtx(), 0, rma.get_TrxName()); newOTax.setClientOrg(rma);