public async Task ClearRouteTurnoverId(int routeId)
        {
            await CheckPermission();

            var er = new RoutesRepository(_logger);
            await er.ClearTurnoverId(routeId);
        }
        private async Task <bool> CompareDaysFromTurnover(TripOnRouteWithStationsDto input)
        {
            var sqlRRoute = new RoutesRepository(_logger);
            var route     = await sqlRRoute.ById(input.RouteId);

            if (route.TurnoverId == null)
            {
                throw new ValidationException("У данного маршрута отсутсвует цикловой график");
            }
            var sqlRTurnover = new TurnoversRepoisitory(_logger);
            var turnover     = await sqlRTurnover.ById((int)route.TurnoverId);

            var sqlRDaysOnRoute         = new DayOfRoutesRepoisitory(_logger);
            var daysOfRouteFromTurnover = await sqlRDaysOnRoute.DaysByTurnoverId(turnover.Id);

            var daysFromTurnover = daysOfRouteFromTurnover.Select(x => x.Day).ToList();

            daysFromTurnover.Sort();
            input.Days.Sort();

            var isgoodTrip = true;

            foreach (var d in daysFromTurnover)
            {
                if (!input.Days.Any(x => x.Equals(d)))
                {
                    isgoodTrip = false;
                }
            }
            if (isgoodTrip)
            {
                return(true);
            }
            return(false);
        }
        public async Task <InspectionRoute> AddOrUpdateInspectionOnRoute(InspectionRoute input)
        {
            var sqlRoute = new RoutesRepository(_logger);
            var route    = await sqlRoute.ById(input.RouteId);

            if (route?.TurnoverId == null)
            {
                throw Error.CommonError;
            }
            var routesWithTimelinePaging = await GetRoutesWithTimeline((int)route.TurnoverId, 0, int.MaxValue, route.Id);

            var timeLines = routesWithTimelinePaging.Data.First().TimeLines;

            foreach (var timeline in timeLines)
            {
                if ((input.Start >= timeline.StarTime || input.End >= timeline.StarTime) &&
                    (input.Start <= timeline.EndTime || input.End <= timeline.EndTime))
                {
                    throw new ValidationException(Error.UsedTimeRange);
                }
            }

            var sqlR = new InspectionRoutesRepository(_logger);

            if (input.Id != 0)
            {
                return(await sqlR.Update(input));
            }
            return(await sqlR.Add(input));
        }
Beispiel #4
0
        /// <summary>
        ///  Депо – вкладка с информацией о плановом назначении поезда на места постановки
        /// </summary>
        private static async Task <ReportResponse> GetDepoEventsTable(ReportRequest input, int planedRouteTrainId, ILogger logger)
        {
            var sqlRTrains            = new TrainRepository(logger);
            var sqlRTask              = new TaskRepository(logger);
            var sqlRPlanedRouteTrains = new PlanedRouteTrainsRepository(logger);
            var sqlRRoute             = new RoutesRepository(logger);
            var sqlRInspections       = new InspectionRepository(logger);
            var sqlRTaskAttributes    = new TrainTaskAttributesRepository(logger);
            var sqlREquipmentModel    = new EquipmentModelsRepository(logger);
            var sqlREquipment         = new EquipmentRepository(logger);
            var sqlRCarriage          = new CarriageRepository(logger);
            var sqlR          = new PrimitiveRepository(logger, "Parkings");
            var sqlRDepoEvent = new DepoEventsRepository(logger);



            var result = new ReportResponse {
                Rows = new List <Row>()
            };

            result.Columns = new List <Column>
            {
                new Column("col0", "Место постановки", "string"),
                new Column("col1", "Время захода на место постановки", "date"),
                new Column("col2", "Время выхода с места постановки", "date"),
            };

            var planedRouteTrain = await sqlRPlanedRouteTrains.ById(planedRouteTrainId);

            var events = await sqlRDepoEvent.ByTrainId(planedRouteTrain.TrainId);

            foreach (var item in events)
            {
                var parking = await sqlR.ById <Parking>(item.ParkingId);

                string testStopTime = null;
                if (item.TestStopTime != null)
                {
                    testStopTime = ((DateTime)item.TestStopTime).ToStringDateTime();
                }

                var row = new Row
                {
                    Id       = new RowId(item.Id, 1),
                    HasItems = false.ToString(),
                    ParentId = null,
                    //Место постановки
                    Col0 = parking.Name,
                    //Время захода на место постановки
                    Col1 = item.InTime.ToStringDateTime(),
                    //Время выхода с места постановки
                    Col2 = testStopTime
                };

                result.Rows.Add(row);
            }

            return(result);
        }
        public async Task Delete(int id)
        {
            await CheckPermission();

            var sqlR = new RoutesRepository(_logger);

            sqlR.Delete(id);
        }
        /// <summary>
        /// Removes a route.
        /// </summary>
        /// <param name="routeId"></param>
        public IActionResult OnGetRemoveRoute(int id)
        {
            var route = RoutesRepository.GetById(id);

            RoutesRepository.Delete(route);
            RoutesRepository.SaveChanges();
            return(OnGet());
        }
Beispiel #7
0
        public void getRoutes()
        {
            var routes = new List <Route>
            {
                new Route
                {
                    Id       = 1,
                    Category = "Marathon",
                    Owner    = "rocio",
                    Country  = "Bolivia",
                    City     = "Cochabamba",
                    Address  = "Av.Ballivian",
                    Date     = "03/12/2018"
                },
                new Route
                {
                    Id       = 2,
                    Category = "Tour",
                    Owner    = "roxana",
                    Country  = "Bolivia",
                    City     = "Cochabamba",
                    Address  = "Melchor Perez",
                    Date     = "03/12/2018"
                },
            }.AsQueryable();

            var checkpoints = new List <Checkpoint>
            {
            }.AsQueryable();

            var mockSet = new Mock <DbSet <Route> >();

            mockSet.As <IQueryable <Route> >().Setup(m => m.Provider).Returns(routes.Provider);
            mockSet.As <IQueryable <Route> >().Setup(m => m.Expression).Returns(routes.Expression);
            mockSet.As <IQueryable <Route> >().Setup(m => m.ElementType).Returns(routes.ElementType);
            mockSet.As <IQueryable <Route> >().Setup(m => m.GetEnumerator()).Returns(routes.GetEnumerator());


            var mockSet2 = new Mock <DbSet <Checkpoint> >();

            mockSet2.As <IQueryable <Checkpoint> >().Setup(m => m.Provider).Returns(checkpoints.Provider);
            mockSet2.As <IQueryable <Checkpoint> >().Setup(m => m.Expression).Returns(checkpoints.Expression);
            mockSet2.As <IQueryable <Checkpoint> >().Setup(m => m.ElementType).Returns(checkpoints.ElementType);
            mockSet2.As <IQueryable <Checkpoint> >().Setup(m => m.GetEnumerator()).Returns(checkpoints.GetEnumerator());

            var mockContext = new Mock <CyclepathDbContext>();

            mockContext.Setup(c => c.Routes).Returns(mockSet.Object);
            mockContext.Setup(c => c.Checkpoints).Returns(mockSet2.Object);
            var configuration = new Mock <IConfiguration>();
            var service       = new RoutesRepository(mockContext.Object);

            var routesMock = service.GetAll().ToList();

            Assert.AreEqual(2, routesMock.Count);
            Assert.AreEqual("Cochabamba", routesMock[0].City);
            Assert.AreEqual("Melchor Perez", routesMock[1].Address);
        }
        public async Task <JsonResult> GetAll(int skip, int limit, string filter = null)
        {
            await CheckPermission();

            var er     = new RoutesRepository(_logger);
            var result = await er.GetAll(skip, limit, filter);

            return(Json(result));
        }
        /// <summary>
        /// Adds a route.
        /// </summary>
        /// <param name="routeId"></param>
        public IActionResult OnGetAddRoute(int eventId)
        {
            var route       = new Route();
            var dinnerEvent = DinnerEventsRepository.GetById(eventId);

            route.Event = dinnerEvent;
            RoutesRepository.Insert(route);
            RoutesRepository.SaveChanges();
            return(OnGet());
        }
