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