コード例 #1
0
        /// <summary>
        /// Get an array of parcels within the specified filter.
        /// Will not return sensitive parcels unless the user has the `sensitive-view` claim and belongs to the owning agency.
        /// </summary>
        /// <param name="filter"></param>
        /// <returns></returns>
        public IEnumerable <Parcel> Get(ParcelFilter filter)
        {
            this.User.ThrowIfNotAuthorized(Permissions.PropertyView);
            var query = this.Context.GenerateQuery(this.User, filter);

            return(query.ToArray());
        }
コード例 #2
0
ファイル: ParcelServiceTest.cs プロジェクト: agalbrai/PIMS
        public void Get_Parcels(ParcelFilter filter, int expectedCount)
        {
            // Arrange
            var helper = new TestHelper();
            var user   = PrincipalHelper.CreateForPermission(Permissions.SystemAdmin);

            using var init = helper.InitializeDatabase(user);
            var parcels = init.CreateParcels(1, 20);

            parcels.Next(0).Latitude         = 50;
            parcels.Next(0).Longitude        = 25;
            parcels.Next(1).Agency           = init.Agencies.Find(3);
            parcels.Next(1).AgencyId         = 3;
            parcels.Next(2).ClassificationId = 2;
            parcels.Next(3).Description      = "-DescriptionTest-";
            parcels.Next(4).Municipality     = "-Municipality-";
            parcels.Next(5).ProjectNumber    = "ProjectNumber";
            parcels.Next(6).Zoning           = "-Zoning-";
            parcels.Next(7).ZoningPotential  = "-ZoningPotential-";
            init.SaveChanges();

            var service = helper.CreateService <ParcelService>(user);
            var context = helper.GetService <PimsContext>();

            // Act
            var result = service.Get(filter);

            // Assert
            Assert.NotNull(result);
            Assert.IsAssignableFrom <Paged <Entity.Parcel> >(result);
            Assert.Equal(expectedCount, result.Items.Count());
        }
コード例 #3
0
        public void Get_Page_AsAdmin(ParcelFilter filter, int[] agencyIds, int expectedTotal)
        {
            // Arrange
            var helper = new TestHelper();
            var user   = PrincipalHelper.CreateForPermission(Permissions.PropertyView, Permissions.AdminProperties);

            using var init = helper.InitializeDatabase(user);
            var parcels = init.CreateParcels(1, 20);

            parcels.Next(0).Latitude         = 50;
            parcels.Next(0).Longitude        = 25;
            parcels.Next(1).Agency           = init.Agencies.Find(3);
            parcels.Next(1).AgencyId         = 3;
            parcels.Next(2).ClassificationId = 2;
            parcels.Next(3).Description      = "-DescriptionTest-";
            parcels.Next(4).Municipality     = "-Municipality-";
            parcels.Next(5).Zoning           = "-Zoning-";
            parcels.Next(6).ZoningPotential  = "-ZoningPotential-";
            init.SaveChanges();

            var service = helper.CreateService <ParcelService>(user);

            // Act
            var result = service.GetPage(filter);

            // Assert
            Assert.NotNull(result);
            Assert.IsAssignableFrom <IEnumerable <Entity.Parcel> >(result);
            Assert.Equal(expectedTotal, result.Total);
        }
コード例 #4
0
        public void GetParcelsWithFilter_Success()
        {
            // Arrange
            var helper     = new TestHelper();
            var controller = helper.CreateController <ParcelController>(Permissions.PropertyView);

            var parcel  = new Entity.Parcel(1, 51, 25);
            var parcels = new[] { parcel };
            var service = helper.GetService <Mock <IPimsService> >();
            var mapper  = helper.GetService <IMapper>();

            service.Setup(m => m.Parcel.Get(It.IsAny <ParcelFilter>())).Returns(parcels);
            var filter = new ParcelFilter(1, 1, 1, 1);

            // Act
            var result = controller.GetParcels(filter);

            // Assert
            var actionResult   = Assert.IsType <JsonResult>(result);
            var actualResult   = Assert.IsType <SModel.ParcelModel[]>(actionResult.Value);
            var expectedResult = mapper.Map <SModel.ParcelModel[]>(parcels);

            Assert.Equal(expectedResult, actualResult, new DeepPropertyCompare());
            service.Verify(m => m.Parcel.Get(It.IsAny <ParcelFilter>()), Times.Once());
        }
