public static String obtenerIdPrefijoDeTaxonomia(DocumentoInstanciaXbrlDto instancia)
        {
            if (instancia != null && instancia.DtsDocumentoInstancia != null &&
                instancia.DtsDocumentoInstancia.Count() > 0)
            {
                DtsDocumentoInstanciaDto dts = instancia.DtsDocumentoInstancia[0];

                if (dts.HRef != null)
                {
                    if (dts.HRef.Contains(ReportConstants.CCD_ENTRY_POINT))
                    {
                        return(ReportConstants.PREFIJO_ID_CCD);
                    }
                    else if (dts.HRef.Contains(ReportConstants.DEUDA_ENTRY_POINT))
                    {
                        return(ReportConstants.PREFIJO_ID_DEUDA);
                    }
                    else if (dts.HRef.Contains(ReportConstants.TRAC_ENTRY_POINT))
                    {
                        return(ReportConstants.PREFIJO_ID_TRAC);
                    }
                    else if (dts.HRef.Contains(ReportConstants.IIFC_ENTRY_POINT))
                    {
                        return(ReportConstants.PREFIJO_ID_IIFC);
                    }
                    else if (dts.HRef.Contains(ReportConstants.ANNEXT_ENTRY_POINT))
                    {
                        return(ReportConstants.PREFIJO_ANNEXT);
                    }
                    else if (dts.HRef.Contains(ReportConstants.N_ENTRY_POINT) || dts.HRef.Contains(ReportConstants.NBIS_ENTRY_POINT) ||
                             dts.HRef.Contains(ReportConstants.NBIS1_ENTRY_POINT) || dts.HRef.Contains(ReportConstants.NBIS2_ENTRY_POINT) ||
                             dts.HRef.Contains(ReportConstants.NBIS3_ENTRY_POINT) || dts.HRef.Contains(ReportConstants.NBIS4_ENTRY_POINT) ||
                             dts.HRef.Contains(ReportConstants.NBIS5_ENTRY_POINT) || dts.HRef.Contains(ReportConstants.O_ENTRY_POINT) ||
                             dts.HRef.Contains(ReportConstants.H_ENTRY_POINT) || dts.HRef.Contains(ReportConstants.HBIS_ENTRY_POINT) ||
                             dts.HRef.Contains(ReportConstants.HBIS1_ENTRY_POINT) || dts.HRef.Contains(ReportConstants.HBIS2_ENTRY_POINT) ||
                             dts.HRef.Contains(ReportConstants.HBIS3_ENTRY_POINT) || dts.HRef.Contains(ReportConstants.HBIS4_ENTRY_POINT) ||
                             dts.HRef.Contains(ReportConstants.HBIS5_ENTRY_POINT) || dts.HRef.Contains(ReportConstants.L_ENTRY_POINT) ||
                             dts.HRef.Contains(ReportConstants.I_ENTRY_POINT))
                    {
                        return(ReportConstants.PREFIJO_AR_PROS);
                    }
                    else if (dts.HRef.Contains(ReportConstants.IIFC_ENTRY_POINT))
                    {
                        return(ReportConstants.PREFIJO_ID_IIFC);
                    }
                    else if (dts.HRef.Contains(ReportConstants.REL_EV_EMISORAS))
                    {
                        return(ReportConstants.PREFIJO_REL_EV_EMISORAS);
                    }
                }
            }
            return(null);
        }
Exemple #2
0
 /// <summary>
 /// Convierte los registros de DTS Documento instancia de la base de datos a su representación en DTO
 /// </summary>
 /// <param name="instanciaDb"></param>
 /// <param name="instanciaXbrlDto"></param>
 private static void CargarDts(DocumentoInstancia instanciaDb, DocumentoInstanciaXbrlDto instanciaXbrlDto)
 {
     foreach (var dtsDb in instanciaDb.DtsDocumentoInstancia)
     {
         var dtsDto = new DtsDocumentoInstanciaDto();
         dtsDto.Tipo    = dtsDb.TipoReferencia;
         dtsDto.HRef    = dtsDb.Href;
         dtsDto.Role    = dtsDb.Rol;
         dtsDto.RoleUri = dtsDb.RolUri;
         instanciaXbrlDto.DtsDocumentoInstancia.Add(dtsDto);
     }
 }
 /// <summary>
 /// Busca la secuencia correspondiente a un hecho que corresponde a la descripción del pasivo y cuyo
 /// valor es igual al nombre de pasivo enviado como parámetro
 /// </summary>
 /// <param name="hechosDeTipoPasivo"> Conjunto de hechos a buscar</param>
 /// <param name="nombrePasivo">Valor buscado</param>
 /// <returns></returns>
 private string BuscarSecuenciaDePasivo(DocumentoInstanciaXbrlDto instancia, IList <HechoDto> hechosDeTipoPasivo, string nombrePasivo)
 {
     if (hechosDeTipoPasivo != null)
     {
         var hecho = hechosDeTipoPasivo.Where(x => _elementosDescripcionPasivo.Contains(x.IdConcepto)).Where(x => x.Valor == nombrePasivo).FirstOrDefault();
         if (hecho != null)
         {
             return(ObtenerSecuenciaDeContexto(instancia.ContextosPorId[hecho.IdContexto], _idDimensionSecuencia));
         }
     }
     return(null);
 }
