コード例 #1
0
        /// <summary>
        /// Cria uma nova instância de <see cref="Operacao"/> a partir dos dados do modelo de domínio.
        /// </summary>
        /// <param name="operacao">Entidade de domínio.</param>
        public Operacao(IOperacao operacao)
        {
            _operacao = operacao;

            var parcelasDaOperacao = new HashSet <Parcela>(
                operacao.Parcelas
                .Where(parcela => parcela.EntidadeValida)
                .Select(parcela => new Parcela(this)
            {
                DataDeVencimento = parcela.DataDeVencimento,
                Prazo            = parcela.Prazo,
                Valor            = parcela.Valor,
                ValorDeJuros     = parcela.ValorDeJuros,
                ValorDeIof       = parcela.ValorApuradoPorImposto <IIof>(),
                ValorDePis       = parcela.ValorApuradoPorImposto <IPis>(),
                ValorDeCofins    = parcela.ValorApuradoPorImposto <ICofins>()
            }));

            DataDaOperacao = operacao.DataDaOperacao;
            TaxaDeIof      = operacao.TaxaDeIof;
            TaxaDeJuros    = operacao.TaxaDeJuros;
            TipoDeOperacao = (byte)operacao.TipoDeOperacao;
            Parcelas       = parcelasDaOperacao;
            Valor          = parcelasDaOperacao.Sum(parcela => parcela.Valor);
            ValorDeJuros   = parcelasDaOperacao.Sum(parcela => parcela.ValorDeJuros);
            ValorDeIof     = parcelasDaOperacao.Sum(parcela => parcela.ValorDeIof);
            ValorDePis     = parcelasDaOperacao.Sum(parcela => parcela.ValorDePis);
            ValorDeCofins  = parcelasDaOperacao.Sum(parcela => parcela.ValorDeCofins);
        }
コード例 #2
0
        /// <summary>
        /// Cria uma parcela para uma operação.
        /// </summary>
        /// <param name="operacao">Operação à qual a parcela será vinculada.</param>
        /// <param name="valorDaParcela">Valor da parcela.</param>
        /// <param name="dataDeVencimento">Data de vencimento da parcela.</param>
        /// <returns>Parcela criada.</returns>
        public IParcela CriarParcela(IOperacao operacao, decimal valorDaParcela, DateTime dataDeVencimento)
        {
            var parcela = new Parcela(operacao, valorDaParcela, dataDeVencimento, new ServicoDeImpostosPorOperacao(_fabricaDeImpostos, operacao.TipoDeOperacao), _fabricaDeCalculosFinanceiros);

            parcela.ValidarEntidade();

            return(parcela);
        }
コード例 #3
0
        /// <summary>
        /// Aprova a operação e remove da lista de operações pendentes
        /// </summary>
        /// <param name="operacao"></param>
        public void AprovarOperacao(IOperacao operacao)
        {
            operacao.AprovarOperacao();
            var op = OperacoesPendentes.Find(x => x.Id == operacao.Id);

            OperacoesPendentes.Remove(op);
            sinconizarDados();
        }
コード例 #4
0
 public ContaClienteServico(IContaClienteRepository contaClienteRepository,
                            ILancamentoRepository lancamentoRepository)
 {
     _contaClienteRepository = contaClienteRepository;
     _lancamentoRepository   = lancamentoRepository;
     _operacaoCredito        = new Credito(contaClienteRepository, lancamentoRepository);
     _operacaoDebito         = new Debito(contaClienteRepository, lancamentoRepository);
     _operacaoEstorno        = new EstornoDebito(contaClienteRepository, lancamentoRepository);
 }
