mirror of https://github.com/EasyAbp/EShop.git
1 changed files with 94 additions and 0 deletions
@ -0,0 +1,94 @@ |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
using EasyAbp.EShop.Orders.Orders; |
|||
using EasyAbp.EShop.Orders.Orders.Dtos; |
|||
using EasyAbp.EShop.Plugins.Booking.ProductAssetCategories; |
|||
using EasyAbp.EShop.Plugins.Booking.ProductAssetCategories.Dtos; |
|||
using EasyAbp.EShop.Plugins.Booking.ProductAssets; |
|||
using EasyAbp.EShop.Plugins.Booking.ProductAssets.Dtos; |
|||
using EasyAbp.EShop.Products.Products.Dtos; |
|||
using Volo.Abp.DependencyInjection; |
|||
|
|||
namespace EasyAbp.EShop.Orders.Booking; |
|||
|
|||
public class BookingOrderLinePriceOverrider : IOrderLinePriceOverrider, ITransientDependency |
|||
{ |
|||
private readonly IProductAssetAppService _productAssetAppService; |
|||
private readonly IProductAssetCategoryAppService _productAssetCategoryAppService; |
|||
|
|||
public BookingOrderLinePriceOverrider( |
|||
IProductAssetAppService productAssetAppService, |
|||
IProductAssetCategoryAppService productAssetCategoryAppService) |
|||
{ |
|||
_productAssetAppService = productAssetAppService; |
|||
_productAssetCategoryAppService = productAssetCategoryAppService; |
|||
} |
|||
|
|||
public virtual async Task<decimal?> GetUnitPriceOrNullAsync(CreateOrderDto input, CreateOrderLineDto inputOrderLine, |
|||
ProductDto product, ProductSkuDto productSku) |
|||
{ |
|||
if (inputOrderLine.FindBookingAssetId() is not null) |
|||
{ |
|||
return await GetAssetBookingUnitPriceAsync(input, inputOrderLine); |
|||
} |
|||
|
|||
if (inputOrderLine.FindBookingAssetCategoryId() is not null) |
|||
{ |
|||
return await GetAssetCategoryBookingUnitPriceAsync(input, inputOrderLine); |
|||
} |
|||
|
|||
return null; |
|||
} |
|||
|
|||
public virtual async Task<decimal?> GetAssetBookingUnitPriceAsync(CreateOrderDto input, |
|||
CreateOrderLineDto inputOrderLine) |
|||
{ |
|||
var productAsset = (await _productAssetAppService.GetListAsync( |
|||
new GetProductAssetDto |
|||
{ |
|||
MaxResultCount = 1, |
|||
StoreId = input.StoreId, |
|||
ProductId = inputOrderLine.ProductId, |
|||
ProductSkuId = inputOrderLine.ProductSkuId, |
|||
AssetId = inputOrderLine.GetBookingAssetId(), |
|||
PeriodSchemeId = inputOrderLine.GetBookingPeriodSchemeId() |
|||
} |
|||
)).Items.First(); |
|||
|
|||
var productAssetPeriod = |
|||
productAsset.Periods.FirstOrDefault(x => x.PeriodId == inputOrderLine.GetBookingPeriodId()); |
|||
|
|||
if (productAssetPeriod is not null) |
|||
{ |
|||
return productAssetPeriod.Price; |
|||
} |
|||
|
|||
return productAsset.Price; |
|||
} |
|||
|
|||
public virtual async Task<decimal?> GetAssetCategoryBookingUnitPriceAsync(CreateOrderDto input, |
|||
CreateOrderLineDto inputOrderLine) |
|||
{ |
|||
var productAssetCategory = (await _productAssetCategoryAppService.GetListAsync( |
|||
new GetProductAssetCategoryDto |
|||
{ |
|||
MaxResultCount = 1, |
|||
StoreId = input.StoreId, |
|||
ProductId = inputOrderLine.ProductId, |
|||
ProductSkuId = inputOrderLine.ProductSkuId, |
|||
AssetCategoryId = inputOrderLine.GetBookingAssetCategoryId(), |
|||
PeriodSchemeId = inputOrderLine.GetBookingPeriodSchemeId() |
|||
} |
|||
)).Items.First(); |
|||
|
|||
var productAssetCategoryPeriod = |
|||
productAssetCategory.Periods.FirstOrDefault(x => x.PeriodId == inputOrderLine.GetBookingPeriodId()); |
|||
|
|||
if (productAssetCategoryPeriod is not null) |
|||
{ |
|||
return productAssetCategoryPeriod.Price; |
|||
} |
|||
|
|||
return productAssetCategory.Price; |
|||
} |
|||
} |
|||
Loading…
Reference in new issue