public async Task <PlanedRouteTrain> AddTrainToPlanedRouteTrains(PlanedRouteTrain input) { using (var transaction = new TransactionScope(asyncFlowOption: TransactionScopeAsyncFlowOption.Enabled)) { var sqlRTrips = new TripsRepository(_logger); var sqlRStations = new StantionOnTripsRepository(_logger); var sqlRInspectionOnRoutes = new InspectionRoutesRepository(_logger); var sqlRPlanedInspectionOnRoutes = new PlanedInspectionRoutesRepository(_logger); var sqlRPlaneStations = new PlanedStationOnTripsRepository(_logger); var sqlRPlanedRouteTrains = new PlanedRouteTrainsRepository(_logger); //Валидация Хуяция. //TODO поменять на sql var trainPlaneRoutes = await sqlRPlanedRouteTrains.ByTrainId(input.TrainId); if (trainPlaneRoutes.Any(x => x.Date.Date.Equals(input.Date.Date))) { throw new ValidationException(Error.AlreadyAdd); } var result = await sqlRPlanedRouteTrains.Add(input); var trips = await sqlRTrips.GetTripsByRouteId(input.RouteId); //var tripsStationsDictionary = new Dictionary<Trip, List<StantionOnTrip>>(); foreach (var trip in trips) { var stations = await sqlRStations.ByTripId(trip.Id); foreach (var station in stations) { var toAdd = _mapper.Map <StantionOnTrip, PlaneStantionOnTrip>(station); toAdd.PlanedRouteTrainId = result.Id; var newInTime = toAdd.InTime - DateTime.MinValue; toAdd.InTime = input.Date.Date.Add(newInTime); var newOutTime = toAdd.OutTime - DateTime.MinValue; toAdd.OutTime = input.Date.Date.Add(newOutTime); await sqlRPlaneStations.Add(toAdd); } //tripsStationsDictionary.Add(trip, stations); } //И тут я узнал что надо инспекции скопировать ебать их в рот var inspections = await sqlRInspectionOnRoutes.GetByRouteId(input.RouteId); foreach (var inspection in inspections) { var toAdd = new PlanedInspectionRoute { CheckListType = inspection.CheckListType, PlanedRouteTrainId = result.Id, }; var newInTime = inspection.Start - inspection.Start.Date; toAdd.Start = input.Date.Date.Add(newInTime); var newOutTime = inspection.End - inspection.End.Date; toAdd.End = input.Date.Date.Add(newOutTime); await sqlRPlanedInspectionOnRoutes.Add(toAdd); } transaction.Complete(); return(result); } }
public async Task <RoutesWithTripsAndToPaging> GetRoutesWithTripsAndToByTurnoverId(int turnoverId, int skip, int limit, int?routeId = null) { var sqlRRoute = new RoutesRepository(_logger); var sqlRTripsOnRoute = new TripsOnRouteRepository(_logger); var sqlRTrips = new TripsRepository(_logger); var sqlRStationOnTrips = new StantionOnTripsRepository(_logger); var sqlRInspectionRoutes = new InspectionRoutesRepository(_logger); var routes = new List <Route>(); var total = 0; if (routeId == null) { var paging = await sqlRRoute.GetByTurnoverIdPaging(turnoverId, skip, limit); routes.AddRange(paging.Data); total = paging.Total; } else { routes.Add(await sqlRRoute.ById(routeId.Value)); } var result = new RoutesWithTripsAndToPaging { Data = new List <RoutesWithTripsAndTo>(), Total = total }; foreach (var route in routes) { var data = new RoutesWithTripsAndTo { Id = route.Id, Name = route.Name, Mileage = route.Mileage, Description = route.Description, TurnoverId = route.TurnoverId, InspectionRoutes = await sqlRInspectionRoutes.GetByRouteId(route.Id) }; var tripsOnRoute = await sqlRTripsOnRoute.ByRouteId(route.Id); var trips = new List <TripWithTripOnRouteId>(); foreach (var tripOnRoute in tripsOnRoute) { var trip = await sqlRTrips.ById(tripOnRoute.TripId); var toAdd = _mapper.Map <Trip, TripWithTripOnRouteId>(trip); toAdd.TripOnRouteId = tripOnRoute.Id; trips.Add(toAdd); } data.Trips = trips; foreach (var trip in data.Trips) { trip.StantionOnTrips = new List <StantionOnTrip>(); var stationsOnTrip = await sqlRStationOnTrips.ByTripId(trip.Id); foreach (var stationOnTrip in stationsOnTrip) { trip.StantionOnTrips.Add(stationOnTrip); } } result.Data.Add(data); } return(result); }