Exemple #4
0
        /// <summary>
        /// Crea un nuevo hecho.
        /// </summary>
        /// <param name="valor">Valor del hecho.</param>
        /// <param name="concepto">Concepto del hecho.</param>
        /// <param name="contexto">Contexto del hecho.</param>
        /// <param name="idUnidad">Identificador de la unidad.</param>
        /// <param name="instancia">Documento de instancia.</param>
        /// <param name="plantilla">Plantilla del documento.</param>
        /// <param name="resumenImportacion">Detalle de la importación.</param>
        /// <param name="nombreHoja">Nombre de la hoja.</param>
        /// <param name="numeroFila">Indice de la fila.</param>
        /// <param name="numeroColumna">Indice de la columna.</param>
        private void CreaHecho(
            String valor,
            ConceptoDto concepto,
            Dto.ContextoDto contexto,
            String idUnidad,
            DocumentoInstanciaXbrlDto instancia,
            IDefinicionPlantillaXbrl plantilla,
            ResumenProcesoImportacionExcelDto resumenImportacion,
            String nombreHoja,
            int numeroFila,
            int numeroColumna)
        {
            var idHecho    = "A" + Guid.NewGuid().ToString();
            var hechoNuevo = instancia.CrearHecho(concepto.Id, idUnidad, contexto.Id, idHecho);

            if (concepto.EsTipoDatoNumerico)
            {
                if (concepto.TipoDatoXbrl.Contains(TiposDatoXBRL.MonetaryItemType))
                {
                    hechoNuevo.Decimales = "-3";
                }
                else
                {
                    hechoNuevo.Decimales = "0";
                }
            }
            if (!ActualizarValor(concepto, valor, hechoNuevo, plantilla))
            {
                resumenImportacion.AgregarErrorFormato(
                    UtilAbax.ObtenerEtiqueta(instancia.Taxonomia, concepto.Id),
                    nombreHoja,
                    numeroFila.ToString(),
                    numeroColumna.ToString(),
                    valor);
            }
            else
            {
                resumenImportacion.TotalHechosImportados++;
                var hechoImportado = new AbaxXBRLCore.Common.Dtos.InformacionHechoImportadoExcelDto()
                {
                    IdConcepto     = hechoNuevo.IdConcepto,
                    IdHecho        = hechoNuevo.Id,
                    ValorImportado = valor,
                    HojaExcel      = nombreHoja,
                    Renglon        = numeroFila,
                    Columna        = numeroColumna
                };
                resumenImportacion.AgregarHechoImportado(hechoImportado, UtilAbax.ObtenerEtiqueta(instancia.Taxonomia, hechoNuevo.Id));
            }

            plantilla.InyectaHechoADocumentoInstancia(hechoNuevo);
        }
Exemple #5
0
        /// <summary>
        /// Procesa el documento de instancia que se encuentra dentro del archivo ZIP enviado como parámetro
        /// </summary>
        /// <param name="archivo"></param>
        /// <param name="resultadoValidacion"></param>
        /// <returns></returns>
        private void ProcesarArchivoZip(String rutaAbsolutaArchivo, ResultadoValidacionDocumentoXBRLDto resultadoValidacion, IDictionary <string, string> parametros)
        {
            DocumentoInstanciaXbrlDto documentoXbrl = null;
            string        archivoXbrl = null;
            DirectoryInfo tmpDir      = null;

            try
            {
                using (var zipFile = ZipFile.Read(rutaAbsolutaArchivo))
                {
                    tmpDir = UtilAbax.ObtenerDirectorioTemporal();
                    zipFile.ExtractAll(tmpDir.FullName, ExtractExistingFileAction.OverwriteSilently);
                    if (zipFile.Count == 1)
                    {
                        foreach (var archivoInterno in zipFile)
                        {
                            if (!archivoInterno.IsDirectory &&
                                archivoInterno.FileName.ToLower().EndsWith(CommonConstants.ExtensionXBRL))
                            {
                                archivoXbrl = archivoInterno.FileName;
                            }
                        }
                    }
                    if (archivoXbrl == null)
                    {
                        AgregarErrorFatal(resultadoValidacion, null, null, null, "Debe existir un archivo dentro del archivo ZIP y debe tener la extensión XBRL");
                    }
                }
            }
            catch (Exception ex)
            {
                LogUtil.Error(ex);
                AgregarErrorFatal(resultadoValidacion, null, null, null, "Ocurrió un error al leer el archivo ZIP: " + ex.Message);
            }
            if (archivoXbrl != null)
            {
                try
                {
                    var uriArchivo = new Uri(tmpDir.FullName + Path.DirectorySeparatorChar + archivoXbrl, UriKind.Absolute);
                    ProcesarArchivoXBRL(uriArchivo.AbsolutePath, resultadoValidacion, parametros);
                }
                catch (Exception ex)
                {
                    LogUtil.Error(ex);
                    AgregarErrorFatal(resultadoValidacion, null, null, null, "Ocurrió un error al leer el archivo XBRL: " + ex.Message);
                }
                finally
                {
                    documentoXbrl = null;
                }
            }
        }
 /// <summary>
 /// Exportador a Word.
 /// </summary>
 /// <param name="docBuilder">Constructor del documento.</param>
 /// <param name="instancia">DTO con la información de la instancia XBRL</param>
 /// <param name="rolAExportar">DTO con la información del rol a exportar.</param>
 /// <param name="estructuraReporte"></param>
 public override void exportarRolAWord(DocumentBuilder docBuilder, DocumentoInstanciaXbrlDto instancia, IndiceReporteDTO rolAExportar, ReporteXBRLDTO estructuraReporte)
 {
     estructuraReporte.AgregarSignoAMonetarios = true;
     InicializaConfiguracionPaginaDefault(docBuilder);
     AgregarTituloPortada(docBuilder, rolAExportar);
     InsertarLeyendaProspectoDefinitivo(docBuilder, instancia, estructuraReporte);
     IsertaLogotipoDeEmisora(docBuilder, instancia, estructuraReporte);
     ImprimirContenidoRol(docBuilder, instancia, rolAExportar, estructuraReporte);
     ImprimirFirmasArt13(docBuilder, instancia);
     imprimirIndice(docBuilder, BreakType.SectionBreakNewPage);
     ImprimirConceptosDespuesIndice(docBuilder, instancia, rolAExportar, estructuraReporte);
     escribirEncabezado(docBuilder, instancia, estructuraReporte, true);
 }
        /// <summary>
        /// Pinta todas las filas de la tabla de hechos.
        /// </summary>
        /// <param name="instancia">Documento de instancia donde se obtiene la información.</param>
        /// <param name="listacontextos">Lista con los contextos a presentar.</param>
        /// <param name="diccionarioHechos">Diccionario con los hechos a presentar.</param>
        /// <param name="docBuilder">Constructor del documento.</param>
        /// <param name="exportadorBase">Exportador original del reporte.</param>
        /// <param name="estructuraReporte">Dto con datos auxiliares para la presentación del documento.</param>
        public void PintaFilasHechos(
            DocumentoInstanciaXbrlDto instancia,
            IList <ContextoDto> listacontextos,
            IDictionary <string, IDictionary <string, HechoDto> > diccionarioHechos,
            DocumentBuilder docBuilder,
            ExportadorRolDocumentoBase exportadorBase,
            ReporteXBRLDTO estructuraReporte)
        {
            var numeroColumnas = listacontextos.Count + 1;

            foreach (var idConcepto in ConceptosTabla)
            {
                ConceptoDto concepto;
                if (instancia.Taxonomia.ConceptosPorId.TryGetValue(idConcepto, out concepto))
                {
                    var etiquetaConcepto =
                        DesgloseDeCreditosHelper
                        .obtenerEtiquetaDeConcepto(instancia.Taxonomia, concepto.Id, estructuraReporte.Lenguaje, ReporteXBRLUtil.ETIQUETA_DEFAULT);
                    if (concepto.EsAbstracto ?? false)
                    {
                        PintaFilaSubTitulo(etiquetaConcepto, docBuilder, numeroColumnas, exportadorBase);
                    }
                    else
                    {
                        if (!concepto.EsTipoDatoNumerico)
                        {
                            continue;
                        }
                        docBuilder.InsertCell();
                        docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
                        docBuilder.Bold = true;
                        docBuilder.Write(etiquetaConcepto);
                        IDictionary <string, HechoDto> diccionarioHechosPorContexto = null;
                        diccionarioHechos.TryGetValue(concepto.Id, out diccionarioHechosPorContexto);
                        foreach (var contexto in listacontextos)
                        {
                            docBuilder.InsertCell();
                            docBuilder.Bold = false;
                            HechoDto hecho;
                            if (diccionarioHechosPorContexto != null && diccionarioHechosPorContexto.TryGetValue(contexto.Id, out hecho))
                            {
                                docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Right;
                                exportadorBase.EscribirValorHecho(docBuilder, estructuraReporte, hecho, concepto);
                            }
                        }
                        docBuilder.EndRow();
                    }
                }
            }
            docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
        }
