示例#1
0
        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)));
        }
示例#2
0
        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;
        }
示例#3
0
        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))));
        }