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 }; } } }