using AutobusApi.Application.Common.Mappings; using AutobusApi.Domain.Entities; using AutoMapper; namespace AutobusApi.Application.TicketGroups.Queries; public class TicketGroupDto : IMapFrom { public int Id { get; set; } public int? UserId { get; set; } 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 string PassengerSex { get; set; } = null!; public DateOnly PassengerBirthDate { get; set; } public DateTime PurchaseDateTime { get; set; } public bool IsReturned { get; set; } public string DocumentType { get; set; } = null!; public string DocumentInformation { get; set; } = null!; public List Tickets { get; set; } = null!; public DateTime DepartureDateTime { get; set; } public DateTime ArrivalDateTime { get; set; } public TimeSpan Time { get; set; } public double Cost { get; set; } public void Mapping(Profile profile) { profile.CreateMap() .ForMember(d => d.PassengerSex, opt => opt.MapFrom(s => s.PassengerSex.ToString())) .ForMember(d => d.DocumentType, opt => opt.MapFrom(s => s.TicketDocument.Type.ToString())) .ForMember(d => d.DocumentInformation, opt => opt.MapFrom(s => s.TicketDocument.Information)) .ForMember(d => d.Tickets, opt => opt.MapFrom(s => s.Tickets)) .ForMember(d => d.DepartureDateTime, opt => opt.MapFrom(s => s.GetDepartureDateTimeUtc())) .ForMember(d => d.ArrivalDateTime, opt => opt.MapFrom(s => s.GetArrivalDateTimeUtc())) .ForMember(d => d.Time, opt => opt.MapFrom(s => s.GetTravelTime())) .ForMember(d => d.Cost, opt => opt.MapFrom(s => s.GetCost())) .ForMember(d => d.PurchaseDateTime, opt => opt.MapFrom(s => s.PurchaseDateTimeUtc)); } } public class TicketDto : IMapFrom { public int Id { get; set; } public int VehicleEnrollmentId { get; set; } public int DepartureAddressId { get; set; } public string DepartureAddressName { get; set; } = null!; public int DepartureCityId { get; set; } public string DepartureCityName { get; set; } = null!; public int DepartureRegionId { get; set; } public string DepartureRegionName { get; set; } = null!; public int DepartureCountryId { get; set; } public string DepartureCountryName { get; set; } = null!; public DateTime DepartureDateTime { get; set; } public int ArrivalAddressId { get; set; } public string ArrivalAddressName { get; set; } = null!; public int ArrivalCityId { get; set; } public string ArrivalCityName { get; set; } = null!; public int ArrivalRegionId { get; set; } public string ArrivalRegionName { get; set; } = null!; public int ArrivalCountryId { get; set; } public string ArrivalCountryName { get; set; } = null!; public DateTime ArrivalDateTime { get; set; } public TimeSpan Time { get; set; } public double Cost { get; set; } public void Mapping(Profile profile) { profile.CreateMap() .ForMember( d => d.DepartureAddressName, opt => opt.MapFrom( s => s.VehicleEnrollment.Route.RouteAddresses.Single(ra => ra.AddressId == s.DepartureAddressId).Address.Name)) .ForMember( d => d.DepartureCityId, opt => opt.MapFrom( s => s.VehicleEnrollment.Route.RouteAddresses.Single(ra => ra.AddressId == s.DepartureAddressId).Address.CityId)) .ForMember( d => d.DepartureCityName, opt => opt.MapFrom( s => s.VehicleEnrollment.Route.RouteAddresses.Single(ra => ra.AddressId == s.DepartureAddressId).Address.City.Name)) .ForMember( d => d.DepartureRegionId, opt => opt.MapFrom( s => s.VehicleEnrollment.Route.RouteAddresses.Single(ra => ra.AddressId == s.DepartureAddressId).Address.City.RegionId)) .ForMember( d => d.DepartureRegionName, opt => opt.MapFrom( s => s.VehicleEnrollment.Route.RouteAddresses.Single(ra => ra.AddressId == s.DepartureAddressId).Address.City.Region.Name)) .ForMember( d => d.DepartureCountryId, opt => opt.MapFrom( s => s.VehicleEnrollment.Route.RouteAddresses.Single(ra => ra.AddressId == s.DepartureAddressId).Address.City.Region.CountryId)) .ForMember( d => d.DepartureCountryName, opt => opt.MapFrom( s => s.VehicleEnrollment.Route.RouteAddresses.Single(ra => ra.AddressId == s.DepartureAddressId).Address.City.Region.Country.Name)) .ForMember( d => d.DepartureDateTime, opt => opt.MapFrom(s => s.VehicleEnrollment.GetDepartureDateTimeUtc(s.DepartureAddressId))) .ForMember( d => d.ArrivalAddressName, opt => opt.MapFrom( s => s.VehicleEnrollment.Route.RouteAddresses.Single(ra => ra.AddressId == s.ArrivalAddressId).Address.Name)) .ForMember( d => d.ArrivalCityId, opt => opt.MapFrom( s => s.VehicleEnrollment.Route.RouteAddresses.Single(ra => ra.AddressId == s.ArrivalAddressId).Address.CityId)) .ForMember( d => d.ArrivalCityName, opt => opt.MapFrom( s => s.VehicleEnrollment.Route.RouteAddresses.Single(ra => ra.AddressId == s.ArrivalAddressId).Address.City.Name)) .ForMember( d => d.ArrivalRegionId, opt => opt.MapFrom( s => s.VehicleEnrollment.Route.RouteAddresses.Single(ra => ra.AddressId == s.ArrivalAddressId).Address.City.RegionId)) .ForMember( d => d.ArrivalRegionName, opt => opt.MapFrom( s => s.VehicleEnrollment.Route.RouteAddresses.Single(ra => ra.AddressId == s.ArrivalAddressId).Address.City.Region.Name)) .ForMember( d => d.ArrivalCountryId, opt => opt.MapFrom( s => s.VehicleEnrollment.Route.RouteAddresses.Single(ra => ra.AddressId == s.ArrivalAddressId).Address.City.Region.CountryId)) .ForMember( d => d.ArrivalCountryName, opt => opt.MapFrom( s => s.VehicleEnrollment.Route.RouteAddresses.Single(ra => ra.AddressId == s.ArrivalAddressId).Address.City.Region.Country.Name)) .ForMember( d => d.ArrivalDateTime, opt => opt.MapFrom(s => s.VehicleEnrollment.GetArrivalDateTimeUtc(s.ArrivalAddressId))) .ForMember(d => d.Time, opt => opt.MapFrom(s => s.VehicleEnrollment.GetTravelTime(s.DepartureAddressId, s.ArrivalAddressId))) .ForMember(d => d.Cost, opt => opt.MapFrom(s => s.VehicleEnrollment.GetCost(s.DepartureAddressId, s.ArrivalAddressId))); } }