public void ImportarDatosDeHojaExcel(NPOI.SS.UserModel.ISheet hojaAImportar, NPOI.SS.UserModel.ISheet hojaPlantilla, Dto.DocumentoInstanciaXbrlDto instancia, string rol, AbaxXBRLCore.Common.Dtos.ResumenProcesoImportacionExcelDto resumenImportacion, Model.IDefinicionPlantillaXbrl plantillaDocumento) { //var idiomaDefault = instancia.Taxonomia != null && instancia.Taxonomia.IdiomasTaxonomia != null && instancia.Taxonomia.IdiomasTaxonomia.Keys.Count > 0 ? // instancia.Taxonomia.IdiomasTaxonomia.Keys.First() : String.Empty; // string idContextoGeneral = instancia.ContextosPorId.First().Value.Id; var numRenglones = hojaAImportar.LastRowNum; for (var iRenglon = _renglonInicioHechos; iRenglon <= numRenglones; iRenglon++) { var numColumnas = hojaAImportar.GetRow(iRenglon).LastCellNum; if (numColumnas > _columnaInicioHechos) { var valorConsecutivo = ExcelUtil.ObtenerValorCelda(hojaAImportar, iRenglon, _columnaInicioHechos); if (!String.IsNullOrEmpty(valorConsecutivo)) { //Localizar tupla //Crear tupla var hechoTupla = instancia.CrearHecho(_idConceptoRegistroCartera, null, null, "INV" + Guid.NewGuid().ToString()); plantillaDocumento.InyectaHechoADocumentoInstancia(hechoTupla); hechoTupla.Hechos = new List <String>(); for (int iCol = _columnaInicioHechos; iCol <= numColumnas; iCol++) { var valorCelda = ExcelUtil.ObtenerValorCelda(hojaAImportar, iRenglon, iCol); if (!String.IsNullOrEmpty(valorCelda)) { var idConcepto = ExcelUtil.ObtenerValorCelda(hojaPlantilla, _renglonIdConceptos, iCol); if (!String.IsNullOrEmpty(idConcepto)) { //buscar el hecho dentro de la tupla, si no existe, crearlo var hechoEnTupla = CrearHechoEnTupla(hechoTupla, idConcepto, instancia, plantillaDocumento, idContextoGeneral); hechoEnTupla.Valor = valorCelda; //hechoEnTupla.NotasAlPie = ExcelUtil.ObtenerComentariosCelda(hojaAImportar.GetRow(iRenglon), iCol, idiomaDefault); } } } } } } }
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); } } } } } }
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 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> /// 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)); } } }