public IActionResult Index(string filter,
                                   int page       = 1,
                                   int?houseType  = null,
                                   int?cityId     = null,
                                   int?districtId = null,
                                   int?minCost    = null,
                                   int?maxCost    = null,
                                   int?objectId   = null,
                                   bool?isArchive = null)
        {
            var typesHousings = _context.TypesHousing.ToList();

            if (User.IsInRole(RoleNames.Employee))
            {
                cityId = CurrentUser?.City?.Id;
            }

            var filterData = new HousingExtensions.FilterParams()
            {
                CityId     = cityId,
                PriceTo    = minCost,
                PriceFrom  = maxCost,
                Page       = page,
                IsArchived = isArchive
            };

            if (houseType.HasValue)
            {
                filterData.HouseTypeId = new int[] { houseType.Value };
            }


            var query = _context.Housing.Where(x => HousingExtensions.Filter(filterData)(x));

            int totalPages;
            int totalItems;
            var queryResult = query.GetPage(page, out totalItems, out totalPages);
            var items       = queryResult.Select(x => HousingEditModel.Create(x, typesHousings, User)).ToList();

            ViewBag.TotalItems         = _context.Housing.Count();
            ViewBag.FilteredItemsCount = totalItems;

            var model = new HousingIndexModel
            {
                Items   = items,
                Filters = new HousingIndexFilterModel
                {
                    IsArchived    = isArchive ?? false,
                    HousingTypeId = houseType ?? 0,
                    CityId        = cityId ?? 0,
                    DistrictId    = districtId ?? 0
                },
                TotalPages  = totalPages,
                CurrentPage = page
            };

            return(View(model));
        }
        public IActionResult Create()
        {
            var city    = User.IsInRole(RoleNames.Employee) ? CurrentUser?.City : _context.Cities.Include(x => x.Districts).FirstOrDefault();
            var housing = new Housing()
            {
                City   = city,
                CityId = city?.Id ?? 0,
                Phones = new List <HousingPhone>(),
                Calls  = new List <HousingCall>()
            };
            var model = HousingEditModel.Create(_context, housing, User);

            return(View("Save", model));
        }
 public IActionResult Create(HousingEditModel housing)
 {
     if (ModelState.IsValid)
     {
         var newHousingItem = new Housing()
         {
             Phones = new List <HousingPhone>()
         };
         housing.UpdateEntity(newHousingItem);
         _context.Housing.Add(newHousingItem);
         _context.SaveChanges();
         return(RedirectToAction("Index"));
     }
     return(View("Save", housing));
 }
        public IActionResult Edit(HousingEditModel housing, int editId)
        {
            if (ModelState.IsValid)
            {
                var dbItem = _context.Housing.GetFullById(editId);
                housing.UpdateEntity(dbItem);
                _context.Update(dbItem);
                _context.SaveChanges();

                TempData["CrmSuccessMessage"] = "Запись была успешно сохранена";
                return(RedirectToAction("Index"));
            }

            var errors = ModelState.Values.Where(x => x.Errors.Any()).ToList();

            return(View("Save", housing));
        }
        public IActionResult Details(int?id)
        {
            if (id == null)
            {
                return(HttpNotFound());
            }

            Housing housing = _context.Housing.GetFullById(id.Value);

            if (housing == null)
            {
                return(HttpNotFound());
            }
            var model = HousingEditModel.Create(_context, housing, User);

            return(View(model));
        }
        public IActionResult DetailsDialog(int id)
        {
            var h = _context.Housing.GetFullById(id);

            return(PartialView("DetailsDialog", HousingEditModel.Create(_context, h, User)));
        }