Beispiel #10
0
        public CourierHelperDb(string sqlServerConnectionString)
        {
            _context = new CourierHelperDbContext(sqlServerConnectionString);

            OrdersRepo       = new OrdersRepository(_context);
            CouriersRepo     = new CouriersRepository(_context);
            WarehousesRepo   = new WarehousesRepository(_context);
            CustomersRepo    = new CustomersRepository(_context);
            RoutesRepo       = new RoutesRepository(_context);
            ActivePointsRepo = new ActivePointsRepository(_context);
            TracksRepo       = new TracksRepository(_context);
        }
        /// <summary>
        /// Removes all routes.
        /// </summary>
        /// <param name="routeId"></param>
        public IActionResult OnGetRemoveAllRoutes(int eventId)
        {
            var routes = RoutesRepository.SearchFor(x => x.Event.Id == eventId);

            foreach (var route in routes)
            {
                RoutesRepository.Delete(route);
            }

            RoutesRepository.SaveChanges();
            return(OnGet());
        }
Beispiel #12
0
        /// <summary>
        /// То2 таблица
        /// </summary>
        private static async Task <ChangedTo2OrCtoDto> GetTo2OrCto(GetRouteInformationTableRequest input, ILogger logger)
        {
            var sqlRPlaneInspections   = new PlanedInspectionRoutesRepository(logger);
            var sqlRChangedInspections = new ChangedPlanedInspectionRoutesRepository(logger);

            var planedInspection = await sqlRPlaneInspections.ById(input.EntityId);

            var changedInspection = await sqlRChangedInspections.ByPlanedInspectionRouteId(planedInspection.Id);

            var sqlRTrains            = new TrainRepository(logger);
            var sqlRPlanedRouteTrains = new PlanedRouteTrainsRepository(logger);
            var sqlRRoute             = new RoutesRepository(logger);

            var planedRouteTrain = await sqlRPlanedRouteTrains.ById(input.PlanedRouteTrainId);

            var route = await sqlRRoute.ById(planedRouteTrain.RouteId);

            var train = await sqlRTrains.ById(planedRouteTrain.TrainId);


            var result = new ChangedTo2OrCtoDto
            {
                Id        = planedInspection.Id,
                RouteName = route.Name,
                TrainName = train.Name,
                Plan      = new ChangedTo2OrCtoDto.Planned
                {
                    DateStart = planedInspection.Start.ToFuckingGenaFormat(planedRouteTrain.Date),
                    DateEnd   = planedInspection.End.ToFuckingGenaFormat(planedRouteTrain.Date)
                },
                Fact = new ChangedTo2OrCtoDto.Actual
                {
                    DateStart = planedInspection.Start.ToFuckingGenaFormat(planedRouteTrain.Date),
                    DateEnd   = planedInspection.End.ToFuckingGenaFormat(planedRouteTrain.Date),
                    Canseled  = false
                }
            };

            if (changedInspection != null)
            {
                result.Fact.DateStart = changedInspection.Start.ToFuckingGenaFormat(planedRouteTrain.Date);
                result.Fact.DateEnd   = changedInspection.End.ToFuckingGenaFormat(planedRouteTrain.Date);
                if (changedInspection.Droped)
                {
                    result.Fact.Canseled = changedInspection.Droped;
                }
            }

            return(result);
        }
        private async Task CheckTimelineUsing(int routeId, int tripId)
        {
            var sqlRStationsOnTrip = new StantionOnTripsRepository(_logger);
            //Берем станки трипа для добавления
            var tripToAddStations = await sqlRStationsOnTrip.ByTripId(tripId);

            tripToAddStations = tripToAddStations.OrderBy(x => x.UpdateDate).ToList();
            var tripToAddStartTime = tripToAddStations.First().OutTime;
            var tripToAddEndTime   = tripToAddStations.Last().InTime;

            if (tripToAddStartTime > tripToAddEndTime)
            {
                tripToAddEndTime = tripToAddEndTime.AddDays(1);
            }
            var service  = new ScheduleCycleService(_logger, _mapper);
            var sqlRoute = new RoutesRepository(_logger);
            var route    = await sqlRoute.ById(routeId);

            if (route?.TurnoverId == null)
            {
                throw Error.CommonError;
            }
            var routesWithTimelinePaging = await service.GetRoutesWithTimeline((int)route.TurnoverId, 0, int.MaxValue, route.Id);

            var timeLines = routesWithTimelinePaging.Data.First().TimeLines;

            foreach (var timeline in timeLines)
            {
                if ((tripToAddStartTime >= timeline.StarTime || tripToAddEndTime >= timeline.StarTime) &&
                    (tripToAddStartTime <= timeline.EndTime || tripToAddEndTime <= timeline.EndTime))
                {
                    throw new ValidationException(Error.UsedTimeRange);
                }
            }

            //var trips = (await sqlRTripOnRoutes.ByRouteId(routeId)).Where(x => x.TripId != tripId);
            //foreach (var trip in trips)
            //{
            //    var stations = await sqlRStations.ByTripId(trip.TripId);
            //    stations = stations.OrderBy(x => x.InTime).ToList();

            //    var tripStartTime = stations.First().InTime;
            //    var tripEndTime = stations.Last().OutTime;

            //    if (!(tripToAddStartTime < tripStartTime && tripToAddEndTime < tripStartTime || tripToAddStartTime > tripEndTime && tripToAddEndTime > tripEndTime))
            //        throw new ValidationException("Пересекается время рейса с текущими рейсами на маршруте");
            //}
        }
        /// <summary>
        /// Saves a route.
        /// </summary>
        /// <returns></returns>
        public IActionResult OnPost(Route route)
        {
            if (HttpContext.Session.GetString("EventId") == null)
            {
                string returnUrl = HttpContext.Request.Path.ToString();
                return(RedirectToPage("/Account/Login", new { area = "Identity", returnUrl }));
            }

            ViewData["IsParticipating"] = HttpContext.Session.GetString("IsParticipating");
            if (route != null)
            {
                Route existingRoute;
                using (var context = new ApplicationDbContext())
                {
                    existingRoute = context.Routes.AsNoTracking().Where(x => x.Id == route.Id).Include("Event")
                                    .Include(a => a.RouteForTeam)
                                    .Include(a => a.FirstCourseHostTeam)
                                    .Include(a => a.FirstCourseGuestTeam1)
                                    .Include(a => a.FirstCourseGuestTeam2)
                                    .Include(a => a.SecondCourseHostTeam)
                                    .Include(a => a.SecondCourseGuestTeam1)
                                    .Include(a => a.SecondCourseGuestTeam2)
                                    .Include(a => a.ThirdCourseHostTeam)
                                    .Include(a => a.ThirdCourseGuestTeam1)
                                    .Include(a => a.ThirdCourseGuestTeam2)
                                    .FirstOrDefault();
                }

                existingRoute.RouteForTeam           = route.RouteForTeam;
                existingRoute.FirstCourseHostTeam    = route.FirstCourseHostTeam;
                existingRoute.FirstCourseGuestTeam1  = route.FirstCourseGuestTeam1;
                existingRoute.FirstCourseGuestTeam2  = route.FirstCourseGuestTeam2;
                existingRoute.SecondCourseHostTeam   = route.SecondCourseHostTeam;
                existingRoute.SecondCourseGuestTeam1 = route.SecondCourseGuestTeam1;
                existingRoute.SecondCourseGuestTeam2 = route.SecondCourseGuestTeam2;
                existingRoute.ThirdCourseHostTeam    = route.ThirdCourseHostTeam;
                existingRoute.ThirdCourseGuestTeam1  = route.ThirdCourseGuestTeam1;
                existingRoute.ThirdCourseGuestTeam2  = route.ThirdCourseGuestTeam2;
                RoutesRepository.Update(existingRoute);
                RoutesRepository.SaveChanges();
            }

            return(RedirectToPage());
        }
        public async Task <JsonResult> AddOrUpdate([FromBody] Route input)
        {
            await CheckPermission();

            var sqlR = new RoutesRepository(_logger);

            if (string.IsNullOrEmpty(input.Name))
            {
                throw new ValidationException(Error.NotFilledOptionalField);
            }

            if (input.TurnoverId != null)
            {
                var routesToCheck = await sqlR.ByTurnoverId((int)input.TurnoverId);

                if (input.Id != 0)
                {
                    routesToCheck = routesToCheck.Where(x => x.Id != input.Id).ToList();
                }
                if (routesToCheck.Any(x => x.Name.Equals(input.Name)))
                {
                    throw new Other.GenaException(Error.AlreadyAddWithThisName);
                }
            }
            else
            {
                var routesToCheck = await sqlR.WithoutTurnover();

                if (input.Id != 0)
                {
                    routesToCheck = routesToCheck.Where(x => x.Id != input.Id).ToList();
                }
                if (routesToCheck.Any(x => x.Name.Equals(input.Name)))
                {
                    throw new Other.GenaException(Error.AlreadyAddWithThisName);
                }
            }

            if (input.Id != 0)
            {
                return(Json(await sqlR.Update(input)));
            }
            return(Json(await sqlR.Add(input)));
        }
        public void RegisterRoutesAsyncTest_ByRouteProvider()
        {
            TestingUtils.ResetRoutesRepository();
            var routesRepository = new RoutesRepository();

            routesRepository.RegisterRoutesAsync(new ValidRouteProvider()).Wait();
            var useProvider     = GetPrivateValueFromRoutesRepository <bool>("_useProvider", routesRepository);
            var routeProvider   = GetPrivateValueFromRoutesRepository <IValidRouteDefinitionProvider>("_routeDefinitionProvider", routesRepository);
            var refreshTimespan = GetPrivateValueFromRoutesRepository <TimeSpan>("_refreshTimespan", routesRepository);

            Assert.Equal(TimeSpan.MinValue, refreshTimespan);
            Assert.True(useProvider);
            Assert.NotNull(routeProvider);
            var routes = routesRepository.GetRoutesAsync().Result;

            Assert.Single(routes.Values);
            Assert.Equal(HttpMethod.Post, routes.Values.First().First().Method);
            Assert.Single(routes.Values.First());
        }
        public void SentinelTest_ThisOneShouldntPassButDoes()
        {
            TestingUtils.ResetSentinel();
            TestingUtils.ResetRoutesRepository();

            var routesRepository = new RoutesRepository();

            routesRepository.RegisterRoutesAsync(new List <IRouteDefinitions>()
            {
                new SpecialRouteTemplateRoutes()
            }).Wait();
            var httpContext = new DefaultHttpContext();

            httpContext.Response.Body = new MemoryStream();
            var request = new DefaultHttpRequest(httpContext)
            {
                Method = HttpMethod.Post.Method,
                Path   = "/v1/yolo/nolo/thisIsDefinitelyNotAnInteger",
                Query  = new QueryCollection(new Dictionary <string, Microsoft.Extensions.Primitives.StringValues>()
                {
                    { "No", "true" }
                }),
                Body = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new TestingType()
                {
                    Yo = "lo", No = "low"
                })))
            };

            httpContext.Items.Add("ExpectedClaims", new List <Claim>()
            {
                new Claim("PityTheFoolType", "low"),
                new Claim("PityTheFoolJsonPath", "low"),
                new Claim("PityTheFoolKeyValue", "true"),
                new Claim("PityTheFoolRegex", "yolo"),
            });
            var sentinel = new Sentinel(reqDelegate, routesRepository);
            var result   = sentinel.Invoke(httpContext);

            Assert.NotNull(request);
            Assert.NotNull(result);
            Assert.Equal((int)HttpStatusCode.Created, httpContext.Response.StatusCode);
        }
        public void RegisterRoutesAsyncTest_ByRouteDefinitions()
        {
            TestingUtils.ResetRoutesRepository();
            var routesRepository = new RoutesRepository();

            routesRepository.RegisterRoutesAsync(new List <IRouteDefinitions>()
            {
                new AnotherRoutes()
            }).Wait();
            var useProvider   = GetPrivateValueFromRoutesRepository <bool>("_useProvider", routesRepository);
            var routeProvider = GetPrivateValueFromRoutesRepository <IValidRouteDefinitionProvider>("_routeDefinitionProvider", routesRepository);

            Assert.False(useProvider);
            Assert.Null(routeProvider);
            var routes = routesRepository.GetRoutesAsync();

            Assert.Equal(2, routes.Result.Values.First().Count);
            Assert.Equal(HttpMethod.Put, routes.Result.Values.First().First().Method);
            Assert.Equal(HttpMethod.Put, routes.Result.Values.First().ElementAt(1).Method);
        }
        internal static async Task <KeyValuePair <RouteDefinition, RouteValueDictionary> > MatchRouteAsync(
            HttpContext context, RoutesRepository routesRepository)
        {
            var routes = (await routesRepository.GetRoutesAsync().ConfigureAwait(false));

            if (routes.ContainsKey(context.Request.Method))
            {
                foreach (var route in routes[context.Request.Method])
                {
                    var templateMatcher = new TemplateMatcher(route.RouteTemplate, new RouteValueDictionary());
                    var routeValues     = new RouteValueDictionary();
                    if (templateMatcher.TryMatch(context.Request.Path, routeValues))
                    {
                        return(new KeyValuePair <RouteDefinition, RouteValueDictionary>(route.ToRouteDefinition(),
                                                                                        routeValues));
                    }
                }
            }
            return(new KeyValuePair <RouteDefinition, RouteValueDictionary>(null, null));
        }
        public void MatchRouteAsyncTest_NoMatch()
        {
            TestingUtils.ResetRoutesRepository();
            var routesRepository = new RoutesRepository();

            routesRepository.RegisterRoutesAsync(new List <IRouteDefinitions>()
            {
                new SpecialRouteTemplateRoutes()
            }).Wait();
            var httpContext = new DefaultHttpContext();
            var request     = new DefaultHttpRequest(httpContext)
            {
                Method = HttpMethod.Post.Method,
                Path   = "/v1/yolo/nolo/asdf/kjlkjl"
            };
            var result = RoutesUtils.MatchRouteAsync(httpContext, routesRepository).Result;

            Assert.NotNull(request);
            Assert.Null(result.Key);
            Assert.Null(result.Value);
        }
        public void MatchRouteAsyncTest()
        {
            TestingUtils.ResetRoutesRepository();
            var routesRepository = new RoutesRepository();

            routesRepository.RegisterRoutesAsync(new List <IRouteDefinitions>()
            {
                new SpecialRouteTemplateRoutes()
            }).Wait();
            var httpContext = new DefaultHttpContext();
            var request     = new DefaultHttpRequest(httpContext)
            {
                Method = HttpMethod.Post.Method,
                Path   = "/v1/yolo/nolo/1"
            };
            var result = RoutesUtils.MatchRouteAsync(httpContext, routesRepository).Result;

            Assert.NotNull(request);
            Assert.Equal(4, result.Key.ClaimsConfig.ExtractionConfigs.Count);
            Assert.Equal(1, result.Key.ClaimsConfig.ValidationConfigs.Count);
            Assert.NotNull(result.Key.ClaimsConfig.BadRequestResponse);
            Assert.Equal("1", result.Value["id"]);
        }
        /// <summary>
        /// PageHandler for creating routes automatically.
        /// </summary>
        /// <returns></returns>
        public async Task <IActionResult> OnPostCreateRoutes(int factor)
        {
            if (HttpContext.Session.GetString("EventId") == null)
            {
                string returnUrl = HttpContext.Request.Path.ToString();
                return(RedirectToPage("/Account/Login", new { area = "Identity", returnUrl }));
            }

            ViewData["IsParticipating"] = HttpContext.Session.GetString("IsParticipating");
            var eventId     = int.Parse(HttpContext.Session.GetString("EventId"), CultureInfo.CurrentCulture);
            var dinnerEvent = DinnerEventsRepository.GetById(eventId);
            List <CalculationHost> FirstCourseHosts  = new List <CalculationHost>();
            List <CalculationHost> SecondCourseHosts = new List <CalculationHost>();
            List <CalculationHost> ThirdCourseHosts  = new List <CalculationHost>();
            int routeFactor    = factor;
            int numberOfRoutes = routeFactor * 3;
            var teams          = TeamsRepository.SearchFor(x => x.Event.Id == eventId).Take(numberOfRoutes).ToList();

            ///////////////////////////// Sort teams by course
            foreach (Team team in teams)
            {
                if (team.SelectedCourse == "FirstCourse")
                {
                    FirstCourseHosts.Add(new CalculationHost()
                    {
                        HostTeam = team
                    });
                }

                if (team.SelectedCourse == "SecondCourse")
                {
                    SecondCourseHosts.Add(new CalculationHost()
                    {
                        HostTeam = team
                    });
                }

                if (team.SelectedCourse == "ThirdCourse")
                {
                    ThirdCourseHosts.Add(new CalculationHost()
                    {
                        HostTeam = team
                    });
                }
            }

            List <CalculationHost> FirstCourseHostsOrdered  = new List <CalculationHost>();
            List <CalculationHost> SecondCourseHostsOrdered = SecondCourseHosts;
            List <CalculationHost> ThirdCourseHostsOrdered  = new List <CalculationHost>();

            //////////////////////////////// Get GeoCoordinates
            foreach (var secondCourseHost in SecondCourseHosts)
            {
                var address = secondCourseHost.HostTeam.FullAddress + "," + secondCourseHost.HostTeam.City;
                secondCourseHost.Coordinates = await HereMapsHelper.GetCoordinates(address);
            }

            foreach (var thirdCourseHost in ThirdCourseHosts)
            {
                var address = thirdCourseHost.HostTeam.FullAddress + "," + thirdCourseHost.HostTeam.City;
                thirdCourseHost.Coordinates = await HereMapsHelper.GetCoordinates(address);
            }

            foreach (var firstCourseHost in FirstCourseHosts)
            {
                var address = firstCourseHost.HostTeam.FullAddress + "," + firstCourseHost.HostTeam.City;
                firstCourseHost.Coordinates = await HereMapsHelper.GetCoordinates(address);
            }

            /////////////////////////////// Calculate Distances
            foreach (var secondCourseHost in SecondCourseHosts)
            {
                // From Second to First course hosts
                secondCourseHost.HostDistancesToFirst = new List <RouteNodeDistance>();
                foreach (var firstCourseHost in FirstCourseHosts)
                {
                    RouteNodeDistance hostDistance = new RouteNodeDistance
                    {
                        Host1    = secondCourseHost,
                        Distance = secondCourseHost.Coordinates.GetDistanceTo(firstCourseHost.Coordinates),
                        Host2    = firstCourseHost
                    };
                    secondCourseHost.HostDistancesToFirst.Add(hostDistance);
                }

                secondCourseHost.HostDistancesToFirst = secondCourseHost.HostDistancesToFirst.OrderBy(x => x.Distance).ToList();
                // From Second to Third course hosts
                secondCourseHost.HostDistancesToThird = new List <RouteNodeDistance>();
                foreach (var thirdCourseHost in ThirdCourseHosts)
                {
                    RouteNodeDistance hostDistance = new RouteNodeDistance
                    {
                        Host1    = secondCourseHost,
                        Distance = secondCourseHost.Coordinates.GetDistanceTo(thirdCourseHost.Coordinates),
                        Host2    = thirdCourseHost
                    };
                    secondCourseHost.HostDistancesToThird.Add(hostDistance);
                }

                secondCourseHost.HostDistancesToThird = secondCourseHost.HostDistancesToThird.OrderBy(x => x.Distance).ToList();
            }

            //////////////////////// Re-order hosts by distance
            foreach (var secondCourseHost in SecondCourseHosts)
            {
                // Shortest Distance from SecondCourse to FirstCourse
                foreach (var hostDistance in secondCourseHost.HostDistancesToFirst)
                {
                    if (!FirstCourseHostsOrdered.Contains(hostDistance.Host2))
                    {
                        FirstCourseHostsOrdered.Add(hostDistance.Host2);
                        break;
                    }
                }
            }

            foreach (var secondCourseHost in SecondCourseHosts)
            {
                // Shortest Distance from SecondCourse To ThirdCourse
                foreach (var hostDistance in secondCourseHost.HostDistancesToThird)
                {
                    if (!ThirdCourseHostsOrdered.Contains(hostDistance.Host2))
                    {
                        ThirdCourseHostsOrdered.Add(hostDistance.Host2);
                        break;
                    }
                }
            }

            //////////////////// Set SecondCourseHosts (use only ordered Hosts from here!)
            // Start from First
            int i = 0;
            // Start from Second
            int j = 1;

            foreach (var secondCourseHost in SecondCourseHostsOrdered)
            {
                // Add FirstCourseHost
                FirstCourseHostsOrdered[i].GuestTeam1 = secondCourseHost.HostTeam;
                // Add ThirdCourseHost
                ThirdCourseHostsOrdered[j].GuestTeam1 = secondCourseHost.HostTeam;
                i++;
                j++;
                if (i == routeFactor)
                {
                    i = 0;
                }

                if (j == routeFactor)
                {
                    j = 0;
                }
            }

            /////////////////////////////////// Set ThirdCourseHosts
            // Start from First
            i = 0;
            // Start from Second
            j = 1;
            foreach (var thirdCourseHost in ThirdCourseHostsOrdered)
            {
                // Add FirstCourseHost
                FirstCourseHostsOrdered[i].GuestTeam2 = thirdCourseHost.HostTeam;
                // Add SecondCourseHost
                SecondCourseHostsOrdered[j].GuestTeam1 = thirdCourseHost.HostTeam;
                i++;
                j++;
                if (i == routeFactor)
                {
                    i = 0;
                }

                if (j == routeFactor)
                {
                    j = 0;
                }
            }

            /////////////////////////////////// Set FirstCourseHosts
            // Start from Third
            i = 2;
            // Start from Third
            j = 2;
            foreach (var firstCourseHost in FirstCourseHostsOrdered)
            {
                // Add SecondCourseHost
                SecondCourseHostsOrdered[i].GuestTeam2 = firstCourseHost.HostTeam;
                // Add ThirdCourseHost
                ThirdCourseHostsOrdered[j].GuestTeam2 = firstCourseHost.HostTeam;
                i++;
                j++;
                if (i == routeFactor)
                {
                    i = 0;
                }

                if (j == routeFactor)
                {
                    j = 0;
                }
            }

            ///////////////////////// Create routes
            // Add SecondCourse routes
            foreach (var host in SecondCourseHostsOrdered)
            {
                Route newRoute = new Route
                {
                    Event        = dinnerEvent,
                    RouteForTeam = host.HostTeam,
                    // Second Course
                    SecondCourseHostTeam   = host.HostTeam,
                    SecondCourseGuestTeam1 = host.GuestTeam1,
                    SecondCourseGuestTeam2 = host.GuestTeam2
                };
                // First Course
                var firstCourseHostList = from r in FirstCourseHostsOrdered
                                          where r.GuestTeam1.Id == host.HostTeam.Id
                                          select r;
                var firstCourseHost = firstCourseHostList.FirstOrDefault();
                newRoute.FirstCourseHostTeam   = firstCourseHost.HostTeam;
                newRoute.FirstCourseGuestTeam1 = firstCourseHost.GuestTeam1;
                newRoute.FirstCourseGuestTeam2 = firstCourseHost.GuestTeam2;
                // Third Course
                var thirdCourseHostList = from r in ThirdCourseHostsOrdered
                                          where r.GuestTeam1.Id == host.HostTeam.Id
                                          select r;
                var thirdCourseHost = thirdCourseHostList.FirstOrDefault();
                newRoute.ThirdCourseHostTeam   = thirdCourseHost.HostTeam;
                newRoute.ThirdCourseGuestTeam1 = thirdCourseHost.GuestTeam1;
                newRoute.ThirdCourseGuestTeam2 = thirdCourseHost.GuestTeam2;
                RoutesRepository.Insert(newRoute);
            }

            // Add ThirdCourse routes
            foreach (var host in ThirdCourseHostsOrdered)
            {
                Route newRoute = new Route
                {
                    Event        = dinnerEvent,
                    RouteForTeam = host.HostTeam,
                    // Third Course
                    ThirdCourseHostTeam   = host.HostTeam,
                    ThirdCourseGuestTeam1 = host.GuestTeam1,
                    ThirdCourseGuestTeam2 = host.GuestTeam2
                };
                // First Course
                var firstCourseHostList = from r in FirstCourseHostsOrdered
                                          where r.GuestTeam2.Id == host.HostTeam.Id
                                          select r;
                var firstCourseHost = firstCourseHostList.FirstOrDefault();
                newRoute.FirstCourseHostTeam   = firstCourseHost.HostTeam;
                newRoute.FirstCourseGuestTeam1 = firstCourseHost.GuestTeam1;
                newRoute.FirstCourseGuestTeam2 = firstCourseHost.GuestTeam2;
                // Second Course
                var secondCourseHostList = from r in SecondCourseHostsOrdered
                                           where r.GuestTeam1.Id == host.HostTeam.Id
                                           select r;
                var secondCourseHost = secondCourseHostList.FirstOrDefault();
                newRoute.SecondCourseHostTeam   = secondCourseHost.HostTeam;
                newRoute.SecondCourseGuestTeam1 = secondCourseHost.GuestTeam1;
                newRoute.SecondCourseGuestTeam2 = secondCourseHost.GuestTeam2;
                RoutesRepository.Insert(newRoute);
            }

            // Add FirstCourse routes
            foreach (var host in FirstCourseHostsOrdered)
            {
                Route newRoute = new Route
                {
                    Event        = dinnerEvent,
                    RouteForTeam = host.HostTeam,
                    // First Course
                    FirstCourseHostTeam   = host.HostTeam,
                    FirstCourseGuestTeam1 = host.GuestTeam1,
                    FirstCourseGuestTeam2 = host.GuestTeam2
                };
                // Second Course
                var secondCourseHostList = from r in SecondCourseHostsOrdered
                                           where r.GuestTeam2.Id == host.HostTeam.Id
                                           select r;
                var secondCourseHost = secondCourseHostList.FirstOrDefault();
                newRoute.SecondCourseHostTeam   = secondCourseHost.HostTeam;
                newRoute.SecondCourseGuestTeam1 = secondCourseHost.GuestTeam1;
                newRoute.SecondCourseGuestTeam2 = secondCourseHost.GuestTeam2;
                // Third Course
                var thirdCourseHostList = from r in ThirdCourseHostsOrdered
                                          where r.GuestTeam2.Id == host.HostTeam.Id
                                          select r;
                var thirdCourseHost = thirdCourseHostList.FirstOrDefault();
                newRoute.ThirdCourseHostTeam   = thirdCourseHost.HostTeam;
                newRoute.ThirdCourseGuestTeam1 = thirdCourseHost.GuestTeam1;
                newRoute.ThirdCourseGuestTeam2 = thirdCourseHost.GuestTeam2;
                RoutesRepository.Insert(newRoute);
            }

            RoutesRepository.SaveChanges();
            return(RedirectToPage());
        }
