Exemple #1
0
        private void MostrarErrorFiscal(Lazaro.Impresion.Comprobantes.Fiscal.Respuesta Res)
        {
            FormError FormFiscalError = new FormError();

            FormFiscalError.Mostrar(Res);
            FormFiscalError.ShowDialog();
        }
Exemple #2
0
        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;
        }
Exemple #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();
        }
Exemple #4
0
                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;
                }