Exemple #8
0
        /// <summary>
        /// Crea los datos de una unidad de base de datos en base a los datos del DTO de origen
        /// </summary>
        /// <param name="documentoOrigen"></param>
        /// <param name="unidadDTO"></param>
        /// <returns></returns>
        public static Unidad CrearUnidadDb(DocumentoInstanciaXbrlDto documentoOrigen, UnidadDto unidadDTO)
        {
            var unidadDb = new Unidad
            {
                EsFraccion = unidadDTO.Tipo == Unit.Divisoria,
                IdRef      = unidadDTO.Id
            };

            if (!unidadDb.EsFraccion)
            {
                //Obtener la lista de medidas
                string sMedidas = "";
                foreach (var medidaDTO in unidadDTO.Medidas)
                {
                    if (!String.IsNullOrEmpty(sMedidas))
                    {
                        sMedidas += ",";
                    }
                    sMedidas += medidaDTO.EspacioNombres + ":" + medidaDTO.Nombre;
                }
                unidadDb.Medida = sMedidas;
            }
            else
            {
                //Numerador
                string sMedidas = "";
                foreach (var medidaDTO in unidadDTO.MedidasNumerador)
                {
                    if (!String.IsNullOrEmpty(sMedidas))
                    {
                        sMedidas += ",";
                    }
                    sMedidas += medidaDTO.EspacioNombres + ":" + medidaDTO.Nombre;
                }
                unidadDb.Numerador = sMedidas;

                //Denominador

                sMedidas = "";
                foreach (var medidaDTO in unidadDTO.MedidasDenominador)
                {
                    if (!String.IsNullOrEmpty(sMedidas))
                    {
                        sMedidas += ",";
                    }
                    sMedidas += medidaDTO.EspacioNombres + ":" + medidaDTO.Nombre;
                }
                unidadDb.Denominador = sMedidas;
            }
            return(unidadDb);
        }
