67 lines
2.8 KiB
C#
67 lines
2.8 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;
|
|
private readonly AdminDal _adminDal;
|
|
|
|
public TransferBackendService(IConfiguration configuration, AdminDal adminDal)
|
|
{
|
|
_configuration = configuration;
|
|
_adminDal = adminDal;
|
|
}
|
|
|
|
public double GetTransferPrice(Guid productId, Guid fromTransferDestinationId, Guid toTranferDestinationId, in byte seatNumber)
|
|
{
|
|
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;
|
|
|
|
//A ProductCommis nem ugyanaz mint az ExtraPrice?!? - J.
|
|
var price = GetSeatNumberPrice(in tranferDestinationPrice, seatNumber) + tranferDestinationPrice.ProductCommis;
|
|
|
|
//TODO: ExtraPrice - J. seatnum percent price, FirstName, LastName, CascadeDelete
|
|
//if (baseDestination.Id == fromTransferDestination.Id && )
|
|
return price;
|
|
}
|
|
|
|
public double GetSeatNumberPrice(in ITransfeDestinationPrices transfeDestinationPrices, in byte seatNumber)
|
|
=> GetSeatNumberPrice(transfeDestinationPrices.Price, transfeDestinationPrices.Price2, transfeDestinationPrices.Price3, seatNumber);
|
|
|
|
public double GetSeatNumberPrice(double price, in double? price2, in double? price3, in byte seatNumber)
|
|
{
|
|
return seatNumber switch
|
|
{
|
|
>= (byte)SeatNumberPriceType.Price3SeatNum => price3 ?? price //TODO: price * seatnum percent - J.
|
|
,
|
|
>= (byte)SeatNumberPriceType.Price2SeatNum => price2 ?? price //TODO: price * seatnum percent - J.
|
|
,
|
|
_ => price
|
|
};
|
|
}
|
|
|
|
}
|
|
}
|