Пример #1
0
        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;
            }
        }