Beispiel #23
0
        //В эксельку кто когда сваливает с депо
        public async Task <ReportResponse> EscapeFromDepoReport(ExcelDataRequest input)
        {
            var sqlRPlaneTrain   = new PlanedRouteTrainsRepository(_logger);
            var sqlRRoute        = new RoutesRepository(_logger);
            var sqlRTrain        = new TrainRepository(_logger);
            var sqlRTrip         = new TripsRepository(_logger);
            var sqlRUser         = new UserRepository(_logger);
            var sqlRPlaneStation = new PlanedStationOnTripsRepository(_logger);
            var sqlRPlaneBrigade = new PlaneBrigadeTrainsRepository(_logger);

            if (input.Date == null)
            {
                throw new ValidationException("Не задан StartDate");
            }

            var result = new ReportResponse {
                Rows = new List <Row>()
            };

            result.Columns = new List <Column>
            {
                new Column("col0", "Маршрут", "string"),
                //№ поезда(Походу рейс https://alcodevelop.atlassian.net/browse/CPPK-4)
                new Column("col1", "№ поезда", "string"),
                new Column("col2", "Машинист", "string"),
                new Column("col3", "Состав", "string"),
                new Column("col4", "КП", "string"),
            };

            //Бля ну получим все поезда наверно
            var planeTrains = await sqlRPlaneTrain.GetAll();

            //За указанные сутки
            planeTrains = planeTrains.Where(x => x.Date.Date == input.Date.Date).ToList();
            foreach (var planeTrain in planeTrains)
            {
                var route = await sqlRRoute.ById(planeTrain.RouteId);

                var train = await sqlRTrain.ById(planeTrain.TrainId);

                //Берем все станки маршрута
                var planeStations = await sqlRPlaneStation.ByPlannedRouteTrainId(planeTrain.Id);

                var startStation = planeStations.OrderBy(x => x.OutTime).FirstOrDefault();

                var trip = new Trip();
                if (startStation != null)
                {
                    trip = await sqlRTrip.ById(startStation.TripId);
                }
                var planeBrigades = await sqlRPlaneBrigade.ByPlanedRouteTrainId(planeTrain.Id);

                //TODO брать 1-го юзера и делать машинистом, както неправильно) хДД
                User motorman = null;
                if (planeBrigades.Count != 0)
                {
                    motorman = await sqlRUser.ById(planeBrigades.First().UserId);
                }

                var toadd = new Row
                {
                    Id       = new RowId(DateTime.Now.Ticks.GetHashCode(), 2),
                    HasItems = false.ToString(),
                    ParentId = null,
                    //Маршрут
                    Col0 = route.Name,
                    //№ поезда(Походу рейс https://alcodevelop.atlassian.net/browse/CPPK-4)
                    Col1 = trip.Name,
                    //Машинист
                    Col2 = motorman?.Name,
                    //Состав
                    Col3 = train.Name,
                    //КП
                    Col4 = startStation?.OutTime.ToStringTimeOnly()
                };

                result.Rows.Add(toadd);
            }


            return(result);
        }
 public void Setup()
 {
     target = new RoutesRepository();
 }
        public IActionResult OnGet()
        {
            if (HttpContext.Session.GetString("EventId") == null)
            {
                string returnUrl = HttpContext.Request.Path.ToString();
                return(RedirectToPage("/Account/Login", new { area = "Identity" }));
            }

            ViewData["IsParticipating"] = HttpContext.Session.GetString("IsParticipating");
            var         eventId     = int.Parse(HttpContext.Session.GetString("EventId"), CultureInfo.CurrentCulture);
            DinnerEvent dinnerEvent = DinnerEventsRepository.GetById(eventId);

            if (dinnerEvent != null)
            {
                // Values are passed-through to layout page
                ViewData["EventName"]        = dinnerEvent.EventName;
                ViewData["EventDate"]        = dinnerEvent.EventDate.ToShortDateString();
                ViewData["EventCity"]        = dinnerEvent.City;
                ViewData["EventPictureLink"] = dinnerEvent.EventPictureLink;
            }

            else
            {
                return(RedirectToPage("RegistrationData"));
            }

            ViewData["apiKey"]        = Configuration?.GetMapsSettings("apiKeyJs");
            ViewData["MapCenterLat"]  = "50.113745";
            ViewData["MapCenterLong"] = "8.679317";

            // Routes
            List <Route> routes = RoutesRepository.SearchFor(x => x.Event.Id == eventId)
                                  .Include(a => a.Event)
                                  .Include(a => a.RouteForTeam)
                                  .Include(a => a.FirstCourseHostTeam)
                                  .Include(a => a.FirstCourseGuestTeam1)
                                  .Include(a => a.FirstCourseGuestTeam2)
                                  .Include(a => a.SecondCourseHostTeam)
                                  .Include(a => a.SecondCourseGuestTeam1)
                                  .Include(a => a.SecondCourseGuestTeam2)
                                  .Include(a => a.ThirdCourseHostTeam)
                                  .Include(a => a.ThirdCourseGuestTeam1)
                                  .Include(a => a.ThirdCourseGuestTeam2).ToList();
            List <string> kitchenAddresses = new List <string>();

            foreach (var route in routes)
            {
                if (route.RouteForTeam?.Id == route.FirstCourseHostTeam?.Id)
                {
                    kitchenAddresses.Add(route.FirstCourseHostTeam.FullAddress + "," + dinnerEvent.City);
                }

                if (route.RouteForTeam?.Id == route.SecondCourseHostTeam?.Id)
                {
                    kitchenAddresses.Add(route.SecondCourseHostTeam.FullAddress + "," + dinnerEvent.City);
                }

                if (route.RouteForTeam?.Id == route.ThirdCourseHostTeam?.Id)
                {
                    kitchenAddresses.Add(route.ThirdCourseHostTeam.FullAddress + "," + dinnerEvent.City);
                }
            }

            List <string> kitchenCoordinates = new List <string>();

            foreach (var kitchenAddress in kitchenAddresses)
            {
                string coordinateString = HereMapsHelper.GetCoordinatesWithAddressString(kitchenAddress);
                kitchenCoordinates.Add(coordinateString);
            }

            ViewData["KitchenCoordinates"] = kitchenCoordinates.ToArray();
            List <string> routeAddresses = new List <string>();

            foreach (Route route in routes)
            {
                // First Course Host
                routeAddresses.Add(route.FirstCourseHostTeam.FullAddress + ", " + dinnerEvent.City);
                // Second Course Host
                routeAddresses.Add(route.SecondCourseHostTeam.FullAddress + ", " + dinnerEvent.City);
                // Third Course Host
                routeAddresses.Add(route.ThirdCourseHostTeam.FullAddress + ", " + dinnerEvent.City);
            }

            List <string> routeCoordinates = new List <string>();

            foreach (var routeAddress in routeAddresses)
            {
                string coordinateString = HereMapsHelper.GetCoordinatesString(routeAddress);
                routeCoordinates.Add(coordinateString);
            }

            ViewData["RouteCoordinates"] = routeCoordinates.ToArray();
            string partyLocationCoordinateString = HereMapsHelper.GetCoordinatesWithAddressString(dinnerEvent.PartyLocation);

            ViewData["PartyLocation"] = partyLocationCoordinateString;
            return(Page());
        }
