public async Task <IEnumerable <CalculoDTO> > Calcular(IList <DadosCalculoDTO> dados)
        {
            var novosCalculos = new List <CalculoIR>();

            foreach (DadosCalculoDTO dado in dados)
            {
                decimal rendaLiquida = dado.RendaBruta - dado.Dependentes * (dado.SalarioMinimo * 0.05m);
                var     aliquota     = _aliquotaService.Get(dado.SalarioMinimo, rendaLiquida).Result;

                if (aliquota == null)
                {
                    throw new ArgumentException("Aliquota nao encontrada. Verifique os parametros passados");
                }

                var impostoDevido = rendaLiquida * aliquota.Porcentagem / 100;

                var contribuinte = new Contribuinte
                {
                    Nome        = dado.Nome,
                    Cpf         = dado.Cpf,
                    Renda       = dado.RendaBruta,
                    Dependentes = dado.Dependentes
                };

                contribuinte = await _contribuinteService.Save(contribuinte);

                var novoCalculoIR = new CalculoIR
                {
                    Contribuinte  = contribuinte,
                    Data          = DateTime.Now,
                    Dependentes   = dado.Dependentes,
                    RendaBruta    = dado.RendaBruta,
                    RendaLiquida  = rendaLiquida,
                    ImpostoDevido = impostoDevido
                };

                novosCalculos.Add(novoCalculoIR);
            }

            await _calculoIRService.SaveAll(novosCalculos);

            var novosCalculosDTO = new List <CalculoDTO>();

            foreach (var calculo in novosCalculos)
            {
                novosCalculosDTO.Add(new CalculoDTO
                {
                    ContribuinteId   = calculo.Contribuinte.Id,
                    Nome             = calculo.Contribuinte.Nome,
                    ImpostoCalculado = calculo.ImpostoDevido
                });
            }

            return(novosCalculosDTO.OrderBy(c => c.Nome).ThenBy(c => c.ImpostoCalculado));
        }
Exemplo n.º 2
0
        public CalculoIRServiceTesta()
        {
            _calculoIRMockService = new Mock <ICalculoIRService>();

            _calculoNotEmpty = new CalculoIR
            {
                Id            = new Guid(),
                Contribuinte  = new Contribuinte(new Guid()),
                Data          = DateTime.Now,
                Dependentes   = 1,
                ImpostoDevido = 2000,
                RendaBruta    = 10000,
                RendaLiquida  = 9500,
                SalarioMinimo = 1045
            };

            _calculoEmpty = null;

            _calculoDTONotEmpty = new CalculoDTO {
                ContribuinteId = new Guid(), Nome = "Teste", ImpostoCalculado = 1000
            };
        }
Exemplo n.º 3
0
 Task <CalculoIR> ICalculoIRService.Save(CalculoIR calculoIR)
 {
     throw new NotImplementedException();
 }