private void ir_TotalizaHeader() { // Ainda não está completo #region Fontes Pagadoras // Busca var fontes = new List <Tuple <string, decimal> >(); if (RendimentosPJ != null) { fontes.AddRange(RendimentosPJ .Select(r => new Tuple <string, decimal>(r.NR_Pagador, r.VR_Rendto))); } if (RendimentosPJDependentes != null) { fontes.AddRange(RendimentosPJDependentes .Select(r => new Tuple <string, decimal>(r.NR_Pagador, r.VR_Rendto))); } // Agrega e Ordena fontes = fontes .GroupBy(g => g.Item1) .Select(r => new Tuple <string, decimal>(r.Key, r.Sum(o => o.Item2))) .OrderByDescending(i => i.Item2) .ToList(); // Seta campos Header.NR_BaseFonteMaior = fontes.Count > 0 ? fontes[0].Item1 : ""; Header.NR_BaseFonteDois = fontes.Count > 1 ? fontes[1].Item1 : ""; Header.NR_BaseFonteTres = fontes.Count > 2 ? fontes[2].Item1 : ""; Header.NR_BaseFonteQuatro = fontes.Count > 3 ? fontes[3].Item1 : ""; #endregion #region Dependentes // Zera Tuple <string, string>[] rankingRendimentos = new Tuple <string, string> [0]; if (Dependentes != null && Dependentes.Length > 0) { var dicDependentes = Dependentes .Select(d => new { cpf = d.NI_Depend, nasc = d.DT_Nascim }) .ToDictionary(k => k.cpf, e => e.nasc); rankingRendimentos = RendimentosPJDependentes .Select(o => new Tuple <string, decimal>(o.Cpf_Benef, o.VR_Rendto)) .OrderByDescending(o => o.Item2) .Select(d => new Tuple <string, string>(d.Item1, dicDependentes.Get(d.Item1, ""))) .ToArray(); } Header.NR_CPFDepeRendMaior = leTupla(rankingRendimentos, 0).Item1; Header.DT_NasDepeRendMaior = leTupla(rankingRendimentos, 0).Item2; Header.NR_CPFDepeRendDois = leTupla(rankingRendimentos, 1).Item1; Header.DT_NasDepeRendDois = leTupla(rankingRendimentos, 1).Item2; Header.NR_CPFDepeRendTres = leTupla(rankingRendimentos, 2).Item1; Header.DT_NasDepeRendTres = leTupla(rankingRendimentos, 2).Item2; Header.NR_CPFDepeRendQuatro = leTupla(rankingRendimentos, 3).Item1; Header.DT_NasDepeRendQuatro = leTupla(rankingRendimentos, 3).Item2; Header.NR_CPFDepeRendCinco = leTupla(rankingRendimentos, 4).Item1; Header.DT_NasDepeRendCinco = leTupla(rankingRendimentos, 4).Item2; Header.NR_CPFDepeRendSeis = leTupla(rankingRendimentos, 5).Item1; Header.DT_NasDepeRendSeis = leTupla(rankingRendimentos, 5).Item2; #endregion #region VR_TotalPagamentos e Depsesas médicas Header.NR_BaseBenefDespMedMaior = Header.NR_BaseBenefDespMedDois = ""; Header.VR_TotalPagamentos = 0; if (RelacaoPagamentosEfetuados != null) { Header.VR_TotalPagamentos = RelacaoPagamentosEfetuados.Sum(o => o.VR_Pagto); var pagMed = RelacaoPagamentosEfetuados .Where(r => r.ehDespesaMedica()) .Where(r => r.VR_Pagto >= r.VR_Reduc) .GroupBy(g => g.NR_Benef) .Select(g => new Tuple <string, decimal>( g.Key, g.Sum(o => o.VR_Pagto - o.VR_Reduc))) .OrderByDescending(o => o.Item2) .ToArray(); if (pagMed.Length > 0) { Header.NR_BaseBenefDespMedMaior = pagMed[0].Item1; } if (pagMed.Length > 1) { Header.NR_BaseBenefDespMedDois = pagMed[1].Item1; } } #endregion if (RendimentosIsentosNaoTributaveis != null) { Header.VR_TotalIsentos = RendimentosIsentosNaoTributaveis.Sum(o => o.VR_Valor); } //Header.IN_EntregaObrigatoria = EhEntregaObrigatoria(); // TODO Implementar Header.IN_EntregaObrigatoria = Header.IN_EntregaObrigatoria; if (Header.ehCompleta()) { Header.VR_ImpDevido = TotaisDeclaracao.VR_ImpDev; } else { Header.VR_ImpDevido = TotaisDeclaracaoSimplificada.VR_ImpDevido; } }
private void r23_TotalizaISentos() { var lst = new List <Classes_DEC.R23_RendimentosIsentosNaoTributaveis>(); // gera novos R23 #region dos registros 83 até 87 foreach (var r83 in RendimentosIsentos_Tipo2) { lst.Add(new Classes_DEC.R23_RendimentosIsentosNaoTributaveis(Header) { CD_Isento = r83.NR_COD, // 19, 20 e 21 VR_Valor = r83.VR_Valor }); } foreach (var r84 in RendimentosIsentos_Tipo3) { lst.Add(new Classes_DEC.R23_RendimentosIsentosNaoTributaveis(Header) { CD_Isento = r84.NR_Cod, // 1, 2, 4, 9, 10, 12, 13, 14, 16, 17 e 18 VR_Valor = r84.VR_Valor }); } foreach (var r85 in RendimentosIsentos_Tipo4) // TODO FIXME: Não verificado { lst.Add(new Classes_DEC.R23_RendimentosIsentosNaoTributaveis(Header) { CD_Isento = r85.NR_Cod, // Apenas 11 VR_Valor = r85.VR_Receb + r85.VR_IRRF13Salario, // TODO FIXME: Não verificado }); } foreach (var r86 in RendimentosIsentos_Tipo5) { lst.Add(new Classes_DEC.R23_RendimentosIsentosNaoTributaveis(Header) { CD_Isento = r86.NR_Cod, // Apenas 26 VR_Valor = r86.VR_Valor }); } foreach (var r87 in RendimentosIsentos_Tipo6) { lst.Add(new Classes_DEC.R23_RendimentosIsentosNaoTributaveis(Header) { CD_Isento = r87.NR_Cod, // 5, 6 e 7 // Para os rendimentos 05, 06 e 07, é apresentado o somatório de VALOR + VALORGCAP. VR_Valor = r87.VR_Valor + r87.VR_ValorGCap }); } #endregion #region dos registros 52 e 40 //foreach (var r40 in [40 Não implementado]) //{ // lst.Add(new Classes_DEC.R23_RendimentosIsentosNaoTributaveis(Header) // { // CD_Isento = r40.NR_Cod, // VR_Valor = r40.VR_Valor // }); //} //foreach (var r52 in [52 Não implementado]) //{ // lst.Add(new Classes_DEC.R23_RendimentosIsentosNaoTributaveis(Header) // { // CD_Isento = r52.NR_Cod, // VR_Valor = r52.VR_Valor // }); //} #endregion // Junta com os R23 unitários de códigos 03, 08, 23, 24 e 25 int[] itens = { 03, 08, 23, 24, 25 }; var unitarios = RendimentosIsentosNaoTributaveis .Where(r => itens.Contains(r.CD_Isento)) .ToArray(); var acumulados = lst .GroupBy(o => o.CD_Isento) .Select(g => new Classes_DEC.R23_RendimentosIsentosNaoTributaveis(Header) { CD_Isento = g.Key, VR_Valor = g.Sum(r => r.VR_Valor) }); // grava registro RendimentosIsentosNaoTributaveis = unitarios .Union(acumulados) .ToArray(); }