private void TimerProgramador_Tick(object sender, EventArgs e) { TimerProgramador.Stop(); if (this.Visible) { //Ejecuto tareas del programador Lfx.Services.Task ProximaTarea = null; // En conexiones lentas, 1 vez por minuto // En conexiones rápidas, cada 5 segundos if (Lfx.Workspace.Master.SlowLink) { if (Lfx.Workspace.Master.DefaultScheduler.LastGetTask == System.DateTime.MinValue || (DateTime.Now - Lfx.Workspace.Master.DefaultScheduler.LastGetTask).Minutes >= 1) { ProximaTarea = Lfx.Workspace.Master.DefaultScheduler.GetNextTask("lazaro"); } } else { if (Lfx.Workspace.Master.DefaultScheduler.LastGetTask == System.DateTime.MinValue || (DateTime.Now - Lfx.Workspace.Master.DefaultScheduler.LastGetTask).Seconds >= 5) { ProximaTarea = Lfx.Workspace.Master.DefaultScheduler.GetNextTask("lazaro"); } } if (ProximaTarea != null) { // Lanzo la tarea en un nuevo thread System.Threading.ThreadStart ParamInicio = delegate { Ejecutor.Exec(ProximaTarea.Command, ProximaTarea.ComputerName); }; new System.Threading.Thread(ParamInicio).Start(); } if (YaSubiEstadisticas == false && Lfx.Workspace.Master.DebugMode == false) { YaSubiEstadisticas = true; System.Threading.ThreadStart ParamInicio = delegate { Aplicacion.EnviarEstadisticas(); }; System.Threading.Thread Thr = new System.Threading.Thread(ParamInicio); Thr.IsBackground = true; Thr.Start(); } if (YaPregunteReiniciar == false && Lfx.Updates.Updater.Master != null && Lfx.Updates.Updater.Master.UpdatesPending() && ActiveForm == this) { YaPregunteReiniciar = true; Lui.Forms.YesNoDialog Pregunta = new Lui.Forms.YesNoDialog("Existe una nueva versión de Lázaro. Debe reiniciar la aplicación para instalar la actualización.", "¿Desea reiniciar ahora?"); Pregunta.DialogButtons = Lui.Forms.DialogButtons.YesNo; DialogResult Respuesta = Pregunta.ShowDialog(); if (Respuesta == DialogResult.OK) { Ejecutor.Exec("REBOOT"); } } } TimerProgramador.Start(); }
public static object Exec(object param, string estacion) { object Res; if (param is Lfx.Services.Task) { Lfx.Services.Task Tsk = param as Lfx.Services.Task; Res = ExecInternal(Tsk.Command, Tsk.CreatorComputerName); } else { Res = ExecInternal(param.ToString(), null); } if (Res != null && Aplicacion.FormularioPrincipal != null && Aplicacion.FormularioPrincipal.Visible) { Aplicacion.FormularioPrincipal.ProcesarObjeto(Res); } return(Res); }
private void EventoProgramador(object source, System.Timers.ElapsedEventArgs e) { Programador.Stop(); Watchdog_LastOp = System.DateTime.Now; //Busco un PV que corresponda a esta terminal if (this.PV == 0) { Programador.Start(); return; } Watchdog.Stop(); try { using (IDbTransaction Trans = this.Impresora.DataBase.BeginTransaction()) { qGen.Update Actualizar = new qGen.Update("pvs", new qGen.Where("id_pv", this.PVenta)); Actualizar.Fields.AddWithValue("lsa", qGen.SqlFunctions.Now); this.Impresora.DataBase.Execute(Actualizar); Trans.Commit(); } } catch { // Nada } Lfx.Services.Task ProximaTarea = Lfx.Workspace.Master.DefaultScheduler.GetNextTask("fiscal" + this.PV.ToString()); if (ProximaTarea != null) { string Comando = ProximaTarea.Command; string SubComando = Lfx.Types.Strings.GetNextToken(ref Comando, " ").Trim().ToUpper(); Lazaro.Impresion.Comprobantes.Fiscal.Respuesta Res; switch (SubComando) { case "REBOOT": FormEstado.MostrarEstado("Reiniciando..."); Impresora.EstadoServidor = Lazaro.Impresion.Comprobantes.Fiscal.EstadoServidorFiscal.Reiniciando; //this.End(true); break; case "END": FormEstado.MostrarEstado("Cerrando..."); Impresora.EstadoServidor = Lazaro.Impresion.Comprobantes.Fiscal.EstadoServidorFiscal.Apagando; //this.End(false); break; case "CIERRE": FormEstado.MostrarEstado("Imprimiendo cierre..."); Res = Impresora.ObtenerEstadoImpresora(); if (Res.EstadoFiscal.DocumentoFiscalAbierto) { Res = Impresora.CancelarDocumentoFiscal(); System.Threading.Thread.Sleep(500); } else if (Res.Error == Lazaro.Impresion.Comprobantes.Fiscal.ErroresFiscales.Ok) { string SubComandoCierre = Lfx.Types.Strings.GetNextToken(ref Comando, " ").Trim().ToUpper(); Lazaro.Impresion.Comprobantes.Fiscal.Respuesta ResultadoCierre = Impresora.Cierre(SubComandoCierre, true); if (SubComandoCierre == "Z" && ResultadoCierre.Error == Lazaro.Impresion.Comprobantes.Fiscal.ErroresFiscales.Ok) { //Si hizo un cierre Z correctamente, actualizo la variable LCZ using (IDbTransaction Trans = this.Impresora.DataBase.BeginTransaction()) { qGen.Update Actualizar = new qGen.Update("pvs", new qGen.Where("id_pv", this.PVenta)); Actualizar.Fields.AddWithValue("ultimoz", qGen.SqlFunctions.Now); this.Impresora.DataBase.Execute(Actualizar); Trans.Commit(); } } if (ResultadoCierre.Error != Lazaro.Impresion.Comprobantes.Fiscal.ErroresFiscales.Ok) { MostrarErrorFiscal(ResultadoCierre); } System.Threading.Thread.Sleep(100); } break; case "CANCELAR": FormEstado.MostrarEstado("Cancelando comprobante..."); string ItemCancelar = Lfx.Types.Strings.GetNextToken(ref Comando, " ").Trim().ToUpper(); switch (ItemCancelar) { case "FISCAL": Impresora.CancelarDocumentoFiscal(); System.Threading.Thread.Sleep(500); break; } break; case "IMPRIMIR": FormEstado.MostrarEstado("Imprimiendo..."); int IdFactura = Lfx.Types.Parsing.ParseInt(Lfx.Types.Strings.GetNextToken(ref Comando, " ").Trim()); Res = Impresora.ObtenerEstadoImpresora(); if (Res.EstadoFiscal.DocumentoFiscalAbierto) { Res = Impresora.CancelarDocumentoFiscal(); System.Threading.Thread.Sleep(500); } if (Res.HacerCierreZ) { Lui.Forms.YesNoDialog Pregunta = new Lui.Forms.YesNoDialog("Hacer Cierre Z", "Es obligatorio hacer un Cierre Z antes de continuar. ¿Desea hacer el cierre ahora?"); Pregunta.DialogButtons = Lui.Forms.DialogButtons.YesNo; if (Pregunta.ShowDialog() == System.Windows.Forms.DialogResult.OK) { // Hago el cierre, y Res es el resultado del cierre Res = Impresora.Cierre("Z", true); System.Threading.Thread.Sleep(500); } else { // No quiso hacer el cierre. Devuelvo un error Programador.Start(); Watchdog.Start(); return; } } if (Res.Error == Lazaro.Impresion.Comprobantes.Fiscal.ErroresFiscales.Ok) { Res = Impresora.ImprimirComprobante(IdFactura); } if (Res.Error != Lazaro.Impresion.Comprobantes.Fiscal.ErroresFiscales.Ok) { MostrarErrorFiscal(Res); FormEstado.MostrarEstado("Cancelando documento..."); if (Res.EstadoFiscal.DocumentoFiscalAbierto) { Res = Impresora.CancelarDocumentoFiscal(); } Programador.Start(); Watchdog.Start(); return; } break; } } Programador.Start(); Watchdog.Start(); }