public virtual void ValidarCamposObrigatorios(TDTO dto, ECrudOperacao crudAction) { var excecoes = ValidarCamposObrigatoriosAnotados(dto, crudAction, false); ValidarCamposObrigatorios(dto, excecoes, crudAction); if (excecoes.Count > 0) { throw new ExcecaoCampoObrigatorio(excecoes); } }
protected override void ValidarRegrasDeNegocio(Lanche lanche, ECrudOperacao operacao) { if (operacao == ECrudOperacao.Criar) { if (repository.GetUnique(r => r.Nome.ToLower() == lanche.Nome.ToLower()) != null) { throw new BusinessException("Esse lanche já está cadastrado"); } } }
protected override void ValidarRegrasDeNegocio(Cliente cliente, ECrudOperacao operacao) { if (operacao == ECrudOperacao.Criar) { if (repository.GetUnique(c => c.CPF_CNPJ.Equals(cliente.CPF_CNPJ)) != null) { throw new ExcecaoRegraDeNegocio.EmCliente.ClienteJaCadastradoComEsseCPFOuCNPJ(); } } else if (operacao == ECrudOperacao.Editar) { if (repository.GetUnique(c => c.CPF_CNPJ.Equals(cliente.CPF_CNPJ) && c.Id != cliente.Id) != null) { throw new ExcecaoRegraDeNegocio.EmCliente.ClienteJaCadastradoComEsseCPFOuCNPJ(); } } }
protected virtual void ValidarRegrasDeNegocio(TDTO dto, ECrudOperacao crudAction) { }
protected virtual void ValidarCamposObrigatorios(TDTO dto, IList <KeyValuePair <string, string> > excecoesAnotadas, ECrudOperacao crudAction) { }
public IList <KeyValuePair <string, string> > ValidarCamposObrigatoriosAnotados(object modelComAnotacoesRequired, ECrudOperacao crudAction, bool throwException = true) { IList <KeyValuePair <string, string> > excecoes = new List <KeyValuePair <string, string> >(); object objetoMetadados = null; PropertyInfo[] propriedades; bool campoVazio; if (modelComAnotacoesRequired == null) { return(excecoes); } propriedades = ObterPropriedadesDoModel(modelComAnotacoesRequired, ref objetoMetadados); foreach (PropertyInfo prop in propriedades) { RequiredAttribute requiredAttribute = (RequiredAttribute)prop.GetCustomAttributes(false).SingleOrDefault(attr => attr is RequiredAttribute); bool requerido = (requiredAttribute != null); if (requerido) { campoVazio = false; // verifica se o valor da propriedade é vazio object valorDaPropriedade = ObterValorDaPropriedade(prop, objetoMetadados, modelComAnotacoesRequired); Type type = prop.PropertyType; if (type.Name.ToLower() == "string") { campoVazio = string.IsNullOrWhiteSpace((valorDaPropriedade as string)); } else if (type.Name.ToLower().StartsWith("int")) { campoVazio = Convert.ToInt64(valorDaPropriedade) <= 0; } else if (type.Name == "Byte") // tipo byte nunca é null // Enum do tipo Byte deve iniciar com valor 1 { campoVazio = (Convert.ToByte(valorDaPropriedade) == 0); } else if (type.Name.ToLower() == "datetime") { DateTime data = (DateTime)valorDaPropriedade; campoVazio = (data == null || data == new DateTime() || data.Year < 1800); } else if (type.Name.ToLower() == "decimal") { decimal?valor = (decimal?)valorDaPropriedade; campoVazio = (valor.GetValueOrDefault() <= 0); } else if (type.Name.StartsWith("IList")) { System.Collections.IList lista = (valorDaPropriedade as System.Collections.IList); campoVazio = (lista == null || lista.Count == 0); if (!campoVazio) { // verificar obrigatoriedade das propriedades do objeto da lista for (int i = 0; i < lista.Count; i++) { object itemList = lista[i]; IList <KeyValuePair <string, string> > excecoesItemLista = ValidarCamposObrigatoriosAnotados(itemList, crudAction, false); foreach (var item in excecoesItemLista) { InserirExcecao(excecoes, mensagem: item.Value, campoAssociado: item.Key); } } } } else if (prop.PropertyType.IsEnum) { campoVazio = !prop.PropertyType.IsEnumDefined(valorDaPropriedade); } else if (new[] { "boolean" }.Contains(type.Name.ToLower()) == false) // tipos q não pode ter valor vazio atribuido { // objetos if (valorDaPropriedade == null) { campoVazio = true; } else { IList <KeyValuePair <string, string> > excecoesItemLista = ValidarCamposObrigatoriosAnotados(valorDaPropriedade, crudAction, false); foreach (var item in excecoesItemLista) { InserirExcecao(excecoes, mensagem: item.Value, campoAssociado: item.Key); } } } if (campoVazio) { string errorMsg = null; if (requiredAttribute == null) // validação de EntityObject via atributos do Edmx { errorMsg = prop.Name + ": campo obrigatório."; } else // validação via atributo Required { if (string.IsNullOrWhiteSpace(requiredAttribute.ErrorMessage)) { // obtem DisplayName DisplayNameAttribute atributoDisplayName = (DisplayNameAttribute)prop.GetCustomAttributes(false).SingleOrDefault(attr => attr is DisplayNameAttribute); string displayName = atributoDisplayName == null ? prop.Name : atributoDisplayName.DisplayName; errorMsg = (displayName ?? prop.Name) + ": campo obrigatório."; } else { errorMsg = requiredAttribute.ErrorMessage; } } // trata referencia a outra propriedade do mesmo objeto na mensagem de erro no formato "Informe a data de emissão da NFP #[Numero]." if (errorMsg != null && errorMsg.Contains('[') && errorMsg.Contains(']')) { string[] parts = errorMsg.Split('['); // "Informe a data de emissão da NFP #[Numero]." resulta em [0] = "Informe a data de emissão da NFP #", [1] = "Numero]." if (parts.Length >= 2) { string[] subparts = parts[1].Split(']'); // "Numero]" resulta em [0] = "Numero", [1] = "." if (subparts.Length > 0) { string referencedProperty = (!subparts[0].Contains('[') ? subparts[0] : ""); // verifica se não há outro [ antes do fechamento (]) if (!string.IsNullOrWhiteSpace(referencedProperty) && propriedades.Any(p => p.Name == referencedProperty)) { string valueOfReferencedProperty = propriedades.Single(p => p.Name == referencedProperty).GetValue(modelComAnotacoesRequired, null).ToString(); errorMsg = errorMsg.Replace("[" + referencedProperty + "]", valueOfReferencedProperty); } } } } InserirExcecao(excecoes, errorMsg, campoAssociado: prop.Name); } } } if (excecoes.Count > 0 && throwException) { throw new ExcecaoCampoObrigatorio(modelComAnotacoesRequired.GetType(), excecoes); } return(excecoes); }
protected override void ValidarCamposObrigatorios(Lanche lanche, IList <KeyValuePair <string, string> > excecoesAnotadas, ECrudOperacao crudAction) { if (lanche.Porcoes == null || lanche.Porcoes.Count == 0) { excecoesAnotadas.Add(string.Empty, "Adicione pelo menos uma porção de ingrediente ao lanche"); } else { if (lanche.Porcoes.Any(p => p.Quantidade <= 0)) { excecoesAnotadas.Add(string.Empty, "Não pode adicionar a quantidade de zero ingredientes à porção"); } //poderia criar uma regra para não aceitar o mesmo ingrediente várias vezes, ou seja só pode alterar a quantidade } }