Try your search with a different keyword or use * as a wildcard.
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Nop.Core;
using Nop.Core.Domain.Customers;
using Nop.Plugin.Tax.FixedOrByCountryStateZip.Domain;
using Nop.Plugin.Tax.FixedOrByCountryStateZip.Models;
using Nop.Plugin.Tax.FixedOrByCountryStateZip.Services;
using Nop.Services.Common;
using Nop.Services.Configuration;
using Nop.Services.Directory;
using Nop.Services.Localization;
using Nop.Services.Security;
using Nop.Services.Stores;
using Nop.Services.Tax;
using Nop.Web.Framework;
using Nop.Web.Framework.Controllers;
using Nop.Web.Framework.Models.Extensions;
using Nop.Web.Framework.Mvc;
using Nop.Web.Framework.Mvc.Filters;
namespace Nop.Plugin.Tax.FixedOrByCountryStateZip.Controllers;
[AuthorizeAdmin]
[Area(AreaNames.ADMIN)]
[AutoValidateAntiforgeryToken]
public class FixedOrByCountryStateZipController : BasePluginController
{
#region Fields
protected readonly FixedOrByCountryStateZipTaxSettings _countryStateZipSettings;
protected readonly ICountryService _countryService;
protected readonly ICountryStateZipService _taxRateService;
protected readonly ILocalizationService _localizationService;
protected readonly IPermissionService _permissionService;
protected readonly ISettingService _settingService;
protected readonly IStateProvinceService _stateProvinceService;
protected readonly IStoreService _storeService;
protected readonly ITaxCategoryService _taxCategoryService;
protected readonly IGenericAttributeService _genericAttributeService;
protected readonly IWorkContext _workContext;
#endregion
#region Ctor
public FixedOrByCountryStateZipController(FixedOrByCountryStateZipTaxSettings countryStateZipSettings,
ICountryService countryService,
ICountryStateZipService taxRateService,
ILocalizationService localizationService,
IPermissionService permissionService,
ISettingService settingService,
IStateProvinceService stateProvinceService,
IStoreService storeService,
ITaxCategoryService taxCategoryService,
IGenericAttributeService genericAttributeService,
IWorkContext workContext)
{
_countryStateZipSettings = countryStateZipSettings;
_countryService = countryService;
_taxRateService = taxRateService;
_permissionService = permissionService;
_localizationService = localizationService;
_settingService = settingService;
_stateProvinceService = stateProvinceService;
_storeService = storeService;
_taxCategoryService = taxCategoryService;
_genericAttributeService = genericAttributeService;
_workContext = workContext;
}
#endregion
#region Methods
public async Task Configure(bool showtour = false)
{
if (!await _permissionService.AuthorizeAsync(StandardPermissionProvider.ManageTaxSettings))
return AccessDeniedView();
var taxCategories = await _taxCategoryService.GetAllTaxCategoriesAsync();
if (!taxCategories.Any())
{
var errorModel = new ConfigurationModel
{
TaxCategoriesCanNotLoadedError = string.Format(
await _localizationService.GetResourceAsync(
"Plugins.Tax.FixedOrByCountryStateZip.TaxCategoriesCanNotLoaded"),
Url.Action("Categories", "Tax"))
};
return View("~/Plugins/Tax.FixedOrByCountryStateZip/Views/Configure.cshtml", errorModel);
}
var model = new ConfigurationModel { CountryStateZipEnabled = _countryStateZipSettings.CountryStateZipEnabled };
//stores
model.AvailableStores.Add(new SelectListItem { Text = "*", Value = "0" });
var stores = await _storeService.GetAllStoresAsync();
foreach (var s in stores)
model.AvailableStores.Add(new SelectListItem { Text = s.Name, Value = s.Id.ToString() });
//tax categories
foreach (var tc in taxCategories)
model.AvailableTaxCategories.Add(new SelectListItem { Text = tc.Name, Value = tc.Id.ToString() });
//countries
var countries = await _countryService.GetAllCountriesAsync(showHidden: true);
foreach (var c in countries)
model.AvailableCountries.Add(new SelectListItem { Text = c.Name, Value = c.Id.ToString() });
//states
model.AvailableStates.Add(new SelectListItem { Text = "*", Value = "0" });
var defaultCountry = countries.FirstOrDefault();
if (defaultCountry != null)
{
var states = await _stateProvinceService.GetStateProvincesByCountryIdAsync(defaultCountry.Id);
foreach (var s in states)
model.AvailableStates.Add(new SelectListItem { Text = s.Name, Value = s.Id.ToString() });
}
//show configuration tour
if (showtour)
{
var customer = await _workContext.GetCurrentCustomerAsync();
var hideCard = await _genericAttributeService.GetAttributeAsync(customer, NopCustomerDefaults.HideConfigurationStepsAttribute);
var closeCard = await _genericAttributeService.GetAttributeAsync(customer, NopCustomerDefaults.CloseConfigurationStepsAttribute);
if (!hideCard && !closeCard)
ViewBag.ShowTour = true;
}
return View("~/Plugins/Tax.FixedOrByCountryStateZip/Views/Configure.cshtml", model);
}
[HttpPost]
public async Task SaveMode(bool value)
{
if (!await _permissionService.AuthorizeAsync(StandardPermissionProvider.ManageTaxSettings))
return Content("Access denied");
//save settings
_countryStateZipSettings.CountryStateZipEnabled = value;
await _settingService.SaveSettingAsync(_countryStateZipSettings);
return Json(new { Result = true });
}
#region Fixed tax
[HttpPost]
public async Task FixedRatesList(ConfigurationModel searchModel)
{
if (!await _permissionService.AuthorizeAsync(StandardPermissionProvider.ManageTaxSettings))
return await AccessDeniedDataTablesJson();
var categories = (await _taxCategoryService.GetAllTaxCategoriesAsync()).ToPagedList(searchModel);
var gridModel = await new FixedTaxRateListModel().PrepareToGridAsync(searchModel, categories, () =>
{
return categories.SelectAwait(async taxCategory => new FixedTaxRateModel
{
TaxCategoryId = taxCategory.Id,
TaxCategoryName = taxCategory.Name,
Rate = await _settingService
.GetSettingByKeyAsync(string.Format(FixedOrByCountryStateZipDefaults.FIXED_RATE_SETTINGS_KEY, taxCategory.Id))
});
});
return Json(gridModel);
}
[HttpPost]
public async Task FixedRateUpdate(FixedTaxRateModel model)
{
if (!await _permissionService.AuthorizeAsync(StandardPermissionProvider.ManageTaxSettings))
return Content("Access denied");
await _settingService.SetSettingAsync(string.Format(FixedOrByCountryStateZipDefaults.FIXED_RATE_SETTINGS_KEY, model.TaxCategoryId), model.Rate);
return new NullJsonResult();
}
#endregion
#region Tax by country/state/zip
[HttpPost]
public async Task RatesByCountryStateZipList(ConfigurationModel searchModel)
{
if (!await _permissionService.AuthorizeAsync(StandardPermissionProvider.ManageTaxSettings))
return await AccessDeniedDataTablesJson();
var records = await _taxRateService.GetAllTaxRatesAsync(searchModel.Page - 1, searchModel.PageSize);
var gridModel = await new CountryStateZipListModel().PrepareToGridAsync(searchModel, records, () =>
{
return records.SelectAwait(async record => new CountryStateZipModel
{
Id = record.Id,
StoreId = record.StoreId,
StoreName = (await _storeService.GetStoreByIdAsync(record.StoreId))?.Name ?? "*",
TaxCategoryId = record.TaxCategoryId,
TaxCategoryName = (await _taxCategoryService.GetTaxCategoryByIdAsync(record.TaxCategoryId))?.Name ?? string.Empty,
CountryId = record.CountryId,
CountryName = (await _countryService.GetCountryByIdAsync(record.CountryId))?.Name ?? "Unavailable",
StateProvinceId = record.StateProvinceId,
StateProvinceName = (await _stateProvinceService.GetStateProvinceByIdAsync(record.StateProvinceId))?.Name ?? "*",
Zip = !string.IsNullOrEmpty(record.Zip) ? record.Zip : "*",
Percentage = record.Percentage
});
});
return Json(gridModel);
}
[HttpPost]
public async Task AddRateByCountryStateZip(ConfigurationModel model)
{
if (!await _permissionService.AuthorizeAsync(StandardPermissionProvider.ManageTaxSettings))
return Content("Access denied");
await _taxRateService.InsertTaxRateAsync(new TaxRate
{
StoreId = model.AddStoreId,
TaxCategoryId = model.AddTaxCategoryId,
CountryId = model.AddCountryId,
StateProvinceId = model.AddStateProvinceId,
Zip = model.AddZip,
Percentage = model.AddPercentage
});
return Json(new { Result = true });
}
[HttpPost]
public async Task UpdateRateByCountryStateZip(CountryStateZipModel model)
{
if (!await _permissionService.AuthorizeAsync(StandardPermissionProvider.ManageTaxSettings))
return Content("Access denied");
var taxRate = await _taxRateService.GetTaxRateByIdAsync(model.Id);
taxRate.Zip = model.Zip == "*" ? null : model.Zip;
taxRate.Percentage = model.Percentage;
await _taxRateService.UpdateTaxRateAsync(taxRate);
return new NullJsonResult();
}
[HttpPost]
public async Task DeleteRateByCountryStateZip(int id)
{
if (!await _permissionService.AuthorizeAsync(StandardPermissionProvider.ManageTaxSettings))
return Content("Access denied");
var taxRate = await _taxRateService.GetTaxRateByIdAsync(id);
if (taxRate != null)
await _taxRateService.DeleteTaxRateAsync(taxRate);
return new NullJsonResult();
}
#endregion
#endregion
}