Пример #1
0
        /// <summary>
        /// Determina si existe información relacionada con esta tabla.
        /// </summary>
        /// <param name="conceptoPartidas">Concepto de partidas a evaluar.</param>
        /// <param name="instancia">Documento de instancia.</param>
        /// <returns>Si contiene información</returns>
        private Boolean ContieneInformacion(EstructuraFormatoDto conceptoPartidas, DocumentoInstanciaXbrlDto instancia)
        {
            var contieneInformacion = false;

            foreach (var partida in conceptoPartidas.SubEstructuras)
            {
                IList <String> idsHechosPartida;
                if (instancia.HechosPorIdConcepto.TryGetValue(partida.IdConcepto, out idsHechosPartida))
                {
                    foreach (var idHecho in idsHechosPartida)
                    {
                        HechoDto hechoPartida;
                        if (instancia.HechosPorId.TryGetValue(idHecho, out hechoPartida))
                        {
                            if (hechoPartida != null && !String.IsNullOrEmpty(hechoPartida.Valor))
                            {
                                contieneInformacion = true;
                                break;
                            }
                        }
                    }
                    if (contieneInformacion)
                    {
                        break;
                    }
                }
            }
            return(contieneInformacion);
        }
        public EstructuraFormatoDto ObtenEstructura(ConceptoReporteDTO conceptoOrigen, DocumentoInstanciaXbrlDto instancia, IndiceReporteDTO rolAExportar)
        {
            EstructuraFormatoDto estructuraRequerida = null;
            var listaEstructurasHipercubos           = new List <EstructuraFormatoDto>();
            var rolPresentacion    = instancia.Taxonomia.RolesPresentacion.Where(x => x.Uri.Equals(rolAExportar.Uri)).FirstOrDefault();
            var conceptosTaxonomia = instancia.Taxonomia.ConceptosPorId;

            if (rolPresentacion != null)
            {
                var estructurasAnalizar = new List <EstructuraFormatoDto>(rolPresentacion.Estructuras);
                for (var indiceEstructrua = 0; indiceEstructrua < estructurasAnalizar.Count; indiceEstructrua++)
                {
                    var estructura = estructurasAnalizar[indiceEstructrua];
                    if (estructura.SubEstructuras != null && estructura.SubEstructuras.Count > 0)
                    {
                        if (estructura.IdConcepto.Equals(conceptoOrigen.IdConcepto))
                        {
                            estructuraRequerida = estructura;
                            break;
                        }
                        estructurasAnalizar.AddRange(estructura.SubEstructuras);
                    }
                }
            }
            return(estructuraRequerida);
        }
        public override void EvaluaEstructuraConcepto(EstructuraFormatoDto estructura, int tabuladores, IList <ConceptoReporteDTO> listaConceptos, String idRol)
        {
            List <String> idExcluyente = new List <String>()
            {
                "annext_UnpaidBalanceOfTheAssetsGroupedInArrearsAtTheEndOfThePeriodAbstract",
                "annext_CurrentMonth",
                "annext_LastMonth",

                "annext_NumberOfAssetsGroupedInArrearsAtTheEndOfThePeriodAbstract",
                "annext_NumberOfAssetsCurrentMonth",
                "annext_NumberOfAssetsLastMonth",
            };

            //LogUtil.Info("tabuladores:" + tabuladores + ",   idConcepto: " + estructura.IdConcepto);
            if (!reporteXBRLDTO.Instancia.Taxonomia.ConceptosPorId.ContainsKey(estructura.IdConcepto))
            {
                throw new NullReferenceException("No existe el contexto [" + estructura.IdConcepto + "] en la taxonomía.");
            }
            var concepto      = reporteXBRLDTO.Instancia.Taxonomia.ConceptosPorId[estructura.IdConcepto];
            var hechosReporte = new Dictionary <string, HechoReporteDTO>();

            if (!reporteXBRLDTO.ConfiguracionReporte.PeriodosPorRol.ContainsKey(idRol) || (concepto.EsMiembroDimension ?? false) || concepto.EsHipercubo || (concepto.EsDimension ?? false))
            {
                return;
            }
            foreach (var idPeriodo in reporteXBRLDTO.ConfiguracionReporte.PeriodosPorRol[idRol])
            {
                if ((!idPeriodo.Equals("periodo_actual") && idExcluyente.Contains(concepto.Id)) || (idPeriodo.Equals("periodo_actual") && !idExcluyente.Contains(concepto.Id)))
                {
                    hechosReporte.Add(idPeriodo, new HechoReporteDTO());
                }
            }
            var conceptoReporte = new ConceptoReporteDTO()
            {
                IdConcepto           = concepto.Id,
                Abstracto            = concepto.EsAbstracto ?? false,
                Etiqueta             = estructura.RolEtiquetaPreferido,
                Numerico             = concepto.EsTipoDatoNumerico,
                Tabuladores          = tabuladores * reporteXBRLDTO.ConfiguracionReporte.EstilosReporte.MultiploTabuladores,
                TipoDato             = concepto.TipoDato,
                Hechos               = hechosReporte,
                AtributosAdicionales = concepto.AtributosAdicionales
            };

            listaConceptos.Add(conceptoReporte);
            var listaSubEstructuras = estructura.SubEstructuras;

            if (listaSubEstructuras != null && listaSubEstructuras.Count() > 0)
            {
                var tabuladoresItera = tabuladores++;
                foreach (var subEstructura in listaSubEstructuras)
                {
                    EvaluaEstructuraConcepto(subEstructura, tabuladoresItera, listaConceptos, idRol);
                }
            }
        }
