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 r24_TotalizaTributacaoExclusiva() { var dicValores = new Dictionary <int, decimal>(); // Zera todos //for (int i = 1; i <= 12; i++) dicValores.Add(i, 0); // São os campos próprios (calculados) e os 88, 89 // 01: Décimo terceiro do Titular => R21 if (RendimentosPJ != null) { dicValores[1] = RendimentosPJ.Sum(o => o.VR_DecTerc); } // 02: Ganhos de Capital => //-- // 03: Ganhos de Capital Estrangeira => //-- // 04: Ganhos de Capital em espécie => //-- // 05: Ganhos Renda Variável => if (RendimentosTributacaoExclusiva != null) { dicValores[5] = RendimentosTributacaoExclusiva .Where(o => o.CD_Exclusivo == 5) .Sum(o => o.VR_Valor); } // 07: RRA //-- // 08: Décimo terceiro dos Dependentes => R32 if (RendimentosPJDependentes != null) { dicValores[8] = RendimentosPJDependentes.Sum(o => o.VR_DecTerc); } // 09: RRA Dependentes //-- // 06: Rendimentos Aplicações => R88 // 10: JCP => R88 // 11: RendPLR => R88 if (RendimentoExclusivo_Tipo2 != null) { foreach (var v in RendimentoExclusivo_Tipo2) { if (!dicValores.ContainsKey(v.NR_Cod)) { dicValores.Add(v.NR_Cod, 0); } dicValores[v.NR_Cod] += v.VR_Valor; } } // 12: Outros => R89 if (RendimentoExclusivo_Tipo3 != null) { dicValores[12] = RendimentoExclusivo_Tipo3.Sum(o => o.VR_Valor); } RendimentosTributacaoExclusiva = dicValores .Where(o => o.Value > 0) .Select(pair => new Classes_DEC.R24_RendimentosTributacaoExclusiva(Header) { CD_Exclusivo = pair.Key, VR_Valor = pair.Value }) .ToArray(); }