Beispiel #26
0
        /// <summary>
        ///  То1 таблица
        /// </summary>
        private static async Task <ReportResponse> GetTo1Table(int planedRouteTrainId, ILogger logger)
        {
            var sqlRTrains            = new TrainRepository(logger);
            var sqlRPlanedRouteTrains = new PlanedRouteTrainsRepository(logger);
            var sqlRRoute             = new RoutesRepository(logger);
            var sqlRInspections       = new InspectionRepository(logger);
            var sqlRTaskAttributes    = new TrainTaskAttributesRepository(logger);
            var sqlRUser = new UserRepository(logger);

            var result = new ReportResponse {
                Rows = new List <Row>()
            };

            result.Columns = new List <Column>
            {
                new Column("col0", "Номер", "number"),
                new Column("col1", "Состав", "string"),
                new Column("col2", "Рейс", "string"),
                new Column("col3", "Время начала", "date"),
                new Column("col4", "Время окончания", "date"),
                new Column("col5", "Количество созданных инцидентов", "number"),
                new Column("col6", "Исполнитель", "string"),
                new Column("col7", "Меток считано всего (в том числе при обходе и закрытии задач)", "number"),
            };

            var planedRouteTrain = await sqlRPlanedRouteTrains.ById(planedRouteTrainId);

            var route = await sqlRRoute.ById(planedRouteTrain.RouteId);

            //Надо получить ТО 1 на этот день или блядь для этого поезда. хуй его знает
            var currentTrainInspections = await sqlRInspections.GetByTrainId(planedRouteTrain.TrainId);

            //Выбираем за текущий денек
            var currentDayInspections =
                currentTrainInspections.Where(x => x.DateStart.Date.Equals(planedRouteTrain.CreateDate) && x.CheckListType == CheckListType.TO1);

            foreach (var currentDayInspection in currentDayInspections)
            {
                var row = new Row
                {
                    Id       = new RowId(currentDayInspection.Id, 1),
                    HasItems = false.ToString(),
                    ParentId = null,
                    //Номер
                    Col0 = currentDayInspection.Id.ToString(),
                    //Состав
                    Col1 = (await sqlRTrains.ById(planedRouteTrain.TrainId)).Name,
                    //Рейс
                    Col2 = route.Name,
                    //Время начала
                    Col3 = currentDayInspection.DateStart.ToStringDateTime(),
                    //Время окончания
                    Col4 = currentDayInspection.DateEnd?.ToStringDateTime(),
                    //Количество созданных инцидентов
                    Col5 = (await sqlRTaskAttributes.ByInspectionId(currentDayInspection.Id))?.Count.ToString(),
                    //Исполнитель
                    Col6 = (await sqlRUser.ById(currentDayInspection.UserId))?.Name,
                    //Меток считано всего (в том числе при обходе и закрытии задач)
                    Col7 = "In Development",
                };

                result.Rows.Add(row);
            }

            return(result);
        }
