public IHttpActionResult ExportarReporteExcelConsultasRepositorio() { var resultado = new ResultadoOperacionDto() { Resultado = true, Mensaje = "Ok" }; try { //var filtrosConsulta = "{\"conceptos\":[{\"Id\":\"ifrs-full_AdministrativeExpense\",\"EspacioNombres\":null,\"EspacioNombresTaxonomia\":\"http://www.bmv.com.mx/taxonomy/ifrs_mx/full_ifrs_mc_mx_ics_entry_point_2014-12-05\",\"orden\":1,\"indentacion\":1,\"esAbstracto\":false,\"dimension\":null,\"Nombre\":null,\"etiqueta\":null},{\"Id\":\"ifrs-full_DistributionCosts\",\"EspacioNombres\":null,\"EspacioNombresTaxonomia\":\"http://www.bmv.com.mx/taxonomy/ifrs_mx/full_ifrs_mc_mx_ics_entry_point_2014-12-05\",\"orden\":2,\"indentacion\":1,\"esAbstracto\":false,\"dimension\":null,\"Nombre\":null,\"etiqueta\":null},{\"Id\":\"ifrs-full_Inventories\",\"EspacioNombres\":null,\"EspacioNombresTaxonomia\":\"http://www.bmv.com.mx/taxonomy/ifrs_mx/full_ifrs_mc_mx_ics_entry_point_2014-12-05\",\"orden\":2,\"indentacion\":1,\"esAbstracto\":false,\"dimension\":null,\"Nombre\":null,\"etiqueta\":null},{\"Id\":\"ifrs-full_Equity\",\"EspacioNombres\":null,\"EspacioNombresTaxonomia\":\"http://www.bmv.com.mx/taxonomy/ifrs_mx/full_ifrs_mc_mx_ics_entry_point_2014-12-05\",\"orden\":2,\"indentacion\":2,\"esAbstracto\":false,\"dimension\":[{\"Filtro\":null,\"Explicita\":true,\"IdDimension\":\"ifrs-full_ComponentsOfEquityAxis\",\"IdItemMiembro\":\"ifrs-full_OtherReservesMember\",\"QNameDimension\":\"http://xbrl.ifrs.org/taxonomy/2014-03-05/ifrs-full:ComponentsOfEquityAxis\",\"QNameItemMiembro\":\"http://xbrl.ifrs.org/taxonomy/2014-03-05/ifrs-full:OtherReservesMember\",\"ElementoMiembroTipificado\":null}],\"Nombre\":null,\"etiqueta\":null},{\"Id\":\"ifrs_mx-cor_20141205_ComercioExteriorBancarios\",\"EspacioNombres\":null,\"EspacioNombresTaxonomia\":\"http://www.bmv.com.mx/taxonomy/ifrs_mx/full_ifrs_mc_mx_ics_entry_point_2014-12-05\",\"orden\":5,\"indentacion\":2,\"esAbstracto\":false,\"dimension\":[{\"Filtro\":\"TOTAL\",\"Explicita\":false,\"IdDimension\":\"ifrs_mx-cor_20141205_InstitucionEje\",\"IdItemMiembro\":null,\"QNameDimension\":\"http://bmv.com.mx/ifrs_mx-cor_20141205/full_ifrs_mx-cor_2014-12-05:InstitucionEje\",\"QNameItemMiembro\":null,\"ElementoMiembroTipificado\":null}],\"Nombre\":null,\"etiqueta\":null}],\"filtros\":{\"entidades\":[\"DAIMLER\",\"AEROMEX\"],\"entidadesDiccionario\":null,\"unidades\":[\"MXN\",\"USD\"],\"gruposEntidades\":null,\"periodos\":[{\"Tipo\":0,\"EsTipoInstante\":false,\"FechaInstante\":null,\"FechaInicio\":\"2015-01-01T00:00:00\",\"FechaFin\":\"2015-06-30T00:00:00\"},{\"Tipo\":0,\"EsTipoInstante\":false,\"FechaInstante\":null,\"FechaInicio\":\"2015-04-01T00:00:00\",\"FechaFin\":\"2015-06-30T00:00:00\"},{\"Tipo\":0,\"EsTipoInstante\":false,\"FechaInstante\":null,\"FechaInicio\":\"2014-04-01T00:00:00\",\"FechaFin\":\"2014-12-31T00:00:00\"}]},\"idioma\":\"es\"}"; var filtrosConsulta = getFormKeyValue("consulta"); var isExportWord = getFormKeyValue("isExportWord"); var settings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; var filtrosConsultaHecho = JsonConvert.DeserializeObject <EntFiltroConsultaHecho>(filtrosConsulta, settings); resultado = AbaxXBRLCellStoreService.ConsultarRepositorio(filtrosConsultaHecho, -1, -1); if (resultado.Resultado && ((EntHecho[])resultado.InformacionExtra).Count() > 0) { ReporteGenericoMongoDB reporteGenericoMongoDB = new ReporteGenericoMongoDB(); EstructuraReporteGenerico estructuraReporteGenerico = reporteGenericoMongoDB.CrearEstructuraGenerica(filtrosConsultaHecho, resultado, true); estructuraReporteGenerico = reporteGenericoMongoDB.AgruparHechosPorPeriodo(filtrosConsultaHecho, estructuraReporteGenerico); CrearReporteGenerico crearReporteGenerico = new CrearReporteGenerico(); if (isExportWord == null) { var contenidoDelReporteExcel = crearReporteGenerico.ExcelStream(estructuraReporteGenerico); return(this.ExportDatosToExcel(contenidoDelReporteExcel, "ReporteConsultaRepositorio.xls")); } else { var contenidoDelReporteWord = crearReporteGenerico.ExportWordConsultaReporte(estructuraReporteGenerico); return(this.ExportDatosToWord(contenidoDelReporteWord, "ReporteConsultaRepositorio.docx")); } } resultado.Resultado = false; } catch (Exception e) { resultado.Resultado = false; resultado.Mensaje = e.Message; } return(Ok(resultado)); }
/// <summary> /// Generación del reporte en excel /// </summary> /// <param name="rutaArchivoXBRL">Ruta del archivo XBRL que sera procesado</param> /// <param name="rutaDestino">Ruta y nombre de archivo donde se creara el archivo *.xlsx</param> /// <param name="idioma">Idioma en la que se va a generar el reporte</param> /// <param name="agruparPorunidad">Agrupacion de las columnas por unidad</param> private MemoryStream ReporteGenericoExcel(EstructuraReporteGenerico estruturaDeReporte, string idioma, bool agruparPorunidad) { // Generacion ReporteExcel XSSFWorkbook workbook = null; ISheet sheet = null; List <int> columnasOcultas = new List <int>(); int NumeroFilasParaEncabezado = NUMERO_FILAS_PARA_ENCABEZADO + NUMERO_COLUMNAS_PARA_TITULO_ROL; if (estruturaDeReporte.AgruparPorUnidad) { NumeroFilasParaEncabezado++; } workbook = new XSSFWorkbook(); foreach (var rol in estruturaDeReporte.ReporteGenericoPorRol) { int nivelIndentacionMaximo = ObtenerUltimaIndentacion(rol.Conceptos) + 2; int columnaDimension = ObtenerUltimaIndentacion(rol.Conceptos) + 1; string nombreHoja = ValidarNombreDeHoja(rol.Rol, workbook); sheet = workbook.CreateSheet(nombreHoja); var contarColumna = nivelIndentacionMaximo; foreach (var columna in rol.ColumnasDelReporte) { if (columna.OcultarColumna) { columnasOcultas.Add(contarColumna); } contarColumna++; } #region Estilos IFont fuenteParaTitulo = sheet.Workbook.CreateFont(); fuenteParaTitulo.FontHeightInPoints = TAMANIO_FUENTE_PARA_TITULO_ROL; fuenteParaTitulo.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Bold; IFont fuenteParaContenido = sheet.Workbook.CreateFont(); fuenteParaContenido.FontHeightInPoints = TAMANIO_FUENTE_PARA_CONTENIDO; IFont fuenteParaConceptosAbstractos = sheet.Workbook.CreateFont(); fuenteParaConceptosAbstractos.FontHeightInPoints = TAMANIO_FUENTE_PARA_CONTENIDO; fuenteParaConceptosAbstractos.Boldweight = (short)FontBoldWeight.Bold; ICellStyle EstiloEstandarEnCeldasEncabezado = sheet.Workbook.CreateCellStyle(); EstiloEstandarEnCeldasEncabezado.VerticalAlignment = VerticalAlignment.Center; EstiloEstandarEnCeldasEncabezado.Alignment = HorizontalAlignment.Left; EstiloBordeACeldas(EstiloEstandarEnCeldasEncabezado); EstiloEstandarEnCeldasEncabezado.SetFont(fuenteParaContenido); EstiloEstandarEnCeldasEncabezado.FillForegroundColor = ObtenerColorEntidad((int)Color.AMARILLO); EstiloEstandarEnCeldasEncabezado.FillPattern = NPOI.SS.UserModel.FillPattern.SolidForeground; ICellStyle EstiloEstandarEnCeldasConceptos = sheet.Workbook.CreateCellStyle(); EstiloEstandarEnCeldasConceptos.VerticalAlignment = VerticalAlignment.Center; EstiloEstandarEnCeldasConceptos.Alignment = HorizontalAlignment.Left; EstiloBordeACeldas(EstiloEstandarEnCeldasConceptos); EstiloEstandarEnCeldasConceptos.SetFont(fuenteParaContenido); EstiloEstandarEnCeldasConceptos.FillForegroundColor = ObtenerColorEntidad((int)Color.AZUL); EstiloEstandarEnCeldasConceptos.FillPattern = NPOI.SS.UserModel.FillPattern.SolidForeground; ICellStyle EstiloEstandarEnCeldasConceptosAbstracto = sheet.Workbook.CreateCellStyle(); EstiloEstandarEnCeldasConceptosAbstracto.VerticalAlignment = EstiloEstandarEnCeldasConceptos.VerticalAlignment; EstiloEstandarEnCeldasConceptosAbstracto.Alignment = EstiloEstandarEnCeldasConceptos.Alignment; EstiloBordeACeldas(EstiloEstandarEnCeldasConceptosAbstracto); EstiloEstandarEnCeldasConceptosAbstracto.SetFont(fuenteParaConceptosAbstractos); EstiloEstandarEnCeldasConceptosAbstracto.FillForegroundColor = ObtenerColorEntidad((int)Color.AZUL); EstiloEstandarEnCeldasConceptosAbstracto.FillPattern = NPOI.SS.UserModel.FillPattern.SolidForeground; ICellStyle EstiloEstandarEnCeldasDimension = sheet.Workbook.CreateCellStyle(); EstiloEstandarEnCeldasDimension.WrapText = true; EstiloEstandarEnCeldasDimension.VerticalAlignment = VerticalAlignment.Center; EstiloEstandarEnCeldasDimension.Alignment = HorizontalAlignment.Left; EstiloBordeACeldas(EstiloEstandarEnCeldasDimension); EstiloEstandarEnCeldasDimension.SetFont(fuenteParaContenido); EstiloEstandarEnCeldasDimension.FillForegroundColor = ObtenerColorEntidad((int)Color.GRIS); EstiloEstandarEnCeldasDimension.FillPattern = NPOI.SS.UserModel.FillPattern.SolidForeground; ICellStyle EstiloEstandarEnCeldasValoresHecho = sheet.Workbook.CreateCellStyle(); EstiloEstandarEnCeldasValoresHecho.WrapText = true; EstiloEstandarEnCeldasValoresHecho.VerticalAlignment = VerticalAlignment.Center; EstiloEstandarEnCeldasValoresHecho.Alignment = HorizontalAlignment.Right; EstiloBordeACeldas(EstiloEstandarEnCeldasValoresHecho); EstiloEstandarEnCeldasValoresHecho.SetFont(fuenteParaContenido); ICellStyle EstiloEstandarEnCeldasValoresHechoBloqueTexto = sheet.Workbook.CreateCellStyle(); EstiloEstandarEnCeldasValoresHechoBloqueTexto.WrapText = true; EstiloEstandarEnCeldasValoresHechoBloqueTexto.VerticalAlignment = VerticalAlignment.Top; EstiloEstandarEnCeldasValoresHechoBloqueTexto.Alignment = HorizontalAlignment.Left; EstiloBordeACeldas(EstiloEstandarEnCeldasValoresHechoBloqueTexto); EstiloEstandarEnCeldasValoresHechoBloqueTexto.SetFont(fuenteParaContenido); ICellStyle estiloTituloRol = sheet.Workbook.CreateCellStyle(); estiloTituloRol.VerticalAlignment = VerticalAlignment.Center; estiloTituloRol.Alignment = HorizontalAlignment.Left; estiloTituloRol.SetFont(fuenteParaTitulo); #endregion #region Renglones Titulo Rol var renglonTituloRol = sheet.CreateRow(NUMERO_RENGLON_TITULO_ROL); var celdaTituloRol = renglonTituloRol.GetCell(0, MissingCellPolicy.CREATE_NULL_AS_BLANK); celdaTituloRol.SetCellValue(rol.Rol); celdaTituloRol.CellStyle = estiloTituloRol; var renglonUriRol = sheet.CreateRow(NUMERO_RENGLON_TITULO_URI); var celdaUriRol = renglonUriRol.GetCell(0, MissingCellPolicy.CREATE_NULL_AS_BLANK); celdaUriRol.SetCellValue(rol.RolUri); celdaUriRol.CellStyle = estiloTituloRol; #endregion int iniciaColumna = 0; for (int filaEncabezado = NUMERO_COLUMNAS_PARA_TITULO_ROL; filaEncabezado <= NumeroFilasParaEncabezado; filaEncabezado++) { var renglon = sheet.CreateRow(filaEncabezado); iniciaColumna = nivelIndentacionMaximo; #region Imprimir columnas al reporte var decremetarColumna = 0; foreach (var columna in rol.ColumnasDelReporte) { if (columnasOcultas.Contains(iniciaColumna)) { iniciaColumna++; decremetarColumna = decremetarColumna - 1; continue; } iniciaColumna = iniciaColumna + decremetarColumna; ICell celdaColumna = null; switch (filaEncabezado) { case NUMERO_RENGLON_ENCABEZADO_FECHA: string tituloFecha = GenerarEncabezadoFecha(columna); celdaColumna = renglon.GetCell(iniciaColumna, MissingCellPolicy.CREATE_NULL_AS_BLANK); celdaColumna.SetCellValue(tituloFecha); break; case NUMERO_RENGLON_ENCABEZADO_ENTIDAD: celdaColumna = renglon.GetCell(iniciaColumna, MissingCellPolicy.CREATE_NULL_AS_BLANK); celdaColumna.SetCellValue(columna.Entidad); break; case NUMERO_RENGLON_ENCABEZADO_UNIDAD: if (estruturaDeReporte.AgruparPorUnidad) { celdaColumna = renglon.GetCell(iniciaColumna, MissingCellPolicy.CREATE_NULL_AS_BLANK); celdaColumna.SetCellValue(columna.Moneda); } break; } sheet.SetColumnWidth(iniciaColumna, TAMANIO_COLUMNA_EN_CONCEPTOS); celdaColumna.CellStyle = EstiloEstandarEnCeldasEncabezado; iniciaColumna++; } #endregion } //Formato a celdas de columna dimension #region Borde a columna de encabezado dimension sheet.GetRow(NUMERO_RENGLON_ENCABEZADO_FECHA).CreateCell(nivelIndentacionMaximo - 1).CellStyle = EstiloEstandarEnCeldasEncabezado; sheet.GetRow(NUMERO_RENGLON_ENCABEZADO_ENTIDAD).CreateCell(nivelIndentacionMaximo - 1).CellStyle = EstiloEstandarEnCeldasEncabezado; if (agruparPorunidad) { sheet.GetRow(NUMERO_RENGLON_ENCABEZADO_UNIDAD).CreateCell(nivelIndentacionMaximo - 1).CellStyle = EstiloEstandarEnCeldasEncabezado; } else { sheet.GetRow(NUMERO_RENGLON_ENCABEZADO_ENTIDAD).CreateCell(nivelIndentacionMaximo - 1).CellStyle = EstiloEstandarEnCeldasEncabezado; } #endregion iniciaColumna = nivelIndentacionMaximo; int filaConceptos = NumeroFilasParaEncabezado + 1; int numeroCeldasAgrupar = 0; int filaInicialParaAgrupar = 0; foreach (var concepto in rol.Conceptos) { var renglon = sheet.CreateRow(filaConceptos); var celda = renglon.GetCell(concepto.NivelIndentacion, MissingCellPolicy.CREATE_NULL_AS_BLANK); celda.SetCellValue(concepto.NombreConcepto); bool EsAbstracto = (concepto.EsAbstracto != null ? concepto.EsAbstracto.Value : false); if (EsAbstracto) { celda.CellStyle = EstiloEstandarEnCeldasConceptosAbstracto; } else { celda.CellStyle = EstiloEstandarEnCeldasConceptos; } sheet.SetColumnWidth(concepto.NivelIndentacion, TAMANIO_COLUMNA_EN_CONCEPTOS); if (ObtenerUltimaIndentacion(rol.Conceptos) == concepto.NivelIndentacion) { sheet.SetColumnWidth(concepto.NivelIndentacion, TAMANIO_COLUMNA_ULTIMONIVEL_CONCEPTOS); } filaInicialParaAgrupar = filaConceptos; bool primerDimensionANivelConcepto = true; bool contieneDimensiones = false; bool aplicaAgrupacionDeCeldas = false; #region Imprime las dimensiones del concepto bool TituloColumnaDimension = true; foreach (var dimension in concepto.Dimensiones.Values) { if (TituloColumnaDimension) { var renglonEncabezadoEntidad = sheet.GetRow(NUMERO_RENGLON_ENCABEZADO_ENTIDAD); var celdaTituloDimension = renglonEncabezadoEntidad.GetCell(nivelIndentacionMaximo - 1, MissingCellPolicy.CREATE_NULL_AS_BLANK); celdaTituloDimension.SetCellValue(NOMBRE_COLUMNA_DIMENSIONES); TituloColumnaDimension = !TituloColumnaDimension; } contieneDimensiones = true; IRow renglonParaDimension = null; if (primerDimensionANivelConcepto) { renglonParaDimension = sheet.GetRow(filaConceptos); primerDimensionANivelConcepto = !primerDimensionANivelConcepto; } else { filaConceptos++; renglonParaDimension = sheet.CreateRow(filaConceptos); } numeroCeldasAgrupar++; var celdaDimension = renglonParaDimension.GetCell(columnaDimension, MissingCellPolicy.CREATE_NULL_AS_BLANK); celdaDimension.SetCellValue(string.Format("{0}:{1}", dimension.NombreDimension, dimension.NombreMiembro)); sheet.SetColumnWidth(columnaDimension, TAMANIO_COLUMNA_ULTIMONIVEL_CONCEPTOS); celdaDimension.CellStyle = EstiloEstandarEnCeldasDimension; } if (contieneDimensiones) { aplicaAgrupacionDeCeldas = true; CellRangeAddress rangoDeCeldasAgrupar = new CellRangeAddress(filaInicialParaAgrupar, filaInicialParaAgrupar + numeroCeldasAgrupar - 1, concepto.NivelIndentacion, columnaDimension - 1); sheet.AddMergedRegion(rangoDeCeldasAgrupar); EstiloBordeACeldasAgrupadas(workbook, sheet, rangoDeCeldasAgrupar); } else { var renglonDimensionVacio = sheet.GetRow(filaConceptos); var celdaDimension = renglonDimensionVacio.GetCell(columnaDimension, MissingCellPolicy.CREATE_NULL_AS_BLANK); celdaDimension.CellStyle = EstiloEstandarEnCeldasDimension; CellRangeAddress rangoDeCeldasConceptosAgrupar = new CellRangeAddress(filaConceptos, filaConceptos, concepto.NivelIndentacion, nivelIndentacionMaximo - 2); sheet.AddMergedRegion(rangoDeCeldasConceptosAgrupar); EstiloBordeACeldasAgrupadas(workbook, sheet, rangoDeCeldasConceptosAgrupar); } #endregion iniciaColumna = nivelIndentacionMaximo; #region Imprimir los hecho en la celda var decremetarColumna = 0; foreach (var hechoPorColumna in concepto.Hechos) { if (columnasOcultas.Contains(iniciaColumna)) { iniciaColumna++; decremetarColumna = decremetarColumna - 1; continue; } iniciaColumna = iniciaColumna + decremetarColumna; var celdaHechos = renglon.GetCell(iniciaColumna, MissingCellPolicy.CREATE_NULL_AS_BLANK); if (hechoPorColumna != null) { if (hechoPorColumna.EsNumerico) { celdaHechos.SetCellValue(Double.Parse(hechoPorColumna.Valor)); celdaHechos.SetCellType(CellType.Numeric); celdaHechos.CellStyle = EstiloEstandarEnCeldasValoresHecho; } else if (hechoPorColumna.TipoDato.Contains(TiposDatoXBRL.TextBlockItemType) || hechoPorColumna.TipoDato.Contains(TiposDatoXBRL.StringItemType)) { celdaHechos.SetCellValue(hechoPorColumna.ValorFormateado); celdaHechos.CellStyle = EstiloEstandarEnCeldasValoresHechoBloqueTexto; } else { celdaHechos.SetCellValue(hechoPorColumna.Valor); celdaHechos.CellStyle = EstiloEstandarEnCeldasValoresHecho; } } if (aplicaAgrupacionDeCeldas) { CellRangeAddress rangoDeCeldasAgrupar = new CellRangeAddress(filaInicialParaAgrupar, filaInicialParaAgrupar + numeroCeldasAgrupar - 1, iniciaColumna, iniciaColumna); sheet.AddMergedRegion(rangoDeCeldasAgrupar); EstiloBordeACeldasAgrupadas(workbook, sheet, rangoDeCeldasAgrupar); } sheet.SetColumnWidth(iniciaColumna, TAMANIO_COLUMNA_EN_VALORES); iniciaColumna++; } #endregion aplicaAgrupacionDeCeldas = false; numeroCeldasAgrupar = 0; filaConceptos++; iniciaColumna = nivelIndentacionMaximo; } } try { var stream = new MemoryStream(); workbook.Write(stream); stream.Flush(); return(stream); } catch (Exception ex) { throw new Exception("Error al guardar el archivo excel en stream"); } }
/// <summary> /// Crea y retorna el documento word en byte[]. /// </summary> /// <param name="estruturaDeReporte"></param> /// <returns></returns> public byte[] ExportWordConsultaReporte(EstructuraReporteGenerico estruturaDeReporte) { Document word = null; word = new Document(); try { DocumentBuilder docBuilder = new DocumentBuilder(word); docBuilder.CurrentSection.PageSetup.Orientation = Orientation.Portrait; docBuilder.CurrentSection.PageSetup.PaperSize = Aspose.Words.PaperSize.Letter; docBuilder.CellFormat.Borders.LineStyle = Aspose.Words.LineStyle.Single; var numeroColumnas = estruturaDeReporte.ReporteGenericoPorRol.Count; foreach (var rol in estruturaDeReporte.ReporteGenericoPorRol) { var columna = 0; foreach (var columnaReporte in rol.ColumnasDelReporte) { var fecha = columnaReporte.TipoDePeriodo == 1 ? Convert.ToDateTime(columnaReporte.FechaInstante.Date).ToString("dd/MM/yyyy") : Convert.ToDateTime(columnaReporte.FechaInicio.Date).ToString("dd/MM/yyyy") + " - " + Convert.ToDateTime(columnaReporte.FechaFin.Date).ToString("dd/MM/yyyy"); var moneda = columnaReporte.Moneda != null && columnaReporte.Moneda.Length > 0 ? " - " + columnaReporte.Moneda : ""; var tituloSeccion = columnaReporte.Entidad + " - " + fecha + moneda; this.EscribirTituloSeccion(docBuilder, tituloSeccion); foreach (var concepto in rol.Conceptos) { if (concepto.Hechos[columna] != null) { List <String> nombreDimensiones = new List <string>(); if (concepto.Dimensiones != null && concepto.Dimensiones.Values.Count > 0) { foreach (var estructuraDimensionReporte in concepto.Dimensiones.Values) { nombreDimensiones.Add(estructuraDimensionReporte.NombreDimension); nombreDimensiones.Add(estructuraDimensionReporte.NombreMiembro); } } docBuilder.CellFormat.PreferredWidth = PreferredWidth.FromPercent(0); if (concepto != null && concepto.Hechos != null && concepto.Hechos.Length > 0 && concepto.Hechos[columna] != null && concepto.Hechos[columna].TipoDato.Contains("textBlockItemType") || (concepto.Hechos[columna].TipoDato.Contains("stringItemType") && concepto.Hechos[columna].Valor != null && concepto.Hechos[columna].Valor.Length > 20)) { this.EscribirConceptoPorRenglon(docBuilder, concepto.NombreConcepto, concepto.Hechos[columna].Valor != null ? concepto.Hechos[columna].Valor : "", nombreDimensiones); } else { String valor = ""; var tipoDeDato = concepto.Hechos[columna].TipoDato.Substring(concepto.Hechos[columna].TipoDato.LastIndexOf(':') + 1); if (concepto.Hechos[columna].Valor != null) { switch (tipoDeDato) { case "stringItemType": case "monthNumberItemType": case "siNoItemType": case "denominationOfTheIssueItemType": valor = concepto.Hechos[columna].Valor; break; case "monetaryItemType": case "decimalItemType": case "nonNegativeIntegerItemType": case "percentItemType": valor = ReporteXBRLUtil.formatoDecimal(Convert.ToDecimal(concepto.Hechos[columna].Valor), ReporteXBRLUtil.FORMATO_CANTIDADES_DECIMALES_AUX); break; case "booleanItemType": valor = concepto.Hechos[columna].Valor.Equals("true") ? "SI" : "NO"; break; case "dateItemType": valor = Convert.ToDateTime(concepto.Hechos[columna].Valor).ToString("dd/MM/yyyy"); break; default: valor = concepto.Hechos[columna].Valor; break; } } this.EscribirADosColumnas(docBuilder, concepto.NombreConcepto, valor, nombreDimensiones); } } } docBuilder.Writeln(); docBuilder.MoveToDocumentEnd(); if ((columna + 1) < rol.ColumnasDelReporte.Count) { docBuilder.InsertBreak(BreakType.PageBreak); } columna++; } } } catch (Exception e) { LogUtil.Error(e); } return(guardarDocumentoComoWord(word)); }
/// <summary> /// Llama al metodo que genera el reporte en excel /// </summary> /// <param name="estruturaDeReporte">Estructura que contiene la informacion necesaria para la creacion del reporte</param> /// <param name="rutaDestino">Ruta destino donde se crear el archivo xlsx</param> public MemoryStream ExcelStream(EstructuraReporteGenerico estruturaDeReporte) { return(ReporteGenericoExcel(estruturaDeReporte, estruturaDeReporte.Idioma, estruturaDeReporte.AgruparPorUnidad)); }
/// <summary> /// Metodo que realiza la agrupacion de periodos de tipo instante en los de duración en el caso que se cumplan /// los filtros necesarios para integrar el valor /// </summary> /// <param name="estructuraReporteGenerico">Valores de columnas y hechos a valorar</param> /// <param name="filtros">Filtros de consulta que se realizo para la consulta generica</param> /// <returns>Estructura generica para presentar en el reporte</returns> public EstructuraReporteGenerico AgruparHechosPorPeriodo(EntFiltroConsultaHecho filtros, EstructuraReporteGenerico estructuraReporteGenerico) { //Obtenemos los periodos de tipoInstante if (estructuraReporteGenerico != null && estructuraReporteGenerico.ReporteGenericoPorRol != null) { foreach (var reporteGenericoRol in estructuraReporteGenerico.ReporteGenericoPorRol) { for (var indiceColumna = 0; indiceColumna < reporteGenericoRol.ColumnasDelReporte.Count; indiceColumna++) { var columnaReporte = reporteGenericoRol.ColumnasDelReporte[indiceColumna]; if (columnaReporte.TipoDePeriodo == Period.Instante) { foreach (var periodosFiltro in filtros.filtros.periodos) { if (periodosFiltro.FechaFin.Value.Date.Equals(columnaReporte.FechaInstante.Date)) { columnaReporte.FechaInicio = periodosFiltro.FechaInicio.Value; columnaReporte.FechaFin = periodosFiltro.FechaFin.Value; break; } } for (var indiceColumnaDuracion = 0; indiceColumnaDuracion < reporteGenericoRol.ColumnasDelReporte.Count; indiceColumnaDuracion++) { var columnaReporteDuracion = reporteGenericoRol.ColumnasDelReporte[indiceColumnaDuracion]; if (columnaReporteDuracion.TipoDePeriodo == Period.Duracion && validarIgualdad(columnaReporteDuracion, columnaReporte)) { foreach (var concepto in reporteGenericoRol.Conceptos) { if (concepto.Hechos[indiceColumnaDuracion] == null && concepto.Hechos[indiceColumna] != null) { concepto.Hechos[indiceColumnaDuracion] = concepto.Hechos[indiceColumna]; } } reporteGenericoRol.ColumnasDelReporte[indiceColumna].OcultarColumna = true; break; } } } } } } return(estructuraReporteGenerico); }
public EstructuraReporteGenerico CrearEstructuraGenerica(EntFiltroConsultaHecho filtros, ResultadoOperacionDto listaDeHechos, bool agruparPorUnidad, string nombreRol = "", string rolUri = "") { if (filtros.conceptos != null && filtros.conceptos.Count() > 0 && listaDeHechos.InformacionExtra != null && ((EntHecho[])listaDeHechos.InformacionExtra).Count() > 0) { EstructuraReporteGenerico estructuraReporteGenerico = new EstructuraReporteGenerico(); EstructuraRolReporte estructuraRolReporte = new EstructuraRolReporte(); estructuraRolReporte.ColumnasDelReporte = new List <EstructuraColumnaReporte>(); estructuraRolReporte.Conceptos = new List <EstructuraConceptoReporte>(); estructuraRolReporte.Rol = nombreRol; estructuraRolReporte.RolUri = rolUri; estructuraRolReporte.ColumnasDelReporte = new List <EstructuraColumnaReporte>(); if (filtros.conceptos != null) { foreach (var detalleConcepto in filtros.conceptos.OrderBy(x => x.orden)) { foreach (var hecho in ((EntHecho[])listaDeHechos.InformacionExtra).Where(x => x.concepto.Id.Equals(detalleConcepto.Id))) { //Verificar si este hecho cabe en alguna de las columnas var columnaYaExiste = false; foreach (var columna in estructuraRolReporte.ColumnasDelReporte) { if (HechoPerteneceAColumna(hecho, columna, agruparPorUnidad)) { columnaYaExiste = true; break; } } if (!columnaYaExiste) { estructuraRolReporte.ColumnasDelReporte.Add(CrearColumnaEncabezado(hecho, agruparPorUnidad)); } } } } // Ordenar las columnas if (estructuraRolReporte.ColumnasDelReporte.Count > 1) { estructuraRolReporte.ColumnasDelReporte = OrdenarFechaDeColumnas(estructuraRolReporte.ColumnasDelReporte); } Debug.WriteLine(estructuraRolReporte.Rol); foreach (var col in estructuraRolReporte.ColumnasDelReporte) { Debug.WriteLine(col.Entidad + "," + DateUtil.ToStandarString(col.FechaInicio) + " - " + DateUtil.ToStandarString(col.FechaFin) + " - " + DateUtil.ToStandarString(col.FechaInstante) + "," + col.Moneda ); } List <EstructuraConceptoReporte> listaDeConceptos = new List <EstructuraConceptoReporte>(); CrearEstructuraConceptosConHechos(listaDeConceptos, listaDeHechos, filtros.conceptos, estructuraRolReporte.ColumnasDelReporte, filtros.idioma, agruparPorUnidad); estructuraRolReporte.Conceptos = listaDeConceptos; estructuraReporteGenerico.ReporteGenericoPorRol = new List <EstructuraRolReporte>(); estructuraReporteGenerico.ReporteGenericoPorRol.Add(estructuraRolReporte); estructuraReporteGenerico.Idioma = filtros.idioma; estructuraReporteGenerico.AgruparPorUnidad = agruparPorUnidad; return(estructuraReporteGenerico); } return((EstructuraReporteGenerico)null); }
public IHttpActionResult ConsultarRepositorio() { var resultado = new ResultadoOperacionDto() { Resultado = true, Mensaje = "Ok" }; try { var filtrosConsulta = getFormKeyValue("consulta"); var paginaRequerida = getFormKeyValue("pagina"); var numeroRegistros = getFormKeyValue("numeroRegistros"); var settings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; var filtrosConsultaHecho = JsonConvert.DeserializeObject <EntFiltroConsultaHecho>(filtrosConsulta, settings); /** * var filtrosConsultaHecho = new EntFiltroConsultaHecho(); * filtrosConsultaHecho.conceptos = new EntConcepto[1]; * filtrosConsultaHecho.conceptos[0] = new EntConcepto(); * filtrosConsultaHecho.conceptos[0].Id = "ifrs-full_ChangesInEquity"; * filtrosConsultaHecho.conceptos[0].EspacioNombresTaxonomia = "http://www.bmv.com.mx/taxonomy/ifrs_mx/full_ifrs_mc_mx_ics_entry_point_2014-12-05"; * filtrosConsultaHecho.conceptos[0].dimension=new EntInformacionDimensional[1]; * filtrosConsultaHecho.conceptos[0].dimension[0] = new EntInformacionDimensional(); * filtrosConsultaHecho.conceptos[0].dimension[0].Explicita = true; * filtrosConsultaHecho.conceptos[0].dimension[0].QNameDimension = "http://xbrl.ifrs.org/taxonomy/2014-03-05/ifrs-full:ComponentsOfEquityAxis"; * filtrosConsultaHecho.conceptos[0].dimension[0].IdDimension = "ifrs-full_ComponentsOfEquityAxis"; * filtrosConsultaHecho.conceptos[0].dimension[0].QNameItemMiembro = "http://xbrl.ifrs.org/taxonomy/2014-03-05/ifrs-full:IssuedCapitalMember"; * filtrosConsultaHecho.conceptos[0].dimension[0].IdItemMiembro = "ifrs-full_IssuedCapitalMember"; * * filtrosConsultaHecho.filtros = new EntFiltrosAdicionales(); * filtrosConsultaHecho.filtros.entidades=new EntEntidad[1]; * filtrosConsultaHecho.filtros.entidades[0] = new EntEntidad(); * filtrosConsultaHecho.filtros.entidades[0].Id="ICA"; * filtrosConsultaHecho.filtros.periodos=new EntPeriodo[1]; * filtrosConsultaHecho.filtros.periodos[0] = new EntPeriodo(); * filtrosConsultaHecho.filtros.periodos[0].EsTipoInstante=false; * filtrosConsultaHecho.filtros.periodos[0].Tipo=2; * filtrosConsultaHecho.filtros.periodos[0].FechaInicio=new DateTime(2015,1,1); * filtrosConsultaHecho.filtros.periodos[0].FechaFin=new DateTime(2015,6,30); * * * filtrosConsultaHecho.filtros.unidades=new string[1]; * filtrosConsultaHecho.filtros.unidades[0] = "MXN"; * * paginaRequerida = "1"; * numeroRegistros = "10"; */ resultado = AbaxXBRLCellStoreService.ConsultarRepositorio(filtrosConsultaHecho, int.Parse(paginaRequerida), int.Parse(numeroRegistros)); ReporteGenericoMongoDB reporteGenericoMongoDB = new ReporteGenericoMongoDB(); EstructuraReporteGenerico estructuraReporteGenerico = reporteGenericoMongoDB.CrearEstructuraGenerica(filtrosConsultaHecho, resultado, true); estructuraReporteGenerico = reporteGenericoMongoDB.AgruparHechosPorPeriodo(filtrosConsultaHecho, estructuraReporteGenerico); resultado.InformacionExtra = estructuraReporteGenerico; } catch (Exception e) { resultado.Resultado = false; resultado.Mensaje = e.Message; LogUtil.Error(e); } return(Ok(resultado)); }