コード例 #1
0
        public void Alterar(AgendamentoEntrada entrada)
        {
            if (entrada.Invalido)
            {
                return;
            }

            this.IdCategoria         = entrada.IdCategoria;
            this.IdConta             = entrada.IdConta;
            this.IdCartaoCredito     = entrada.IdCartaoCredito;
            this.IdPessoa            = entrada.IdPessoa;
            this.TipoMetodoPagamento = entrada.TipoMetodoPagamento;
            this.Observacao          = entrada.Observacao;

            var parcelas = new List <Parcela>();

            // Adiciona a parcelas fechadas
            parcelas.AddRange(this.Parcelas.Where(x => x.ObterStatus() == StatusParcela.Fechada));

            // Cria novas parcelas
            parcelas.AddRange(this.CriarParcelas(
                                  entrada.QuantidadeParcelas,
                                  entrada.DataPrimeiraParcela,
                                  entrada.ValorParcela,
                                  entrada.PeriodicidadeParcelas,
                                  entrada.Observacao));

            this.Parcelas = parcelas;

            this.AjustarNumeroParcelas();
        }
コード例 #2
0
        public async Task <ISaida> CadastrarAgendamento(AgendamentoEntrada 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 ou cartão de crédito existem a partir do ID informado.
            if (entrada.IdConta.HasValue)
            {
                var conta = await _contaRepositorio.ObterPorId(entrada.IdConta.Value);

                this
                .NotificarSeNulo(conta, ContaMensagem.Id_Conta_Nao_Existe)
                .NotificarSeVerdadeiro(conta?.Tipo == TipoConta.Acoes, AgendamentoMensagem.Tipo_Conta_Invalida);
            }
            else
            {
                var cartao = (CartaoCreditoSaida)(await _cartaoCreditoServico.ObterCartaoCreditoPorId(entrada.IdCartaoCredito.Value, entrada.IdUsuario)).Retorno;

                this
                .NotificarSeNulo(cartao, CartaoCreditoMensagem.Id_Cartao_Nao_Existe)
                .NotificarSeVerdadeiro(cartao != null && (cartao.ValorLimiteDisponivel ?? 0) < entrada.QuantidadeParcelas * entrada.ValorParcela, $"O valor total do agendamento ({(entrada.QuantidadeParcelas * entrada.ValorParcela).ToString("C2")}) é superior ao valor do limite disponível para o cartão ({cartao.ValorLimiteDisponivel?.ToString("C2")}).");
            }

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

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

            var agendamento = new Agendamento(entrada);

            await _agendamentoRepositorio.Inserir(agendamento);

            await _uow.Commit();

            return(new Saida(true, new[] { AgendamentoMensagem.Agendamento_Cadastrado_Com_Sucesso }, new AgendamentoSaida(await _agendamentoRepositorio.ObterPorId(agendamento.Id))));
        }
コード例 #3
0
        public async Task <IActionResult> CadastrarAgendamento([FromBody, SwaggerParameter("Informações de cadastro do agendamento.", Required = true)] AgendamentoViewModel model)
        {
            var entrada = new AgendamentoEntrada(
                base.ObterIdUsuarioClaim(),
                model.IdCategoria.Value,
                model.IdConta,
                model.IdCartaoCredito,
                model.TipoMetodoPagamento,
                model.ValorParcela.Value,
                model.DataPrimeiraParcela.Value,
                model.QuantidadeParcelas.Value,
                model.PeriodicidadeParcelas,
                model.IdPessoa,
                model.Observacao);

            return(new ApiResult(await _agendamentoServico.CadastrarAgendamento(entrada)));
        }
コード例 #4
0
        public Agendamento(AgendamentoEntrada entrada)
            : this()
        {
            if (entrada.Invalido)
            {
                return;
            }

            this.IdUsuario           = entrada.IdUsuario;
            this.IdCategoria         = entrada.IdCategoria;
            this.IdConta             = entrada.IdConta;
            this.IdCartaoCredito     = entrada.IdCartaoCredito;
            this.IdPessoa            = entrada.IdPessoa;
            this.TipoMetodoPagamento = entrada.TipoMetodoPagamento;
            this.Observacao          = entrada.Observacao;
            this.Parcelas            = this.CriarParcelas(
                entrada.QuantidadeParcelas,
                entrada.DataPrimeiraParcela,
                entrada.ValorParcela,
                entrada.PeriodicidadeParcelas,
                entrada.Observacao);
        }
コード例 #5
0
        public async Task <ISaida> AlterarAgendamento(int idAgendamento, AgendamentoEntrada entrada)
        {
            // Verifica se as informações para alteração foram informadas corretamente
            if (entrada.Invalido)
            {
                return(new Saida(false, entrada.Mensagens, null));
            }

            var agendamento = await _agendamentoRepositorio.ObterPorId(idAgendamento);

            // Verifica se o agendamento existe
            this.NotificarSeNulo(agendamento, string.Format(AgendamentoMensagem.Id_Agendamento_Nao_Existe, idAgendamento));

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

            // Verifica se o agendamento pertece ao usuário informado.
            this.NotificarSeDiferentes(agendamento.IdUsuario, entrada.IdUsuario, AgendamentoMensagem.Agendamento_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 (agendamento.IdCategoria != entrada.IdCategoria)
            {
                this.NotificarSeFalso(await _categoriaRepositorio.VerificarExistenciaPorId(entrada.IdUsuario, entrada.IdCategoria), CategoriaMensagem.Id_Categoria_Nao_Existe);
            }

            // Verifica se a conta ou cartão de crédito existem a partir do ID informado.
            if (agendamento.IdConta != entrada.IdConta && entrada.IdConta.HasValue)
            {
                this.NotificarSeFalso(await _contaRepositorio.VerificarExistenciaPorId(entrada.IdUsuario, entrada.IdConta.Value), ContaMensagem.Id_Conta_Nao_Existe);
            }
            else if (entrada.IdCartaoCredito.HasValue && agendamento.IdCartaoCredito != entrada.IdCartaoCredito)
            {
                this.NotificarSeFalso(await _cartaoCreditoRepositorio.VerificarExistenciaPorId(entrada.IdUsuario, entrada.IdCartaoCredito.Value), CartaoCreditoMensagem.Id_Cartao_Nao_Existe);
            }

            // Verifica se a pessoa existe a partir do ID informado.
            if (agendamento.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));
            }

            // Exclui todas as parcelas abertas do agendamento.
            foreach (var parcelaAberta in agendamento.Parcelas.Where(x => x.ObterStatus() == StatusParcela.Aberta))
            {
                _parcelaRepositorio.Deletar(parcelaAberta);
            }

            agendamento.Alterar(entrada);

            _agendamentoRepositorio.Atualizar(agendamento);

            await _uow.Commit();

            return(new Saida(true, new[] { AgendamentoMensagem.Agendamento_Alterado_Com_Sucesso }, new AgendamentoSaida(agendamento)));
        }