private void MostrarErrorFiscal(Lazaro.Impresion.Comprobantes.Fiscal.Respuesta Res) { FormError FormFiscalError = new FormError(); FormFiscalError.Mostrar(Res); FormFiscalError.ShowDialog(); }
internal void Mostrar(Lazaro.Impresion.Comprobantes.Fiscal.Respuesta Res) { switch (Res.Error) { case Lazaro.Impresion.Comprobantes.Fiscal.ErroresFiscales.Ok: EtiquetaError.Text = "OK???"; break; case Lazaro.Impresion.Comprobantes.Fiscal.ErroresFiscales.ErrorBCC: EtiquetaError.Text = "BCC"; break; case Lazaro.Impresion.Comprobantes.Fiscal.ErroresFiscales.Error: EtiquetaError.Text = "Error genérico"; break; case Lazaro.Impresion.Comprobantes.Fiscal.ErroresFiscales.ErrorFiscal: EtiquetaError.Text = "Error fiscal"; break; case Lazaro.Impresion.Comprobantes.Fiscal.ErroresFiscales.ErrorImpresora: EtiquetaError.Text = "Error impresora"; break; case Lazaro.Impresion.Comprobantes.Fiscal.ErroresFiscales.NAK: EtiquetaError.Text = "NAK"; break; case Lazaro.Impresion.Comprobantes.Fiscal.ErroresFiscales.TimeOut: EtiquetaError.Text = "Timeout"; break; } EtiquetaLugar.Text = Res.Lugar; EtiquetaMensaje.Text = Res.Mensaje; EtiquetaComando.Text = Res.CodigoComando.ToString(); if (Res.Campos != null) { EtiquetaCampos.Text = string.Join(Environment.NewLine, Res.Campos.ToArray()); } EtiquetaEstadoImpresora.Text = Res.ExplicarEstadoImpresora(); EtiquetaEstadoFiscal.Text = Res.ExplicarEstadoFiscal(); CancelCommandButton.Visible = false; }
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(); }
protected Lazaro.Impresion.Comprobantes.Fiscal.Respuesta AnalizarRespuesta(string respuesta) { Lazaro.Impresion.Comprobantes.Fiscal.Respuesta Res = new Lazaro.Impresion.Comprobantes.Fiscal.Respuesta(); Res.ProtocoloBinario = respuesta; Res.ModeloImpresora = Modelo; if (respuesta == null) { //Nada } else if (respuesta == new string((char)0x15, 1)) { Res.Error = ErroresFiscales.NAK; } else if (respuesta == "TIMEOUT") { Res.Error = ErroresFiscales.TimeOut; } else if (respuesta.Length > 5) { Res.Error = ErroresFiscales.Ok; if (respuesta.Length > 1) Res.Secuencia = DefaultEncoding.GetBytes(System.Convert.ToString(respuesta[1]))[0]; if (respuesta.Length > 2) Res.CodigoComando = (Fiscal.CodigosComandosFiscales)DefaultEncoding.GetBytes(System.Convert.ToString(respuesta[2]))[0]; string Carga = ""; if (respuesta.Length > 5) Carga = respuesta.Substring(4, respuesta.Length - 9); Res.Campos = new List<string>(); while (Carga.Length > 0) { Res.Campos.Add(Lfx.Types.Strings.GetNextToken(ref Carga, new string((char)0x1C, 1))); } switch (Modelo) { case Lbl.Impresion.ModelosFiscales.EpsonTiquedora: case Lbl.Impresion.ModelosFiscales.EpsonGenerico: case Lbl.Impresion.ModelosFiscales.Emulacion: case Lbl.Impresion.ModelosFiscales.HasarTiquedora: case Lbl.Impresion.ModelosFiscales.HasarGenerico: if (Res.Campos.Count >= 1) Res.EstadoImpresora.CodigoEstado = int.Parse(System.Convert.ToString(Res.Campos[0]), System.Globalization.NumberStyles.AllowHexSpecifier); else Res.EstadoImpresora.CodigoEstado = 0; if (Res.Campos.Count >= 2) Res.EstadoFiscal.CodigoEstado = int.Parse(System.Convert.ToString(Res.Campos[1]), System.Globalization.NumberStyles.AllowHexSpecifier); else Res.EstadoFiscal.CodigoEstado = 0; //FormEstado.lblEstadoFiscal.Text = "I: " + Res.EstadoImpresora.CodigoEstado.ToString("X4") + " / F: " + Res.EstadoFiscal.CodigoEstado.ToString("X4"); if (Modelo == Lbl.Impresion.ModelosFiscales.HasarGenerico || Modelo == Lbl.Impresion.ModelosFiscales.HasarTiquedora) { //Hasar enciende el bit 15 (error) en caso de que no haya cajón //de dinero. Es un error que vamos a ignorar if (Res.EstadoImpresora.Bit(14)) { //Apago 14 y 15 Res.EstadoImpresora.CodigoEstado = Res.EstadoImpresora.CodigoEstado & 0x1FFF; //Enciendo 15 si hay otro error además del cajón if ((Res.EstadoImpresora.CodigoEstado & 0x13E) != 0) Res.EstadoImpresora.CodigoEstado = Res.EstadoImpresora.CodigoEstado | (long)Math.Pow(2, 15); } } switch (Modelo) { case Lbl.Impresion.ModelosFiscales.EpsonTiquedora: case Lbl.Impresion.ModelosFiscales.EpsonGenerico: case Lbl.Impresion.ModelosFiscales.Emulacion: case Lbl.Impresion.ModelosFiscales.HasarTiquedora: case Lbl.Impresion.ModelosFiscales.HasarGenerico: if ((Res.EstadoImpresora.CodigoEstado & 0X8000) != 0) Res.Error = ErroresFiscales.ErrorImpresora; else if ((Res.EstadoFiscal.CodigoEstado & 0X80FF) != 0) Res.Error = ErroresFiscales.ErrorFiscal; if (( this.Modelo == Lbl.Impresion.ModelosFiscales.EpsonGenerico || this.Modelo == Lbl.Impresion.ModelosFiscales.EpsonTiquedora ) && Res.EstadoFiscal.HacerCierreZ) { //Sólo para Epson, bit 11 indica que es necesario hacer un cierre Z Res.HacerCierreZ = true; } break; } break; } } else { Res.Error = ErroresFiscales.Error; Res.Mensaje = "Sin datos"; } return Res; }