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); }
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)))); }