Esempio n. 1
0
 public BlogFKController(IMapper mapper, ApplicationDataContext appDbContext, GenericForeignKeyRepository GenericFKRepo)
 {
     _mapper             = mapper;
     _context            = appDbContext;
     GenericFKRepository = GenericFKRepo;
 }
        public static async Task FetchForeignKeysForViewModelAsync <T>(this GridViewModel <T> result, GenericForeignKeyRepository genericFKRepo)
        {
            var keys = typeof(T).GetProperties().Where(e => e.CustomAttributes.Any(y => y.AttributeType.FullName.Contains("RemoteForeignKeyAttribute")));

            foreach (var key in keys)
            {
                string Repository, Endpoint, IDField, ValueField, Delimiter, Lookup = null;
                string StringLiteral = "true";

                /*
                 * Get Fields from VM required for FK data calls
                 */
                Repository    = key.GetCustomAttributesData().First().NamedArguments.Where(asd => asd.MemberName == "Repository").Select(u => u.TypedValue.Value).FirstOrDefault() as string;
                Endpoint      = key.GetCustomAttributesData().First().NamedArguments.Where(asd => asd.MemberName == "Endpoint").Select(u => u.TypedValue.Value).FirstOrDefault() as string;
                IDField       = key.GetCustomAttributesData().First().NamedArguments.Where(asd => asd.MemberName == "IDField").Select(u => u.TypedValue.Value).FirstOrDefault() as string;
                ValueField    = key.GetCustomAttributesData().First().NamedArguments.Where(asd => asd.MemberName == "ValueField").Select(u => u.TypedValue.Value).FirstOrDefault() as string;
                StringLiteral = key.GetCustomAttributesData().First().NamedArguments.Where(asd => asd.MemberName == "StringLiteral").Select(u => u.TypedValue.Value).FirstOrDefault() as string;
                Delimiter     = key.GetCustomAttributesData().First().NamedArguments.Where(asd => asd.MemberName == "Delimiter").Select(u => u.TypedValue.Value).FirstOrDefault() as string;
                Lookup        = key.GetCustomAttributesData().First().NamedArguments.Where(asd => asd.MemberName == "Lookup").Select(u => u.TypedValue.Value).FirstOrDefault() as string;

                /*
                 * Loop through the filtered dataset and go get the required
                 * remote data using the configuration properties gathered
                 * from above
                 */
                foreach (T item in result.Data)
                {
                    var propertyInfo = item.GetType().GetProperty(key.Name);
                    if (propertyInfo != null && propertyInfo.CanWrite)
                    {
                        var setter = propertyInfo.SetMethod;
                        if (StringLiteral == "true" && IDField != null)
                        {
                            var id      = Int32.Parse((item.GetType().GetProperty(IDField).GetValue(item).ToString()));
                            var results = await genericFKRepo.GetGenericForeignKeyByIdAsync(id, Repository, Endpoint);

                            setter.Invoke(item, new object[] { ValueField.ConcatValues(results, Delimiter) });
                        }
                        if (Lookup == "true" && StringLiteral == "false")
                        {
                            /*
                             * Loop through the filtered dataset and go get the required
                             * remote data using the configuration properties gathered
                             * from above
                             */
                            var results = await genericFKRepo.GetGenericRemoteLookupsAsync(Repository, Endpoint);

                            setter.Invoke(item, new object[] { ValueField.ConcatValuesForLookup(results, Delimiter, IDField) });
                            // var a = await genericFKRepo.GetSectionPOCCostCodeByIdObjAsync(id);
                            // setter.Invoke(item, new object[] { a.Value });
                        }
                    }
                }
            }
        }