Esempio n. 1
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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
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);
        }