コード例 #5
0
        /// <summary>
        /// Cria uma nova instância de <see cref="Parcela"/>.
        /// </summary>
        /// <param name="operacao">Operação a qual a parcela está vinculada.</param>
        /// <param name="valorDaParcela">Valor da parcela.</param>
        /// <param name="dataDeVencimento">Data de vencimento da parcela.</param>
        /// <param name="servicoDeImpostosPorOperacao">Serviço responsável por criar os objetos de imposto por tipo de operação da parcela.</param>
        /// <param name="fabricaDeCalculosFinanceiros">Objeto responsável por criar os cálculos financeiros que serão aplicados a parcela.</param>
        public Parcela(IOperacao operacao, decimal valorDaParcela, DateTime dataDeVencimento, ServicoDeImpostosPorOperacao servicoDeImpostosPorOperacao, IFabricaDeCalculosFinanceiros fabricaDeCalculosFinanceiros)
        {
            _operacao                     = operacao;
            _impostosIncidentes           = servicoDeImpostosPorOperacao.Impostos;
            _fabricaDeCalculosFinanceiros = fabricaDeCalculosFinanceiros;

            Valor            = valorDaParcela;
            DataDeVencimento = dataDeVencimento;
        }
コード例 #6
0
        public void QuandoCalcularOsImpostosDaOperacao()
        {
            _operacao = _fabricaDeOperacao.CriarOperacao(_tipoDeOperacaoFinanceira, _dataDaOperacao, _taxaDeIof, _taxaDeJuros);
            foreach (var parcela in _parcelasDaOperacao.Rows.Select(row => new { Valor = Convert.ToDecimal(row.ElementAt(0).Value), Vencimento = Convert.ToDateTime(row.ElementAt(1).Value) }))
            {
                _operacao.IncluirParcela(parcela.Valor, parcela.Vencimento);
            }

            _operacao.CalcularOperacao();
        }
コード例 #7
0
        private void IdentificarOperacaoValida(IOperacao operacao)
        {
            Action <IOperacao> validarOperacao = (o) =>
            {
                if (o == null)
                {
                    throw new ArgumentNullException("o", "Operação informada não é válida.");
                }
                o.ValidarEntidade();
            };

            validarOperacao.Invoke(operacao);
        }
コード例 #8
0
        private static void PrepararOperacao(IOperacao operacao)
        {
            Console.WriteLine("Digite o valor:");
            decimal valor;

            if (decimal.TryParse(Console.ReadLine(), out valor))
            {
                operacao.Valor = valor;
                Console.WriteLine("Operação agendada com sucesso. Id da operação:{0}", operacao.Id);
            }
            else
            {
                Console.WriteLine("Ocorreu um erro na preparação da operação");
            }
        }
コード例 #9
0
ファイル: Program.cs プロジェクト: angelitocsg/Calculadora
        static void ExecutaOperacao()
        {
            switch ((OperacaoEnum)operacao)
            {
            case OperacaoEnum.SOMA:
                tipoOperacao = new Soma(primeiroValor, segundoValor);
                break;

            case OperacaoEnum.SUBTRACAO:
                tipoOperacao = new Divisao(primeiroValor, segundoValor);
                break;

            case OperacaoEnum.MULTIPLICACAO:
                tipoOperacao = new Multiplicacao(primeiroValor, segundoValor);
                break;

            case OperacaoEnum.DIVISAO:
                tipoOperacao = new Divisao(primeiroValor, segundoValor);
                break;
            }
        }
コード例 #10
0
 public EntregaService(IOperacao operacao)
 {
     _operacao = operacao;
 }
コード例 #11
0
        /// <summary>
        /// Persiste uma nova operação financeira no repositório de dados.
        /// </summary>
        /// <param name="operacao">Operação financeira que será persistida.</param>
        /// <exception cref="ArgumentNullException" />
        /// <exception cref="InvalidOperationException" />
        public void CriarNovaOperacaoFinanceira(IOperacao operacao)
        {
            IdentificarOperacaoValida(operacao);

            Entidades.Add(new ModeloDeOperacaoFinanceira.Operacao(operacao));
        }
コード例 #12
0
ファイル: Operacoes.cs プロジェクト: angelitocsg/Calculadora
 public Operacoes(IOperacao operacao)
 {
     _operacao = operacao;
 }
コード例 #13
0
 public static void ExecutaOperacao(IOperacao metodo)
 {
     Console.WriteLine(metodo.ExecutaCalculo());
 }
コード例 #14
0
 public Calculadora(IOperacao operacao)
 {
     this.operacao = operacao;
 }
コード例 #15
0
 public double Executar(IOperacao operacao)
 {
     return(operacao.Executar());
 }
コード例 #16
0
 public void ExecutarOperacao(IOperacao operacao)
 {
     ope = operacao;
     ope.Executar();
 }