autobus-api_old/AutobusApi.Domain/Entities/TicketGroup.cs

65 lines
1.8 KiB
C#

using AutobusApi.Domain.Common;
using AutobusApi.Domain.Enums;
namespace AutobusApi.Domain.Entities;
public class TicketGroup : EntityBase
{
public string BuyerFirstName { get; set; } = null!;
public string BuyerLastName { get; set; } = null!;
public string BuyerPhoneNumber { get; set; } = null!;
public string BuyerEmailAddress { get; set; } = null!;
public string PassengerFirstName { get; set; } = null!;
public string PassengerLastName { get; set; } = null!;
public string PassengerPatronymic { get; set; } = null!;
public Sex PassengerSex { get; set; }
public DateOnly PassengerBirthDate { get; set; }
public DateTime PurchaseDateTimeUtc { get; set; }
public bool IsReturned { get; set; }
public int? UserId { get; set; }
public User? User { get; set; }
public int TicketDocumentId { get; set; }
public TicketDocument TicketDocument { get; set; } = null!;
public ICollection<Ticket> Tickets { get; set; } = new List<Ticket>();
public DateTime GetDepartureDateTimeUtc()
{
var firstTicket = Tickets.OrderBy(t => t.VehicleEnrollment.GetDepartureDateTimeUtc(t.DepartureAddressId)).First();
return firstTicket.VehicleEnrollment.GetDepartureDateTimeUtc(firstTicket.DepartureAddressId);
}
public DateTime GetArrivalDateTimeUtc()
{
var lastTicket = Tickets.OrderBy(t => t.VehicleEnrollment.GetDepartureDateTimeUtc(t.DepartureAddressId)).Last();
return lastTicket.VehicleEnrollment.GetArrivalDateTimeUtc(lastTicket.ArrivalAddressId);
}
public TimeSpan GetTravelTime()
{
return GetArrivalDateTimeUtc() - GetDepartureDateTimeUtc();
}
public double GetCost()
{
return Tickets.Aggregate(0.0, (sum, ticket) =>
sum + ticket.VehicleEnrollment.GetCost(ticket.DepartureAddressId, ticket.ArrivalAddressId));
}
}