/// <summary> /// Atualiza uma lista de valores passada pelo usuário, podendo ou não excluir os dados logicamente. /// </summary> /// <typeparam name="E">Tipo da entidade do banco de dados que vai ser atualizada</typeparam> /// <typeparam name="L">Tipo da entidade DTO a ser atualizada</typeparam> /// <param name="lista">Lista de entidade DTO</param> /// <param name="keyComparer">Chave para comparação da lista</param> /// <param name="valueComparer">Valor usado para comparação na lista</param> /// <param name="listAttributes">Lista de atributos a ser atualizado</param> /// <param name="listSetValues">Lista de valores usados para atualizar os campos da lista de atributos.</param> public static List <L> UpdateList <E, L>(this List <L> lista, FiltroServico servico, string keyType, Object valueComparer, bool deleteLogic = true, string[] listAttributes = null, Object[] listSetValues = null) where E : class where L : class { if (lista != null) { List <int> listId = lista.Where(x => (int)x.GetType().GetProperty("id").GetValue(x) > 0).Select(y => (int)y.GetType().GetProperty("id").GetValue(y)).ToList(); IEnumerable <E> listaDelete = servico.ObterTodos <E>().PropertyEquals(keyType, valueComparer).ToList().Where(x => !listId.Contains((int)x.GetType().GetProperty("id").GetValue(x))); lista.RemoveAll(x => (int)x.GetType().GetProperty("id").GetValue(x) > 0); if (deleteLogic) { listaDelete.ToList().DeleteLogicList <E, E>(servico, null, listAttributes, listSetValues); } else { servico.Excluir(listaDelete.AsQueryable(), true); } lista.ForEach(delegate(L obj) { obj.SetValues(listAttributes, listSetValues); }); servico.Salvar <E>(lista); } return(new List <L>()); }
/// <summary> /// Realiza uma deleção lógica de uma lista de objetos L, atualizando também atributos que são passados pela lista listAttributes setando os valores através dos indexs correspondentes da lista listSetValues /// </summary> /// <typeparam name="E"></typeparam> /// <typeparam name="L"></typeparam> /// <param name="lista"></param> /// <param name="partial"></param> /// <param name="listAttributes"></param> /// <param name="listSetValues"></param> public static void DeleteLogicList <E, L>(this List <L> lista, FiltroServico servico, string[] partial = null, IEnumerable <string> listAttributes = null, IEnumerable <Object> listSetValues = null) where E : class where L : class { lista.ForEach(delegate(L obj) { obj.UpdateObject <E>(servico, partial, listAttributes, listSetValues); }); }
/// <summary> /// Realiza a deleção lógica de um objeto e atualiza os atributos passados pelo usuário. /// </summary> /// <typeparam name="E"></typeparam> /// <param name="obj">Objeto principal</param> /// <param name="partial">Lista de atributos parciais a ser atualizados, caso o parâmetro deletLogic não seja passado, não é necessário adicionar o campo data_exclusao pois o mesmo será adicionado a lista.</param> /// <param name="listAttributes">Lista de atributos a ser atualizado</param> /// <param name="listSetValues">Lista dos valores a ser usado para atualizar os campos da lista de atributos</param> /// <param name="deleteLogic">Campo para verificar se ocorrerá a deleção lógica, valor default = true</param> public static void UpdateObject <E>(this object obj, FiltroServico servico, IEnumerable <string> partial = null, IEnumerable <string> listAttributes = null, IEnumerable <Object> listSetValues = null, bool deleteLogic = true) where E : class { if (deleteLogic) { partial = partial == null ? new string[] { "data_exclusao" } } : partial.Contains("data_exclusao") ? partial : partial.Concat(new string[] { "data_exclusao" }); if ((int)obj.getPropertyByName("id") > 0) { servico.Atualizar <E>(obj.SetValues(listAttributes, listSetValues), partial); } }
/// <summary> /// Gera um guid único para a entidade passada comparando no banco se esse guid já existe.. caso exista o método é re-executado. /// </summary> /// <typeparam name="UC">tipo do objeto a ser usado na comparação</typeparam> /// <param name="obj">objeto usado para pegar o valor chave</param> /// <param name="keyValue">Campo chave para geração do guid</param> /// <param name="fieldComparer">Campo usado para comparar se a chave já foi cadastrada no banco</param> /// <param name="maxLength">Tamanho máximo para o retorno da guid valor máximo = 20, valor default = 20.</param> /// <param name="minLentgh">Tamanho mínimo para o retorno da guid valor máximo = 20, valor default = 0.</param> /// <returns></returns> public static string GenerateUniqueCode <UC>(this object obj, FiltroServico servico, string fieldComparer, int maxLength = 20) where UC : class { string code = Guid.NewGuid().ToString("N").Substring(0, maxLength).ToUpper(); if (servico.ObterTodos <UC>().PropertyEquals(fieldComparer, code).Count() < 1) { return(code); } else { return(obj.GenerateUniqueCode <UC>(servico, fieldComparer, maxLength)); } }