public Conta Transferir(Conta contaOrigem, Conta contaDestino, double valor) { var contaOrigemResult = this.GetById(contaOrigem.IdConta); if (contaOrigemResult == null) { contaOrigem.AddNotification(new Notification("IdConta", "Conta de Origem não localizada no sistema")); return(contaOrigem); } var contaDestinoResult = this.GetById(contaDestino.IdConta); if (contaDestinoResult == null) { contaDestino.AddNotification(new Notification("IdConta", "Conta de Destino não localizada no sistema")); return(contaDestino); } contaOrigemResult.Transferir(contaDestinoResult, valor); if (contaOrigemResult.Valid) { if (this.PodeTarifar(contaOrigemResult, DateTime.Now, TipoTransacao.TRANSFERENCIA())) { var tarifa = _transacaoService.CriarTransacao(contaOrigemResult, "Tarifa de Transferência", "", DateTime.Now, contaOrigemResult.Banco.TarifaTransferencia * (-1), contaDestinoResult, TipoTransacao.TARIFA()); _transacaoService.Save(tarifa); contaOrigemResult.Tarifar(tarifa.ValorTransacao); } _transacaoService.Save(_transacaoService.CriarTransacao(contaOrigemResult, "Transferência", "", DateTime.Now, valor * (-1), contaDestinoResult, TipoTransacao.TRANSFERENCIA())); _transacaoService.Save(_transacaoService.CriarTransacao(contaDestinoResult, "Transferência", "", DateTime.Now, valor, contaOrigemResult, TipoTransacao.TRANSFERENCIA())); _contaRepository.Update(contaOrigemResult); _contaRepository.Update(contaDestinoResult); _unitOfWork.Commit(); } return(contaOrigemResult); }
public double ConsultarSaldo(Conta conta) { var contaResult = this.GetById(conta.IdConta); if (contaResult != null) { if (this.PodeTarifar(contaResult, DateTime.Now, TipoTransacao.CONSULTAR_SALDO())) { var tarifa = _transacaoService.CriarTransacao(contaResult, "Tarifa de Consulta de Saldo", "", DateTime.Now, contaResult.Banco.TarifaConsultarSaldo * (-1), null, TipoTransacao.TARIFA()); _transacaoService.Save(tarifa); contaResult.Tarifar(tarifa.ValorTransacao); _contaRepository.Update(contaResult); } else { var operacao = _transacaoService.CriarTransacao(contaResult, "1º Consulta de Saldo", "", DateTime.Now, 0.0, null, TipoTransacao.CONSULTAR_SALDO()); _transacaoService.Save(operacao); } _unitOfWork.Commit(); return(contaResult.SaldoConta); } return(0.0); }
public Conta Sacar(Conta conta, double valor) { var contaResult = this.GetById(conta.IdConta); if (contaResult == null) { conta.AddNotification(new Notification("IdConta", "Conta não localizada no sistema")); return(conta); } contaResult.Sacar(valor); if (contaResult.Valid) { if (this.PodeTarifar(contaResult, DateTime.Now, TipoTransacao.SAQUE())) { var tarifa = _transacaoService.CriarTransacao(contaResult, "Tarifa de Saque", "", DateTime.Now, contaResult.Banco.TarifaSaque * (-1), null, TipoTransacao.TARIFA()); _transacaoService.Save(tarifa); contaResult.Tarifar(tarifa.ValorTransacao); } var operacao = _transacaoService.CriarTransacao(contaResult, "Saque", "", DateTime.Now, valor * (-1), null, TipoTransacao.SAQUE()); _transacaoService.Save(operacao); _contaRepository.Update(contaResult); _unitOfWork.Commit(); } return(contaResult); }
public IEnumerable <Transacao> ConsultarExtrato(Conta conta, DateTime dataInicio, DateTime dataFim) { var contaResult = this.GetById(conta.IdConta); if (contaResult != null) { if (this.PodeTarifar(contaResult, DateTime.Now, TipoTransacao.EXTRATO())) { var tarifa = _transacaoService.CriarTransacao(contaResult, "Tarifa de Consulta de Extrato", "", DateTime.Now, contaResult.Banco.TarifaConsultarExtrato * (-1), null, TipoTransacao.TARIFA()); _transacaoService.Save(tarifa); contaResult.Tarifar(tarifa.ValorTransacao); _contaRepository.Update(contaResult); } else { var operacao = _transacaoService.CriarTransacao(contaResult, "1º Consulta de Extrato", "", DateTime.Now, 0.0, null, TipoTransacao.EXTRATO()); _transacaoService.Save(operacao); } _unitOfWork.Commit(); return(this._transacaoService.ConsultarExtrato(conta, dataInicio, dataFim).Where(e => e.ValorTransacao != 0.0)); } return(null); }