public ActionResult RouteConstructor(int?mode)
        {
            RouteConstructorModel model;
            var routes = _uow.Routes.Get().OrderBy(x => x.Id).ToList();

            if (mode.HasValue && mode.Value == 1 || !routes.Any())
            {
                model = new RouteConstructorModel
                {
                    Id          = 0,
                    Name        = string.Empty,
                    Description = string.Empty,
                    ImageId     = 0,
                    Cities      = _uow.Cities.Get().ToSelectItemList(),
                    Routes      = new List <SelectListItem>(),
                    Mode        = 1
                };
            }
            else
            {
                model = new RouteConstructorModel
                {
                    Id          = routes.First().Id,
                    Name        = routes.First().Name,
                    Description = routes.First().Description,
                    ImageId     = _uow.RouteImages.GetMainImage(routes.First().Id)?.Id ?? 0,
                    CityId      = routes.First().City.Id,
                    Cities      = _uow.Cities.Get().ToSelectItemList(),
                    Routes      = routes.ToSelectItemList(),
                    Mode        = 2
                };
            }

            return(View(model));
        }
        public async Task <ActionResult> SaveRoute(RouteConstructorModel model)
        {
            if (!ModelState.IsValid)
            {
                if (model.Mode == 2)
                {
                    model.Routes = _uow.Routes.Get().ToSelectItemList();
                }

                model.Cities = _uow.Cities.Get().ToSelectItemList();
                return(View("RouteConstructor", model));
            }

            var cityId = model.CityId == 0 ? 1 : model.CityId;
            var city   = _uow.Cities.Get(cityId);
            var route  = new Route
            {
                Id          = model.Id,
                Name        = model.Name,
                Description = model.Description,
                City        = city
            };

            if (model.Id == 0)
            {
                _uow.Routes.Add(route);
                if (model.Image != null)
                {
                    var filename            = model.Image.FileName;
                    var filePathOriginal    = Path.Combine(_env.WebRootPath, "Uploads/Originals");
                    var filePathReadyForUse = Path.Combine(_env.WebRootPath, "Uploads/ReadyForUse");
                    if (model.Image.Length > 0)
                    {
                        using (var stream = new FileStream(Path.Combine(filePathOriginal, filename), FileMode.Create))
                        {
                            await model.Image.CopyToAsync(stream);
                        }
                    }

                    using (var srcImage = System.Drawing.Image.FromFile(Path.Combine(filePathOriginal, filename)))
                        using (var newImage = new Bitmap(100, 100))
                            using (var graphics = Graphics.FromImage(newImage))
                            {
                                graphics.SmoothingMode     = SmoothingMode.AntiAlias;
                                graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
                                graphics.PixelOffsetMode   = PixelOffsetMode.HighQuality;
                                graphics.DrawImage(srcImage, new Rectangle(0, 0, 200, 200));
                                var path = Path.Combine(filePathReadyForUse,
                                                        filename.Replace(filename.Substring(filename.LastIndexOf(".")), ".png"));
                                newImage.Save(path, ImageFormat.Png);
                                var image = new RouteImage {
                                    Path = path, Route = route
                                };
                                var result = _uow.RouteImages.Add(image);
                                route.RouteImages.Add(result);
                            }
                }

                await _uow.SaveChangesAsync();
            }
            else
            {
                var existingRoute = _uow.Routes.Get(route.Id);
                _uow.Routes.Update(existingRoute);
                await _uow.SaveChangesAsync();
            }
            return(RedirectToAction("LocationConstructor", "Location", new LocationConstructorModel {
                RouteId = route.Id
            }));
        }