예제 #1
0
        private void SetAdvertisementsListKind(Intent intent = null)
        {
            //sytuacja gdy activity jest wywo³ywane z serwisu sprawdzaj¹cego nowosci
            if (this.advertisementsSearchModel == null)
            {
                this.advertisementsSearchModel = new AdvertisementsSearchModel();
            }

            string kindExtra;

            if (intent != null)
            {
                kindExtra = intent.GetStringExtra(ExtrasKeys.NEW_ADVERTISEMENT_KIND);
            }
            else
            {
                kindExtra = Intent.GetStringExtra(ExtrasKeys.NEW_ADVERTISEMENT_KIND);
            }

            if (kindExtra != null)
            {
                this.advertisementsSearchModel.AdvertisementsKind = JsonConvert.DeserializeObject <AdvertisementsKind>(kindExtra);
                this.advertisementsSearchModel.SortingBy          = SortingBy.sortByNewest;
                ChangeFabOpenFilterOptionsDependsOnSelectedOptions();
            }

            if (this.advertisementsSearchModel.AdvertisementsKind == default(AdvertisementsKind))
            {
                this.advertisementsSearchModel.AdvertisementsKind = AdvertisementsKind.AdvertisementsAroundUserCurrentLocation;
            }
        }
        public AdvertisementsSearchModel RestorePreviousValues()
        {
            var searchModel = new AdvertisementsSearchModel();

            searchModel.TransactionKind       = TransactionKind;
            searchModel.ExpiredAdvertisements = ExpiredAdvertisements;
            searchModel.SortingBy             = SortingBy;
            searchModel.Sizes.AddRange(Sizes);
            foreach (var cat in CategoriesModel)
            {
                CategoriesModel.Add(cat);
            }
            searchModel.AdvertisementsKind               = AdvertisementsKind;
            searchModel.CoordinatesModel.Latitude        = CoordinatesModel.Latitude;
            searchModel.CoordinatesModel.LocationAddress = CoordinatesModel.LocationAddress;
            searchModel.CoordinatesModel.Longitude       = CoordinatesModel.Longitude;
            searchModel.CoordinatesModel.MaxDistance     = CoordinatesModel.MaxDistance;
            searchModel.Page = Page;
            if (UserInfo != null)
            {
                searchModel.UserInfo          = new UserInfoModel();
                searchModel.UserInfo.Id       = UserInfo.Id;
                searchModel.UserInfo.UserName = UserInfo.UserName;
            }

            return(searchModel);
        }
        public async Task <IEnumerable <AdvertisementItemShort> > GetAdvertisements(AdvertisementsSearchModel searchModel, string userId)
        {
            IQueryable <AdvertisementItem> queryAdvertisements = default(IQueryable <AdvertisementItem>);

            switch (searchModel.AdvertisementsKind)
            {
            case AdvertisementsKind.AdvertisementsAroundUserCurrentLocation:
            case AdvertisementsKind.AdvertisementsArounUserHomeLocation:
                queryAdvertisements = this.advertisementItemDbService.GetAdvertisements();
                break;

            case AdvertisementsKind.AdvertisementsCreatedByUser:
                queryAdvertisements = this.advertisementItemDbService.GetUserAdvertisements(userId);
                break;

            case AdvertisementsKind.FavouritesAdvertisements:
                queryAdvertisements = this.advertisementItemDbService.GetUserFavouritesAdvertisements(userId).ToList().Select(a => a.AdvertisementItem).AsQueryable();
                break;

            default:
                break;
            }

            queryAdvertisements = FilterResultBySearchModelOptions(searchModel, queryAdvertisements);

            IEnumerable <AdvertisementItemShort> advertisementsViewModels = await MapDbModelsToShortViewModels(queryAdvertisements.ToList(), searchModel.CoordinatesModel);

            UpdateUserCheckingList(searchModel, userId);

            return(advertisementsViewModels);
        }
 private void UpdateUserCheckingList(AdvertisementsSearchModel searchModel, string userId)
 {
     if (searchModel.AdvertisementsKind == AdvertisementsKind.AdvertisementsAroundUserCurrentLocation || searchModel.AdvertisementsKind == AdvertisementsKind.AdvertisementsArounUserHomeLocation)
     {
         this.lastUsersChecksCacheService.UpdateLastTimeUserCheckDate(userId, searchModel.AdvertisementsKind == AdvertisementsKind.AdvertisementsAroundUserCurrentLocation);
     }
 }
        private IQueryable <AdvertisementItem> FilterResultBySearchModelOptions(AdvertisementsSearchModel searchModel, IQueryable <AdvertisementItem> queryAdvertisements)
        {
            //---------ExpiredStatus-------------------
            if (searchModel.ExpiredAdvertisements)
            {
                queryAdvertisements = queryAdvertisements.Where(a => a.ExpirationDate <= DateTime.Now);
            }
            else
            {
                queryAdvertisements = queryAdvertisements.Where(a => a.ExpirationDate >= DateTime.Now);
            }
            //---------TransactionKind-----------
            if (searchModel.TransactionKind == TransactionKind.OnlyWithChange)
            {
                queryAdvertisements = queryAdvertisements.Where(a => !a.IsOnlyForSell);
            }
            else if (searchModel.TransactionKind == TransactionKind.OnlyWithSell)
            {
                queryAdvertisements = queryAdvertisements.Where(a => a.IsOnlyForSell);
            }

            //---------Categories-----------
            if (searchModel.CategoriesModel.Count > 0)
            {
                var categoriesIds = searchModel.CategoriesModel.Select(c => c.Key).ToList();
                queryAdvertisements = queryAdvertisements.Where(a => categoriesIds.Contains(a.CategoryId));
            }

            //---------Sizes-----------
            if (searchModel.Sizes.Count > 0)
            {
                queryAdvertisements = queryAdvertisements.Where(a => searchModel.Sizes.Contains(a.Size));
            }

            //---------SelectedUser-----------
            if (searchModel.UserInfo != null)
            {
                queryAdvertisements = queryAdvertisements.Where(a => a.UserId == searchModel.UserInfo.Id);
            }

            //---------Coordinates-----------
            if (searchModel.CoordinatesModel.MaxDistance < ValueConsts.MAX_DISTANCE_VALUE)
            {
                var coordinatesForSearchModel = coordinatesCalculator.GetCoordinatesForSearchingAdvertisements(searchModel.CoordinatesModel.Latitude, searchModel.CoordinatesModel.Longitude, searchModel.CoordinatesModel.MaxDistance);
                queryAdvertisements = queryAdvertisements.Where(a => a.Latitude >= coordinatesForSearchModel.LatitudeStart &&
                                                                a.Latitude <= coordinatesForSearchModel.LatitudeEnd &&
                                                                a.Longitude >= coordinatesForSearchModel.LongitudeStart &&
                                                                a.Longitude <= coordinatesForSearchModel.LongitudeEnd);
            }


            //---------SortingBy-----------
            queryAdvertisements = SortQuery(queryAdvertisements, searchModel);

            queryAdvertisements = queryAdvertisements.Skip(ITEMS_PER_REQUEST * searchModel.Page).Take(ITEMS_PER_REQUEST);
            return(queryAdvertisements);
        }
