Exemple #1
0
        private IEnumerable <TerritoryPart> GetTerritoryParents(TerritoryQueryContext context)
        {
            IEnumerable <TerritoryPart> list;
            var root = context.ForTerritory;

            // make sure root we'll use belongs to hierarchy
            if (root.HierarchyPart.Id != ConfiguredHierarchy.Id)
            {
                root = SingleTerritory(root.Record.TerritoryInternalRecord.Id);
            }
            if (root == null)
            {
                // if the root is not valid for the hierarchy, we cannot return
                // any city.
                return(Enumerable.Empty <TerritoryPart>());
            }

            var rootPath  = root.TerritoriesFullPath;
            var parentIds = rootPath.Split(new string[] { "\\" }, StringSplitOptions.RemoveEmptyEntries).Select(x => {
                int id = 0;
                int.TryParse(x, out id);
                return(id);
            }).ToList();

            parentIds.ToList().Remove(root.Id);
            var queryHints = new QueryHints()
                             .ExpandRecords <TerritoryAdministrativeTypePartRecord, TitlePartRecord>();
            var query = _contentManager.Query();

            query = query
                    .Join <TerritoryAdministrativeTypePartRecord>()
                    .Where(x => x.AdministrativeType == context.TerritoryAdministrativeType.Value && parentIds.Contains(x.Id))
                    .Join <TitlePartRecord>()
                    .OrderBy(x => x.Title);

            if (context.MaxResultItems.HasValue)
            {
                list = query
                       .ForPart <TerritoryPart>()
                       .Join <TerritoryPartRecord>()
                       .Slice(0, context.MaxResultItems.Value);
            }
            else
            {
                list = query
                       .ForPart <TerritoryPart>()
                       .Join <TerritoryPartRecord>()
                       .List();
            }
            return(list);
        }
Exemple #2
0
        // Refactorized END

        private IEnumerable <TerritoryPart> GetTerritoryChildren(TerritoryQueryContext context)
        {
            IEnumerable <TerritoryPart> list;
            var root = context.ForTerritory;

            // make sure root we'll use belongs to hierarchy
            if (root.HierarchyPart.Id != ConfiguredHierarchy.Id)
            {
                root = SingleTerritory(root.Record.TerritoryInternalRecord.Id);
            }
            if (root == null)
            {
                // if the root is not valid for the hierarchy, we cannot return
                // any city.
                return(Enumerable.Empty <TerritoryPart>());
            }

            var rootPath = root.TerritoriesFullPath;
            var query    = _contentManager.Query();

            query = query.Join <TerritoryPartRecord>()
                    .Where(x => x.TerritoriesFullPath.StartsWith(rootPath) && x.Hierarchy.Id == ConfiguredHierarchy.Id);

            if (context.AddressRecordType.HasValue)
            {
                query = query.Join <TerritoryAdministrativeTypePartRecord>()
                        .Where(x => x.AdministrativeType == context.TerritoryAdministrativeType.Value);
            }
            if (context.AddressRecordType.HasValue)
            {
                if (context.AddressRecordType == AddressRecordType.ShippingAddress)
                {
                    query = query.Join <TerritoryAddressTypePartRecord>()
                            .Where(x => x.Shipping);
                }
                else if (context.AddressRecordType == AddressRecordType.BillingAddress)
                {
                    query = query.Join <TerritoryAddressTypePartRecord>()
                            .Where(x => x.Billing);
                }
            }
            if (!string.IsNullOrWhiteSpace(context.Filter))
            {
                query = query.Join <TitlePartRecord>()
                        .Where(x => x.Title.Contains(context.Filter))
                        .OrderBy(x => x.Title);
            }
            else
            {
                query = query.Join <TitlePartRecord>()
                        .OrderBy(x => x.Title);
            }
            if (context.MaxResultItems.HasValue)
            {
                list = query
                       .ForPart <TerritoryPart>()
                       .Join <TerritoryPartRecord>()
                       .Slice(0, context.MaxResultItems.Value);
            }
            else
            {
                list = query
                       .ForPart <TerritoryPart>()
                       .Join <TerritoryPartRecord>()
                       .List();
            }
            return(list);
        }