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 async Task <ActionResult <Aliquota> > GetAliquota(decimal salarioMinimo, decimal rendaLiquida) { var aliquota = await _aliquotaService.Get(salarioMinimo, rendaLiquida); if (aliquota == null) { return(NotFound()); } return(aliquota); }