64 lines
1.9 KiB
C#
64 lines
1.9 KiB
C#
using Microsoft.AspNetCore.Mvc;
|
|
using Nop.Core;
|
|
using Nop.Core.Domain.Tax;
|
|
using Nop.Services.Common;
|
|
using Nop.Services.Customers;
|
|
using Nop.Web.Framework.Controllers;
|
|
|
|
namespace Nop.Plugin.Tax.Avalara.Controllers;
|
|
|
|
[AutoValidateAntiforgeryToken]
|
|
public class AddressValidationController : BaseController
|
|
{
|
|
#region Fields
|
|
|
|
protected readonly IAddressService _addressService;
|
|
protected readonly ICustomerService _customerService;
|
|
protected readonly IWorkContext _workContext;
|
|
protected readonly TaxSettings _taxSettings;
|
|
|
|
#endregion
|
|
|
|
#region Ctor
|
|
|
|
public AddressValidationController(IAddressService addressService,
|
|
ICustomerService customerService,
|
|
IWorkContext workContext,
|
|
TaxSettings taxSettings)
|
|
{
|
|
_addressService = addressService;
|
|
_customerService = customerService;
|
|
_workContext = workContext;
|
|
_taxSettings = taxSettings;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Methods
|
|
|
|
[HttpPost]
|
|
public async Task<IActionResult> UseValidatedAddress(int addressId, bool isNewAddress)
|
|
{
|
|
//try to get an address by the passed identifier
|
|
var address = await _addressService.GetAddressByIdAsync(addressId);
|
|
if (address != null)
|
|
{
|
|
var customer = await _workContext.GetCurrentCustomerAsync();
|
|
//add address to customer collection if it's a new
|
|
if (isNewAddress)
|
|
await _customerService.InsertCustomerAddressAsync(customer, address);
|
|
|
|
//and update appropriate customer address
|
|
if (_taxSettings.TaxBasedOn == TaxBasedOn.BillingAddress)
|
|
(customer).BillingAddressId = address.Id;
|
|
if (_taxSettings.TaxBasedOn == TaxBasedOn.ShippingAddress)
|
|
(customer).ShippingAddressId = address.Id;
|
|
await _customerService.UpdateCustomerAsync(customer);
|
|
}
|
|
|
|
//nothing to return
|
|
return Content(string.Empty);
|
|
}
|
|
|
|
#endregion
|
|
} |