//[NoCache]
        public ActionResult Apartments(ApartmentFilterCriteria filter, AnnouncementType type = AnnouncementType.Buy, AnnouncementOrder order = AnnouncementOrder.Address, NavigationViewType viewtype = NavigationViewType.List, int page = 1, bool considerEmpty = true)
        {
            IEnumerable <ApartmentAnnouncement> apartments = _announcementRepository.GetListOfApartments().Where(an => an.Type == type && an.Address.HasValue);

            switch (order)
            {
            case AnnouncementOrder.Address: apartments = apartments.OrderBy(a => a.Address.ToString()); break;

            case AnnouncementOrder.AddressDescending: apartments = apartments.OrderByDescending(a => a.Address.ToString()); break;

            case AnnouncementOrder.Date: apartments = apartments.OrderBy(a => a.Created); break;

            case AnnouncementOrder.DateDescending: apartments = apartments.OrderByDescending(a => a.Created); break;

            default: apartments = apartments.OrderBy(a => a.Address.ToString()); break;
            }

            if (ModelState.IsValid)
            {
                if (filter != null)
                {
                    if (filter.IsEmpty() && considerEmpty)
                    {
                        ApartmentFilterCriteria newFilter = ObjectToCookie.GetObjectFromCookies <ApartmentFilterCriteria>(Request.Cookies, COOKIE_KEY_APARTMENTFILTER);
                        if (newFilter != null)
                        {
                            filter = newFilter;
                        }
                    }
                    apartments = filter.Filter(apartments);
                    ObjectToCookie.SetCookieAsObject <ApartmentFilterCriteria>(filter, Response.Cookies, COOKIE_KEY_APARTMENTFILTER);
                }
            }
            else
            {
                filter = new ApartmentFilterCriteria();
            }

            ViewBag.ViewType  = viewtype;
            ViewBag.Type      = type;
            ViewBag.OrderType = order;

            if (viewtype == NavigationViewType.List)
            {
                ApartmentsListViewModel viewModel = new ApartmentsListViewModel();
                viewModel.Page = createPageInfo(page, apartments.Count());
                setViewModel(viewModel, announcementsForPage(apartments, page));
                viewModel.FilterCriteria = filter;

                return(View("Apartments", viewModel));
            }
            else
            {
                ApartmentsViewModel viewModel = new ApartmentsViewModel();
                setViewModel(viewModel, apartments);
                viewModel.FilterCriteria = filter;
                return(View("ApartmentsMap", viewModel));
            }
        }
        public ApartmentFilterCriteriaViewModel(ApartmentFilterCriteria filter) : base()
        {
            Filter = filter;

            RoomsNumbers      = EnumsToSelectedListItems.GetRoomsNumbersList(MaxRoomNumber);
            HeatingTypes      = EnumsToSelectedListItems.GetHeatingTypeList(true);
            HotWaterTypes     = EnumsToSelectedListItems.GetHotWaterTypeList(true);
            PlacesForCar      = EnumsToSelectedListItems.GetPresentTypeValueList(true);
            BalconyAvailable  = EnumsToSelectedListItems.GetPresentTypeValueList(true);
            EntranceInTypes   = EnumsToSelectedListItems.GetEntranceInList(true);
            EntranceFromTypes = EnumsToSelectedListItems.GetEntranceFromList(true);
        }