Пример #4
0
 /// <summary>
 /// Recorre el árbol de estructuras y los agrega a la lista plana de estructuras
 /// </summary>
 /// <param name="listaConceptos">Lista a llenar</param>
 /// <param name="estructura">Estructura a agregar</param>
 private static void AgregarNodoEstructura(List <ConceptoDto> listaConceptos, EstructuraFormatoDto estructura, TaxonomiaDto taxonomia)
 {
     if (estructura.IdConcepto != null && taxonomia.ConceptosPorId.ContainsKey(estructura.IdConcepto))
     {
         if (!listaConceptos.Any(x => x.Id.Equals(estructura.IdConcepto)))
         {
             listaConceptos.Add(taxonomia.ConceptosPorId[estructura.IdConcepto]);
         }
     }
     if (estructura.SubEstructuras != null)
     {
         foreach (var subEstructura in estructura.SubEstructuras)
         {
             AgregarNodoEstructura(listaConceptos, subEstructura, taxonomia);
         }
     }
 }
Пример #5
0
        /// <summary>
        /// Exporta al documento de word el hecho del concepto para el trimestre actual, agrega el titulo y el contenido
        /// los hechos sin valor no son exportados
        /// </summary>
        /// <param name="estructura">Estructura actual a exportar</param>
        /// <param name="docBuilder">Clase auxiliar para la creación de contenido en Word</param>
        /// <param name="instancia">Documento de instancia a exportar</param>
        /// <param name="rol">Rol exportado</param>
        /// <param name="plantillaDocumento">Plantilla de documento exportado</param>
        private void ExportarEstructuraRol(EstructuraFormatoDto estructura, DocumentBuilder docBuilder, DocumentoInstanciaXbrlDto instancia, string rol,
                                           IDefinicionPlantillaXbrl plantillaDocumento, DateTime fechaInicio, DateTime fechaFin, string claveIdioma)
        {
            var hechos = instancia.BuscarHechos(estructura.IdConcepto, null, null, fechaInicio, fechaFin, null);

            if (hechos.Count > 0 && hechos[0].Valor != null && !String.IsNullOrEmpty(hechos[0].Valor.Trim()))
            {
                if (String.IsNullOrEmpty(claveIdioma))
                {
                    claveIdioma = "es";
                }
                var etqs        = instancia.Taxonomia.ConceptosPorId[estructura.IdConcepto].Etiquetas[claveIdioma];
                var rolEtiqueta = String.IsNullOrEmpty(estructura.RolEtiquetaPreferido)
                    ? Etiqueta.RolEtiqueta
                    : estructura.RolEtiquetaPreferido;
                var etiqueta = instancia.Taxonomia.ConceptosPorId[estructura.IdConcepto].Nombre;
                if (etqs.ContainsKey(rolEtiqueta))
                {
                    etiqueta = etqs[rolEtiqueta].Valor;
                }

                var font = docBuilder.Font;
                font.Size = 8;
                font.Bold = true;
                font.Name = "Arial";

                docBuilder.Writeln(etiqueta);
                docBuilder.InsertParagraph();
                font.Bold = false;

                WordUtil.InsertHtml(docBuilder, estructura.IdConcepto + ":" + hechos[0].Id, hechos[0].Valor, true);

                docBuilder.InsertParagraph();
                docBuilder.Writeln("");
            }
            if (estructura.SubEstructuras != null)
            {
                foreach (var subestructura in estructura.SubEstructuras)
                {
                    ExportarEstructuraRol(subestructura, docBuilder, instancia, rol, plantillaDocumento, fechaInicio, fechaFin, claveIdioma);
                }
            }
        }
