auto.bus_api/Server/Models/RouteAddress.cs
cuqmbr 63cc9a9edc refactor: make TicketGroup the main controller for ticket data retrieval
remove CRUD from TicketGroup, remove Ticket Controller and Service
2023-05-24 10:58:37 +03:00

79 lines
2.5 KiB
C#

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Server.Models;
public class RouteAddress
{
[Key]
public int Id { get; set; }
[ForeignKey("RouteId")]
public int RouteId { get; set; }
public Route Route { get; set; } = null!;
[ForeignKey("AddressId")]
public int AddressId { get; set; }
public Address Address { get; set; } = null!;
[ForeignKey("RouteAddressDetailsId")]
public int RouteAddressDetailsId { get; set; }
public virtual IList<RouteAddressDetails> RouteAddressDetails { get; set; } = null!;
public int Order { get; set; }
public DateTime GetDepartureDateTimeUtc(int vehicleEnrollmentId)
{
var enrollment = Route.VehicleEnrollments.First(ve => ve.Id == vehicleEnrollmentId);
DateTime result = enrollment.DepartureDateTimeUtc;
foreach (var routeAddressDetail in enrollment.RouteAddressDetails)
{
if (routeAddressDetail.RouteAddressId != Route.RouteAddresses.First().Id &&
routeAddressDetail.RouteAddressId != Route.RouteAddresses.Last().Id)
{
result += routeAddressDetail.WaitTimeSpan;
}
if (routeAddressDetail.RouteAddressId == Id)
{
break;
}
if (routeAddressDetail.RouteAddressId != Route.RouteAddresses.Last().Id)
{
result += routeAddressDetail.TimeSpanToNextCity;
}
}
return result;
}
public DateTime GetArrivalDateTimeUtc(int vehicleEnrollmentId)
{
var enrollment = Route.VehicleEnrollments.First(ve => ve.Id == vehicleEnrollmentId);
DateTime result = enrollment.DepartureDateTimeUtc;
foreach (var routeAddressDetail in enrollment.RouteAddressDetails)
{
if (routeAddressDetail.RouteAddressId == Id)
{
break;
}
if (routeAddressDetail.RouteAddressId != Route.RouteAddresses.Last().Id)
{
result += routeAddressDetail.TimeSpanToNextCity;
}
if (routeAddressDetail.RouteAddressId != Route.RouteAddresses.First().Id &&
routeAddressDetail.RouteAddressId != Route.RouteAddresses.Last().Id &&
routeAddressDetail.RouteAddressId != Id)
{
result += routeAddressDetail.WaitTimeSpan;
}
}
return result;
}
}