/// <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)); } } }
/// <summary> /// Exporta al documento de word el hecho del concepto para el trimestre actual, agrega el titulo y el contenido /// los hechos sin valor no son exportados /// </summary> /// <param name="estructura">Estructura actual a exportar</param> /// <param name="docBuilder">Clase auxiliar para la creación de contenido en Word</param> /// <param name="instancia">Documento de instancia a exportar</param> /// <param name="rol">Rol exportado</param> /// <param name="plantillaDocumento">Plantilla de documento exportado</param> private void ExportarEstructuraRol(EstructuraFormatoDto estructura, DocumentBuilder docBuilder, DocumentoInstanciaXbrlDto instancia, string rol, IDefinicionPlantillaXbrl plantillaDocumento, DateTime fechaInicio, DateTime fechaFin, string claveIdioma) { var hechos = instancia.BuscarHechos(estructura.IdConcepto, null, null, fechaInicio, fechaFin, null); if (hechos.Count > 0 && hechos[0].Valor != null && !String.IsNullOrEmpty(hechos[0].Valor.Trim())) { if (String.IsNullOrEmpty(claveIdioma)) { claveIdioma = "es"; } var etqs = instancia.Taxonomia.ConceptosPorId[estructura.IdConcepto].Etiquetas[claveIdioma]; var rolEtiqueta = String.IsNullOrEmpty(estructura.RolEtiquetaPreferido) ? Etiqueta.RolEtiqueta : estructura.RolEtiquetaPreferido; var etiqueta = instancia.Taxonomia.ConceptosPorId[estructura.IdConcepto].Nombre; if (etqs.ContainsKey(rolEtiqueta)) { etiqueta = etqs[rolEtiqueta].Valor; } var font = docBuilder.Font; font.Size = 8; font.Bold = true; font.Name = "Arial"; docBuilder.Writeln(etiqueta); docBuilder.InsertParagraph(); font.Bold = false; WordUtil.InsertHtml(docBuilder, estructura.IdConcepto + ":" + hechos[0].Id, hechos[0].Valor, true); docBuilder.InsertParagraph(); docBuilder.Writeln(""); } if (estructura.SubEstructuras != null) { foreach (var subestructura in estructura.SubEstructuras) { ExportarEstructuraRol(subestructura, docBuilder, instancia, rol, plantillaDocumento, fechaInicio, fechaFin, claveIdioma); } } }
/// <summary> /// Valida las operaciones extras sobre cuentas específicas del documento de instancia: /// Validaciones de consolidado = true : /// Utilidad (pérdida) neta = Utilidad (pérdida) atribuible a la participación controladora + Utilidad (pérdida) atribuible a la participación no controladora /// Resultado integral =resultado integral de la participación controladora + resultado integral de la participación no controladora /// Validaciones generales /// Incremento (disminución) neto de efectivo y equivalentes de efectivo + Efectivo y equivalentes de efectivo al principio del periodo = Efectivo y equivalentes de efectivo al final del periodo /// </summary> /// <param name="instancia">Documento de instancia a validar</param> /// <param name="parametros">Parametros extras para validación</param> /// <param name="fechaTrimestreParam">Fecha de cierre de trimestre del reporte</param> /// <param name="resultadoValidacion">Objeto del resultado de la validación</param> /// <returns></returns> private bool ValidarCuentasExtras(DocumentoInstanciaXbrlDto instancia, IDictionary <string, string> parametros, DateTime fechaTrimestreParam, ResultadoValidacionDocumentoXBRLDto resultadoValidacion) { var strConsolidado = ObtenerValorNoNumerico(ID_CUENTA_CONSOLIDADO, instancia); if (strConsolidado != null && CommonConstants.CADENAS_VERDADERAS.Any(x => x.Equals(strConsolidado, StringComparison.InvariantCultureIgnoreCase))) { //Validaciones para Consolidado = si //Utilidad (pérdida) neta = Utilidad (pérdida) atribuible a la participación controladora + Utilidad (pérdida) atribuible a la participación no controladora if (instancia.HechosPorIdConcepto.ContainsKey(ID_UTILIDAD_PERDIDA_NETA)) { var dimensiones = new List <DimensionInfoDto>(); foreach (var idHechoutilidadPerdidaNeta in instancia.HechosPorIdConcepto[ID_UTILIDAD_PERDIDA_NETA]) { if (instancia.HechosPorId.ContainsKey(idHechoutilidadPerdidaNeta)) { var utilidadPerdidaNeta = instancia.HechosPorId[idHechoutilidadPerdidaNeta]; var ctx = instancia.ContextosPorId[utilidadPerdidaNeta.IdContexto]; if (!ctx.ContieneInformacionDimensional) { var utilidadPerdidaNetaControladora = instancia.BuscarHechos(ID_UTILIDAD_PERDIDA_NETA_PARTICIPANCION_CONTROLADORA, null, null, ctx.Periodo.FechaInicio, ctx.Periodo.FechaFin, dimensiones, true); var utilidadPerdidaNetaNoControladora = instancia.BuscarHechos(ID_UTILIDAD_PERDIDA_NETA_PARTICIPANCION_NO_CONTROLADORA, null, null, ctx.Periodo.FechaInicio, ctx.Periodo.FechaFin, dimensiones, true); if (utilidadPerdidaNetaControladora.Count > 0 && utilidadPerdidaNetaNoControladora.Count > 0) { if (utilidadPerdidaNeta.ValorNumerico != utilidadPerdidaNetaControladora[0].ValorNumerico + utilidadPerdidaNetaNoControladora[0].ValorNumerico) { AgregarError(resultadoValidacion, null, ctx.Id, String.Format(M_ERROR_RV013, utilidadPerdidaNeta.ValorNumerico, utilidadPerdidaNetaControladora[0].ValorNumerico, utilidadPerdidaNetaNoControladora[0].ValorNumerico), true); return(false); } } } } } } //Resultado integral =resultado integral de la participación controladora + resultado integral de la participación no controladora if (instancia.HechosPorIdConcepto.ContainsKey(ID_RESULTADO_INTEGRAL)) { var dimensiones = new List <DimensionInfoDto>(); foreach (var idHechoResultadoIntegral in instancia.HechosPorIdConcepto[ID_RESULTADO_INTEGRAL]) { if (instancia.HechosPorId.ContainsKey(idHechoResultadoIntegral)) { var resultadoIntegral = instancia.HechosPorId[idHechoResultadoIntegral]; var ctx = instancia.ContextosPorId[resultadoIntegral.IdContexto]; if (!ctx.ContieneInformacionDimensional) { var resultadoIntegralControladora = instancia.BuscarHechos(ID_RESULTADO_INTEGRAL_CONTROLADORA, null, null, ctx.Periodo.FechaInicio, ctx.Periodo.FechaFin, dimensiones, true); var resultadoIntegralNoControladora = instancia.BuscarHechos(ID_RESULTADO_INTEGRAL_NO_CONTROLADORA, null, null, ctx.Periodo.FechaInicio, ctx.Periodo.FechaFin, dimensiones, true); if (resultadoIntegralControladora.Count > 0 && resultadoIntegralNoControladora.Count > 0) { if (resultadoIntegral.ValorNumerico != resultadoIntegralControladora[0].ValorNumerico + resultadoIntegralNoControladora[0].ValorNumerico) { AgregarError(resultadoValidacion, null, ctx.Id, String.Format(M_ERROR_RV014, resultadoIntegral.ValorNumerico, resultadoIntegralControladora[0].ValorNumerico, resultadoIntegralNoControladora[0].ValorNumerico), true); return(false); } } } } } } } //Incremento (disminución) neto de efectivo y equivalentes de efectivo + Efectivo y equivalentes de efectivo al principio del periodo = Efectivo y equivalentes de efectivo al final del periodo if (instancia.HechosPorIdConcepto.ContainsKey(ID_INCREMENTO_DISMINUCION_EFECTIVO_Y_EQUIVALENTES)) { var dimensiones = new List <DimensionInfoDto>(); foreach (var idHechoIncrementoDisminucion in instancia.HechosPorIdConcepto[ID_INCREMENTO_DISMINUCION_EFECTIVO_Y_EQUIVALENTES]) { if (instancia.HechosPorId.ContainsKey(idHechoIncrementoDisminucion)) { var incrementoDisminucion = instancia.HechosPorId[idHechoIncrementoDisminucion]; var ctx = instancia.ContextosPorId[incrementoDisminucion.IdContexto]; if (!ctx.ContieneInformacionDimensional) { var efectivoAlInicio = instancia.BuscarHechos(ID_EFECTIVO_Y_EQUIVALENTES, null, null, ctx.Periodo.FechaInicio, ctx.Periodo.FechaInicio.AddDays(-1), dimensiones, true); var efectivoAlFinal = instancia.BuscarHechos(ID_EFECTIVO_Y_EQUIVALENTES, null, null, ctx.Periodo.FechaInicio, ctx.Periodo.FechaFin, dimensiones, true); if (efectivoAlInicio.Count > 0 && efectivoAlFinal.Count > 0) { if (incrementoDisminucion.ValorNumerico != efectivoAlFinal[0].ValorNumerico - efectivoAlInicio[0].ValorNumerico) { AgregarError(resultadoValidacion, null, ctx.Id, String.Format(M_ERROR_RV015, efectivoAlFinal[0].ValorNumerico, efectivoAlInicio[0].ValorNumerico, incrementoDisminucion.ValorNumerico), true); return(false); } } } } } } //El valor de Capital contable al final del periodo debe ser igual a la suma de Capital contable al principio del periodo + Total Incremento (disminuci\u00F3n) en el capital contable para el miembro de dominio if (instancia.HechosPorIdConcepto.ContainsKey(ID_CAMBIOS_EN_EL_CAPITAL_CONTABLE)) { var dimensiones = new List <DimensionInfoDto>(); foreach (var idHechosCambiosEnCapital in instancia.HechosPorIdConcepto[ID_CAMBIOS_EN_EL_CAPITAL_CONTABLE]) { if (instancia.HechosPorId.ContainsKey(idHechosCambiosEnCapital)) { var cambiosCapital = instancia.HechosPorId[idHechosCambiosEnCapital]; var ctx = instancia.ContextosPorId[cambiosCapital.IdContexto]; dimensiones.Clear(); if (ctx.ValoresDimension != null) { dimensiones.AddRange(ctx.ValoresDimension); } var capitalInicial = instancia.BuscarHechos(ID_CAPITAL_CONTABLE, null, null, ctx.Periodo.FechaInicio, ctx.Periodo.FechaInicio.AddDays(-1), dimensiones, true); var capitalFinal = instancia.BuscarHechos(ID_CAPITAL_CONTABLE, null, null, ctx.Periodo.FechaInicio, ctx.Periodo.FechaFin, dimensiones, true); if (capitalInicial.Count > 0 && capitalFinal.Count > 0) { if (cambiosCapital.ValorNumerico != capitalFinal[0].ValorNumerico - capitalInicial[0].ValorNumerico) { AgregarError(resultadoValidacion, null, ctx.Id, String.Format(M_ERROR_RV016, capitalFinal[0].ValorNumerico, capitalInicial[0].ValorNumerico, cambiosCapital.ValorNumerico), true); 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; } } } }
private void ActualizarValorHecho(ConceptoDto concepto, string valorCelda, List <DimensionInfoDto> dimensiones, DateTime fechaInicio, DateTime fechaFin, string qNameEntidad, DocumentoInstanciaXbrlDto instancia, IDefinicionPlantillaXbrl plantillaDocumento, AbaxXBRLCore.Common.Dtos.ResumenProcesoImportacionExcelDto resumenImportacion, ISheet hojaImportar, int iRenglon, int columna) { if (String.IsNullOrEmpty(valorCelda)) { return; } var fechaDefault = plantillaDocumento.ObtenerVariablePorId("fecha_2015_01_01"); List <HechoDto> hechosAActualizar = new List <HechoDto>(); var hechos = instancia.BuscarHechos(concepto.Id, null, null, fechaInicio, fechaFin, dimensiones); if (hechos.Count > 0) { hechosAActualizar.AddRange(hechos); } else { var qNameCompleto = XmlUtil.ParsearQName(qNameEntidad); ContextoDto contextoDestino = null; var tipoPeriodo = concepto.TipoPeriodo.Equals(EtiquetasXBRLConstantes.Instant) ? Period.Instante : Period.Duracion; var contextos = instancia.BuscarContexto(qNameEntidad, tipoPeriodo, fechaInicio, fechaFin, dimensiones); if (contextos == null || contextos.Count == 0) { contextoDestino = new ContextoDto() { Entidad = new EntidadDto() { ContieneInformacionDimensional = false, EsquemaId = qNameCompleto.Namespace, Id = qNameCompleto.Name }, ContieneInformacionDimensional = dimensiones.Count > 0, ValoresDimension = dimensiones, Periodo = new PeriodoDto() { Tipo = tipoPeriodo, FechaInicio = fechaInicio, FechaFin = fechaFin, FechaInstante = fechaFin }, Id = "C" + Guid.NewGuid().ToString() }; plantillaDocumento.InyectarContextoADocumentoInstancia(contextoDestino); } else { contextoDestino = contextos[0]; } UnidadDto unidadDestino = null; if (concepto.EsTipoDatoNumerico) { var listaMedidas = new List <MedidaDto>() { new MedidaDto() { EspacioNombres = plantillaDocumento.ObtenerVariablePorId("medida_http___www_xbrl_org_2003_iso4217"), Nombre = plantillaDocumento.ObtenerVariablePorId("medida_MXN") } }; var unidades = instancia.BuscarUnidades(Unit.Medida, listaMedidas, null); if (unidades == null || unidades.Count == 0) { unidadDestino = new UnidadDto() { Id = "U" + Guid.NewGuid().ToString(), Tipo = Unit.Medida, Medidas = listaMedidas }; instancia.UnidadesPorId.Add(unidadDestino.Id, unidadDestino); } else { unidadDestino = unidades[0]; } } var hechoNuevo = instancia.CrearHecho(concepto.Id, unidadDestino != null ? unidadDestino.Id : null, contextoDestino.Id, "A" + Guid.NewGuid().ToString()); if (concepto.EsTipoDatoNumerico) { hechoNuevo.Valor = "0"; hechoNuevo.Decimales = _valorDecimalesHechos; } hechosAActualizar.Add(hechoNuevo); plantillaDocumento.InyectaHechoADocumentoInstancia(hechoNuevo); } foreach (var hechoActualizar in hechosAActualizar) { var conceptoImportar = instancia.Taxonomia.ConceptosPorId[hechoActualizar.IdConcepto]; if (!UtilAbax.ActualizarValorHecho(conceptoImportar, hechoActualizar, valorCelda, fechaDefault)) { resumenImportacion.AgregarErrorFormato( UtilAbax.ObtenerEtiqueta(instancia.Taxonomia, conceptoImportar.Id), hojaImportar.SheetName, iRenglon.ToString(), columna.ToString(), valorCelda); } else { resumenImportacion.TotalHechosImportados++; var hechoImportado = new AbaxXBRLCore.Common.Dtos.InformacionHechoImportadoExcelDto() { IdConcepto = hechoActualizar.IdConcepto, IdHecho = hechoActualizar.Id, ValorImportado = valorCelda, HojaExcel = hojaImportar.SheetName, Renglon = iRenglon, Columna = columna }; resumenImportacion.AgregarHechoImportado(hechoImportado, UtilAbax.ObtenerEtiqueta(instancia.Taxonomia, conceptoImportar.Id)); } } }
public void ExportarRolADocumentoWord(Document word, Section section, DocumentoInstanciaXbrlDto instancia, string rol, IDefinicionPlantillaXbrl plantillaDocumento, string claveIdioma) { DateTime fechaInicio = DateTime.MinValue; DateTime fechaFin = DateTime.MinValue; //Navegar por secciones for (var iAnio = 0; iAnio < _anios.Length; iAnio++) { var variableFechaFin = _anios[iAnio].Equals("A") ? "fecha_2015_09_30" : "fecha_2014_09_30"; var variableFechaInicio = _anios[iAnio].Equals("A") ? "fecha_2015_01_01" : "fecha_2014_01_01"; var conAjustes = false; if (XmlUtil.ParsearUnionDateTime(plantillaDocumento.ObtenerVariablePorId(variableFechaFin), out fechaFin) && XmlUtil.ParsearUnionDateTime(plantillaDocumento.ObtenerVariablePorId(variableFechaInicio), out fechaInicio)) { for (var iAjustes = 0; iAjustes < _itemsAjustes.Length; iAjustes++) { for (var iPrimario = 0; iPrimario < _elementosPrimarios.Length; iPrimario++) { for (var iComponentesCapital = 0; iComponentesCapital < _itemComponentesCapital.Length; iComponentesCapital++) { //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 DateTime fechaFinFinal = fechaFin; if (iPrimario == 0) { fechaFinFinal = fechaInicio.AddDays(-1); } var listaDimensiones = new List <DimensionInfoDto>(); if (iAjustes != 0) { listaDimensiones.Add(new DimensionInfoDto() { Explicita = true, IdDimension = "ifrs-full_RetrospectiveApplicationAndRetrospectiveRestatementAxis", IdItemMiembro = _itemsAjustes[iAjustes] }); } if (iComponentesCapital != 24) { listaDimensiones.Add(new DimensionInfoDto() { Explicita = true, IdDimension = "ifrs-full_ComponentsOfEquityAxis", IdItemMiembro = _itemComponentesCapital[iComponentesCapital] }); } var hechos = instancia.BuscarHechos(_elementosPrimarios[iPrimario], null, null, fechaInicio, fechaFinFinal, listaDimensiones); if (hechos != null && hechos.Count > 0) { //conHechos = true; string valorFinal = "$ "; double valorDouble = 0; if (Double.TryParse(hechos[0].Valor, NumberStyles.Any, CultureInfo.InvariantCulture, out valorDouble)) { valorFinal = valorFinal + valorDouble.ToString("#,##0.00"); } else { valorFinal = hechos[0].Valor; } section.Range.Replace("[" + _anios[iAnio] + "-" + iAjustes + "-" + iPrimario + "-" + iComponentesCapital + "]", valorFinal, false, false); if (iAjustes > 0) { conAjustes = true; } } else { section.Range.Replace("[" + _anios[iAnio] + "-" + iAjustes + "-" + iPrimario + "-" + iComponentesCapital + "]", "", false, false); } } } } //Si no existen datos para ajustes, eliminar renglón 5 a 11 if (!conAjustes) { //Buscar la tabla para eliminar renglones NodeCollection allTables = section.GetChildNodes(NodeType.Table, true); var indiceInicioTablaBorrar = iAnio * TablasPorPeriodo; for (int indiceTablaBorrar = 0; indiceTablaBorrar < TablasPorPeriodo; indiceTablaBorrar++) { for (int iBorrar = 11; iBorrar >= 5; iBorrar--) { ((Table)allTables[indiceTablaBorrar + indiceInicioTablaBorrar]).Rows.RemoveAt(iBorrar); } } } } } }
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]); } } } } } } } }
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); }