/// <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); }
/// <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); }
/// <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(); }
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); }
/// <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; }
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(); }
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); }
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"); } }
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; } }
public EntregaService(IOperacao operacao) { _operacao = operacao; }
/// <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)); }
public Operacoes(IOperacao operacao) { _operacao = operacao; }
public static void ExecutaOperacao(IOperacao metodo) { Console.WriteLine(metodo.ExecutaCalculo()); }
public Calculadora(IOperacao operacao) { this.operacao = operacao; }
public double Executar(IOperacao operacao) { return(operacao.Executar()); }
public void ExecutarOperacao(IOperacao operacao) { ope = operacao; ope.Executar(); }