Hi Community
In INDIA after the implementation of GST all Stock Transfer ie. Inventory Move across Region/States are Taxable Supplies
Therefore we need calculate tax on the cost Price of the Products in Movement Line table.
What is the best practice to implement TaxProvider
If we extend ITaxProvider as follows then core will generate the following error
Error: org.compiere.model.StandardTaxProvider cannot be cast to com.cattleya.model.ITaxProvider_CAT
MMovementLine_CAT
protected boolean afterSave (boolean newRecord, boolean success)
{
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_CAT calculator = (ITaxProvider_CAT) Core.getTaxProvider(provider);
if (calculator == null)
throw new AdempiereException(Msg.getMsg(getCtx(), "TaxNoProvider"));
return calculator.recalculateTax(provider, this, newRecord);
} // afterSave
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ITAXPROVIDER_CAT
package com.cattleya.model;
import org.adempiere.model.ITaxProvider;
import org.compiere.model.MTaxProvider;
import org.compiere.model.MMovement;
import org.compiere.model.MMovementLine;
import com.cattleya.model.MMovement_CAT;
import com.cattleya.model.MMovementLine_CAT;
public interface ITaxProvider_CAT extends org.adempiere.model.ITaxProvider {
public boolean calculateMovementTaxTotal(MTaxProvider provider, MMovement_CAT movement);
public boolean updateMovementTax(MTaxProvider provider, MMovementLine_CAT line);
public boolean recalculateTax(MTaxProvider provider, MMovementLine_CAT line, boolean newRecord);
public boolean updateHeaderTax(MTaxProvider provider, MMovementLine_CAT line);
}