Exemple #9
0
        ///
        /// (non-Javadoc)
        /// @see com.bmv.spread.xbrl.reportes.builder.ReporteBuilder#obtenerValoresIniciales(com.hh.xbrl.abax.viewer.application.dto.DocumentoInstanciaXbrlDto)
        ////
        public override void obtenerValoresIniciales(DocumentoInstanciaXbrlDto instancia)
        {
            String nombreReporte = ReporteXBRLUtil.NOMBRE_REPORTE_FIDU;

            String  claveCotizacion = ReporteXBRLUtil.obtenerValorHecho(reporteXBRLDTO.PrefijoTaxonomia + ReportConstants.NOMBRE_CONCEPTO_EMISORA, instancia);
            String  fechaReporte    = ReporteXBRLUtil.obtenerValorHecho(ReportConstants.ID_FECHA_CIERRE_REPORTE_2014, instancia);
            String  anio            = fechaReporte.Substring(0, fechaReporte.IndexOf("-"));
            String  trimestre       = ReporteXBRLUtil.obtenerValorHecho(reporteXBRLDTO.PrefijoTaxonomia + ReportConstants.NOMBRE_CONCEPTO_NUMERO_TRIMESTRE, instancia);
            String  moneda          = ReporteXBRLUtil.obtenerValorMoneda(instancia);
            Boolean consolidado     = false;
            String  fideicomiso     = ReporteXBRLUtil.obtenerValorHecho(reporteXBRLDTO.PrefijoTaxonomia + ReportConstants.NOMBRE_CONCEPTO_NUMERO_FIDEICOMISO, instancia);
            String  fechaCreacion   = DateTime.Now.ToString(ReporteXBRLUtil.FORMATO_FECHA_CREACION);

            if (reporteXBRLDTO.Taxonomia.Equals(ReportConstants.CLAVE_CCD))
            {
                consolidado = ReporteXBRLUtil.obtenerValorHecho(ReportConstants.NOMBRE_CONCEPTO_CCD_CONSOLIDADO, instancia).ToUpper().Trim().Equals(ReportConstants.VALOR_SI) ||
                              ReporteXBRLUtil.obtenerValorHecho(ReportConstants.NOMBRE_CONCEPTO_CCD_CONSOLIDADO, instancia).ToLower().Trim().Equals(ReportConstants.VALOR_SI_TRUE) ||
                              ReporteXBRLUtil.obtenerValorHecho(ReportConstants.NOMBRE_CONCEPTO_CCD_CONSOLIDADO, instancia).ToLower().Trim().Equals(ReportConstants.VALOR_SI_2) ? true : false;

                reporteXBRLDTO.AplicaConsolidado = true;
            }
            else
            {
                reporteXBRLDTO.AplicaConsolidado = false;
            }

            reporteXBRLDTO.ClaveCotizacion = claveCotizacion;
            reporteXBRLDTO.FechaReporte    = fechaReporte;
            reporteXBRLDTO.RazonSocial     = ReporteXBRLUtil.obtenerValorHecho(ReportConstants.ID_NOMBRE_RAZON_SOCIAL, instancia);
            reporteXBRLDTO.Anio            = anio;
            reporteXBRLDTO.Trimestre       = trimestre;
            reporteXBRLDTO.Moneda          = moneda;
            reporteXBRLDTO.Consolidado     = consolidado;
            reporteXBRLDTO.Fideicomiso     = fideicomiso;
            reporteXBRLDTO.FechaCreacion   = fechaCreacion;

            if (claveCotizacion != null && fechaReporte != null && trimestre != null && moneda != null && consolidado != null)
            {
                nombreReporte = nombreReporte.
                                Replace(ReporteXBRLUtil.CLAVE_COTIZACION, claveCotizacion).
                                Replace(ReporteXBRLUtil.ANIO, anio).
                                Replace(ReporteXBRLUtil.TRIMESTRE, trimestre).
                                Replace(ReporteXBRLUtil.MONEDA, moneda).
                                Replace(ReporteXBRLUtil.CONSOLIDACION, (consolidado ? ReporteXBRLUtil.CONSOLIDADO : ReporteXBRLUtil.NO_CONSOLIDADO)).
                                Replace(ReporteXBRLUtil.FIDEICOMISO, fideicomiso).
                                Replace(ReporteXBRLUtil.FECHA_CREACION, fechaCreacion);

                reporteXBRLDTO.NombreReporte = nombreReporte;
            }
        }
Exemple #10
0
        override public void exportarRolAWord(DocumentBuilder docBuilder, DocumentoInstanciaXbrlDto instancia, IndiceReporteDTO rolAExportar, ReporteXBRLDTO estructuraReporte)
        {
            docBuilder.CurrentSection.PageSetup.Orientation = Orientation.Portrait;
            docBuilder.CurrentSection.PageSetup.PaperSize   = PaperSize.Letter;
            docBuilder.CurrentSection.PageSetup.LeftMargin  = 40;
            docBuilder.CurrentSection.PageSetup.RightMargin = 40;

            escribirEncabezado(docBuilder, instancia, estructuraReporte, true);

            imprimirTituloRol(docBuilder, rolAExportar);
            var listaConseptosReporte = estructuraReporte.Roles[rolAExportar.Rol];

            PintaTabla(docBuilder, instancia, rolAExportar, estructuraReporte, listaConseptosReporte);
        }
        /// <summary>
        /// Gets the member value.
        /// </summary>
        /// <param name="dimension">Dimension to evaluate.</param>
        /// <param name="document">Document owner of the dimension.</param>
        /// <returns>Member value.</returns>
        private static String GetDimensionMember(DimensionInfoDto dimension, DocumentoInstanciaXbrlDto document)
        {
            var member = String.Empty;

            if (dimension.Explicita)
            {
                member = dimension.IdItemMiembro;
            }
            else
            {
                member = CellStoreUtil.EliminaEtiquetas(dimension.ElementoMiembroTipificado);
            }
            return(member);
        }
        /// <summary>
        /// Crea el conetenido para el rol indicado.
        /// </summary>
        /// <param name="docBuilder">Constructor del docuemnto.</param>
        /// <param name="instancia">Instancia XBRL con la información a pintar.</param>
        /// <param name="rolAExportar">Rol que se pinta.</param>
        /// <param name="estructuraReporte">DTO con información general del reporte.</param>
        public void ImprimirContenidoRol(
            DocumentBuilder docBuilder,
            DocumentoInstanciaXbrlDto instancia,
            IndiceReporteDTO rolAExportar,
            ReporteXBRLDTO estructuraReporte)
        {
            var            posicionActual = 1;
            IList <String> listaIdConceptoPosicion;

            foreach (ConceptoReporteDTO concepto in estructuraReporte.Roles[rolAExportar.Rol])
            {
                EscribeConcepto(concepto, docBuilder, estructuraReporte);
            }
        }
Exemple #13
0
        /// <summary>
        /// Gets the first element of the concepts in the list.
        /// </summary>
        /// <param name="conceptsIdsList"></param>
        /// <param name="document"></param>
        /// <returns></returns>
        public static HechoDto GetFirstFact(IList <String> conceptsIdsList, DocumentoInstanciaXbrlDto document)
        {
            HechoDto fact = null;

            foreach (var concetptId in conceptsIdsList)
            {
                fact = GetFirstFactOfConcept(concetptId, document);
                if (fact != null)
                {
                    break;
                }
            }
            return(fact);
        }
