in src/Modules/SimplCommerce.Module.Orders/Services/OrderService.cs [379:433]
public async Task<OrderTaxAndShippingPriceVm> UpdateTaxAndShippingPrices(long cartId, TaxAndShippingPriceRequestVm model)
{
var cart = await _cartRepository.Query().FirstOrDefaultAsync(x => x.Id == cartId);
if (cart == null)
{
throw new ApplicationException($"Cart id {cartId} not found");
}
Address address;
if (model.ExistingShippingAddressId != 0)
{
address = await _userAddressRepository.Query().Where(x => x.Id == model.ExistingShippingAddressId).Select(x => x.Address).FirstOrDefaultAsync();
if (address == null)
{
throw new ApplicationException($"Address id {model.ExistingShippingAddressId} not found");
}
}
else
{
address = new Address
{
CountryId = model.NewShippingAddress.CountryId,
StateOrProvinceId = model.NewShippingAddress.StateOrProvinceId,
DistrictId = model.NewShippingAddress.DistrictId,
ZipCode = model.NewShippingAddress.ZipCode,
AddressLine1 = model.NewShippingAddress.AddressLine1,
};
}
var orderTaxAndShippingPrice = new OrderTaxAndShippingPriceVm
{
Cart = await _cartService.GetActiveCartDetails(cart.CustomerId, cart.CreatedById)
};
cart.TaxAmount = orderTaxAndShippingPrice.Cart.TaxAmount = await GetTax(cartId, address.CountryId, address.StateOrProvinceId, address.ZipCode);
var request = new GetShippingPriceRequest
{
OrderAmount = orderTaxAndShippingPrice.Cart.OrderTotal,
ShippingAddress = address
};
orderTaxAndShippingPrice.ShippingPrices = await _shippingPriceService.GetApplicableShippingPrices(request);
var selectedShippingMethod = string.IsNullOrWhiteSpace(model.SelectedShippingMethodName)
? orderTaxAndShippingPrice.ShippingPrices.FirstOrDefault()
: orderTaxAndShippingPrice.ShippingPrices.FirstOrDefault(x => x.Name == model.SelectedShippingMethodName);
if (selectedShippingMethod != null)
{
cart.ShippingAmount = orderTaxAndShippingPrice.Cart.ShippingAmount = selectedShippingMethod.Price;
cart.ShippingMethod = orderTaxAndShippingPrice.SelectedShippingMethodName = selectedShippingMethod.Name;
}
await _cartRepository.SaveChangesAsync();
return orderTaxAndShippingPrice;
}