/// <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); }
/// <summary> /// Agrega un nuevo hecho importado al listado y verifica si es un hecho que sobreescribe a otro /// </summary> /// <param name="hechoImportado">Hecho que se importa</param> public void AgregarHechoImportado(InformacionHechoImportadoExcelDto hechoImportado, String nombreConcepto) { if (!HechosImportados.ContainsKey(hechoImportado.IdConcepto)) { HechosImportados.Add(hechoImportado.IdConcepto, new List <InformacionHechoImportadoExcelDto>()); } //Verificar si ya existe una importación a ese hecho y si el valor el diferente InformacionHechoImportadoExcelDto hechoInicial = HechosImportados[hechoImportado.IdConcepto]. FirstOrDefault(x => x.IdHecho.Equals(hechoImportado.IdHecho) && !x.ValorImportado.Equals(hechoImportado.ValorImportado)); if (hechoInicial != null) { var valTmp = hechoInicial.ValorImportado; if (valTmp.Length > 30) { valTmp = valTmp.Substring(0, 30) + "..."; } var valTmpFinal = hechoImportado.ValorImportado; if (valTmpFinal.Length > 30) { valTmpFinal = valTmpFinal.Substring(0, 30) + "..."; } //Hecho sobreescrito HechosSobreescritos.Add(new InformacionHechoSobreescritoDto() { IdConcepto = hechoImportado.IdConcepto, IdHecho = hechoImportado.IdHecho, ValorInicial = valTmp, ValorFinal = valTmpFinal, HojaInicial = hechoInicial.HojaExcel, HojaFinal = hechoImportado.HojaExcel, Mensaje = "El concepto (" + nombreConcepto + ") fue importado desde la hoja (" + hechoInicial.HojaExcel + ") con valor (" + valTmp + ") pero fue importado nuevamente desde la hoja (" + hechoImportado.HojaExcel + ")" }); } HechosImportados[hechoImportado.IdConcepto].Add(hechoImportado); }
/// <summary> /// Actualiza o crea un hecho en base a los parámetros enviados /// </summary> 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 hechos = instancia.BuscarHechos(concepto.Id, null, null, fechaInicio, fechaFin, dimensiones); if (hechos.Count > 0) { foreach (var hechoActualizar in hechos) { if (!ActualizarValor(concepto, valorCelda, hechoActualizar, plantillaDocumento)) { resumenImportacion.AgregarErrorFormato( UtilAbax.ObtenerEtiqueta(instancia.Taxonomia, concepto.Id), hojaImportar.SheetName, iRenglon.ToString(), "0", 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, hechoActualizar.Id)); } } } else { var qNameCompleto = XmlUtil.ParsearQName(qNameEntidad); AbaxXBRLCore.Viewer.Application.Dto.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 AbaxXBRLCore.Viewer.Application.Dto.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) { //Si es moentario var listaMedidas = new List <MedidaDto>(); if (concepto.TipoDatoXbrl.Contains(TiposDatoXBRL.MonetaryItemType)) { listaMedidas.Add(new MedidaDto() { EspacioNombres = plantillaDocumento.ObtenerVariablePorId("medida_http___www_xbrl_org_2003_iso4217"), Nombre = plantillaDocumento.ObtenerVariablePorId("medida_MXN") }); } else { //Unidad pure listaMedidas.Add(new MedidaDto() { EspacioNombres = plantillaDocumento.ObtenerVariablePorId("medida_http___www_xbrl_org_2003_instance"), Nombre = plantillaDocumento.ObtenerVariablePorId("medida_pure") }); } 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.Decimales = _valorDecimalesHechos; } if (!ActualizarValor(concepto, valorCelda, hechoNuevo, plantillaDocumento)) { resumenImportacion.AgregarErrorFormato( UtilAbax.ObtenerEtiqueta(instancia.Taxonomia, concepto.Id), hojaImportar.SheetName, iRenglon.ToString(), "0", valorCelda); } else { resumenImportacion.TotalHechosImportados++; var hechoImportado = new AbaxXBRLCore.Common.Dtos.InformacionHechoImportadoExcelDto() { IdConcepto = hechoNuevo.IdConcepto, IdHecho = hechoNuevo.Id, ValorImportado = valorCelda, HojaExcel = hojaImportar.SheetName, Renglon = iRenglon, Columna = columna }; resumenImportacion.AgregarHechoImportado(hechoImportado, UtilAbax.ObtenerEtiqueta(instancia.Taxonomia, hechoNuevo.Id)); } plantillaDocumento.InyectaHechoADocumentoInstancia(hechoNuevo); } }
/// <summary> /// Crea los hechos en base a la configuración. /// </summary> /// <param name="fila">Fila donde se obtendrán los datos para genarar los hechos.</param> /// <param name="contexto">Contexto al que pertenecen los nuevos hechos.</param> /// <param name="configuracion">Configuración con la información general para la generación de los hechos.</param> private void GeneraHechos(IRow fila, ConceptoDto conceptoMiembroActual, ConfiguracionReporteExcel427000 configuracion) { var fechaDefault = configuracion.FechaDefault; Dto.ContextoDto contextoActual = null; var registroGenerado = false; foreach (var indexColumna in configuracion.DiccionarioConceptosPorColumna.Keys) { var celda = fila.GetCell(indexColumna); String valorHecho = null; if (celda != null && !celda.CellType.Equals(CellType.Blank)) { valorHecho = ExcelUtil.ObtenerValorCelda(celda.CellType, celda); } if (String.IsNullOrEmpty(valorHecho)) { if (!registroGenerado) { return; } else { //valorHecho = String.Empty; continue; } } ConceptoDto concepto; if (configuracion.DiccionarioConceptosPorColumna.TryGetValue(indexColumna, out concepto)) { if (contextoActual == null) { contextoActual = GeneraContextoMiembro(conceptoMiembroActual, configuracion); } configuracion.InicializaImportacion(); String idUnidad = null; String decimales = null; var idConcepto = concepto.Id; UnidadDto unidad; if (configuracion.DiccionarioUnidadesPorIdConcepto.TryGetValue(idConcepto, out unidad)) { idUnidad = unidad.Id; configuracion.DiccionarioDecimalesPorIdConcepto.TryGetValue(idConcepto, out decimales); } var idHecho = "A" + Guid.NewGuid().ToString(); var hechoNuevo = configuracion.Instancia.CrearHecho(concepto.Id, idUnidad, contextoActual.Id, idHecho); hechoNuevo.Decimales = decimales; if (!UtilAbax.ActualizarValorHecho(concepto, hechoNuevo, valorHecho, fechaDefault)) { configuracion.ResumenImportacion.AgregarErrorFormato( UtilAbax.ObtenerEtiqueta(configuracion.Instancia.Taxonomia, concepto.Id), configuracion.NombreHoja, fila.RowNum.ToString(), indexColumna.ToString(), valorHecho); } else { configuracion.ResumenImportacion.TotalHechosImportados++; var hechoImportado = new AbaxXBRLCore.Common.Dtos.InformacionHechoImportadoExcelDto() { IdConcepto = hechoNuevo.IdConcepto, IdHecho = hechoNuevo.Id, ValorImportado = valorHecho, HojaExcel = configuracion.NombreHoja, Renglon = fila.RowNum, Columna = indexColumna }; configuracion.ResumenImportacion.AgregarHechoImportado(hechoImportado, UtilAbax.ObtenerEtiqueta(configuracion.Instancia.Taxonomia, hechoNuevo.Id)); } configuracion.PlantillaDocumento.InyectaHechoADocumentoInstancia(hechoNuevo); registroGenerado = true; } } }