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)); }
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 }; }
Task <CalculoIR> ICalculoIRService.Save(CalculoIR calculoIR) { throw new NotImplementedException(); }