Exemple #14
0
        /// <summary>
        /// Genera los hechos de la fila indicada.
        /// </summary>
        /// <param name="fila">Fila que se pretende evaluar.</param>
        /// <param name="concepto">Concepto que se pretende evaluar.</param>
        /// <param name="diccionarioContextos">Diccionario de contextos.</param>
        /// <param name="instancia">Documento de instancia.</param>
        /// <param name="plantilla">Plantilla de documento.</param>
        /// <param name="resumenImportacion">Resume de importación.</param>
        /// <param name="nombreHoja">Nombre de la hoja.</param>
        public void GeneraHechos(
            IRow fila,
            ConceptoDto concepto,
            IDictionary <int, Dto.ContextoDto> diccionarioContextos,
            DocumentoInstanciaXbrlDto instancia,
            IDefinicionPlantillaXbrl plantilla,
            ResumenProcesoImportacionExcelDto resumenImportacion,
            String nombreHoja)
        {
            UnidadDto unidad   = ObtenUniadConcepto(concepto, instancia, plantilla);
            var       idUnidad = unidad == null ? null : unidad.Id;

            foreach (var indexColumna in diccionarioContextos.Keys)
            {
                ICell celda = null;
                try
                {
                    celda = fila.GetCell(indexColumna);
                    String valorHecho = String.Empty;
                    if (celda != null && !celda.CellType.Equals(CellType.Blank))
                    {
                        valorHecho = ExcelUtil.ObtenerValorCelda(celda.CellType, celda);
                    }
                    var contexto = diccionarioContextos[indexColumna];
                    CreaHecho(
                        valorHecho,
                        concepto,
                        contexto,
                        idUnidad,
                        instancia,
                        plantilla,
                        resumenImportacion,
                        nombreHoja,
                        fila.RowNum,
                        celda.ColumnIndex);
                }
                catch (Exception ex)
                {
                    LogUtil.Error(ex);
                    var columnaCelda = (celda == null ? 0 : celda.ColumnIndex);
                    resumenImportacion.InformeErrores.Add(new InformeErrorImportacion()
                    {
                        Mensaje = "Error al obtener el valor de la celda en la fila \"" + fila.RowNum +
                                  "\" columna \"" + columnaCelda +
                                  "\"  de la hoja \"" + nombreHoja +
                                  "\".(" + ex.Message + ")"
                    });
                }
            }
        }
        /// <summary>
        /// Actualiza o crea un hecho en base a los criterios enviados como parámetro
        /// </summary>
        /// <param name="instancia">Documento instnacia actual</param>
        /// <param name="idConcepto">Concepto actual</param>
        /// <param name="hojaAImportar">Hoja actualmente procesada</param>
        /// <param name="renglonActual">Renglón actualmente procesado</param>
        /// <param name="numColumna">Columna actualmente procesada</param>
        /// <param name="contextoDestino">Contexto a donde se asignarán los hechos creados</param>
        private void ActualizarValorHecho(DocumentoInstanciaXbrlDto instancia, string idConcepto, ISheet hojaAImportar, int renglonActual, int numColumna,
                                          AbaxXBRLCore.Viewer.Application.Dto.ContextoDto contextoDestino, IDefinicionPlantillaXbrl plantillaDocumento, AbaxXBRLCore.Common.Dtos.ResumenProcesoImportacionExcelDto resumenImportacion)
        {
            var valorCelda   = ExcelUtil.ObtenerValorCelda(hojaAImportar, renglonActual, numColumna);
            var fechaDefault = plantillaDocumento.ObtenerVariablePorId("fecha_2016_10_12");

            if (!String.IsNullOrEmpty(valorCelda))
            {
                ConceptoDto conceptoImportado = instancia.Taxonomia.ConceptosPorId[idConcepto];
                HechoDto    hechoActualizar   = null;

                var hechos = instancia.BuscarHechos(idConcepto, null, null, contextoDestino.Periodo.FechaInstante, contextoDestino.Periodo.FechaInstante, null, false);

                if (hechos.Count > 0)
                {
                    hechoActualizar = hechos[0];
                }
                else
                {
                    hechoActualizar = instancia.CrearHecho(idConcepto, null, contextoDestino.Id, "A" + Guid.NewGuid().ToString());

                    plantillaDocumento.InyectaHechoADocumentoInstancia(hechoActualizar);
                }

                if (!UtilAbax.ActualizarValorHecho(conceptoImportado, hechoActualizar, valorCelda, fechaDefault))
                {
                    resumenImportacion.AgregarErrorFormato(
                        UtilAbax.ObtenerEtiqueta(instancia.Taxonomia, conceptoImportado.Id),
                        hojaAImportar.SheetName,
                        renglonActual.ToString(),
                        numColumna.ToString(),
                        valorCelda);
                }
                else
                {
                    resumenImportacion.TotalHechosImportados++;
                    var hechoImportado = new AbaxXBRLCore.Common.Dtos.InformacionHechoImportadoExcelDto()
                    {
                        IdConcepto     = hechoActualizar.IdConcepto,
                        IdHecho        = hechoActualizar.Id,
                        ValorImportado = valorCelda,
                        HojaExcel      = hojaAImportar.SheetName,
                        Renglon        = renglonActual,
                        Columna        = numColumna
                    };

                    resumenImportacion.AgregarHechoImportado(hechoImportado, UtilAbax.ObtenerEtiqueta(instancia.Taxonomia, conceptoImportado.Id));
                }
            }
        }
Exemple #16
0
        /// <summary>
        /// Crea el hint en MongoDB de empresas
        /// </summary>
        /// <param name="documentoInstanciXbrlDto">Informacion del documento Instancia</param>
        private void CrearHintEmpresas(DocumentoInstanciaXbrlDto documentoInstanciXbrlDto)
        {
            foreach (var IdEntidad in documentoInstanciXbrlDto.EntidadesPorId)
            {
                var Entidad   = IdEntidad.Value;
                var query     = Query.EQ("IdEntidad", Entidad.IdEntidad);
                var resultado = BlockStoreConsulta.consulta(CollectionEmpresas, query);

                if (resultado.Count == 0)
                {
                    BlockStoreDocumentoInstancia.insertarBlockStore(CollectionEmpresas, BlockStoreConsulta.armarBlockStoreEntidad(Entidad));
                }
            }
        }
