예제 #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 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();
        }