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.Plugin.Tax.Avalara.Models.Customer;
using Nop.Plugin.Tax.Avalara.Services;
using Nop.Services.Customers;
using Nop.Services.Tax;
using Nop.Web.Controllers;
using Nop.Web.Framework.Mvc.Filters;
namespace Nop.Plugin.Tax.Avalara.Controllers;
public class AvalaraPublicController : BasePublicController
{
#region Fields
protected readonly AvalaraTaxManager _avalaraTaxManager;
protected readonly AvalaraTaxSettings _avalaraTaxSettings;
protected readonly ICustomerService _customerService;
protected readonly ITaxPluginManager _taxPluginManager;
protected readonly IWorkContext _workContext;
#endregion
#region Ctor
public AvalaraPublicController(AvalaraTaxManager avalaraTaxManager,
AvalaraTaxSettings avalaraTaxSettings,
ICustomerService customerService,
ITaxPluginManager taxPluginManager,
IWorkContext workContext)
{
_avalaraTaxManager = avalaraTaxManager;
_avalaraTaxSettings = avalaraTaxSettings;
_customerService = customerService;
_taxPluginManager = taxPluginManager;
_workContext = workContext;
}
#endregion
#region Methods
public async Task ExemptionCertificates()
{
var customer = await _workContext.GetCurrentCustomerAsync();
if (!await _customerService.IsRegisteredAsync(customer))
return Challenge();
//ensure that Avalara tax provider is active
if (!await _taxPluginManager.IsPluginActiveAsync(AvalaraTaxDefaults.SystemName, customer))
return RedirectToRoute("CustomerInfo");
if (!_avalaraTaxSettings.EnableCertificates)
return RedirectToRoute("CustomerInfo");
//ACL
if (_avalaraTaxSettings.CustomerRoleIds.Any())
{
var customerRoleIds = await _customerService.GetCustomerRoleIdsAsync(customer);
if (!customerRoleIds.Intersect(_avalaraTaxSettings.CustomerRoleIds).Any())
return RedirectToRoute("CustomerInfo");
}
var token = await _avalaraTaxManager.CreateTokenAsync(customer);
var link = await _avalaraTaxManager.GetInvitationAsync(customer) ?? AvalaraTaxDefaults.CertExpressUrl;
var certificates = await _avalaraTaxManager.GetCustomerCertificatesAsync(customer);
var model = new TaxExemptionModel
{
Token = token,
Link = link,
CustomerId = customer.Id,
Certificates = certificates?.Select(certificate => new ExemptionCertificateModel
{
Id = certificate.id ?? 0,
Status = certificate.status,
SignedDate = certificate.signedDate.ToShortDateString(),
ExpirationDate = certificate.expirationDate.ToShortDateString(),
ExposureZone = certificate.exposureZone?.name
}).ToList() ?? new List(),
AvailableExposureZones = (await _avalaraTaxManager.GetExposureZonesAsync())
.Select(zone => new SelectListItem(zone.name, zone.name))
.ToList()
};
return View("~/Plugins/Tax.Avalara/Views/Customer/ExemptionCertificates.cshtml", model);
}
[CheckLanguageSeoCode(ignore: true)]
public async Task DownloadCertificate(int id)
{
var customer = await _workContext.GetCurrentCustomerAsync();
if (!await _customerService.IsRegisteredAsync(customer))
return Challenge();
//ensure that Avalara tax provider is active
if (!await _taxPluginManager.IsPluginActiveAsync(AvalaraTaxDefaults.SystemName, customer))
return RedirectToRoute("CustomerInfo");
if (!_avalaraTaxSettings.EnableCertificates)
return RedirectToRoute("CustomerInfo");
//ACL
if (_avalaraTaxSettings.CustomerRoleIds.Any())
{
var customerRoleIds = await _customerService.GetCustomerRoleIdsAsync(customer);
if (!customerRoleIds.Intersect(_avalaraTaxSettings.CustomerRoleIds).Any())
return RedirectToRoute("CustomerInfo");
}
//try to get a file by the identifier
var file = await _avalaraTaxManager.DownloadCertificateAsync(id);
if (file is null)
return InvokeHttp404();
return File(file.Data, file.ContentType, file.Filename?.Split(';')?.FirstOrDefault() ?? "certificate");
}
#endregion
}