/// <summary> /// Procesa un informe en el sentido de crear, o recrear el documento asociado. /// </summary> /// <param name="ip">Informe programado</param> /// <param name="desdeFecha">Desde fecha</param> /// <param name="hastaFecha">Hasta fecha</param> /// <param name="periodicidad">Periodicidad</param> /// <param name="instalacion">Instalacion</param> /// <param name="informe">Informe</param> /// <param name="repositorio">repositorio</param> /// <param name="ctx">Conector a la base de datos</param> public static void ProcesarUnInforme(InformeProgramado ip, DateTime desdeFecha, DateTime hastaFecha, string periodicidad, Instalacion instalacion, string informe, string repositorio, LainsaSci ctx) { Documento documento = new Documento(); if (ip != null) { documento = ip.Documento; } else { ip = new InformeProgramado(); ip.Empresa = instalacion.Empresa; ip.Instalacion = instalacion; ip.Instalacion = null; ip.FechaInicial = desdeFecha; ip.FechaFinal = hastaFecha; ip.ProgramacionInforme = GetProgramacionInforme(informe, periodicidad, ctx); ctx.Add(ip); documento.Empresa = instalacion.Empresa; documento.Instalacion = instalacion; documento.Fecha = DateTime.Now; documento.Comentarios = "Informe generado automáticamente"; documento.Extension = "PDF"; ctx.Add(documento); ip.Documento = documento; ctx.SaveChanges(); } // en cualquier caso hay que generar el documento y a ello vamos. string directorio = repositorio; string nombreFichero = String.Format("{0:000000000}", documento.DocumentoId) + ".PDF"; string fichero = String.Format("{0}\\{1}", directorio, nombreFichero); ReportProcessor reportProcessor = new ReportProcessor(); RenderingResult renderingResult = null; switch (informe) { case "RptResumenEmpresaInstalacion": RptResumenEmpresaInstalacion rptR = new RptResumenEmpresaInstalacion(desdeFecha, hastaFecha, instalacion.Empresa.EmpresaId, instalacion.InstalacionId, ctx); documento.Nombre = String.Format("Resumen Revisiones {0:dd/MM/yyyy} {1:dd/MM/yyyy} (Programado)", desdeFecha, hastaFecha); renderingResult = reportProcessor.RenderReport("PDF", rptR, null); break; case "RptFacturableEmpresaInstalacion": RptFacturableEmpresaInstalacion rptF = new RptFacturableEmpresaInstalacion(desdeFecha, hastaFecha, instalacion.Empresa.EmpresaId, instalacion.InstalacionId, ctx); documento.Nombre = String.Format("Revisiones facturables {0:dd/MM/yyyy} {1:dd/MM/yyyy} (Programado)", desdeFecha, hastaFecha); renderingResult = reportProcessor.RenderReport("PDF", rptF, null); break; } FileStream fs = new FileStream(fichero, FileMode.Create); fs.Write(renderingResult.DocumentBytes, 0, renderingResult.DocumentBytes.Length); fs.Close(); }
/// <summary> /// Elabora todas las programaciones de informe para la empresa indicada /// </summary> /// <param name="fechaActual">Fecha de referencia en torno a la cual se definen los periodicos</param> /// <param name="informe"> el informe del que se obtienen las programaciones</param> /// <param name="empresa"></param> /// <param name="repositorio"></param> /// <param name="ctx"></param> public static void ElaborarInformesProgramados(DateTime fechaActual, string informe, Instalacion instalacion, string repositorio, LainsaSci ctx) { // primero hay que comprobar que programaciones tiene este informe IList <ProgramacionInforme> lpi = GetProgramacionInformes(informe, ctx); // Revisamos por cada programación foreach (ProgramacionInforme pi in lpi) { DateTime desdeFecha = DateTime.Now; DateTime hastaFecha = DateTime.Now; // valoramos de que periodicidad se trata // TODO: Hay que incluir las periodicidades (Trimestral y Semestral) switch (pi.Periodicidad) { case "S": // semanal desdeFecha = GetPrimerDiaSemana(fechaActual); hastaFecha = GetUltimoDiaSemana(fechaActual); break; case "M": // mensual desdeFecha = GetPrimerDiaMes(fechaActual); hastaFecha = GetUltimoDiaMes(fechaActual); break; case "T": // trimestral desdeFecha = GetPrimerDiaTrimestre(fechaActual); hastaFecha = GetUltimoDiaTrimestre(fechaActual); break; case "SM": // semestral desdeFecha = GetPrimerDiaSemestre(fechaActual); hastaFecha = GetUltimoDiaSemestre(fechaActual); break; case "A": // anual desdeFecha = GetPrimerDiaAno(fechaActual); hastaFecha = GetUltimoDiaAno(fechaActual); break; } // buscamos si ya existe un informe con esas características. InformeProgramado ip = GetInformeProgramado(desdeFecha, hastaFecha, pi.Periodicidad, instalacion, pi.Informe, ctx); ProcesarUnInforme(ip, desdeFecha, hastaFecha, pi.Periodicidad, instalacion, pi.Informe, repositorio, ctx); } }