65 lines
2.5 KiB
C#
65 lines
2.5 KiB
C#
using TIAM.Core.Enums;
|
|
using TIAM.Database.DataLayers.Admins;
|
|
using TIAM.Database.DataLayers.Users;
|
|
using TIAM.Entities.Products;
|
|
using TIAM.Entities.Transfers;
|
|
|
|
namespace TIAMWebApp.Server.Services
|
|
{
|
|
public class TransferBackendService
|
|
{
|
|
private readonly IConfiguration _configuration;
|
|
public AdminDal _adminDal;
|
|
|
|
public TransferBackendService(IConfiguration configuration, AdminDal adminDal)
|
|
{
|
|
|
|
_configuration = configuration;
|
|
_adminDal = adminDal;
|
|
}
|
|
|
|
public double GetTransferPrice(Guid productId, Guid fromTransferDestinationId, Guid toTranferDestinationId)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public double GetTransferPrice(Guid productId, TransferDestination fromTransferDestination, TransferDestination toTransferDestination, in byte seatNumber)
|
|
{
|
|
var product = _adminDal.GetProductById(productId);
|
|
|
|
if (product == null) return -1;
|
|
|
|
return GetTransferPrice(product, fromTransferDestination, toTransferDestination, in seatNumber);
|
|
}
|
|
|
|
public double GetTransferPrice(Product product, TransferDestination fromTransferDestination, TransferDestination toTransferDestination, in byte seatNumber)
|
|
{
|
|
var baseDestination = product.Profile.AddressId == fromTransferDestination.AddressId ? toTransferDestination : fromTransferDestination;
|
|
|
|
var transferDestinationToProduct = _adminDal.GetTransferDestinationToProduct(product.Id, baseDestination.Id);
|
|
|
|
var tranferDestinationPrice = transferDestinationToProduct ?? baseDestination as ITransfeDestinationPrices;
|
|
|
|
var price = GetSeatNumberPrice(in tranferDestinationPrice, seatNumber);
|
|
|
|
//TODO: ExtraPrice - J.
|
|
|
|
return price;
|
|
}
|
|
|
|
public double GetSeatNumberPrice(in ITransfeDestinationPrices transfeDestinationPrices, in byte seatNumber)
|
|
=> GetSeatNumberPrice(transfeDestinationPrices.Price, transfeDestinationPrices.Price2, transfeDestinationPrices.Price3, seatNumber);
|
|
|
|
public double GetSeatNumberPrice(in double price, in double? price2, in double? price3, in byte seatNumber)
|
|
{
|
|
if (seatNumber >= (byte)SeatNumberPriceType.Price3SeatNum)
|
|
return price3 ?? price; //TODO: *seatnum percent - J.
|
|
|
|
if (seatNumber >= (byte)SeatNumberPriceType.Price2SeatNum)
|
|
return price2 ?? price; //TODO: *seatnum percent - J.
|
|
|
|
return price;
|
|
}
|
|
}
|
|
}
|