public async Task <ISaida> AlterarLancamento(AlterarLancamentoEntrada alterarEntrada)
        {
            // Verifica se as informações para alteração foram informadas corretamente
            if (alterarEntrada.Invalido)
            {
                return(new Saida(false, alterarEntrada.Mensagens, null));
            }

            var lancamento = await _lancamentoRepositorio.ObterPorId(alterarEntrada.IdLancamento, true);

            // Verifica se o lançamento existe
            this.NotificarSeNulo(lancamento, LancamentoMensagem.Id_Lancamento_Nao_Existe);

            if (this.Invalido)
            {
                return(new Saida(false, this.Mensagens, null));
            }

            // Verifica se o lançamento pertece ao usuário informado.
            this.NotificarSeDiferentes(lancamento.IdUsuario, alterarEntrada.IdUsuario, LancamentoMensagem.Lancamento_Alterar_Nao_Pertence_Usuario);

            if (this.Invalido)
            {
                return(new Saida(false, this.Mensagens, null));
            }

            // Verifica se a categoria existe a partir do ID informado.
            if (lancamento.IdCategoria != alterarEntrada.IdCategoria)
            {
                this.NotificarSeFalso(await _categoriaRepositorio.VerificarExistenciaPorId(alterarEntrada.IdUsuario, alterarEntrada.IdCategoria), CategoriaMensagem.Id_Categoria_Nao_Existe);
            }

            // Verifica se a conta existe a partir do ID informado.
            if (lancamento.IdConta != alterarEntrada.IdConta)
            {
                this.NotificarSeFalso(await _contaRepositorio.VerificarExistenciaPorId(alterarEntrada.IdUsuario, alterarEntrada.IdConta), ContaMensagem.Id_Conta_Nao_Existe);
            }

            // Verifica se a pessoa existe a partir do ID informado.
            if (lancamento.IdPessoa != alterarEntrada.IdPessoa && alterarEntrada.IdPessoa.HasValue)
            {
                this.NotificarSeFalso(await _pessoaRepositorio.VerificarExistenciaPorId(alterarEntrada.IdUsuario, alterarEntrada.IdPessoa.Value), PessoaMensagem.Id_Pessoa_Nao_Existe);
            }

            if (this.Invalido)
            {
                return(new Saida(false, this.Mensagens, null));
            }

            lancamento.Alterar(alterarEntrada);

            _lancamentoRepositorio.Atualizar(lancamento);

            await _uow.Commit();

            return(_uow.Invalido
                ? new Saida(false, _uow.Mensagens, null)
                : new Saida(true, new[] { LancamentoMensagem.Lancamento_Alterado_Com_Sucesso }, new LancamentoSaida(lancamento)));
        }
        public void AtualizarLancamento(LancamentoFinanceiro lancamentoFinanceiro)
        {
            if (_lancamentoRepositorio.ValidarLancamentoExiste(lancamentoFinanceiro.ID))
            {
                throw new Exception(string.Format(Mensagens.MENSAGEM_LANCAMENTO_NAO_ENCONTRADO, lancamentoFinanceiro.ID));
            }

            if (_lancamentoRepositorio.ValidarLancamentoConsolidado(lancamentoFinanceiro.ID))
            {
                throw new Exception(Mensagens.MENSAGEM_NAO_PERMITIDO_ALTERAR_LANCAMENTO);
            }

            if (!_lancamentoRepositorio.ExisteTipoLancamento(lancamentoFinanceiro.TipoLancamento.ID))
            {
                throw new Exception(Mensagens.MENSAGEM_NAO_EXISTE_TIPO_LANCAMENTO_CADASTRADRO);
            }

            _lancamentoRepositorio.Atualizar(lancamentoFinanceiro);
        }
        public void AtualizarLancamento(LancamentoFinanceiro lancamentoFinanceiro)
        {
            if (_lancamentoRepositorio.ValidarLancamentoExiste(lancamentoFinanceiro.ID))
            {
                throw new Exception("Lançamento não encontrado!");
            }

            if (_lancamentoRepositorio.ValidarLancamentoConsolidado(lancamentoFinanceiro.ID))
            {
                throw new Exception("Não é permitido alterar o lançamento!");
            }

            if (!_lancamentoRepositorio.ExisteTipoLancamento(lancamentoFinanceiro.TipoLancamento.ID))
            {
                throw new Exception("Tipo lançamento não cadastrado!");
            }

            _lancamentoRepositorio.Atualizar(lancamentoFinanceiro);
        }
