public async Task <IActionResult> CadastrarDetalhe( [FromQuery, SwaggerParameter("ID do lançamento.", Required = true)] int idLancamento, [FromBody, SwaggerParameter("Informações de cadastro do detalhe do lançamento.", Required = true)] LancamentoDetalheViewModel model) { var entrada = new LancamentoDetalheEntrada(model.IdCategoria.Value, model.Valor.Value, model.Observacao); return(new ApiResult(await _lancamentoServico.CadastrarDetalhe(idLancamento, entrada))); }
public LancamentoDetalhe(int idLancamento, LancamentoDetalheEntrada entrada) { if (entrada.Invalido) { return; } this.IdLancamento = idLancamento; this.IdCategoria = entrada.IdCategoria; this.Valor = entrada.Valor; this.Observacao = entrada.Observacao; }
public async Task <ISaida> CadastrarDetalhe(int idLancamento, LancamentoDetalheEntrada entrada) { // Verifica se as informações para cadastro 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 valor do detalhe é maior que o valor do lançamento this.NotificarSeMaiorOuIgualA(entrada.Valor, lancamento.Valor, LancamentoDetalheMensagem.Valor_Detalhe_Maior_Ou_Igual_Valor_Lancamento); // Verifica se a categoria do detalhe é a mesma categoria informada para o lançamento. this.NotificarSeIguais(entrada.IdCategoria, lancamento.IdCategoria, LancamentoDetalheMensagem.Id_Categoria_Igual_Categoria_Lancamento); if (this.Invalido) { return(new Saida(false, this.Mensagens, null)); } // Verifica se a soma dos valores dos detalhes do lançamento somado ao valor do detalhe é maior que o valor do lançamento this.NotificarSeMaiorQue(lancamento.Detalhes.Sum(x => x.Valor) + entrada.Valor, lancamento.Valor, LancamentoDetalheMensagem.Soma_Detalhes_Mais_Valor_Detalhe_Maior_Valor_Lancamento); if (this.Invalido) { return(new Saida(false, this.Mensagens, null)); } var detalhe = new LancamentoDetalhe(idLancamento, entrada); await _detalheRepositorio.Inserir(detalhe); await _uow.Commit(); return(new Saida(true, new[] { LancamentoDetalheMensagem.Detalhe_Cadastrado_Com_Sucesso }, new LancamentoDetalheSaida(await _detalheRepositorio.ObterPorId(detalhe.Id)))); }