Exemple #17
0
        /// <summary>
        /// Genera nombre legible de contexto
        /// </summary>
        /// <param name="ctxNuevo">Contexto origen</param>
        /// <returns>Nombre propuesto</returns>
        private static string ProponerNombreContexto(ContextoDto ctxNuevo, DocumentoInstanciaXbrlDto instancia)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append("ctx");
            //tipo de periodo - fechas
            if (ctxNuevo.Periodo.Tipo == PeriodoDto.ParaSiempre)
            {
                sb.Append("_porSiempre");
            }
            else if (ctxNuevo.Periodo.Tipo == PeriodoDto.Duracion)
            {
                sb.Append("_" + XmlUtil.ToUnionDateTimeString(ctxNuevo.Periodo.FechaInicio) + "_" + XmlUtil.ToUnionDateTimeString(ctxNuevo.Periodo.FechaFin));
            }
            else
            {
                sb.Append("_" + XmlUtil.ToUnionDateTimeString(ctxNuevo.Periodo.FechaInstante));
            }
            //Dimensiones
            var dimTotales = new List <DimensionInfoDto>();

            if (ctxNuevo.ValoresDimension != null)
            {
                dimTotales.AddRange(ctxNuevo.ValoresDimension);
            }
            if (ctxNuevo.Entidad.ValoresDimension != null)
            {
                dimTotales.AddRange(ctxNuevo.Entidad.ValoresDimension);
            }
            foreach (var dimension in dimTotales)
            {
                if (dimension.Explicita)
                {
                    sb.Append("_" + instancia.Taxonomia.ConceptosPorId[dimension.IdItemMiembro].Nombre);
                }
                else
                {
                    if (String.IsNullOrEmpty(dimension.ElementoMiembroTipificado))
                    {
                        sb.Append("_" + instancia.Taxonomia.ConceptosPorId[dimension.IdDimension].Nombre);
                    }
                    else
                    {
                        sb.Append("_" + ReporteXBRLUtil.eliminaEtiquetas(dimension.ElementoMiembroTipificado));
                    }
                }
            }
            return(sb.ToString());
        }
        /// <summary>
        /// Genera un contexto con la información definida en la plantilla.
        /// </summary>
        /// <param name="instancia">Documento de instancia.</param>
        /// <param name="definicionPlantilla">Plantilla donde se obtendran las variables para la generación del contexto.</param>
        /// <param name="listaDimensiones">Lista de dimensiones que se aplican al contexto.</param>
        /// <returns></returns>
        public ContextoDto GeneraContexto(DocumentoInstanciaXbrlDto instancia, IDefinicionPlantillaXbrl definicionPlantilla, IList <DimensionInfoDto> listaDimensiones = null)
        {
            var periodo         = this.Periodo.GeneraPeriodo(definicionPlantilla);
            var entidadAuxiliar = instancia.EntidadesPorId.Values.First();
            var entidad         = new EntidadDto()
            {
                ContieneInformacionDimensional = false,
                EsquemaId = entidadAuxiliar.EsquemaId,
                Id        = entidadAuxiliar.Id,
            };
            var diccionarioMiembrosdimensio = new Dictionary <String, DimensionInfoDto>();

            if (listaDimensiones != null)
            {
                foreach (var itemDimension in listaDimensiones)
                {
                    if (!diccionarioMiembrosdimensio.ContainsKey(itemDimension.IdDimension))
                    {
                        diccionarioMiembrosdimensio.Add(itemDimension.IdDimension, itemDimension);
                    }
                }
            }
            if (ValoresDimension != null)
            {
                foreach (var valorDimension in ValoresDimension)
                {
                    if (!diccionarioMiembrosdimensio.ContainsKey(valorDimension.IdDimension))
                    {
                        diccionarioMiembrosdimensio.Add(valorDimension.IdDimension, valorDimension);
                    }
                }
            }
            var dimensiones = new List <DimensionInfoDto>();

            foreach (var miembro in diccionarioMiembrosdimensio.Values)
            {
                dimensiones.Add(miembro);
            }
            var contexto = new ContextoDto()
            {
                Id      = "C" + Guid.NewGuid().ToString(),
                Periodo = periodo,
                Entidad = entidad,
                ContieneInformacionDimensional = this.ContieneInformacionDimensional,
                ValoresDimension = dimensiones
            };

            return(contexto);
        }
        /// <summary>
        /// Obtiene los miembros dimensionales del contexto del hecho indicado según su tipo.
        /// </summary>
        /// <param name="hecho">Hecho a evaluar</param>
        /// <param name="instancia">Instancia a evaluar.</param>
        /// <param name="explicita">Si buscará dimensiones explicitas o implicitas.</param>
        /// <returns>Miembros dimensionales del tipo indicado.</returns>
        public IList <DimensionInfoDto> ObtenDimensionesTipo(HechoDto hecho, DocumentoInstanciaXbrlDto instancia, bool explicita)
        {
            var contexto       = instancia.ContextosPorId[hecho.IdContexto];
            var idsDimensiones = new List <DimensionInfoDto>();

            for (var indexMiembro = 0; indexMiembro < contexto.ValoresDimension.Count; indexMiembro++)
            {
                var miembro = contexto.ValoresDimension[indexMiembro];
                if (miembro.Explicita.Equals(explicita))
                {
                    idsDimensiones.Add(miembro);
                }
            }
            return(idsDimensiones);
        }
        /// <summary>
        /// Muestra el documento del articulo 13
        /// </summary>
        /// <param name="docBuilder">Constructor del documento.</param>
        /// <param name="instancia">Documento de instacia</param>
        private void ImprimirFirmasArt13(DocumentBuilder docBuilder, DocumentoInstanciaXbrlDto instancia)
        {
            IList <String> listaIdHechoFirmaLeyenda13 = null;

            if (instancia.HechosPorIdConcepto.TryGetValue("ar_pros_IssuanceUnderArt13OfTheCUELegendPDF", out listaIdHechoFirmaLeyenda13) &&
                listaIdHechoFirmaLeyenda13.Count() > 0)
            {
                var      idHechoFirmas = listaIdHechoFirmaLeyenda13.First();
                HechoDto hechoFirmas   = null;
                if (instancia.HechosPorId.TryGetValue(idHechoFirmas, out hechoFirmas))
                {
                    AgregaImagenFirmas(docBuilder, hechoFirmas);
                }
            }
        }