Beispiel #27
0
        /// <summary>
        ///  Приемка/Сдача ЛБ таблица
        /// </summary>
        private static async Task <ReportResponse> GetLocomotvInspectionsTable(ReportRequest input, int planedRouteTrainId, ILogger logger)
        {
            var sqlRTrains            = new TrainRepository(logger);
            var sqlRPlanedRouteTrains = new PlanedRouteTrainsRepository(logger);
            var sqlRRoute             = new RoutesRepository(logger);
            var sqlRInspections       = new InspectionRepository(logger);
            var sqlRTaskAttributes    = new TrainTaskAttributesRepository(logger);
            var sqlRUser    = new UserRepository(logger);
            var sqlRBrigade = new BrigadeRepository(logger);

            var result = new ReportResponse {
                Rows = new List <Row>()
            };

            result.Columns = new List <Column>
            {
                new Column("col0", "Состав", "string"),
                new Column("col1", "Тип", "string"),
                new Column("col2", "Время начала", "date"),
                new Column("col3", "Время окончания", "date"),
                new Column("col4", "Меток считано", "number"),
                new Column("col5", "Новых инцидентов заведено (из них критических)", "number"),
                new Column("col6", "Инцидентов на составе всего", "string"),
                new Column("col7", "Километров всего", "number"),
                new Column("col8", "Километров за смену", "number"),
                new Column("col9", "КВт*ч (по каждому вагону)", "string"),
            };

            var planedRouteTrain = await sqlRPlanedRouteTrains.ById(planedRouteTrainId);

            //var route = await sqlRRoute.ById(planedRouteTrain.RouteId);

            var currentTrainInspections = await sqlRInspections.GetByTrainId(planedRouteTrain.TrainId);

            var currentDayInspections =
                currentTrainInspections.Where(x => x.DateStart.Date.Equals(planedRouteTrain.CreateDate));



            foreach (var currentDayInspection in currentDayInspections)
            {
                var user = await sqlRUser.ById(currentDayInspection.UserId);

                if (user.BrigadeId == null)
                {
                    continue;
                }

                var brigade = await sqlRBrigade.ById((int)user.BrigadeId);

                if (brigade.BrigadeType != BrigadeType.Locomotiv)
                {
                    continue;
                }

                var row = new Row
                {
                    Id       = new RowId(currentDayInspection.Id, 1),
                    HasItems = false.ToString(),
                    ParentId = null,
                    //Состав
                    Col0 = (await sqlRTrains.ById(planedRouteTrain.TrainId)).Name,
                    //Тип
                    Col1 = GetStringInspectionType(currentDayInspection.CheckListType),
                    //Время начала
                    Col2 = currentDayInspection.DateStart.ToStringDateTime(),
                    //Время окончания
                    Col3 = currentDayInspection.DateEnd?.ToStringDateTime(),
                    //Меток считано
                    Col4 = "666",
                    //Новых инцидентов заведено (из них критических)
                    Col5 = "666",
                    //Инцидентов на составе всего
                    Col6 = "666",
                    //Километров всего
                    Col7 = "666",
                    //Километров за смену
                    Col8 = "666",
                    //КВт*ч (по каждому вагону)
                    Col9 = "In Development",
                };

                result.Rows.Add(row);
            }

            return(result);
        }
