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 Conta Delete(Conta entity) { var contaResult = this.GetById(entity.IdConta); if (contaResult == null) { entity.AddNotification(new Notification("IdConta", "Conta não localizada no sistema")); } if (this._transacaoService.GetByIdConta(entity.IdConta).Count() > 0) { entity.AddNotification(new Notification("IdConta", "Existem transações criadas para essa conta")); } if (entity.Valid) { this._contaRepository.Delete(contaResult); this._unitOfWork.Commit(); } return(entity); }
public Conta Save(Conta entity) { if (!entity.Validar()) { return(entity); } if (this.GetByAgenciaNumero(entity.Agencia, entity.Numero) != null) { entity.AddNotification(new Notification("Número", "Já existe uma conta cadastrada para essa agência e número")); } if (entity.Valid) { this._contaRepository.Save(entity); this._unitOfWork.Commit(); } return(entity); }
public Conta Depositar(Conta conta, string depositante, 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.Depositar(valor); if (contaResult.Valid) { var transacao = _transacaoService.CriarTransacao(contaResult, "Deposito", depositante, DateTime.Now, valor, null, TipoTransacao.DEPOSITO()); _transacaoService.Save(transacao); _contaRepository.Update(contaResult); _unitOfWork.Commit(); } return(contaResult); }
public Conta Update(Conta entity) { if (!entity.Validar()) { return(entity); } var contaResult = this.GetByAgenciaNumero(entity.Agencia, entity.Numero); if (contaResult != null && contaResult.IdConta != entity.IdConta) { entity.AddNotification(new Notification("Número", "Já existe uma conta cadastrada para essa agência e número")); } if (entity.Valid) { this._contaRepository.Update(entity); this._unitOfWork.Commit(); } return(entity); }
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); }