/// <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); }
/// <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); }