Exemple #1
0
        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);
            }
        }
Exemple #2
0
 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");
         }
     }
 }
Exemple #3
0
 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();
         }
     }
 }
Exemple #4
0
 protected virtual void ValidarRegrasDeNegocio(TDTO dto, ECrudOperacao crudAction)
 {
 }
Exemple #5
0
 protected virtual void ValidarCamposObrigatorios(TDTO dto, IList <KeyValuePair <string, string> > excecoesAnotadas, ECrudOperacao crudAction)
 {
 }
Exemple #6
0
        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);
        }
Exemple #7
0
        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
            }
        }