Exemple #21
0
        /// <summary>
        /// Determina la fecha de colocación para los reportes de tipo prospecto.
        /// </summary>
        /// <param name="documentoInstancia">Documento de instancia a evaluar.</param>
        /// <returns>Valor del concepto de fecha de colocación.</returns>
        private string DeterminaFechaColocacion(DocumentoInstanciaXbrlDto documentoInstancia)
        {
            string         fechaColocacion = null;
            IList <string> idsConceptosFechaPublicacion;

            if (documentoInstancia.HechosPorIdConcepto.TryGetValue("ar_pros_DateOfPublicationOfTenderNotice", out idsConceptosFechaPublicacion))
            {
                var hechoFechaColocacion = ObtenHechoMayorFechaReporte(idsConceptosFechaPublicacion, documentoInstancia);
                if (hechoFechaColocacion != null)
                {
                    fechaColocacion = hechoFechaColocacion.Valor;
                }
            }
            return(fechaColocacion);
        }
Exemple #22
0
        /// <summary>
        /// Propone un ID de hecho en base a sus datos
        /// </summary>
        /// <param name="hechoNuevo"></param>
        /// <param name="instancia"></param>
        /// <returns></returns>
        public static string CrearHechoID(HechoDto hechoNuevo, DocumentoInstanciaXbrlDto instancia)
        {
            var idHecho = "hecho_" + RemoveSpecialCharacters(instancia.Taxonomia.ConceptosPorId[hechoNuevo.IdConcepto].Nombre);



            long idxHecho = 0;

            while (instancia.HechosPorId.ContainsKey(idHecho + (idxHecho > 0?"_" + idxHecho:"")))
            {
                idxHecho++;
            }

            return(idHecho + (idxHecho > 0 ? "_" + idxHecho : ""));
        }
 /// <summary>
 /// Concatena los archivos al final del documento.
 /// </summary>
 /// <param name="docBuilder">Constructor del documento.</param>
 /// <param name="instancia">Documento de instancia.</param>
 /// <param name="rolAExportar">Rol que se exporta</param>
 /// <param name="estructuraReporte">DTO con información general del reporte.</param>
 public void ConcatenaArchivosAdjuntos(
     DocumentBuilder docBuilder,
     DocumentoInstanciaXbrlDto instancia,
     IndiceReporteDTO rolAExportar,
     ReporteXBRLDTO estructuraReporte)
 {
     if (estructuraReporte.ArchivosAdjuntos != null)
     {
         foreach (var archivoAdjuntar in estructuraReporte.ArchivosAdjuntos.Values)
         {
             GeneraPortadaArchivoAdjunto(archivoAdjuntar, docBuilder);
             AgregaImagenHechoPDF(docBuilder, archivoAdjuntar.HechoArchivo);
         }
     }
 }
        /// <summary>
        /// Obtiene el primer hecho con el identificador de concepto indicado.
        /// </summary>
        /// <param name="instancia">Documento de instancia con la información.</param>
        /// <param name="idConcepto">Identificador del concepto buscado.</param>
        /// <returns>Primer hecho encontrado o null si no se encontro hecho.</returns>
        public HechoDto ObtenPrimerHechoPorIdConcepto(DocumentoInstanciaXbrlDto instancia, String idConcepto)
        {
            HechoDto       hecho = null;
            IList <String> listaIdsHechosPorconcepto;

            if (instancia.HechosPorIdConcepto.TryGetValue(idConcepto, out listaIdsHechosPorconcepto))
            {
                var idHecho = listaIdsHechosPorconcepto.FirstOrDefault();
                if (!String.IsNullOrEmpty(idHecho))
                {
                    instancia.HechosPorId.TryGetValue(idHecho, out hecho);
                }
            }
            return(hecho);
        }
        /// <summary>
        /// Filtra un conjunto de hechos por el contenido de un item miembro de una dimensión en específico
        /// </summary>
        /// <param name="instancia"></param>
        /// <param name="listaHechos"></param>
        /// <param name="_idDimensionIntervalo"></param>
        /// <param name="p"></param>
        /// <returns></returns>
        private IList <HechoDto> FiltrarHechosPorDimensionYMiembro(DocumentoInstanciaXbrlDto instancia, IList <HechoDto> listaHechos, string idDimension, string idItemMiembro)
        {
            var         hechosFinales = new List <HechoDto>();
            ContextoDto contexto      = null;

            foreach (var hechoActual in listaHechos)
            {
                contexto = instancia.ContextosPorId[hechoActual.IdContexto];
                if (ContieneDimension(idDimension, idItemMiembro, contexto))
                {
                    hechosFinales.Add(hechoActual);
                }
            }
            return(hechosFinales);
        }
Exemple #26
0
        /// <summary>
        /// Crea el DTO de entidad con los datos de origen enviados como parámetro
        /// </summary>
        /// <param name="documentoInstanciaXbrl">Modelo de instancia</param>
        /// <param name="entidadDb">Entidad origen de BD</param>
        /// <returns>Objeto entidad resultante</returns>
        private static EntidadDto CrearEntidad(DocumentoInstanciaXbrlDto documentoInstanciaXbrl, Contexto ctx)
        {
            //Crear entidad
            var entidad = new EntidadDto
            {
                EsquemaId = ctx.EsquemaEntidad,
                Id        = ctx.IdentificadorEntidad,
                Segmento  = ctx.Segmento
            };

            entidad.ValoresDimension = RecuperarValoresDimension(entidad.Segmento);
            entidad.ContieneInformacionDimensional = entidad.ValoresDimension != null &&
                                                     entidad.ValoresDimension.Count > 0;
            return(entidad);
        }
 /// <summary>
 /// Obtiene y escribe el valor del primer hecho correspondiente al id de concepto enviado como parámetro
 /// </summary>
 /// <param name="instancia">Documento de instancia actualmente procesado</param>
 /// <param name="idConcepto">Concepto a escribir</param>
 private void EscribirValorPrimerHecho(DocumentoInstanciaXbrlDto instancia, string idConcepto, ISheet hojaAExportar,
                                       int renglonDestino, int columnaDestino)
 {
     if (instancia.HechosPorIdConcepto.ContainsKey(idConcepto) && instancia.HechosPorIdConcepto[idConcepto].Count > 0)
     {
         var hecho = instancia.HechosPorId[instancia.HechosPorIdConcepto[idConcepto][0]];
         if (hecho != null)
         {
             ExcelUtil.AsignarValorCelda(hojaAExportar, renglonDestino, columnaDestino, hecho.Valor,
                                         instancia.Taxonomia.ConceptosPorId[idConcepto].EsTipoDatoNumerico ?
                                         CellType.Numeric : CellType.String
                                         , hecho);
         }
     }
 }
