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