コード例 #5
0
ファイル: ParcelServiceTest.cs プロジェクト: sookeke/PIMS
        public void Get_Parcels_AsAdmin(ParcelFilter filter, int[] agencyIds, int expectedCount)
        {
            // Arrange
            var helper = new TestHelper();
            var user   = PrincipalHelper.CreateForPermission(Permissions.PropertyView, Permissions.AdminProperties);

            using var init = helper.InitializeDatabase(user);
            var parcels = init.CreateParcels(1, 20);

            parcels.Next(0).Location.X                 = -123.720810;
            parcels.Next(0).Location.Y                 = 48.529338;
            parcels.Next(1).Agency                     = init.Agencies.Find(3);
            parcels.Next(1).AgencyId                   = 3;
            parcels.Next(2).ClassificationId           = 2;
            parcels.Next(3).Description                = "-DescriptionTest-";
            parcels.Next(4).Address.AdministrativeArea = "-AdministrativeArea-";
            parcels.Next(5).Zoning                     = "-Zoning-";
            parcels.Next(6).ZoningPotential            = "-ZoningPotential-";
            init.SaveChanges();

            var service = helper.CreateService <ParcelService>(user);

            // Act
            var result = service.Get(filter);

            // Assert
            Assert.NotNull(result);
            Assert.IsAssignableFrom <IEnumerable <Entity.Parcel> >(result);
            Assert.Equal(expectedCount, result.Count());
        }
コード例 #6
0
        /// <summary>
        /// Get an array of parcels within the specified filter.
        /// Will not return sensitive parcels unless the user has the `sensitive-view` claim and belongs to the owning agency.
        /// </summary>
        /// <param name="filter"></param>
        /// <returns></returns>
        public Paged <Parcel> GetPage(ParcelFilter filter)
        {
            this.User.ThrowIfNotAuthorized(Permissions.PropertyView);

            var query = this.Context.GenerateQuery(this.User, filter);
            var total = query.Count();
            var items = query.Skip((filter.Page - 1) * filter.Quantity).Take(filter.Quantity);

            return(new Paged <Parcel>(items, filter.Page, filter.Quantity, total));
        }
コード例 #7
0
ファイル: ParcelServiceTest.cs プロジェクト: agalbrai/PIMS
        public void Get_Parcels_NotAuthorized()
        {
            // Arrange
            var helper = new TestHelper();
            var user   = PrincipalHelper.CreateForPermission();
            var filter = new ParcelFilter(50, 25, 50, 20);

            var service = helper.CreateService <ParcelService>(user);

            // Act
            // Assert
            Assert.Throws <NotAuthorizedException>(() =>
                                                   service.Get(filter));
        }
コード例 #8
0
        private static IRestRequest CreateBackendListRequest(int?offset,
                                                             int?limit,
                                                             Taal language,
                                                             string sort,
                                                             string status)
        {
            var filter = new ParcelFilter
            {
                Status = status
            };

            var sortMapping = new Dictionary <string, string>
            {
                { "Id", "PersistentLocalId" },
            };

            return(new RestRequest("percelen?taal={language}")
                   .AddParameter("language", language, ParameterType.UrlSegment)
                   .AddPagination(offset, limit)
                   .AddFiltering(filter)
                   .AddSorting(sort, sortMapping));
        }
コード例 #9
0
ファイル: UIFilter.cs プロジェクト: RumoOr/DecentMarketSearch
    public override void OnCreate()
    {
        base.OnCreate();

        var index = 0;

        m_Toggles = GetComponentsInChildren <Toggle>(true);
        foreach (var toggle in m_Toggles)
        {
            var id = index;
            index++;

            toggle.onValueChanged.AddListener((bool enabled) =>
                                              OnToggleValueChanged(id, enabled));
            toggle.isOn = false;
        }

        index    = 0;
        m_Slider = GetComponentsInChildren <Slider>(true);
        foreach (var slider in m_Slider)
        {
            var id = index;
            index++;

            slider.onValueChanged.AddListener((float value) =>
                                              OnSliderValueChanged(id, value));
        }

        m_SliderTexts = m_Slider
                        .Select(s => s.GetComponentsInChildren <Text>()[1])
                        .ToArray();

        Data = new ParcelFilter();

        IsExpanded = true;
    }