Esempio n. 4
0
        public async Task <ISaida> AlterarLancamento(int idLancamento, LancamentoEntrada entrada)
        {
            this.NotificarSeMenorOuIgualA(idLancamento, 0, LancamentoMensagem.Id_Lancamento_Invalido);

            if (this.Invalido)
            {
                return(new Saida(false, this.Mensagens, null));
            }

            // Verifica se as informações para alteração foram informadas corretamente
            if (entrada.Invalido)
            {
                return(new Saida(false, entrada.Mensagens, null));
            }

            var lancamento = await _lancamentoRepositorio.ObterPorId(idLancamento);

            // Verifica se o lançamento existe
            this.NotificarSeNulo(lancamento, LancamentoMensagem.Id_Lancamento_Nao_Existe);

            if (this.Invalido)
            {
                return(new Saida(false, this.Mensagens, null));
            }

            // Verifica se o lançamento pertece ao usuário informado.
            this.NotificarSeDiferentes(lancamento.IdUsuario, entrada.IdUsuario, LancamentoMensagem.Lancamento_Alterar_Nao_Pertence_Usuario);

            if (this.Invalido)
            {
                return(new Saida(false, this.Mensagens, null));
            }

            // Verifica se a categoria existe a partir do ID informado.
            if (lancamento.IdCategoria != entrada.IdCategoria)
            {
                this.NotificarSeFalso(await _categoriaRepositorio.VerificarExistenciaPorId(entrada.IdUsuario, entrada.IdCategoria), CategoriaMensagem.Id_Categoria_Nao_Existe);
            }

            // Verifica se a conta existe a partir do ID informado.
            if (lancamento.IdConta != entrada.IdConta)
            {
                this.NotificarSeFalso(await _contaRepositorio.VerificarExistenciaPorId(entrada.IdUsuario, entrada.IdConta), ContaMensagem.Id_Conta_Nao_Existe);
            }

            // Verifica se a pessoa existe a partir do ID informado.
            if (lancamento.IdPessoa != entrada.IdPessoa && entrada.IdPessoa.HasValue)
            {
                this.NotificarSeFalso(await _pessoaRepositorio.VerificarExistenciaPorId(entrada.IdUsuario, entrada.IdPessoa.Value), PessoaMensagem.Id_Pessoa_Nao_Existe);
            }

            if (this.Invalido)
            {
                return(new Saida(false, this.Mensagens, null));
            }

            var conta = await _contaRepositorio.ObterPorId(lancamento.IdConta);

            // Verifica se a quantidade de ações vendidas é maior que o total de ações disponíveis na carteira.
            if (conta.Tipo == TipoConta.Acoes && lancamento.IdCategoria == (int)TipoCategoriaEspecial.VendaAcoes)
            {
                var operacoes = await _lancamentoRepositorio.ObterPorPeriodo(conta.Id, new DateTime(2019, 1, 1), DateTime.Today.AddHours(23).AddMinutes(59).AddSeconds(59));

                var qtdAcoesCompradas = operacoes.Where(x => x.IdCategoria == (int)TipoCategoriaEspecial.CompraAcoes).Sum(x => x.QtdRendaVariavel.HasValue ? x.QtdRendaVariavel.Value : 0);
                var qtdAcoesVendidas  = operacoes.Where(x => x.IdCategoria == (int)TipoCategoriaEspecial.VendaAcoes && x.Id != idLancamento).Sum(x => x.QtdRendaVariavel.HasValue ? x.QtdRendaVariavel.Value : 0);

                var qtdAcoesDisponivel = qtdAcoesCompradas - qtdAcoesVendidas;

                this.NotificarSeVerdadeiro(entrada.QuantidadeAcoes > qtdAcoesDisponivel, LancamentoMensagem.Qtd_Acoes_Venda_Maior_Disponivel_Carteira);

                if (this.Invalido)
                {
                    return(new Saida(false, this.Mensagens, null));
                }
            }

            lancamento.Alterar(entrada);

            _lancamentoRepositorio.Atualizar(lancamento);

            await _uow.Commit();

            return(new Saida(true, new[] { LancamentoMensagem.Lancamento_Alterado_Com_Sucesso }, new LancamentoSaida(await _lancamentoRepositorio.ObterPorId(lancamento.Id))));
        }