Пример #6
0
        /// <summary>
        /// Metodo recursivo que procesa los conceptos del rol actual y genera un listado de conceptos con sus hechos y dimensiones
        /// </summary>
        /// <param name="documentoInstanciaXbrlDto">Modelo DTO</param>
        /// <param name="uriRolPresentacion">uri del rol a procesar</param>
        /// <param name="listaConceptos">lista que contiene los conceptos procesados</param>
        /// <param name="estructura">contiene el concepto a procesar</param>
        /// <param name="taxonomia">Objeto de taxonomía utilizado para obtener etiquetas de presentación</param>
        /// <param name="idioma">Idioma de presentación</param>
        /// <param name="indentacion">Nivel del concepto</param>
        /// <param name="columnas">lista de columnas que tiene el reporte</param>
        /// <param name="listaDeConceptosEnHiperCubos">lista de conceptos que el rol a procesar tiene en hipercubos</param>
        private void AgregarNodoEstructura(DocumentoInstanciaXbrlDto documentoInstanciaXbrlDto, string uriRolPresentacion, List <EstructuraConceptoReporte> listaConceptos, EstructuraFormatoDto estructura,
                                           TaxonomiaDto taxonomia, string idioma, int indentacion, List <EstructuraColumnaReporte> columnas, IEnumerable <string> listaDeConceptosEnHiperCubos, bool agruparPorUnidad, IEnumerable <string> conceptosIdPermitidos)
        {
            if (!conceptosIdPermitidos.Contains(estructura.IdConcepto))
            {
                return;
            }

            string nombreconcepto = string.Empty;
            var    concepto       = taxonomia.ConceptosPorId[estructura.IdConcepto];

            if (string.IsNullOrEmpty(estructura.RolEtiquetaPreferido))
            {
                nombreconcepto = UtilAbax.ObtenerEtiqueta(taxonomia, estructura.IdConcepto, Etiqueta.RolEtiqueta, idioma);
            }
            else
            {
                nombreconcepto = UtilAbax.ObtenerEtiqueta(taxonomia, estructura.IdConcepto,
                                                          estructura.RolEtiquetaPreferido, idioma);
            }

            if (listaDeConceptosEnHiperCubos.Contains(estructura.IdConcepto))
            {
                IList <EstructuraConceptoReporte> conceptosConDimension = BuscarConceptosConDimensiones(taxonomia, documentoInstanciaXbrlDto, concepto, uriRolPresentacion, idioma, columnas, nombreconcepto, indentacion, agruparPorUnidad);

                if (conceptosConDimension.Any())
                {
                    listaConceptos.AddRange(conceptosConDimension);
                }
            }
            else
            {
                var hechoSinDimension = ObtenerPrimerHechoSinDimension(documentoInstanciaXbrlDto, concepto, uriRolPresentacion, idioma, columnas, agruparPorUnidad);

                listaConceptos.Add(new EstructuraConceptoReporte()
                {
                    ConceptoId       = concepto.Id,
                    NombreConcepto   = nombreconcepto,
                    NivelIndentacion = indentacion,
                    EsAbstracto      = concepto.EsAbstracto,
                    Hechos           = hechoSinDimension,
                    Dimensiones      = new Dictionary <string, EstructuraDimensionReporte>()
                });
            }

            if (estructura.SubEstructuras != null)
            {
                indentacion++;
                foreach (var subEstructura in estructura.SubEstructuras)
                {
                    AgregarNodoEstructura(documentoInstanciaXbrlDto, uriRolPresentacion, listaConceptos, subEstructura, taxonomia, idioma, indentacion, columnas, listaDeConceptosEnHiperCubos, agruparPorUnidad, conceptosIdPermitidos);
                }
                indentacion--;
            }
        }