/// <summary> /// Genera un nuevo miembro de dimension con el template actual. /// </summary> /// <param name="nombreMiembro">Nombre del miembro.</param> /// <returns>Miembro de la dimensión.</returns> public DimensionInfoDto CreaMiembroDimension(String nombreMiembro) { var miembroDimension = new DimensionInfoDto() { Explicita = this.Explicita, IdDimension = this.IdDimension, IdItemMiembro = this.IdItemMiembro, QNameDimension = this.QNameDimension, QNameItemMiembro = this.QNameItemMiembro, ElementoMiembroTipificado = this.ElementoMiembroTipificado }; if (Explicita) { var slashLastIndex = PrefijoValor.LastIndexOf("/"); var prefijoId = PrefijoValor.Substring(slashLastIndex).Replace(":", "_"); miembroDimension.IdItemMiembro = prefijoId + nombreMiembro; miembroDimension.QNameItemMiembro = GeneraIdentificador(nombreMiembro); } else { miembroDimension.ElementoMiembroTipificado = GeneraIdentificador(nombreMiembro); } return(miembroDimension); }
/// <summary> /// Obtiene el nombre de la marca o producto /// </summary> /// <param name="dimensionMember">dimension con origen de datos</param> /// <returns>Valor del miembro de la dimensión</returns> private string ObtenerNombreMarcaOProducto(DimensionInfoDto dimensionMember) { var nodo = XmlUtil.CrearElementoXML(dimensionMember.ElementoMiembroTipificado); if (nodo != null && nodo.HasChildNodes) { return(nodo.ChildNodes[0].InnerText); } return(String.Empty); }
/// <summary> /// Obtiene el nombre de la institución /// </summary> /// <param name="institucionMember">institución con origen de datos</param> /// <returns>Nombre de la institucion</returns> private string ObtenerNombreInstitucion(DimensionInfoDto institucionMember) { var nodo = XmlUtil.CrearElementoXML(institucionMember.ElementoMiembroTipificado); if (nodo != null && nodo.HasChildNodes) { return(nodo.ChildNodes[0].InnerText); } return(null); }
/// <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> /// Obtiene el miembro de la dimensión indicada. /// </summary> /// <param name="hecho">Hecho del que se requiere el miembro</param> /// <param name="idDimension">Identificador de la dimensión</param> /// <param name="instancia">Documento de instnacia donde se obtiene el contexto.</param> /// <returns>Miembro d ela dimensión para el hecho indicado.</returns> public DimensionInfoDto ObtenMiembroDimension(HechoDto hecho, String idDimension, DocumentoInstanciaXbrlDto instancia) { var contexto = instancia.ContextosPorId[hecho.IdContexto]; DimensionInfoDto miembroRetorno = null; for (var indexMiembro = 0; indexMiembro < contexto.ValoresDimension.Count; indexMiembro++) { var miembro = contexto.ValoresDimension[indexMiembro]; if (miembro.IdDimension.Equals(idDimension)) { miembroRetorno = miembro; } } return(miembroRetorno); }
/// <summary> /// Retorna le valor limpio del miembro de la dimensión /// </summary> /// <param name="dimension">Dimension a evaluar.</param> /// <returns>Nombre sin prefijo ni subfijo.</returns> public string ObtenNombreMiembro(DimensionInfoDto dimension) { string nombre = null; if (dimension.QNameDimension == QNameDimension) { var nombreCompleto = Explicita ? dimension.QNameItemMiembro : dimension.ElementoMiembroTipificado; nombre = nombreCompleto.Replace(PrefijoValor, String.Empty); if (!String.IsNullOrEmpty(SubfijoValor)) { nombre = nombre.Replace(SubfijoValor, String.Empty); } } return(nombre); }
private static DimensionInfoDto obtenerPrimero(IList <DimensionInfoDto> dimensiones, String IdDimension) { DimensionInfoDto primero = null; foreach (DimensionInfoDto dimension in dimensiones) { if (dimension.IdDimension != null && dimension.IdDimension.Equals(IdDimension) && dimension.ElementoMiembroTipificado != null) { //&& !dimension.ElementoMiembroTipificado.Contains(todos)) { primero = dimension; break; } } return(primero); }
public void ImportarDatosDeHojaExcel(NPOI.SS.UserModel.ISheet hojaAImportar, NPOI.SS.UserModel.ISheet hojaPlantilla, Dto.DocumentoInstanciaXbrlDto instancia, string rol, Common.Dtos.ResumenProcesoImportacionExcelDto resumenImportacion, Model.IDefinicionPlantillaXbrl plantillaDocumento) { DateTime fechaEvento = DateTime.MinValue; int numeroRenglonActual = RENGLON_INICIO_DATOS; var qNameEntidad = plantillaDocumento.ObtenerVariablePorId("esquemaEntidad") + ":" + plantillaDocumento.ObtenerVariablePorId("nombreEntidad"); ContextoDto contextoDestinoSimple = null; ContextoDto contextoDestinoDimension = null; if (XmlUtil.ParsearUnionDateTime(plantillaDocumento.ObtenerVariablePorId("fecha_2016_10_12"), out fechaEvento)) { contextoDestinoSimple = ObtenerContextoDestino(instancia, plantillaDocumento, qNameEntidad, fechaEvento, new List <DimensionInfoDto>()); ActualizarValorHecho(instancia, "rel_ev_Ticker", hojaAImportar, numeroRenglonActual++, COLUMNA_DATOS, contextoDestinoSimple, plantillaDocumento, resumenImportacion); ActualizarValorHecho(instancia, "rel_ev_Date", hojaAImportar, numeroRenglonActual++, COLUMNA_DATOS, contextoDestinoSimple, plantillaDocumento, resumenImportacion); ActualizarValorHecho(instancia, "rel_ev_BusinessName", hojaAImportar, numeroRenglonActual++, COLUMNA_DATOS, contextoDestinoSimple, plantillaDocumento, resumenImportacion); ActualizarValorHecho(instancia, "rel_ev_Place", hojaAImportar, numeroRenglonActual++, COLUMNA_DATOS, contextoDestinoSimple, plantillaDocumento, resumenImportacion); ActualizarValorHecho(instancia, "rel_ev_Subject", hojaAImportar, numeroRenglonActual++, COLUMNA_DATOS, contextoDestinoSimple, plantillaDocumento, resumenImportacion); if (!instancia.EspacioNombresPrincipal.Contains("fondos")) { ActualizarValorHecho(instancia, "rel_ev_ForeignMarket", hojaAImportar, numeroRenglonActual++, COLUMNA_DATOS, contextoDestinoSimple, plantillaDocumento, resumenImportacion); } var valorTipoEvento = ExcelUtil.ObtenerValorCelda(hojaAImportar, numeroRenglonActual++, COLUMNA_DATOS); var idConceptoTipoEvento = BuscarTipoEvento(valorTipoEvento, instancia); if (idConceptoTipoEvento != null) { DimensionInfoDto dimInfo = new DimensionInfoDto() { Explicita = true, IdDimension = "rel_ev_RelevantEventTypesAxis", QNameDimension = instancia.Taxonomia.ConceptosPorId["rel_ev_RelevantEventTypesAxis"].EspacioNombres + ":" + instancia.Taxonomia.ConceptosPorId["rel_ev_RelevantEventTypesAxis"].Nombre, IdItemMiembro = idConceptoTipoEvento, QNameItemMiembro = instancia.Taxonomia.ConceptosPorId[idConceptoTipoEvento].EspacioNombres + ":" + instancia.Taxonomia.ConceptosPorId[idConceptoTipoEvento].Nombre }; contextoDestinoDimension = ObtenerContextoDestino(instancia, plantillaDocumento, qNameEntidad, fechaEvento, new List <DimensionInfoDto>() { dimInfo }); ActualizarValorHecho(instancia, "rel_ev_RelevantEventContent", hojaAImportar, numeroRenglonActual++, COLUMNA_DATOS, contextoDestinoDimension, plantillaDocumento, resumenImportacion); } } }
/// <summary> /// Asigna los elementos de la dimensión a la plantilla. /// </summary> /// <param name="input">Elemento del que se tomarán los datos a popular.</param> public PlantillaDimensionInfoDto Deserialize(DimensionInfoDto input) { this.Explicita = input.Explicita; this.IdDimension = input.IdDimension; this.QNameDimension = input.QNameDimension; //this.ElementoMiembroTipificado = input.ElementoMiembroTipificado; if (input.Explicita) { var indexToken = input.QNameItemMiembro.LastIndexOf(":"); this.PrefijoValor = input.QNameItemMiembro.Substring(0, indexToken + 1); this.EtiquetaNuevoElemento = input.QNameItemMiembro.Substring(indexToken + 1); this.SubfijoValor = String.Empty; } else { var indexToken = input.ElementoMiembroTipificado.IndexOf(">"); var indexTokenEnd = input.ElementoMiembroTipificado.IndexOf("<", indexToken); var elementoLength = (indexTokenEnd - indexToken) - 1; this.PrefijoValor = input.ElementoMiembroTipificado.Substring(0, (indexToken + 1)); this.EtiquetaNuevoElemento = input.ElementoMiembroTipificado.Substring((indexToken + 1), elementoLength); this.SubfijoValor = input.ElementoMiembroTipificado.Substring(indexTokenEnd);; } return(this); }
public void ImportarDatosDeHojaExcel(ISheet hojaAImportar, ISheet hojaPlantilla, DocumentoInstanciaXbrlDto instancia, string rol, AbaxXBRLCore.Common.Dtos.ResumenProcesoImportacionExcelDto resumenImportacion, Model.IDefinicionPlantillaXbrl plantillaDocumento) { var numRenglones = hojaAImportar.LastRowNum; var qNameEntidad = plantillaDocumento.ObtenerVariablePorId("esquemaEntidad") + ":" + plantillaDocumento.ObtenerVariablePorId("nombreEntidad"); for (var iRenglon = _renglonInicioHechos; iRenglon <= numRenglones; iRenglon++) { var valorMarca = ExcelUtil.ObtenerValorCelda(hojaAImportar, iRenglon, _columnaMarca); var valorProducto = ExcelUtil.ObtenerValorCelda(hojaAImportar, iRenglon, _columnaProducto); if (_tituloRenglonTotal.Equals(valorProducto.Trim())) { //Fin de tabla valorMarca = _todasLasMarcas; valorProducto = _todosLosProductos; } if (!String.IsNullOrEmpty(valorMarca) && !String.IsNullOrEmpty(valorProducto)) { for (var iCol = _columnaInicioHechos; iCol <= _columnaFinHechos; iCol++) { var valorHecho = ExcelUtil.ObtenerValorCelda(hojaAImportar, iRenglon, iCol); if (!String.IsNullOrEmpty(valorHecho)) { var dimensionMarca = new DimensionInfoDto() { Explicita = false, IdDimension = ExcelUtil.ObtenerIdConceptoDeCelda(hojaPlantilla, _renglonDimensionMarca, _columnaMarca), QNameDimension = ObtenerQNameConcepto(instancia.Taxonomia.ConceptosPorId[ExcelUtil.ObtenerIdConceptoDeCelda(hojaPlantilla, _renglonDimensionMarca, _columnaMarca)]), ElementoMiembroTipificado = String.Format(_templateTypedMemeberMarcas, System.Web.HttpUtility.HtmlEncode(valorMarca)) }; var dimensionProducto = new DimensionInfoDto() { Explicita = false, IdDimension = ExcelUtil.ObtenerIdConceptoDeCelda(hojaPlantilla, _renglonDimensionProducto, _columnaProducto), QNameDimension = ObtenerQNameConcepto(instancia.Taxonomia.ConceptosPorId[ExcelUtil.ObtenerIdConceptoDeCelda(hojaPlantilla, _renglonDimensionProducto, _columnaProducto)]), ElementoMiembroTipificado = String.Format(_templateTypedMemeberProducto, System.Web.HttpUtility.HtmlEncode(valorProducto)) }; var dimensionTipoIngreso = new DimensionInfoDto() { Explicita = true, IdDimension = _idDimensionTipoIngresos, QNameDimension = ObtenerQNameConcepto(instancia.Taxonomia.ConceptosPorId[_idDimensionTipoIngresos]), IdItemMiembro = ExcelUtil.ObtenerIdConceptoDeCelda(hojaPlantilla, _renglonDimensionItemTipoIngreso, iCol), QNameItemMiembro = ObtenerQNameConcepto(instancia.Taxonomia.ConceptosPorId[ExcelUtil.ObtenerIdConceptoDeCelda(hojaPlantilla, _renglonDimensionItemTipoIngreso, iCol)]), }; DateTime fechaInicio = DateTime.MinValue; DateTime fechaFin = DateTime.MinValue; //Trimestre actual if (XmlUtil.ParsearUnionDateTime(plantillaDocumento.ObtenerVariablePorId("fecha_2015_09_30"), out fechaFin) && XmlUtil.ParsearUnionDateTime(plantillaDocumento.ObtenerVariablePorId("fecha_2015_01_01"), out fechaInicio)) { ActualizarValorHecho(instancia.Taxonomia.ConceptosPorId[_idElementoPrimarioIngresos], valorHecho, new List <DimensionInfoDto>() { dimensionMarca, dimensionProducto, dimensionTipoIngreso }, fechaInicio, fechaFin, qNameEntidad, instancia, plantillaDocumento, resumenImportacion, hojaAImportar, iRenglon, iCol); } } } } } }
/// <summary> /// Aplica las reglas de validacion de periodos de acuerdo a lo requerido: /// Se valida que exista por lo menos la acumulada del ejercicio reportado /// para los formatos principales de la taxonomía /// </summary> /// <param name="instancia">Documento de instancia a validar</param> /// <param name="parametros">Parametros de validación</param> /// <param name="fechaTrimestreParam">Fecha de trimestre reportado</param> /// <param name="hrefTax">Dirección HREF de la taxonomía referenciada</param> /// <param name="resultadoValidacion">Objeto de resultado de validación</param> /// <returns>True si la validación es exitosa, false si falta algún dato requerido, si faltan datos requeridos se agregan los mensajes de error correspondientes</returns> private bool ValidarPeriodosRequeridos(DocumentoInstanciaXbrlDto instancia, IDictionary <string, string> parametros, DateTime fechaTrimestreParam, String hrefTax, ResultadoValidacionDocumentoXBRLDto resultadoValidacion) { DateTime fechaInicioEjercicio = new DateTime(fechaTrimestreParam.Year, 1, 1); DateTime fechaInicioTrimestre = new DateTime(fechaTrimestreParam.Ticks).AddDays(1).AddMonths(-3); //Estado de situación financiera: Existencia del cierre del trimestre if (!ExisteInformacionEnPeriodo(instancia, ID_EQUITY_AND_LIABILITES, fechaInicioEjercicio, fechaTrimestreParam, null)) { AgregarError(resultadoValidacion, null, null, String.Format(M_ERROR_FID_RV013, DateUtil.ToStandarString(fechaTrimestreParam)), false); return(false); } //Estado de resultados: //Trimestral if (!ExisteInformacionEnPeriodo(instancia, ID_UTILIDAD_PERDIDA_NETA, fechaInicioTrimestre, fechaTrimestreParam, null)) { AgregarError(resultadoValidacion, null, null, String.Format(M_ERROR_FID_RV013, DateUtil.ToStandarString(fechaInicioTrimestre) + " - " + DateUtil.ToStandarString(fechaTrimestreParam)), false); return(false); } //Acumulado if (!ExisteInformacionEnPeriodo(instancia, ID_UTILIDAD_PERDIDA_NETA, fechaInicioEjercicio, fechaTrimestreParam, null)) { AgregarError(resultadoValidacion, null, null, String.Format(M_ERROR_FID_RV013, DateUtil.ToStandarString(fechaInicioEjercicio) + " - " + DateUtil.ToStandarString(fechaTrimestreParam)), false); return(false); } //Estado de resultados ORI: //Trimestral if (!ExisteInformacionEnPeriodo(instancia, ID_RESULTADO_INTEGRAL, fechaInicioTrimestre, fechaTrimestreParam, null)) { AgregarError(resultadoValidacion, null, null, String.Format(M_ERROR_FID_RV013, DateUtil.ToStandarString(fechaInicioTrimestre) + " - " + DateUtil.ToStandarString(fechaTrimestreParam)), false); return(false); } //Acumulado if (!ExisteInformacionEnPeriodo(instancia, ID_RESULTADO_INTEGRAL, fechaInicioEjercicio, fechaTrimestreParam, null)) { AgregarError(resultadoValidacion, null, null, String.Format(M_ERROR_FID_RV013, DateUtil.ToStandarString(fechaInicioEjercicio) + " - " + DateUtil.ToStandarString(fechaTrimestreParam)), false); return(false); } //Estado de flujos de efectivo if (!ExisteInformacionEnPeriodo(instancia, ID_CONCEPTO_INCREMENTO_DISMINUCION_EFECTIVO_ANTES_DE_CAMBIO_EN_TASA, fechaInicioEjercicio, fechaTrimestreParam, null)) { AgregarError(resultadoValidacion, null, null, String.Format(M_ERROR_FID_RV013, DateUtil.ToStandarString(fechaInicioEjercicio) + " - " + DateUtil.ToStandarString(fechaTrimestreParam)), false); return(false); } //Estado de cambios en el capital contable //Para cada miembro, empezando por la dim default /* Reactiva eventualmente esta validación * if (!ExisteInformacionEnPeriodo(instancia, ID_CAMBIOS_EN_EL_CAPITAL_CONTABLE, fechaInicioEjercicio, fechaTrimestreParam, new List<DimensionInfoDto>())) * { * AgregarError(resultadoValidacion, null, null, String.Format(M_ERROR_FID_RV013, DateUtil.ToStandarString(fechaInicioEjercicio) + " - " + DateUtil.ToStandarString(fechaTrimestreParam)), false); * return false; * } * if (!ExisteInformacionEnPeriodo(instancia, ID_CAPITAL_CONTABLE, fechaInicioEjercicio, fechaTrimestreParam, new List<DimensionInfoDto>())) * { * AgregarError(resultadoValidacion, null, null, String.Format(M_ERROR_FID_RV013, DateUtil.ToStandarString(fechaTrimestreParam)), false); * return false; * } */ var listaDimCapital = new List <DimensionInfoDto>(); var dimensionBuscada = new DimensionInfoDto() { IdDimension = ID_COMPONENTES_DEL_CAPITAL, Explicita = true }; listaDimCapital.Add(dimensionBuscada); foreach (var idMiembroCapital in MIEMBROS_CAPITAL[hrefTax]) { dimensionBuscada.IdItemMiembro = idMiembroCapital; if (!ExisteInformacionEnPeriodo(instancia, ID_CAMBIOS_EN_EL_CAPITAL_CONTABLE, fechaInicioEjercicio, fechaTrimestreParam, listaDimCapital)) { AgregarError(resultadoValidacion, null, null, String.Format(M_ERROR_FID_RV013, DateUtil.ToStandarString(fechaInicioEjercicio) + " - " + DateUtil.ToStandarString(fechaTrimestreParam)), false); return(false); } if (!ExisteInformacionEnPeriodo(instancia, ID_CAPITAL_CONTABLE, fechaInicioEjercicio, fechaTrimestreParam, listaDimCapital)) { AgregarError(resultadoValidacion, null, null, String.Format(M_ERROR_FID_RV013, DateUtil.ToStandarString(fechaTrimestreParam)), false); return(false); } } return(true); }
public void ExportarRolADocumentoWord(Document word, Section seccionActual, DocumentoInstanciaXbrlDto instancia, string rol, IDefinicionPlantillaXbrl plantillaDocumento, string claveIdioma) { //Buscar el la tabla [] Table tabla800005 = null; NodeCollection allTables = seccionActual.GetChildNodes(NodeType.Table, true); foreach (Table table in allTables) { if (table.Range.Text.Contains("Ingresos nacionales [miembro]") || table.Range.Text.Contains("National income [member]")) { tabla800005 = table; break; } } if (tabla800005 != null) { DateTime fechaInicio = DateTime.MinValue; DateTime fechaFin = DateTime.MinValue; //Trimestre actual if (XmlUtil.ParsearUnionDateTime(plantillaDocumento.ObtenerVariablePorId("fecha_2015_09_30"), out fechaFin) && XmlUtil.ParsearUnionDateTime(plantillaDocumento.ObtenerVariablePorId("fecha_2015_01_01"), out fechaInicio)) { var todasLasMarcas = new DimensionInfoDto() { Explicita = false, IdDimension = _idDimensionMarcas, ElementoMiembroTipificado = String.Format(_templateTypedMemeberMarcas, _todasLasMarcas) }; var todosLosProductos = new DimensionInfoDto() { Explicita = false, IdDimension = _idDimensionProductos, ElementoMiembroTipificado = String.Format(_templateTypedMemeberProducto, _todosLosProductos) }; var combinacionesMarcaProducto = ObtenerCombinacionesDimensionesMarcaProducto(instancia, fechaInicio, fechaFin); var iRenglon = _renglonWordInicioHechos; var renglonInicioHechos = tabla800005.Rows[_renglonWordInicioHechos]; foreach (var combinacion in combinacionesMarcaProducto) { var renglonNuevo = (Row)renglonInicioHechos.Clone(true); tabla800005.InsertBefore(renglonNuevo, renglonInicioHechos); renglonNuevo.Cells[0].FirstParagraph.AppendChild(new Run(word, ObtenerNombreMarcaOProducto(combinacion[0]))); renglonNuevo.Cells[0].FirstParagraph.Runs[0].Font.Name = "Arial"; renglonNuevo.Cells[0].FirstParagraph.Runs[0].Font.Size = 6; renglonNuevo.Cells[1].FirstParagraph.AppendChild(new Run(word, ObtenerNombreMarcaOProducto(combinacion[1]))); renglonNuevo.Cells[1].FirstParagraph.Runs[0].Font.Name = "Arial"; renglonNuevo.Cells[1].FirstParagraph.Runs[0].Font.Size = 6; var dimensionTipoIngreso = new DimensionInfoDto() { Explicita = true, }; var listaDimensiones = new List <DimensionInfoDto> { combinacion[0], combinacion[1], dimensionTipoIngreso }; for (var iCol = _columnaInicioHechos; iCol <= _columnaFinHechos; iCol++) { dimensionTipoIngreso.IdDimension = _idDimensionTipoIngresos; dimensionTipoIngreso.IdItemMiembro = _elementosMiembroTipoIngreso[iCol - _columnaInicioHechos]; var hecho = instancia.BuscarHechos(_idElementoPrimarioIngresos, null, null, fechaInicio, fechaFin, listaDimensiones); if (hecho != null && hecho.Count > 0) { string valor = "$ "; double valorDouble = 0; if (Double.TryParse(hecho[0].Valor, NumberStyles.Any, CultureInfo.InvariantCulture, out valorDouble)) { valor += valorDouble.ToString("#,##0.00"); } else { valor = hecho[0].Valor; } renglonNuevo.Cells[iCol].FirstParagraph.AppendChild(new Run(word, valor)); renglonNuevo.Cells[iCol].FirstParagraph.Runs[0].Font.Name = "Arial"; renglonNuevo.Cells[iCol].FirstParagraph.Runs[0].Font.Size = 6; } } iRenglon++; } var renglonTotal = tabla800005.LastRow; for (var iCol = _columnaInicioHechos; iCol <= _columnaFinHechos; iCol++) { var tipoIngreso = new DimensionInfoDto() { Explicita = true, IdDimension = _idDimensionTipoIngresos, IdItemMiembro = _elementosMiembroTipoIngreso[iCol - _columnaInicioHechos] }; var hecho = instancia.BuscarHechos(_idElementoPrimarioIngresos, null, null, fechaInicio, fechaFin, new List <DimensionInfoDto>() { todasLasMarcas, todosLosProductos, tipoIngreso }); if (hecho != null && hecho.Count > 0) { string valor = "$ "; double valorDouble = 0; if (Double.TryParse(hecho[0].Valor, NumberStyles.Any, CultureInfo.InvariantCulture, out valorDouble)) { valor += valorDouble.ToString("#,##0.00"); } else { valor = hecho[0].Valor; } renglonTotal.Cells[iCol].FirstParagraph.AppendChild(new Run(word, valor)); renglonTotal.Cells[iCol].FirstParagraph.Runs[0].Font.Name = "Arial"; renglonTotal.Cells[iCol].FirstParagraph.Runs[0].Font.Size = 6; } } } } }
public void ExportarDatosDeHojaExcel(ISheet hojaAExportar, ISheet hojaPlantilla, DocumentoInstanciaXbrlDto instancia, string rol, Model.IDefinicionPlantillaXbrl plantillaDocumento, String idioma) { DateTime fechaInicio = DateTime.MinValue; DateTime fechaFin = DateTime.MinValue; //Trimestre actual if (XmlUtil.ParsearUnionDateTime(plantillaDocumento.ObtenerVariablePorId("fecha_2015_09_30"), out fechaFin) && XmlUtil.ParsearUnionDateTime(plantillaDocumento.ObtenerVariablePorId("fecha_2015_01_01"), out fechaInicio)) { var todasLasMarcas = new DimensionInfoDto() { Explicita = false, IdDimension = _idDimensionMarcas, QNameDimension = ObtenerQNameConcepto(instancia.Taxonomia.ConceptosPorId[_idDimensionMarcas]), ElementoMiembroTipificado = String.Format(_templateTypedMemeberMarcas, _todasLasMarcas) }; var todosLosProductos = new DimensionInfoDto() { Explicita = false, IdDimension = _idDimensionProductos, QNameDimension = ObtenerQNameConcepto(instancia.Taxonomia.ConceptosPorId[_idDimensionProductos]), ElementoMiembroTipificado = String.Format(_templateTypedMemeberProducto, _todosLosProductos) }; var combinacionesMarcaProducto = ObtenerCombinacionesDimensionesMarcaProducto(instancia, fechaInicio, fechaFin); if (combinacionesMarcaProducto.Count > 0) { hojaAExportar.ShiftRows(_renglonInicioHechos, hojaAExportar.LastRowNum, combinacionesMarcaProducto.Count); } var iRenglon = _renglonInicioHechos; foreach (var combinacion in combinacionesMarcaProducto) { var renglon = hojaAExportar.CreateRow(iRenglon); ExcelUtil.AsignarValorCelda(hojaAExportar, iRenglon, _columnaMarca, ObtenerNombreMarcaOProducto(combinacion[0]), CellType.String, null); ExcelUtil.AsignarValorCelda(hojaAExportar, iRenglon, _columnaProducto, ObtenerNombreMarcaOProducto(combinacion[1]), CellType.String, null); var dimensionTipoIngreso = new DimensionInfoDto() { Explicita = true, }; var listaDimensiones = new List <DimensionInfoDto> { combinacion[0], combinacion[1], dimensionTipoIngreso }; for (var iCol = _columnaInicioHechos; iCol <= _columnaFinHechos; iCol++) { dimensionTipoIngreso.IdDimension = _idDimensionTipoIngresos; dimensionTipoIngreso.QNameDimension = ObtenerQNameConcepto(instancia.Taxonomia.ConceptosPorId[_idDimensionTipoIngresos]); dimensionTipoIngreso.IdItemMiembro = ExcelUtil.ObtenerIdConceptoDeCelda(hojaPlantilla, _renglonDimensionItemTipoIngreso, iCol); dimensionTipoIngreso.QNameItemMiembro = ObtenerQNameConcepto(instancia.Taxonomia.ConceptosPorId[ExcelUtil.ObtenerIdConceptoDeCelda(hojaPlantilla, _renglonDimensionItemTipoIngreso, iCol)]); var hecho = instancia.BuscarHechos(_idElementoPrimarioIngresos, null, null, fechaInicio, fechaFin, listaDimensiones); if (hecho != null && hecho.Count > 0) { ExcelUtil.AsignarValorCelda(hojaAExportar, iRenglon, iCol, hecho[0].Valor, CellType.Numeric, hecho[0]); } } iRenglon++; } var numRenglones = hojaAExportar.LastRowNum; for (; iRenglon <= numRenglones; iRenglon++) { if (_tituloRenglonTotal.Equals(ExcelUtil.ObtenerValorCelda(hojaAExportar, iRenglon, _columnaProducto))) { for (var iCol = _columnaInicioHechos; iCol <= _columnaFinHechos; iCol++) { var tipoIngreso = new DimensionInfoDto() { Explicita = true, IdDimension = _idDimensionTipoIngresos, QNameDimension = ObtenerQNameConcepto(instancia.Taxonomia.ConceptosPorId[_idDimensionTipoIngresos]), IdItemMiembro = ExcelUtil.ObtenerIdConceptoDeCelda(hojaPlantilla, _renglonDimensionItemTipoIngreso, iCol), QNameItemMiembro = ObtenerQNameConcepto(instancia.Taxonomia.ConceptosPorId[ExcelUtil.ObtenerIdConceptoDeCelda(hojaPlantilla, _renglonDimensionItemTipoIngreso, iCol)]) }; var hecho = instancia.BuscarHechos(_idElementoPrimarioIngresos, null, null, fechaInicio, fechaFin, new List <DimensionInfoDto>() { todasLasMarcas, todosLosProductos, tipoIngreso }); if (hecho != null && hecho.Count > 0) { ExcelUtil.AsignarValorCelda(hojaAExportar, iRenglon, iCol, hecho[0].Valor, CellType.Numeric, hecho[0]); } } break; } } } }
/// <summary> /// Obtiene el QNameItemMiembro ó el ElementoMiembroTipificado según el tipo /// </summary> /// <returns></returns> public string ObtenIdMiembro(DimensionInfoDto dimension) { var nombre = ObtenNombreMiembro(dimension); return(nombre.Replace(" ", "_").Replace(":", "_")); }
public static IList <IngresosProductoReporteDto> generaContenidoReporte(DocumentoInstanciaXbrlDto documentoInstancia, ReporteXBRLDTO reporteXBRLDTO, int ContadorNotasAlPie, out int outContadorNotasAlPie) { contadorTMP = ContadorNotasAlPie; IDictionary <String, IDictionary <String, IngresosProductoReporteDto> > marcas = new Dictionary <String, IDictionary <String, IngresosProductoReporteDto> >(); IList <IngresosProductoReporteDto> contenido = null; IngresosProductoReporteDto total = new IngresosProductoReporteDto(); total.Total = true; total.PrincipalesProductos = tituloRenglonTotal; String finPeriodo = ReporteXBRLUtil.obtenerValorHecho(ReportConstants.ID_FECHA_CIERRE_REPORTE_2014, documentoInstancia); String inicioPeriodo = DateReporteUtil.obtenerPeriodos(finPeriodo)["acum_anio_actual"].Split(new String[] { "_" }, StringSplitOptions.None)[0]; var dateInicioPeriodo = DateReporteUtil.obtenerFecha(inicioPeriodo); var dateFinPeriodo = DateReporteUtil.obtenerFecha(finPeriodo); foreach (ContextoDto contexto in documentoInstancia.ContextosPorId.Values) { if (contexto.Periodo.Tipo == PeriodoDto.Instante) { if (!contexto.Periodo.FechaInstante.Equals(dateFinPeriodo)) { continue; } } else { if (!contexto.Periodo.FechaInicio.Equals(dateInicioPeriodo) || !contexto.Periodo.FechaFin.Equals(dateFinPeriodo)) { continue; } } if (contexto.ValoresDimension != null && contexto.ValoresDimension.Count() > 0) { DimensionInfoDto dimensionMarca = obtenerPrimero(contexto.ValoresDimension, IdDimensionMarcas); DimensionInfoDto dimensionProducto = obtenerPrimero(contexto.ValoresDimension, IdDimensionProductos); if (dimensionMarca != null && dimensionProducto != null) { String marca = obtenerNombreMarcaProducto(dimensionMarca.ElementoMiembroTipificado).Trim(); String producto = obtenerNombreMarcaProducto(dimensionProducto.ElementoMiembroTipificado).Trim(); String idMiembro = obtenerIdItemMiembro(contexto.ValoresDimension); HechoDto hecho = documentoInstancia.HechosPorId[documentoInstancia.HechosPorIdContexto[contexto.Id][0]]; if (marca.Equals(todasLasMarcas) && producto.Equals(todosLosProductos)) { actualizarIngresosProducto(total, producto, idMiembro, hecho, reporteXBRLDTO); } else { actualizarHechosProducto(marcas, marca, producto, idMiembro, hecho, reporteXBRLDTO); } } } } contenido = crearIngresosProducto(marcas); contenido.Add(total); outContadorNotasAlPie = contadorTMP; contadorTMP = 0; return(contenido); }
/// <summary> /// Inicializa diccionarios auxiliares. /// </summary> private void Init() { var periodos = new List <PlantillaPeriodoDto>(); var conjuntosDimensiones = new List <IList <DimensionInfoDto> >(); foreach (var aliasPlantillaPeriodo in configuracion.PlantillasContextos.Keys) { var plantillaContexto = configuracion.PlantillasContextos[aliasPlantillaPeriodo]; var plantillaPeriodo = plantillaContexto.Periodo; periodos.Add(plantillaPeriodo); } var listaFiltroDimensiones = new List <DimensionInfoDto>(); foreach (var aliasDimensionItem in configuracion.PlantillaDimensiones.Keys) { var plantillaDimension = configuracion.PlantillaDimensiones[aliasDimensionItem]; var dimension = new DimensionInfoDto() { Explicita = plantillaDimension.Explicita, QNameDimension = plantillaDimension.QNameDimension }; listaFiltroDimensiones.Add(dimension); } conjuntosDimensiones.Add(listaFiltroDimensiones); filtro = new FiltroHechosDto() { IdConcepto = configuracion.IdConceptos, Periodo = periodos, ConjuntosExactosDimensiones = conjuntosDimensiones }; var idsHechos = consultaDocumentoInstanciaUtil.BuscaHechosPorFiltro(filtro); var idsContextos = consultaDocumentoInstanciaUtil.ObtenIdsContextosHechos(idsHechos); foreach (var idContexto in idsContextos) { var contexto = documentoInstancia.ContextosPorId[idContexto]; var listaDimensiones = contexto.ContieneInformacionDimensional ? contexto.ValoresDimension : contexto.Entidad.ContieneInformacionDimensional ? contexto.Entidad.ValoresDimension : new List <DimensionInfoDto>(); var diccionarioDimensionesContexto = new Dictionary <string, string>(); foreach (var dimension in listaDimensiones) { IDictionary <string, DimensionInfoDto> diccionarioMiembros; var idDimension = dimension.IdDimension; if (!miembrosDimension.TryGetValue(idDimension, out diccionarioMiembros)) { diccionarioMiembros = new Dictionary <string, DimensionInfoDto>(); miembrosDimension.Add(idDimension, diccionarioMiembros); } PlantillaDimensionInfoDto plantillaDimension; if (configuracion.PlantillaDimensiones.TryGetValue(idDimension, out plantillaDimension)) { var idMiembro = plantillaDimension.ObtenIdMiembro(dimension); if (!diccionarioMiembros.ContainsKey(idMiembro)) { diccionarioMiembros.Add(idMiembro, dimension); } diccionarioDimensionesContexto.Add(idDimension, idMiembro); } } var idGrupoDimensionesDinamicasBuilder = new StringBuilder(); var grupo = new Dictionary <string, string>(); foreach (var aliasDimensionDinamica in configuracion.DimensionesDinamicas) { string idMiembroDimension; if (diccionarioDimensionesContexto.TryGetValue(aliasDimensionDinamica, out idMiembroDimension)) { idGrupoDimensionesDinamicasBuilder.Append('_'); idGrupoDimensionesDinamicasBuilder.Append(idMiembroDimension); grupo.Add(aliasDimensionDinamica, idMiembroDimension); } } var idGrupoDimesionesDinamicas = idGrupoDimensionesDinamicasBuilder.Length > 1 ? idGrupoDimensionesDinamicasBuilder.ToString().Substring(1) : "indefinida"; if (!gruposDimensionesDinamicas.ContainsKey(idGrupoDimesionesDinamicas)) { gruposDimensionesDinamicas.Add(idGrupoDimesionesDinamicas, grupo); } } }
/// <summary> /// Crea el hint de las dimensiones definidas en el archivo /// </summary> /// <param name="documentoInstanciXbrlDto">Informacion del documento Instancia</param> private void CrearHintDimension(DocumentoInstanciaXbrlDto documentoInstanciXbrlDto) { foreach (var IdHecho in documentoInstanciXbrlDto.HechosPorId) { var Hecho = IdHecho.Value; var Concepto = documentoInstanciXbrlDto.Taxonomia.ConceptosPorId[Hecho.IdConcepto]; var Contexto = documentoInstanciXbrlDto.ContextosPorId[Hecho.IdContexto]; var hintDimensional = new HintDimensional(); hintDimensional.DimensionInfoDto = new List <DimensionInfoDto>(); hintDimensional.idConcepto = Concepto.Id; if (Contexto.ContieneInformacionDimensional) { hintDimensional.idConcepto = Concepto.Id; foreach (var dimencionInfoDto in Contexto.ValoresDimension) { hintDimensional.DimensionInfoDto.Add(dimencionInfoDto); } } else { var hiperCubosHecho = new List <HipercuboDto>(); foreach (var listaHipercubo in documentoInstanciXbrlDto.Taxonomia.ListaHipercubos.Values) { foreach (var hipercubo in listaHipercubo) { if (hipercubo.ElementosPrimarios.Contains(Hecho.IdConcepto)) { hiperCubosHecho.Add(hipercubo); } } } if (hiperCubosHecho.Count > 0) { foreach (var hiperCubo in hiperCubosHecho) { if (hiperCubo.ElementosPrimarios.Contains(Hecho.IdConcepto)) { foreach (var dimension in hiperCubo.Dimensiones) { if (documentoInstanciXbrlDto.Taxonomia.DimensionDefaults.ContainsKey(dimension)) { var dimencionInfoDto = new DimensionInfoDto(); dimencionInfoDto.IdDimension = dimension; dimencionInfoDto.IdItemMiembro = documentoInstanciXbrlDto.Taxonomia.DimensionDefaults[dimension]; dimencionInfoDto.Explicita = true; hintDimensional.DimensionInfoDto.Add(dimencionInfoDto); } } } } } } if (hintDimensional.DimensionInfoDto.Count > 0) { var jsonDimension = JsonConvert.SerializeObject(hintDimensional); var andList = new BindingList <IMongoQuery>(); andList.Add(Query.EQ("idConcepto", hintDimensional.idConcepto)); foreach (var detalleDimensional in hintDimensional.DimensionInfoDto) { andList.Add(Query.EQ("DimensionInfoDto.Explicita", detalleDimensional.Explicita)); if (detalleDimensional.Explicita) { andList.Add(Query.EQ("DimensionInfoDto.IdDimension", detalleDimensional.IdDimension)); andList.Add(Query.EQ("DimensionInfoDto.IdItemMiembro", detalleDimensional.IdItemMiembro)); } else { andList.Add(Query.EQ("DimensionInfoDto.IdDimension", detalleDimensional.IdDimension)); } } var query = Query.And(Query.EQ("Id", Concepto.Id), Query.EQ("EspacioNombresPrincipal", documentoInstanciXbrlDto.EspacioNombresPrincipal)); var resultado = BlockStoreConsulta.consulta(CollectionDimension, Query.And(andList)); if (resultado.Count == 0) { var bsonDocuments = BsonDocument.Parse(jsonDimension); BlockStoreDocumentoInstancia.insertarBlockStore(CollectionDimension, bsonDocuments); } } } }
/// <summary> /// Procesa un renglón de la tabla de personas responsables importando su contenido /// </summary> /// <returns></returns> private int ImportarRenglonFigura(int numRow, string idMiembroFiguraActual, ISheet hojaAImportar, DocumentoInstanciaXbrlDto instancia, IDefinicionPlantillaXbrl plantillaDocumento, ResumenProcesoImportacionExcelDto resumenImportacion) { var institucionesActuales = new Dictionary <string, int>(); DateTime fechaInicio = DateTime.MinValue; DateTime fechaFin = DateTime.MinValue; if (XmlUtil.ParsearUnionDateTime(plantillaDocumento.ObtenerVariablePorId("fecha_2014_12_31"), out fechaFin) && XmlUtil.ParsearUnionDateTime(plantillaDocumento.ObtenerVariablePorId("fecha_2014_12_31"), out fechaInicio)) { //Si inicia un tipo de figura int lastRowNum = hojaAImportar.LastRowNum; //Mientras no se termine el documento o no se encuentre el inicio de otra figura while (numRow <= lastRowNum) { var valorCelda = ExcelUtil.ObtenerValorCelda(hojaAImportar, numRow, COL_CONCEPTO_FIGURA); if (valorCelda != null && _mapeoMiembrosDimension.ContainsKey(valorCelda.Trim())) { break; } var valorInstitucion = ExcelUtil.ObtenerValorCelda(hojaAImportar, numRow, COL_CONCEPTO_INSTITUCION); var valorLeyenda = ExcelUtil.ObtenerValorCelda(hojaAImportar, numRow, COL_CONCEPTO_LEYENDA); var valorNombre = ExcelUtil.ObtenerValorCelda(hojaAImportar, numRow, COL_CONCEPTO_NOMBRE); var valorCargo = ExcelUtil.ObtenerValorCelda(hojaAImportar, numRow, COL_CONCEPTO_CARGO); if (!String.IsNullOrEmpty(valorInstitucion) && !String.IsNullOrEmpty(valorNombre) && !String.IsNullOrEmpty(valorCargo)) { if (!valoresAnterioresBorrados) { ReporteXBRLUtil.EliminarHechosConceptos(ID_CONCEPTO_PERSONAS, instancia); ReporteXBRLUtil.EliminarHechosConceptos(ID_CONCEPTO_INSTITUCION, instancia); valoresAnterioresBorrados = true; } var dimensionFigura = new DimensionInfoDto() { Explicita = true, IdDimension = ID_DIMENSION_FIGURA, QNameDimension = ObtenerQNameConcepto(instancia.Taxonomia.ConceptosPorId[ID_DIMENSION_FIGURA]), IdItemMiembro = idMiembroFiguraActual, QNameItemMiembro = ObtenerQNameConcepto(instancia.Taxonomia.ConceptosPorId[idMiembroFiguraActual]) }; var dimensionInstitucion = new DimensionInfoDto() { Explicita = false, IdDimension = ID_DIMENSION_TYPED_INSTITUCION, QNameDimension = ObtenerQNameConcepto(instancia.Taxonomia.ConceptosPorId[ID_DIMENSION_TYPED_INSTITUCION]) }; var dimensionPersona = new DimensionInfoDto() { Explicita = false, IdDimension = ID_DIMENSION_TYPED_PERSONA, QNameDimension = ObtenerQNameConcepto(instancia.Taxonomia.ConceptosPorId[ID_DIMENSION_TYPED_PERSONA]) }; if (!institucionesActuales.ContainsKey(valorInstitucion)) { //Agregar hechos de institución y leyenda dimensionInstitucion.ElementoMiembroTipificado = String.Format(_templateTypedMemeberInstitucion, secuenciaInstitucion); institucionesActuales[valorInstitucion] = secuenciaInstitucion; secuenciaInstitucion++; ActualizarValorHecho(instancia.Taxonomia.ConceptosPorId[ID_CONCEPTO_INSTITUCION[0]], valorInstitucion, new List <DimensionInfoDto>() { dimensionFigura, dimensionInstitucion }, fechaInicio, fechaFin, plantillaDocumento.ObtenerVariablePorId("esquemaEntidad") + ":" + plantillaDocumento.ObtenerVariablePorId("nombreEntidad"), instancia, plantillaDocumento, resumenImportacion, hojaAImportar, numRow, COL_CONCEPTO_INSTITUCION); ActualizarValorHecho(instancia.Taxonomia.ConceptosPorId[ID_CONCEPTO_INSTITUCION[1]], valorLeyenda, new List <DimensionInfoDto>() { dimensionFigura, dimensionInstitucion }, fechaInicio, fechaFin, plantillaDocumento.ObtenerVariablePorId("esquemaEntidad") + ":" + plantillaDocumento.ObtenerVariablePorId("nombreEntidad"), instancia, plantillaDocumento, resumenImportacion, hojaAImportar, numRow, COL_CONCEPTO_LEYENDA); } else { dimensionInstitucion.ElementoMiembroTipificado = String.Format(_templateTypedMemeberInstitucion, institucionesActuales[valorInstitucion]); } //Agregar hechos de nombre y cargo dimensionPersona.ElementoMiembroTipificado = String.Format(_templateTypedMemeberPerson, secuenciaPersona++); ActualizarValorHecho(instancia.Taxonomia.ConceptosPorId[ID_CONCEPTO_PERSONAS[0]], valorNombre, new List <DimensionInfoDto>() { dimensionFigura, dimensionInstitucion, dimensionPersona }, fechaInicio, fechaFin, plantillaDocumento.ObtenerVariablePorId("esquemaEntidad") + ":" + plantillaDocumento.ObtenerVariablePorId("nombreEntidad"), instancia, plantillaDocumento, resumenImportacion, hojaAImportar, numRow, COL_CONCEPTO_NOMBRE); ActualizarValorHecho(instancia.Taxonomia.ConceptosPorId[ID_CONCEPTO_PERSONAS[1]], valorCargo, new List <DimensionInfoDto>() { dimensionFigura, dimensionInstitucion, dimensionPersona }, fechaInicio, fechaFin, plantillaDocumento.ObtenerVariablePorId("esquemaEntidad") + ":" + plantillaDocumento.ObtenerVariablePorId("nombreEntidad"), instancia, plantillaDocumento, resumenImportacion, hojaAImportar, numRow, COL_CONCEPTO_CARGO); } numRow++; } } return(numRow); }
public void ExportarDatosDeHojaExcel(ISheet hojaAExportar, ISheet hojaPlantilla, DocumentoInstanciaXbrlDto instancia, string rol, Model.IDefinicionPlantillaXbrl plantillaDocumento, String idioma) { var numRenglones = hojaPlantilla.LastRowNum; for (var iRenglon = _renglonInicioHechos; iRenglon <= numRenglones; iRenglon++) { var idElementoPrimario = ExcelUtil.ObtenerIdConceptoDeCelda(hojaPlantilla, iRenglon, _columnaIdConcepto); if (idElementoPrimario != null && instancia.Taxonomia.ConceptosPorId.ContainsKey(idElementoPrimario)) { var concepto = instancia.Taxonomia.ConceptosPorId[idElementoPrimario]; var EsAbstracto = concepto.EsAbstracto != null ? concepto.EsAbstracto.Value : false; if (!EsAbstracto || (concepto.EsMiembroDimension != null && concepto.EsMiembroDimension.Value)) { var idItemAjustes = _idItemMiembroSenialadoActualmenteAjustes; //Si el concepto es un miembro de dimension, entonces se expresa el capital inicial para ese miembro if (concepto.EsMiembroDimension != null && concepto.EsMiembroDimension.Value) { //Cambiar el concepto a capital contable y colocar el concepto a describir como miembro de la dimensión ajustes idItemAjustes = concepto.Id; concepto = instancia.Taxonomia.ConceptosPorId[_elementosPrimarios[0]]; } var numColumnas = hojaPlantilla.GetRow(iRenglon).LastCellNum; for (int iCol = _columnaInicioHechos; iCol <= numColumnas; iCol++) { var valorDimensionAjustes = new DimensionInfoDto() { IdDimension = _idDimensionAjustes, IdItemMiembro = idItemAjustes, Explicita = true }; var valorDimensionComponentesCapital = new DimensionInfoDto() { IdDimension = ExcelUtil.ObtenerIdConceptoDeCelda(hojaPlantilla, _renglonDimensionComponentesCapital, _columnaInicioHechos), IdItemMiembro = ExcelUtil.ObtenerIdConceptoDeCelda(hojaPlantilla, _renglonMiembroComponentesCapital, iCol), Explicita = true }; if (!String.IsNullOrEmpty(valorDimensionAjustes.IdDimension) && !String.IsNullOrEmpty(valorDimensionAjustes.IdItemMiembro) && !String.IsNullOrEmpty(valorDimensionComponentesCapital.IdDimension) && !String.IsNullOrEmpty(valorDimensionComponentesCapital.IdItemMiembro)) { DateTime fechaInicio = DateTime.MinValue; DateTime fechaFin = DateTime.MinValue; var variableFechaFin = hojaPlantilla.SheetName.Contains("Actual") ? "fecha_2015_09_30" : "fecha_2014_09_30"; var variableFechaInicio = hojaPlantilla.SheetName.Contains("Actual") ? "fecha_2015_01_01" : "fecha_2014_01_01"; if (XmlUtil.ParsearUnionDateTime(plantillaDocumento.ObtenerVariablePorId(variableFechaFin), out fechaFin) && XmlUtil.ParsearUnionDateTime(plantillaDocumento.ObtenerVariablePorId(variableFechaInicio), out fechaInicio)) { //Si es capital contable al inicio se envía de fecha de fin = fecha de inicio - 1 día //Si es capital contable al final se envía fecha de fin = fecha de fin if (iRenglon <= _renglonFinalAjustesRetrospectivos) { fechaFin = fechaInicio.AddDays(-1); } var listaDimensiones = new List <DimensionInfoDto>(); if (instancia.Taxonomia.DimensionDefaults.ContainsKey(valorDimensionAjustes.IdDimension) && !valorDimensionAjustes.IdItemMiembro.Equals(instancia.Taxonomia.DimensionDefaults[valorDimensionAjustes.IdDimension])) { listaDimensiones.Add(valorDimensionAjustes); } if (instancia.Taxonomia.DimensionDefaults.ContainsKey(valorDimensionComponentesCapital.IdDimension) && !valorDimensionComponentesCapital.IdItemMiembro.Equals(instancia.Taxonomia.DimensionDefaults[valorDimensionComponentesCapital.IdDimension])) { listaDimensiones.Add(valorDimensionComponentesCapital); } var hechoDto = instancia.BuscarHechos(concepto.Id, null, null, fechaInicio, fechaFin, listaDimensiones); if (hechoDto != null && hechoDto.Count > 0) { ExcelUtil.AsignarValorCelda(hojaAExportar, iRenglon, iCol, hechoDto[0].Valor, concepto.EsTipoDatoNumerico? CellType.Numeric:CellType.String , hechoDto[0]); } } } } } } } }
public void ImportarDatosDeHojaExcel(ISheet hojaAImportar, ISheet hojaPlantilla, DocumentoInstanciaXbrlDto instancia, string rol, AbaxXBRLCore.Common.Dtos.ResumenProcesoImportacionExcelDto resumenImportacion, Model.IDefinicionPlantillaXbrl plantillaDocumento) { var numRenglones = hojaAImportar.LastRowNum; for (var iRenglon = _renglonInicioHechos; iRenglon <= numRenglones; iRenglon++) { var idElementoPrimario = ExcelUtil.ObtenerIdConceptoDeCelda(hojaPlantilla, iRenglon, _columnaIdConcepto); if (idElementoPrimario != null && instancia.Taxonomia.ConceptosPorId.ContainsKey(idElementoPrimario)) { var concepto = instancia.Taxonomia.ConceptosPorId[idElementoPrimario]; var EsAbstracto = concepto.EsAbstracto != null ? concepto.EsAbstracto.Value : false; if (!EsAbstracto || (concepto.EsMiembroDimension != null && concepto.EsMiembroDimension.Value)) { var idItemAjustes = _idItemMiembroSenialadoActualmenteAjustes; //Si el concepto es un miembro de dimension, entonces se expresa el capital inicial para ese miembro if (concepto.EsMiembroDimension != null && concepto.EsMiembroDimension.Value) { //Cambiar el concepto a capital contable y colocar el concepto a describir como miembro de la dimensión ajustes idItemAjustes = concepto.Id; concepto = instancia.Taxonomia.ConceptosPorId[_elementosPrimarios[0]]; } var numColumnas = hojaAImportar.GetRow(iRenglon).LastCellNum; for (int iCol = _columnaInicioHechos; iCol <= numColumnas; iCol++) { var valorCelda = ExcelUtil.ObtenerValorCelda(hojaAImportar, iRenglon, iCol); if (!String.IsNullOrEmpty(valorCelda)) { var valorDimensionAjustes = new DimensionInfoDto() { IdDimension = _idDimensionAjustes, IdItemMiembro = idItemAjustes, QNameDimension = instancia.Taxonomia.ConceptosPorId[_idDimensionAjustes].EspacioNombres + ":" + instancia.Taxonomia.ConceptosPorId[_idDimensionAjustes].Nombre, QNameItemMiembro = instancia.Taxonomia.ConceptosPorId[idItemAjustes].EspacioNombres + ":" + instancia.Taxonomia.ConceptosPorId[idItemAjustes].Nombre, Explicita = true }; var idDimensionCapital = ExcelUtil.ObtenerIdConceptoDeCelda(hojaPlantilla, _renglonDimensionComponentesCapital, _columnaInicioHechos); var idItemCapital = ExcelUtil.ObtenerIdConceptoDeCelda(hojaPlantilla, _renglonMiembroComponentesCapital, iCol); if (!String.IsNullOrEmpty(idItemCapital) && instancia.Taxonomia.ConceptosPorId.ContainsKey(idItemCapital)) { var valorDimensionComponentesCapital = new DimensionInfoDto() { IdDimension = idDimensionCapital, IdItemMiembro = idItemCapital, QNameDimension = instancia.Taxonomia.ConceptosPorId[idDimensionCapital].EspacioNombres + ":" + instancia.Taxonomia.ConceptosPorId[idDimensionCapital].Nombre, QNameItemMiembro = instancia.Taxonomia.ConceptosPorId[idItemCapital].EspacioNombres + ":" + instancia.Taxonomia.ConceptosPorId[idItemCapital].Nombre, Explicita = true }; if (!String.IsNullOrEmpty(valorDimensionAjustes.IdDimension) && !String.IsNullOrEmpty(valorDimensionAjustes.IdItemMiembro) && !String.IsNullOrEmpty(valorDimensionComponentesCapital.IdDimension) && !String.IsNullOrEmpty(valorDimensionComponentesCapital.IdItemMiembro)) { DateTime fechaInicio = DateTime.MinValue; DateTime fechaFin = DateTime.MinValue; var variableFechaFin = hojaPlantilla.SheetName.Contains("Actual") ? "fecha_2015_09_30" : "fecha_2014_09_30"; var variableFechaInicio = hojaPlantilla.SheetName.Contains("Actual") ? "fecha_2015_01_01" : "fecha_2014_01_01"; if (XmlUtil.ParsearUnionDateTime(plantillaDocumento.ObtenerVariablePorId(variableFechaFin), out fechaFin) && XmlUtil.ParsearUnionDateTime(plantillaDocumento.ObtenerVariablePorId(variableFechaInicio), out fechaInicio)) { //Si es capital contable al inicio se envía de fecha de fin = fecha de inicio - 1 día //Si es capital contable al final se envía fecha de fin = fecha de fin if (iRenglon <= _renglonFinalAjustesRetrospectivos) { fechaFin = fechaInicio.AddDays(-1); } var listaDimensiones = new List <DimensionInfoDto>(); if (instancia.Taxonomia.DimensionDefaults.ContainsKey(valorDimensionAjustes.IdDimension) && !valorDimensionAjustes.IdItemMiembro.Equals(instancia.Taxonomia.DimensionDefaults[valorDimensionAjustes.IdDimension])) { listaDimensiones.Add(valorDimensionAjustes); } if (instancia.Taxonomia.DimensionDefaults.ContainsKey(valorDimensionComponentesCapital.IdDimension) && !valorDimensionComponentesCapital.IdItemMiembro.Equals(instancia.Taxonomia.DimensionDefaults[valorDimensionComponentesCapital.IdDimension])) { listaDimensiones.Add(valorDimensionComponentesCapital); } ActualizarValorHecho(concepto, valorCelda, listaDimensiones, fechaInicio, fechaFin, plantillaDocumento.ObtenerVariablePorId("esquemaEntidad") + ":" + plantillaDocumento.ObtenerVariablePorId("nombreEntidad"), instancia, plantillaDocumento, resumenImportacion, hojaAImportar, iRenglon, iCol ); } } } } } } } } }
/// <summary> /// Aplica las reglas de validacion de periodos de acuerdo a lo requerido: /// Se valida que exista por lo menos la información trimestral y acumulada del ejercicio reportado /// para los formatos principales de la taxonomía /// </summary> /// <param name="instancia">Documento de instancia a validar</param> /// <param name="parametros">Parametros de validación</param> /// <param name="fechaTrimestreParam">Fecha de trimestre reportado</param> /// <param name="resultadoValidacion">Objeto de resultado de validación</param> /// <returns>True si la validación es exitosa, false si falta algún dato requerido, si faltan datos requeridos se agregan los mensajes de error correspondientes</returns> private bool ValidarPeriodosRequeridos(DocumentoInstanciaXbrlDto instancia, IDictionary <string, string> parametros, DateTime fechaTrimestreParam, ResultadoValidacionDocumentoXBRLDto resultadoValidacion) { DateTime fechaInicioEjercicio = new DateTime(fechaTrimestreParam.Year, 1, 1); DateTime fechaInicioTrimestre = new DateTime(fechaTrimestreParam.Ticks).AddDays(1).AddMonths(-3); DateTime fechaA12Meses = new DateTime(fechaTrimestreParam.Ticks).AddDays(1).AddYears(-1); LogUtil.Info("FechaInicioEjercicio:" + DateUtil.ToStandarString(fechaInicioEjercicio)); LogUtil.Info("FechaInicioTrimestre:" + DateUtil.ToStandarString(fechaInicioTrimestre)); //Estado de situación financiera: Exitencia del cierre del trimestre if (!ExisteInformacionEnPeriodo(instancia, ID_ACTIVOS, fechaInicioTrimestre, fechaTrimestreParam, null)) { AgregarError(resultadoValidacion, null, null, String.Format(M_ERROR_RV009, DateUtil.ToStandarString(fechaTrimestreParam)), false); return(false); } //Estado de resultados: //Trimestral if (!ExisteInformacionEnPeriodo(instancia, ID_UTILIDAD_PERDIDA_NETA, fechaInicioTrimestre, fechaTrimestreParam, null) || !ExisteInformacionEnPeriodo(instancia, ID_RESULTADO_INTEGRAL, fechaInicioTrimestre, fechaTrimestreParam, null)) { AgregarError(resultadoValidacion, null, null, String.Format(M_ERROR_RV009, DateUtil.ToStandarString(fechaInicioTrimestre) + " - " + DateUtil.ToStandarString(fechaTrimestreParam)), false); return(false); } //Acumulado if (!ExisteInformacionEnPeriodo(instancia, ID_UTILIDAD_PERDIDA_NETA, fechaInicioEjercicio, fechaTrimestreParam, null) || !ExisteInformacionEnPeriodo(instancia, ID_RESULTADO_INTEGRAL, fechaInicioEjercicio, fechaTrimestreParam, null)) { AgregarError(resultadoValidacion, null, null, String.Format(M_ERROR_RV009, DateUtil.ToStandarString(fechaInicioEjercicio) + " - " + DateUtil.ToStandarString(fechaTrimestreParam)), false); return(false); } //Informativos a 12 meses /*if (!ExisteInformacionEnPeriodo(instancia, ID_UTILIDAD_PERDIDA_NETA, fechaA12Meses, fechaTrimestreParam, null)) * { * AgregarError(resultadoValidacion, null, null, String.Format(M_ERROR_RV009, DateUtil.ToStandarString(fechaA12Meses) + " - " + DateUtil.ToStandarString(fechaTrimestreParam)), false); * return false; * }*/ //Estado de flujos de efectivo if (!ExisteInformacionEnPeriodo(instancia, ID_INCREMENTO_DISMINUCION_EFECTIVO_Y_EQUIVALENTES, fechaInicioEjercicio, fechaTrimestreParam, null)) { AgregarError(resultadoValidacion, null, null, String.Format(M_ERROR_RV009, DateUtil.ToStandarString(fechaInicioEjercicio) + " - " + DateUtil.ToStandarString(fechaTrimestreParam)), false); return(false); } //Estado de cambios en el capital contable //Para cada miembro, empezando por la dim default /* Temporalmente ignorar la dimension defaul * if (!ExisteInformacionEnPeriodo(instancia, ID_CAMBIOS_EN_EL_CAPITAL_CONTABLE, fechaInicioEjercicio, fechaTrimestreParam, new List<DimensionInfoDto>())) * { * AgregarError(resultadoValidacion, null, null, String.Format(M_ERROR_RV009, DateUtil.ToStandarString(fechaInicioEjercicio) + " - " + DateUtil.ToStandarString(fechaTrimestreParam)), false); * return false; * } */ if (!ExisteInformacionEnPeriodo(instancia, ID_CAPITAL_CONTABLE, fechaInicioEjercicio, fechaTrimestreParam, new List <DimensionInfoDto>())) { AgregarError(resultadoValidacion, null, null, String.Format(M_ERROR_RV009, DateUtil.ToStandarString(fechaTrimestreParam)), false); return(false); } var listaDimCapital = new List <DimensionInfoDto>(); var dimensionBuscada = new DimensionInfoDto() { IdDimension = ID_COMPONENTES_DEL_CAPITAL, Explicita = true }; listaDimCapital.Add(dimensionBuscada); foreach (var idMiembroCapital in ID_MIEMBROS_CAPITAL_CONTABLE) { dimensionBuscada.IdItemMiembro = idMiembroCapital; if (!ExisteInformacionEnPeriodo(instancia, ID_CAMBIOS_EN_EL_CAPITAL_CONTABLE, fechaInicioEjercicio, fechaTrimestreParam, listaDimCapital)) { AgregarError(resultadoValidacion, null, null, String.Format(M_ERROR_RV009, DateUtil.ToStandarString(fechaInicioEjercicio) + " - " + DateUtil.ToStandarString(fechaTrimestreParam)), false); return(false); } if (!ExisteInformacionEnPeriodo(instancia, ID_CAPITAL_CONTABLE, fechaInicioEjercicio, fechaTrimestreParam, listaDimCapital)) { AgregarError(resultadoValidacion, null, null, String.Format(M_ERROR_RV009, DateUtil.ToStandarString(fechaTrimestreParam)), false); return(false); } } return(true); }
private int InsertarRenglon(string idConceptoHechoActual, DocumentoInstanciaXbrlDto instancia, IDefinicionPlantillaXbrl plantillaDocumento, int iRenglon, Document doc, Table tabla800001) { var _renglonPrimariosTotales = new String[] { "ifrs_mx-cor_20141205_InstitucionExtranjeraSiNo", "ifrs_mx-cor_20141205_FechaDeFirmaContrato", "ifrs_mx-cor_20141205_FechaDeVencimiento", "ifrs_mx-cor_20141205_TasaDeInteresYOSobretasa" }; int renglonesInsertados = 0; DateTime fechaInicio = DateTime.MinValue; DateTime fechaFin = DateTime.MinValue; //Trimestre actual if (AbaxXBRLCore.Common.Util.DateUtil.ParseDate( plantillaDocumento.ObtenerVariablePorId("fecha_2015_09_30"), AbaxXBRLCore.Common.Util.DateUtil.YMDateFormat, out fechaFin) && AbaxXBRLCore.Common.Util.DateUtil.ParseDate( plantillaDocumento.ObtenerVariablePorId("fecha_2015_07_01"), AbaxXBRLCore.Common.Util.DateUtil.YMDateFormat, out fechaInicio)) { var hechosElemento = instancia.BuscarHechos(idConceptoHechoActual, null, null, fechaInicio, fechaFin, null, false); var institucionesRelacionadas = ObtenerDistintasInstituciones(hechosElemento, instancia); var dimensionDenominacion = new DimensionInfoDto() { Explicita = true, IdDimension = _idDimensionDenominacion, IdItemMiembro = _idItemMiembroTotalMonedas }; var dimensionIntervalo = new DimensionInfoDto() { Explicita = true, IdDimension = _idDimensionIntervalo, IdItemMiembro = _idItemMiembroTotalIntervalos }; //Escribir renglón de institución foreach (var institucionMember in institucionesRelacionadas.Where(x => !x.ElementoMiembroTipificado.Contains(_institucionTotal))) { renglonesInsertados++; var renglonNuevo = iRenglon + renglonesInsertados; var dimensiones = new List <DimensionInfoDto>() { dimensionDenominacion, dimensionIntervalo, institucionMember }; //insertar renglon var renglon = (Row)tabla800001.Rows[renglonNuevo].Clone(true); tabla800001.InsertAfter(renglon, tabla800001.Rows[renglonNuevo - 1]); renglon.FirstCell.FirstParagraph.AppendChild(new Run(doc, ObtenerNombreInstitucion(institucionMember))); renglon.FirstCell.FirstParagraph.Runs[0].Font.Name = "Arial"; renglon.FirstCell.FirstParagraph.Runs[0].Font.Size = 6; //Escribir los elementos primarios que van en total for (var iCol = _columnaInicioHechosTotales; iCol <= _columnaFinHechosTotales; iCol++) { var idConceptoHechoTotal = _renglonPrimariosTotales[iCol - _columnaInicioHechosTotales]; var hechoTotal = instancia.BuscarHechos(idConceptoHechoTotal, null, null, fechaInicio, fechaFin, dimensiones); if (hechoTotal != null && hechoTotal.Count > 0) { renglon.Cells[iCol].FirstParagraph.AppendChild(new Run(doc, hechoTotal[0].Valor)); renglon.Cells[iCol].FirstParagraph.Runs[0].Font.Name = "Arial"; renglon.Cells[iCol].FirstParagraph.Runs[0].Font.Size = 6; } else { //renglon.Cells[iCol].FirstParagraph.Runs[0].Text = ""; } } //Montos for (var iCol = _columnaInicioHechosMontos; iCol <= _columnaFinHechosMontos; iCol++) { //dimensionDenominacion.IdItemMiembro = ExcelUtil.ObtenerValorCelda(hojaPlantilla, _renglonItemMiembroDenominacion, iCol); //dimensionIntervalo.IdItemMiembro = ExcelUtil.ObtenerValorCelda(hojaPlantilla, _renglonItemMiembroIntervalo, iCol); //var hechoMonto = instancia.BuscarHechos(idConceptoHechoActual, null, null, fechaInicio, fechaFin, dimensiones); //if (hechoMonto != null && hechoMonto.Count > 0) //{ // ExcelUtil.AsignarValorCelda(hojaAExportar, renglonNuevo, iCol, hechoMonto[0].Valor, CellType.Numeric); //} renglon.Cells[iCol].FirstParagraph.AppendChild(new Run(doc, "0")); renglon.Cells[iCol].FirstParagraph.Runs[0].Font.Name = "Arial"; renglon.Cells[iCol].FirstParagraph.Runs[0].Font.Size = 6; } } //Escribir en renglón de total foreach (var institucionMember in institucionesRelacionadas.Where(x => x.ElementoMiembroTipificado.Contains(_institucionTotal))) { var dimensiones = new List <DimensionInfoDto>() { dimensionDenominacion, dimensionIntervalo, institucionMember }; var renglon = tabla800001.Rows[iRenglon]; //Montos for (var iCol = _columnaInicioHechosMontos; iCol <= _columnaFinHechosMontos; iCol++) { /*dimensionDenominacion.IdItemMiembro = ExcelUtil.ObtenerValorCelda(hojaPlantilla, _renglonItemMiembroDenominacion, iCol); * dimensionIntervalo.IdItemMiembro = ExcelUtil.ObtenerValorCelda(hojaPlantilla, _renglonItemMiembroIntervalo, iCol); * * var hechoMonto = instancia.BuscarHechos(idConceptoHechoActual, null, null, fechaInicio, fechaFin, dimensiones); * if (hechoMonto != null && hechoMonto.Count > 0) * { * ExcelUtil.AsignarValorCelda(hojaAExportar, iRenglon + renglonesInsertados, iCol, hechoMonto[0].Valor, CellType.Numeric); * }*/ renglon.Cells[iCol].FirstParagraph.AppendChild(new Run(doc, "0")); renglon.Cells[iCol].FirstParagraph.Runs[0].Font.Name = "Arial"; renglon.Cells[iCol].FirstParagraph.Runs[0].Font.Size = 6; } } } return(renglonesInsertados); }