Tax providers allow you to calculate tax for products.
Firstly you must create a class that will implement the ITaxProvider interface :
public partial interface ITaxProvider : IProvider
{
Task GetTaxRate(TaxRequest calculateTaxRequest);
}
This
interface has one significant method. GetTaxRate method that receives calculateRequest that contain Product
object, CategoryTaxId, and others properties and return an object with our calculated rate.
In example belove you can see an implementation that calculates tax base on taxCategoryId
public class FixedRateTaxProvider : ITaxProvider
{
private readonly ISettingService _settingService;
private readonly ITranslationService _translationService;
public FixedRateTaxProvider(ISettingService settingService, ITranslationService translationService)
{
_settingService = settingService;
_translationService = translationService;
}
public string ConfigurationUrl => FixedRateTaxDefaults.ConfigurationUrl;
public string SystemName => FixedRateTaxDefaults.ProviderSystemName;
public string FriendlyName => _translationService.GetResource(FixedRateTaxDefaults.FriendlyName);
public int Priority => 0;
public IList LimitedToStores => new List();
public IList LimitedToGroups => new List();
public Task GetTaxRate(TaxRequest calculateTaxRequest)
{
var result = new TaxResult
{
TaxRate = GetTaxRate(calculateTaxRequest.TaxCategoryId)
};
return Task.FromResult(result);
}
protected double GetTaxRate(string taxCategoryId)
{
var rate = _settingService.GetSettingByKey(string.Format("Tax.TaxProvider.FixedRate.TaxCategoryId{0}", taxCategoryId))?.Rate;
return rate ?? 0;
}
}
See the plugin example.