public async Task <ISaida> LancarParcela(int idParcela, LancarParcelaEntrada entrada) { // Verifica se as informações para o lançamento foram informadas corretamente if (entrada.Invalido) { return(new Saida(false, entrada.Mensagens, null)); } var parcela = await _parcelaRepositorio.ObterPorId(idParcela); // Verifica se a parcela existe this.NotificarSeNulo(parcela, ParcelaMensagem.Id_Parcela_Nao_Existe); if (this.Invalido) { return(new Saida(false, this.Mensagens, null)); } // Verifica se a parcela pertece a um agendamento do usuário informado. this.NotificarSeDiferentes(parcela.Agendamento.IdUsuario, entrada.IdUsuario, ParcelaMensagem.Agendamento_Parcela_Nao_Pertence_Usuario); if (this.Invalido) { return(new Saida(false, this.Mensagens, null)); } // Verifica se a parcela já foi lançada ou descartada this .NotificarSeVerdadeiro(parcela.Lancada, ParcelaMensagem.Parcela_Lancar_Ja_Lancada) .NotificarSeVerdadeiro(parcela.Descartada, ParcelaMensagem.Parcela_Lancar_Ja_Descartada); if (this.Invalido) { return(new Saida(false, this.Mensagens, null)); } parcela.Lancar(entrada); _parcelaRepositorio.Atualizar(parcela); // Cadastro o lançamento var cadastrarEntrada = new LancamentoEntrada( parcela.Agendamento.IdUsuario, parcela.Agendamento.IdConta.Value, parcela.Agendamento.IdCategoria, entrada.Data, entrada.Valor, null, parcela.Agendamento.IdPessoa, parcela.Id, entrada.Observacao); var lancamento = new Lancamento(cadastrarEntrada); await _lancamentoRepositorio.Inserir(lancamento); await _uow.Commit(); return(new Saida(true, new[] { ParcelaMensagem.Parcela_Lancada_Com_Sucesso }, new ParcelaSaida(parcela))); }
public async Task <ISaida> CadastrarLancamento(LancamentoEntrada entrada) { // Verifica se as informações para cadastro foram informadas corretamente if (entrada.Invalido) { return(new Saida(false, entrada.Mensagens, null)); } // Verifica se a categoria existe a partir do ID informado. this.NotificarSeFalso(await _categoriaRepositorio.VerificarExistenciaPorId(entrada.IdUsuario, entrada.IdCategoria), CategoriaMensagem.Id_Categoria_Nao_Existe); // Verifica se a conta existe a partir do ID informado. 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 (entrada.IdPessoa.HasValue) { this.NotificarSeFalso(await _pessoaRepositorio.VerificarExistenciaPorId(entrada.IdUsuario, entrada.IdPessoa.Value), PessoaMensagem.Id_Pessoa_Nao_Existe); } // Verifica se a parcela existe a partir do ID informado. if (entrada.IdParcela.HasValue) { this.NotificarSeFalso(await _parcelaRepositorio.VerificarExistenciaPorId(entrada.IdUsuario, entrada.IdParcela.Value), ParcelaMensagem.Id_Parcela_Nao_Existe); } if (this.Invalido) { return(new Saida(false, this.Mensagens, null)); } var conta = await _contaRepositorio.ObterPorId(entrada.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 && entrada.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).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)); } } var lancamento = new Lancamento(entrada); await _lancamentoRepositorio.Inserir(lancamento); await _uow.Commit(); return(new Saida(true, new[] { LancamentoMensagem.Lancamento_Cadastrado_Com_Sucesso }, new LancamentoSaida(await _lancamentoRepositorio.ObterPorId(lancamento.Id)))); }
public void Alterar(LancamentoEntrada entrada) { if (entrada.Invalido) { return; } this.IdConta = entrada.IdConta; this.IdCategoria = entrada.IdCategoria; this.Data = entrada.Data; this.Valor = entrada.Valor; this.QtdRendaVariavel = entrada.QuantidadeAcoes; this.IdPessoa = entrada.IdPessoa; this.Observacao = entrada.Observacao; }
public async Task <IActionResult> CadastrarLancamento([FromBody, SwaggerParameter("Informações de cadastro do lançamento.", Required = true)] LancamentoViewModel model) { var entrada = new LancamentoEntrada( base.ObterIdUsuarioClaim(), model.IdConta.Value, model.IdCategoria.Value, model.Data.Value, model.Valor.Value, model.QuantidadeAcoes, model.IdPessoa, null, model.Observacao); return(new ApiResult(await _lancamentoServico.CadastrarLancamento(entrada))); }
public Lancamento(LancamentoEntrada entrada, string idTransferencia = null) : this() { if (entrada.Invalido) { return; } this.IdUsuario = entrada.IdUsuario; this.IdConta = entrada.IdConta; this.IdCategoria = entrada.IdCategoria; this.IdParcela = entrada.IdParcela; this.Data = entrada.Data; this.Valor = entrada.Valor; this.QtdRendaVariavel = entrada.QuantidadeAcoes; this.IdPessoa = entrada.IdPessoa; this.Observacao = entrada.Observacao; this.IdTransferencia = idTransferencia; }