コード例 #10
0
        /// <summary>
        /// Get an array of parcels within the specified filter.
        /// Will not return sensitive parcels unless the user has the `sensitive-view` claim and belongs to the owning agency.
        /// </summary>
        /// <param name="filter"></param>
        /// <returns></returns>
        public Paged <Parcel> Get(ParcelFilter filter)
        {
            filter.ThrowIfNull(nameof(filter));
            this.User.ThrowIfNotAuthorized(Permissions.SystemAdmin, Permissions.AgencyAdmin);

            if (filter.Page < 1)
            {
                throw new ArgumentException("Argument must be greater than or equal to 1.", nameof(filter.Page));
            }
            if (filter.Quantity < 1)
            {
                throw new ArgumentException("Argument must be greater than or equal to 1.", nameof(filter.Quantity));
            }

            // Check if user has the ability to view sensitive properties.
            var userAgencies  = this.User.GetAgenciesAsNullable();
            var viewSensitive = this.User.HasPermission(Security.Permissions.SensitiveView);

            // Users may only view sensitive properties if they have the `sensitive-view` claim and belong to the owning agency.
            var query = this.Context.Parcels.AsNoTracking();

            if (filter.NELatitude.HasValue && filter.NELongitude.HasValue && filter.SWLatitude.HasValue && filter.SWLongitude.HasValue)
            {
                query = query.Where(p =>
                                    p.Latitude != 0 &&
                                    p.Longitude != 0 &&
                                    p.Latitude <= filter.NELatitude &&
                                    p.Latitude >= filter.SWLatitude &&
                                    p.Longitude <= filter.NELongitude &&
                                    p.Longitude >= filter.SWLongitude);
            }

            if (filter.Agencies?.Any() == true)
            {
                var filterAgencies = filter.Agencies.Select(a => (int?)a);
                query = query.Where(p => filterAgencies.Contains(p.AgencyId));
            }
            if (filter.ClassificationId.HasValue)
            {
                query = query.Where(p => p.ClassificationId == filter.ClassificationId);
            }
            if (!String.IsNullOrWhiteSpace(filter.ProjectNumber))
            {
                query = query.Where(p => EF.Functions.Like(p.ProjectNumber, $"{filter.ProjectNumber}%"));
            }
            if (!String.IsNullOrWhiteSpace(filter.Description))
            {
                query = query.Where(p => EF.Functions.Like(p.Description, $"%{filter.Description}%"));
            }
            if (!String.IsNullOrWhiteSpace(filter.Municipality))
            {
                query = query.Where(p => EF.Functions.Like(p.Municipality, $"%{filter.Municipality}%"));
            }
            if (!String.IsNullOrWhiteSpace(filter.Zoning))
            {
                query = query.Where(p => EF.Functions.Like(p.Zoning, $"%{filter.Zoning}%"));
            }
            if (!String.IsNullOrWhiteSpace(filter.ZoningPotential))
            {
                query = query.Where(p => EF.Functions.Like(p.ZoningPotential, $"%{filter.ZoningPotential}%"));
            }

            // TODO: Parse the address information by City, Postal, etc.
            if (!String.IsNullOrWhiteSpace(filter.Address))
            {
                query = query.Where(p => EF.Functions.Like(p.Address.Address1, $"%{filter.Address}%") || EF.Functions.Like(p.Address.City.Name, $"%{filter.Address}%"));
            }

            if (filter.MinLandArea.HasValue)
            {
                query = query.Where(p => p.LandArea >= filter.MinLandArea);
            }
            if (filter.MaxLandArea.HasValue)
            {
                query = query.Where(p => p.LandArea <= filter.MaxLandArea);
            }

            // TODO: Review performance of the evaluation query component.
            if (filter.MinEstimatedValue.HasValue)
            {
                query = query.Where(p =>
                                    filter.MinEstimatedValue <= p.Fiscals
                                    .FirstOrDefault(e => e.FiscalYear == this.Context.ParcelFiscals
                                                    .Where(pe => pe.ParcelId == p.Id && e.Key == FiscalKeys.Estimated)
                                                    .Max(pe => pe.FiscalYear))
                                    .Value);
            }
            if (filter.MaxEstimatedValue.HasValue)
            {
                query = query.Where(p =>
                                    filter.MaxEstimatedValue >= p.Fiscals
                                    .FirstOrDefault(e => e.FiscalYear == this.Context.ParcelFiscals
                                                    .Where(pe => pe.ParcelId == p.Id && e.Key == FiscalKeys.Estimated)
                                                    .Max(pe => pe.FiscalYear))
                                    .Value);
            }

            // TODO: Review performance of the evaluation query component.
            if (filter.MinAssessedValue.HasValue)
            {
                query = query.Where(p =>
                                    filter.MinAssessedValue <= p.Evaluations
                                    .FirstOrDefault(e => e.Date == this.Context.ParcelEvaluations
                                                    .Where(pe => pe.ParcelId == p.Id && e.Key == EvaluationKeys.Assessed)
                                                    .Max(pe => pe.Date))
                                    .Value);
            }
            if (filter.MaxAssessedValue.HasValue)
            {
                query = query.Where(p =>
                                    filter.MaxAssessedValue >= p.Evaluations
                                    .FirstOrDefault(e => e.Date == this.Context.ParcelEvaluations
                                                    .Where(pe => pe.ParcelId == p.Id && e.Key == EvaluationKeys.Assessed)
                                                    .Max(pe => pe.Date))
                                    .Value);
            }

            if (filter.Sort?.Any() == true)
            {
                query = query.OrderByProperty(filter.Sort);
            }

            var pagedEntities = query.Skip((filter.Page - 1) * filter.Quantity).Take(filter.Quantity);

            return(new Paged <Parcel>(pagedEntities, filter.Page, filter.Quantity, query.Count()));
        }