예제 #6
0
        public async Task <IActionResult> GetAdvertisements([FromBody] AdvertisementsSearchModel searchModel)
        {
            try
            {
                var userId         = this.identityService.GetUserId(User.Identity);
                var advertisements = await this.advertisementItemService.GetAdvertisements(searchModel, userId);

                return(Json(advertisements));
            }
            catch (Exception exc)
            {
                Response.StatusCode = (int)HttpStatusCode.InternalServerError;
                logger.LogError("Wystąpił wyjątek w trakcie pobierania ogłoszeń: " + exc);
                return(null);
            }
        }
 public AdvertisementSearchModelCopier(AdvertisementsSearchModel searchModel)
 {
     this.originalSearchModel = searchModel;
     TransactionKind          = searchModel.TransactionKind;
     ExpiredAdvertisements    = searchModel.ExpiredAdvertisements;
     SortingBy = searchModel.SortingBy;
     Sizes.AddRange(searchModel.Sizes);
     foreach (var cat in searchModel.CategoriesModel)
     {
         CategoriesModel.Add(cat);
     }
     AdvertisementsKind               = searchModel.AdvertisementsKind;
     CoordinatesModel.Latitude        = searchModel.CoordinatesModel.Latitude;
     CoordinatesModel.LocationAddress = searchModel.CoordinatesModel.LocationAddress;
     CoordinatesModel.Longitude       = searchModel.CoordinatesModel.Longitude;
     CoordinatesModel.MaxDistance     = searchModel.CoordinatesModel.MaxDistance;
     Page = searchModel.Page;
     if (searchModel.UserInfo != null)
     {
         UserInfo.Id       = searchModel.UserInfo.Id;
         UserInfo.UserName = searchModel.UserInfo.UserName;
     }
 }
