예제 #1
0
        public ICommandResult Handle(AdicionarCentroCustoCommand command)
        {
            // Fail Fast Validations
            command.Validar();
            if (command.Invalid)
            {
                AddNotifications(command);
                return(new CommandResult(false, "Não foi possível adicionar a empresa"));
            }



            //Validar Empresa
            var empresa = _empresaRepository.Buscar(e => e.CodEmpresa == command.CodEmpresa && e.IdSituacao == (int)ESituacao.Ativo).FirstOrDefault();

            if (empresa == null)
            {
                AddNotification("Cod Empresa", "O Código de Empresa informado não existe ou Empresa não está ativa");

                return(new CommandResult(false, "Não foi possível adicionar o registro"));
            }



            //Validar Grupo
            var grupo = _grupoRepository.Buscar(g => g.Codigo == command.CodGrupo).FirstOrDefault();

            if (grupo == null)
            {
                AddNotification("Cod Grupo", "O Código de Grupo informado não existe");

                return(new CommandResult(false, "Não foi possível adicionar o registro"));
            }



            //Validar Classe
            var classe = _classeContabilRepository.Buscar(c => c.Codigo == command.CodClasse).FirstOrDefault();

            if (classe == null)
            {
                AddNotification("Cod Classe", "O Código de Classe informado não existe");

                return(new CommandResult(false, "Não foi possível adicionar o registro"));
            }



            //Validar TipoBloqueio
            var tipoBloqueio = _tipoBloqueioRepository.Buscar(t => t.Codigo == command.CodTipoBloqueio).FirstOrDefault();

            if (tipoBloqueio == null)
            {
                AddNotification("Tipo Bloqueio", "O Tipo de Bloqueio informado não existe");

                return(new CommandResult(false, "Não foi possível adicionar o registro"));
            }



            //Validar Centro de Custo
            var centroCusto = _centroCustoRepository.Buscar(c => c.CodEmpresa == command.CodEmpresa && c.CodCentroCusto == command.CodCentroCusto).FirstOrDefault();

            if (centroCusto != null)
            {
                AddNotification("Duplicidade", "O registro já esta cadastrado na base");

                return(new CommandResult(false, "Não foi possível adicionar o registro"));
            }



            //Gerar as Entidades
            var centroCustoModel = new CentroCusto(command.CodEmpresa, command.CodCentroCusto, command.NomeCentroCusto, command.CodGrupo, command.CodClasse, command.CodTipoBloqueio);


            //Auditoria
            var auditoria = new LogAuditoria("Cadastro", centroCustoModel.GetType().Name, EAcao.Adicionar, centroCustoModel.GetType().Namespace, JsonConvert.SerializeObject(command), UserIdLogado);



            // Relacionamentos (Se houver)



            // Agrupar as Validações
            AddNotifications(centroCustoModel);



            // Checar as notificações
            if (Invalid)
            {
                return(new CommandResult(false, "Não foi possível realizar esta operação"));
            }


            // Salvar as Informações
            _centroCustoRepository.Adicionar(centroCustoModel);



            _logAuditoriaRepository.Adicionar(auditoria);



            // Enviar E-mail de boas vindas (Se houver necessidade)



            // Retornar informações
            return(new CommandResult(true, "Operação realizada com sucesso"));
        }