예제 #1
0
        /// <summary>
        /// Method for getting a nested list of links
        /// </summary>
        /// <param name = "unit"> </param>
        /// <returns> </returns>
        public async Task <List <UnitLookupVm> > LinksNestedList(IUnitVm unit)
        {
            // TODO: Use LinksHierarchy
            var list = new List <UnitLookupVm>();

            switch (unit.Type)
            {
            case StatUnitTypes.EnterpriseGroup:
                list.AddRange(Common.ToUnitLookupVm(
                                  await _commonSvc.GetUnitsList <EnterpriseUnit>(false)
                                  .Where(v => v.EntGroupId == unit.Id && v.UnitStatusId == 7).Select(Common.UnitMapping)
                                  .ToListAsync()
                                  ));
                break;

            case StatUnitTypes.EnterpriseUnit:
                list.AddRange(Common.ToUnitLookupVm(
                                  await _commonSvc.GetUnitsList <LegalUnit>(false)
                                  .Where(v => v.EnterpriseUnitRegId == unit.Id && v.UnitStatusId == 7).Select(Common.UnitMapping)
                                  .ToListAsync()
                                  ));
                break;

            case StatUnitTypes.LegalUnit:
                list.AddRange(Common.ToUnitLookupVm(
                                  await _commonSvc.GetUnitsList <LocalUnit>(false)
                                  .Where(v => v.LegalUnitId == unit.Id && v.UnitStatusId == 7).Select(Common.UnitMapping)
                                  .ToListAsync()
                                  ));
                break;
            }
            return(list);
        }
예제 #2
0
        /// <summary>
        /// Method for obtaining a list of links
        /// </summary>
        /// <param name = "root"> Root node </param>
        /// <returns> </returns>
        public async Task <List <LinkM> > LinksList(IUnitVm root)
        {
            IStatisticalUnit unit;

            switch (root.Type)
            {
            case StatUnitTypes.EnterpriseGroup:
                unit = await _commonSvc.GetUnitById <EnterpriseGroup>(root.Id, false);

                break;

            case StatUnitTypes.EnterpriseUnit:
                unit = await _commonSvc.GetUnitById <EnterpriseUnit>(root.Id, false,
                                                                     q => q.Include(v => v.EnterpriseGroup));

                break;

            case StatUnitTypes.LocalUnit:
                unit = await _commonSvc.GetUnitById <LocalUnit>(root.Id, false,
                                                                q => q.Include(v => v.LegalUnit));

                break;

            case StatUnitTypes.LegalUnit:
                unit = await _commonSvc.GetUnitById <LegalUnit>(root.Id, false,
                                                                q => q.Include(v => v.EnterpriseUnit));

                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            var result = new List <LinkM>();

            List <LinkInfo> links;
            var             node = Common.ToUnitLookupVm <UnitLookupVm>(unit);

            if (LinksHierarchy.TryGetValue(unit.UnitType, out links))
            {
                links.Select(v => v.Link(unit)).Where(v => v != null).ForEach(v => result.Add(new LinkM
                {
                    Source1 = Common.ToUnitLookupVm <UnitLookupVm>(v),
                    Source2 = node,
                }));
            }

            var nested = await LinksNestedList(root);

            nested.ForEach(v => result.Add(new LinkM
            {
                Source1 = node,
                Source2 = v,
            }));

            return(result);
        }