/// <summary> /// Crea un nuevo hecho en el documento de instancia basado en los parámetros enviados. /// </summary> /// <returns></returns> private HechoDto CrearHecho(DocumentoInstanciaXbrlDto instancia, IDefinicionPlantillaXbrl plantillaDocumento, string idConcepto, ContextoDto contextoDestino) { HechoDto hechoNuevo = null; ConceptoDto concepto = instancia.Taxonomia.ConceptosPorId[idConcepto]; 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]; } } hechoNuevo = instancia.CrearHecho(concepto.Id, unidadDestino != null ? unidadDestino.Id : null, contextoDestino.Id, "A" + Guid.NewGuid().ToString()); if (concepto.EsTipoDatoNumerico) { hechoNuevo.Decimales = _valorDecimalesHechos; } plantillaDocumento.InyectaHechoADocumentoInstancia(hechoNuevo); return(hechoNuevo); }
/// <summary> /// Retorna la unidad que aplica para el concepto indicado. /// </summary> /// <param name="concepto">Concepto a evaluar.</param> /// <param name="instancia">Documento de instancia a evaluar.</param> /// <param name="plantillaDocumento">Plantilla del documento.</param> /// <returns>Unidad que aplica al concepto.</returns> public UnidadDto ObtenUniadConcepto(ConceptoDto concepto, DocumentoInstanciaXbrlDto instancia, IDefinicionPlantillaXbrl plantillaDocumento) { 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]; } } return(unidadDestino); }
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)); } } }