Beispiel #28
0
        /// <summary>
        ///  Инциденты – вкладка с перечнем открытых инцидентов на составе, с возможностью перехода в форму инцидента при клике по нему. Информация будет выводится в табличном виде, со следующим набором полей:
        /// </summary>
        private static async Task <ReportResponse> GetNotClosedTrainTaskTable(ReportRequest input, int planedRouteTrainId, ILogger logger)
        {
            var sqlRTrains            = new TrainRepository(logger);
            var sqlRTask              = new TaskRepository(logger);
            var sqlRPlanedRouteTrains = new PlanedRouteTrainsRepository(logger);
            var sqlRRoute             = new RoutesRepository(logger);
            var sqlRInspections       = new InspectionRepository(logger);
            var sqlRTaskAttributes    = new TrainTaskAttributesRepository(logger);
            var sqlREquipmentModel    = new EquipmentModelsRepository(logger);
            var sqlREquipment         = new EquipmentRepository(logger);
            var sqlRCarriage          = new CarriageRepository(logger);
            var sqlRTaskStatus        = new TaskStatusRepository(logger);

            var result = new ReportResponse {
                Rows = new List <Row>()
            };

            result.Columns = new List <Column>
            {
                new Column("col0", "Номер", "number"),
                new Column("col1", "Статус", "string"),
                new Column("col2", "Тип", "string"),
                new Column("col3", "Вагон", "string"),
                new Column("col4", "Оборудование", "string"),
                new Column("col5", "Дата", "date"),
            };

            var planedRouteTrain = await sqlRPlanedRouteTrains.ById(planedRouteTrainId);

            //var route = await sqlRRoute.ById(planedRouteTrain.RouteId);

            var trainTasks = await sqlRTask.ByTrainId(planedRouteTrain.TrainId);

            var notClosedTasks = new List <TrainTask>();

            foreach (var trainTask in trainTasks)
            {
                var status = await sqlRTaskStatus.ByTaskId(trainTask.Id);

                if (status.Length == 0)
                {
                    continue;
                }
                if (status.Last().Status != TaskStatus.Closed)
                {
                    notClosedTasks.Add(trainTask);
                }
            }

            foreach (var notClosedTask in notClosedTasks)
            {
                var taskAtributes = await sqlRTaskAttributes.ByTaskId(notClosedTask.Id);

                var lastStatus = await sqlRTaskStatus.ByTaskId(notClosedTask.Id);

                var carriage = await sqlRCarriage.GetById(notClosedTask.CarriageId);

                var equipmentModel = await sqlREquipmentModel.ById(notClosedTask.EquipmentModelId);

                var equpment = await sqlREquipment.ById(equipmentModel.EquipmentId);


                foreach (var taskAtribute in taskAtributes)
                {
                    var row = new Row
                    {
                        Id       = new RowId(notClosedTask.Id, 1),
                        HasItems = false.ToString(),
                        ParentId = null,
                        //Номер
                        Col0 = $"И{notClosedTask.Id}",
                        //Статус
                        Col1 = GetStringTaskStatus(lastStatus.Last().Status),
                        //Тип
                        Col2 = GetStringTaskType(notClosedTask.TaskType),
                        //Вагон
                        Col3 = $"{carriage.Number} - {carriage.Serial}",
                        //Оборудование
                        Col4 = equpment.Name,
                        //Дата
                        Col5 = notClosedTask.CreateDate.ToStringDateTime(),
                    };

                    result.Rows.Add(row);
                }
            }
            return(result);
        }