예제 #8
0
 public override void OnBackPressed()
 {
     if (IsDrawerOpen())
     {
         base.OnBackPressed();
     }
     else if (sortingOptionsLayout.Visibility != ViewStates.Visible)
     {
         if (this.advertisementsSearchModel.AdvertisementsKind != AdvertisementsKind.AdvertisementsAroundUserCurrentLocation)
         {
             ShowAdvertisementList(AdvertisementsKind.AdvertisementsAroundUserCurrentLocation);
         }
         else
         {
             base.OnBackPressed();
         }
     }
     else
     {
         Action actionOnConfirm = ApplyFilterOptions;
         Action actionOnDismiss = () =>
         {
             this.advertisementsSearchModel = searchModelCopier.RestorePreviousValues();
             SetupSortingViews();
             ChangeFabOpenFilterOptionsDependsOnSelectedOptions();
             TogleLayouts();
         };
         if (searchModelCopier.IsSearchModelChanged())
         {
             AlertsService.ShowConfirmDialog(this, "Czy uwzglêdniæ dokonane zmiany w filtrach?", actionOnConfirm, actionOnDismiss);
         }
         else
         {
             TogleLayouts();
         }
     }
 }
예제 #9
0
        public async Task <List <AdvertisementItemShort> > GetAdvertisements(AdvertisementsSearchModel searchModel)
        {
            var stringContent = new StringContent(JsonConvert.SerializeObject(searchModel), Encoding.UTF8, "application/json");
            HttpResponseMessage response;

            try
            {
                response = await client.PostAsync(WebApiConsts.ADVERTISEMENT_CONTROLLER + "GetAdvertisements", stringContent);
            }
            catch
            {
                response = new HttpResponseMessage(System.Net.HttpStatusCode.InternalServerError);
            }

            if (response.StatusCode != System.Net.HttpStatusCode.OK)
            {
                return(new List <AdvertisementItemShort>());
            }
            var responseContentString = await response.Content.ReadAsStringAsync();

            var advertisementList = JsonConvert.DeserializeObject <List <AdvertisementItemShort> >(responseContentString);

            return(advertisementList);
        }
        private IQueryable <AdvertisementItem> SortQuery(IQueryable <AdvertisementItem> queryAdvertisements, AdvertisementsSearchModel searchModel)
        {
            switch (searchModel.SortingBy)
            {
            case SortingBy.sortByNearest:
                return(queryAdvertisements.OrderBy(a => this.coordinatesCalculator.GetDistanceBetweenTwoLocalizations(searchModel.CoordinatesModel.Latitude, searchModel.CoordinatesModel.Longitude, a.Latitude, a.Longitude)));

            case SortingBy.sortByFarthest:
                return(queryAdvertisements.OrderByDescending(a => this.coordinatesCalculator.GetDistanceBetweenTwoLocalizations(searchModel.CoordinatesModel.Latitude, searchModel.CoordinatesModel.Longitude, a.Latitude, a.Longitude)));

            case SortingBy.sortByLowestPrice:
                return(queryAdvertisements.OrderBy(a => a.Price));

            case SortingBy.sortByHighestPrice:
                return(queryAdvertisements.OrderByDescending(a => a.Price));

            case SortingBy.sortByNewest:
                return(queryAdvertisements.OrderByDescending(a => a.CreationDate));

            default:
                return(queryAdvertisements);
            }
        }