Exemple #28
0
        /// <summary>
        /// Obtiene el valor a presentar como título del concepto.
        /// </summary>
        /// <param name="celda">Celda que se pretende presentar.</param>
        /// <param name="instancia">Documento de instancia.</param>
        /// <param name="exportadorOrigen">Exportador original.</param>
        /// <param name="estructuraReporte">Datos generales del reporte.</param>
        /// <returns>Texto a presentar como título.</returns>
        private String ObtenTextoTituloConcepto(
            CeldasPresentacionHipercuboDto celda,
            DocumentoInstanciaXbrlDto instancia,
            ExportadorRolDocumentoBase exportadorOrigen,
            ReporteXBRLDTO estructuraReporte)
        {
            var idConceptoTitulo = !String.IsNullOrEmpty(celda.IdConceptoTitulo) ? celda.IdConceptoTitulo : celda.IdConcepto;
            var tituloConcepto   = exportadorOrigen.ObtenEtiquetaConcepto(idConceptoTitulo, instancia, estructuraReporte.Lenguaje);

            if (String.IsNullOrEmpty(tituloConcepto))
            {
                tituloConcepto = idConceptoTitulo;
            }
            return(tituloConcepto);
        }
Exemple #29
0
        /// <summary>
        ///  Procesa un objeto "DocumentoInstanciaXbrlDto" para obtener una estructura procesada para la generacion del reporte
        /// </summary>
        /// <param name="documentoInstanciaXbrlDto"> Modelo DTO </param>
        /// <param name="idioma">Idioma de presentación</param>
        /// <param name="agruparPorUnidad">Por default es "True", permite agrupar por Moneda, si es "False" agrupa por Entidad </param>
        /// <returns> Estructura  con los filtros establecidos y un listado de conceptos por rol   </returns>
        public EstructuraReporteGenerico GeneracionReporteGenerico(DocumentoInstanciaXbrlDto documentoInstanciaXbrlDto, string idioma = "es", bool agruparPorUnidad = true)
        {
            EstructuraReporteGenerico   estructuraReporteGenerico       = new EstructuraReporteGenerico();
            List <EstructuraRolReporte> estructuraReporteGenericoPorRol = new List <EstructuraRolReporte>();

            foreach (RolDto <EstructuraFormatoDto> rol in documentoInstanciaXbrlDto.Taxonomia.RolesPresentacion)
            {
                var listaDeConceptosEnHiperCubos = ObtenerListaDeHiperCubosPorRol(documentoInstanciaXbrlDto.Taxonomia, rol.Uri);
                estructuraReporteGenericoPorRol.Add(listaDeConceptosPorRol(documentoInstanciaXbrlDto, rol, listaDeConceptosEnHiperCubos, idioma, agruparPorUnidad));
            }
            estructuraReporteGenerico.ReporteGenericoPorRol = estructuraReporteGenericoPorRol;
            estructuraReporteGenerico.Idioma           = idioma;
            estructuraReporteGenerico.AgruparPorUnidad = agruparPorUnidad;
            return(estructuraReporteGenerico);
        }
Exemple #30
0
        /// <summary>
        /// Crea el hint en MongoDB de unidades
        /// </summary>
        /// <param name="documentoInstanciXbrlDto">Informacion del documento Instancia</param>
        private void CrearHintUnidades(DocumentoInstanciaXbrlDto documentoInstanciXbrlDto)
        {
            foreach (var IdUnidad in documentoInstanciXbrlDto.UnidadesPorId)
            {
                var Unidad = IdUnidad.Value;

                if (Unidad.Medidas != null)
                {
                    foreach (var medida in Unidad.Medidas)
                    {
                        var query     = Query.EQ("Nombre", medida.Nombre);
                        var resultado = BlockStoreConsulta.consulta(CollectionUnidades, query);

                        if (resultado.Count == 0)
                        {
                            BlockStoreDocumentoInstancia.insertarBlockStore(CollectionUnidades, BlockStoreConsulta.armarBlockStoreUnidad(medida));
                        }
                    }
                }

                if (Unidad.MedidasDenominador != null)
                {
                    foreach (var medida in Unidad.MedidasDenominador)
                    {
                        var query     = Query.EQ("Nombre", medida.Nombre);
                        var resultado = BlockStoreConsulta.consulta(CollectionUnidades, query);

                        if (resultado.Count == 0)
                        {
                            BlockStoreDocumentoInstancia.insertarBlockStore(CollectionUnidades, BlockStoreConsulta.armarBlockStoreUnidad(medida));
                        }
                    }
                }
                if (Unidad.MedidasNumerador != null)
                {
                    foreach (var medida in Unidad.MedidasNumerador)
                    {
                        var query     = Query.EQ("Nombre", medida.Nombre);
                        var resultado = BlockStoreConsulta.consulta(CollectionUnidades, query);

                        if (resultado.Count == 0)
                        {
                            BlockStoreDocumentoInstancia.insertarBlockStore(CollectionUnidades, BlockStoreConsulta.armarBlockStoreUnidad(medida));
                        }
                    }
                }
            }
        }