Beispiel #29
0
 public void InitializeRepositories()
 {
     Points = new PointsRepository(DbContext);
     Routes = new RoutesRepository(DbContext);
 }
        public async Task <List <PlanedRouteTrainDto> > PlanedRouteTrainsTable(DateTime startTime, DateTime EndTime)
        {
            var sqlRPlanedRouteTrains    = new PlanedRouteTrainsRepository(_logger);
            var sqlRRoutes               = new RoutesRepository(_logger);
            var sqlRTrains               = new TrainRepository(_logger);
            var sqlRUsers                = new UserRepository(_logger);
            var sqlRDayOfROutes          = new DayOfRoutesRepoisitory(_logger);
            var sqlRStations             = new StantionsRepository(_logger);
            var sqlRPlaneStationsOnTrips = new PlanedStationOnTripsRepository(_logger);
            var sqlRPlaneBrigadeTrains   = new PlaneBrigadeTrainsRepository(_logger);
            var planedRouteTrains        = await sqlRPlanedRouteTrains.GetAll();

            planedRouteTrains = planedRouteTrains.Where(x => x.Date >= startTime && x.Date < EndTime).ToList();
            //var result = new List<PlanedRouteTrainDto>();

            var dictionary = new Dictionary <int, PlanedRouteTrainDto>();
            //var routeDictionary = planedRouteTrains.ToDictionary(e => e.RouteId);

            //Собственно надо набить словарик доступными роутами
            var routes = await sqlRRoutes.GetAll(0, Int32.MaxValue, null);

            routes.Data = routes.Data.Where(x => x.TurnoverId != null).ToList();

            foreach (var route in routes.Data)
            {
                var planedRouteTrainDto = new PlanedRouteTrainDto
                {
                    Route     = route,
                    RouteDays = new List <DayOfWeek>(),
                    DaysData  = new List <DayData>()
                };


                if (route.TurnoverId != null)
                {
                    var daysOfRoutes = await sqlRDayOfROutes.DaysByTurnoverId((int)route.TurnoverId);

                    var days = daysOfRoutes.Select(x => x.Day);
                    planedRouteTrainDto.RouteDays.AddRange(days);
                    var proccesDate = startTime;

                    while (proccesDate <= EndTime)
                    {
                        var currentDay = proccesDate.DayOfWeek;
                        if (days.Contains(currentDay))
                        {
                            planedRouteTrainDto.DaysData.Add(new DayData
                            {
                                Date = proccesDate.Date, DateString = proccesDate.Date.ToString()
                            });
                        }
                        proccesDate = proccesDate.AddDays(1);
                    }
                }

                if (dictionary.ContainsKey(route.Id))
                {
                    dictionary[route.Id].DaysData.AddRange(planedRouteTrainDto.DaysData);
                }
                else
                {
                    dictionary.Add(route.Id, planedRouteTrainDto);
                }
            }

            foreach (var planedRouteTrain in planedRouteTrains)
            {
                //достаем роут
                var route = await sqlRRoutes.ById(planedRouteTrain.RouteId);

                //var currentRouteItems = planedRouteTrains.Where(e => e.RouteId == route.Id);
                var planedRouteTrainDto = new PlanedRouteTrainDto
                {
                    Route    = route,
                    DaysData = new List <DayData>()
                };

                var toAdd = new DayData
                {
                    Train = await sqlRTrains.ById(planedRouteTrain.TrainId),
                    PlanedRouteTrainId = planedRouteTrain.Id,
                    Date = planedRouteTrain.Date
                };
                toAdd.DateString = toAdd.Date.ToString("yyyy-MM-ddTHH:mm:ssZ");
                var planeBrigadeTrains = await sqlRPlaneBrigadeTrains.ByPlanedRouteTrainId(planedRouteTrain.Id);

                toAdd.Users = new List <DaysUser>();
                foreach (var planeBrigadeTrain in planeBrigadeTrains)
                {
                    var user = await sqlRUsers.ById(planeBrigadeTrain.UserId);

                    var userToAdd = new DaysUser
                    {
                        UserId = user.Id, Name = user.Name, PlaneBrigadeTrainsId = planeBrigadeTrain.Id
                    };
                    userToAdd.UserStations = new UserStations();
                    var planedStationInput = await sqlRPlaneStationsOnTrips.ById(planeBrigadeTrain.StantionStartId);

                    userToAdd.UserStations.InputTime = planedStationInput.OutTime;
                    userToAdd.UserStations.InputName = (await sqlRStations.ById(planedStationInput.StantionId)).Name;

                    var planedStationOutput = await sqlRPlaneStationsOnTrips.ById(planeBrigadeTrain.StantionEndId);

                    userToAdd.UserStations.OutputTime = planedStationOutput.InTime;
                    userToAdd.UserStations.OutputName = (await sqlRStations.ById(planedStationOutput.StantionId)).Name;
                    //userToAdd.UserStations.InputName = (await sqlRStations.ById(planeBrigadeTrain.StantionStartId)).Name;
                    //userToAdd.UserStations.OutputName = (await sqlRStations.ById(planeBrigadeTrain.StantionEndId)).Name;
                    toAdd.Users.Add(userToAdd);
                }

                planedRouteTrainDto.DaysData.Add(toAdd);


                if (dictionary.ContainsKey(route.Id))
                {
                    //надо взять текущие деньки роута и проверить что такого еще нет. кстати если его нет надо нахуй послать, а если есть заменить.
                    var currentDays = dictionary[route.Id].DaysData;
                    var day         = currentDays.FirstOrDefault(x =>
                                                                 x.Date.Date.Equals(planedRouteTrainDto.DaysData.First().Date.Date));
                    if (day == null)
                    {
                        dictionary[route.Id].DaysData.AddRange(planedRouteTrainDto.DaysData);
                        continue;
                    }

                    //throw new ValidationException("На этот день нельзя добавить поезд");
                    var index = dictionary[route.Id].DaysData.IndexOf(day);
                    dictionary[route.Id].DaysData[index] = planedRouteTrainDto.DaysData.First();
                    //dictionary[route.Id].DaysData.AddRange(planedRouteTrainDto.DaysData);
                }
                else
                {
                    dictionary.Add(route.Id, planedRouteTrainDto);
                }
            }


            //var train = await sqlRTrains.ByIdWithStations(planedRouteTrain.TrainId);

            var result = new List <PlanedRouteTrainDto>();

            result.AddRange(dictionary.Values);

            return(result);
        }