示例#1
0
        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();
        }
示例#2
0
        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);
        }
示例#3
0
        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();
        }