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