public Lazaro.Impresion.Comprobantes.Fiscal.Respuesta ImprimirComprobante(int idComprob) { try { using (System.Diagnostics.Process Yo = System.Diagnostics.Process.GetCurrentProcess()) { Yo.PriorityClass = System.Diagnostics.ProcessPriorityClass.AboveNormal; } } catch { // No siempre puedo elevar mi propia prioridad (creo que sólo en Windows XP o en Vista/7 sin UAC) } // *** Inicializar la impresora fiscal Lazaro.Impresion.Comprobantes.Fiscal.Respuesta Res = this.Inicializar(); if (Res.Error != ErroresFiscales.Ok) return Res; NotificacionEventHandler NotifHandler = Notificacion; if (NotifHandler != null) NotifHandler(this, new ImpresoraEventArgs(ImpresoraEventArgs.EventTypes.InicioImpresion)); // *** Obtener datos previos Lbl.Comprobantes.ComprobanteConArticulos Comprob = new Lbl.Comprobantes.ComprobanteConArticulos(DataBase, idComprob); if (Comprob.Impreso) return new Respuesta(ErroresFiscales.Ok); string TipoDocumento = null; string Letra = null; switch (Modelo) { case Lbl.Impresion.ModelosFiscales.EpsonTiquedora: if (Comprob.Tipo.EsNotaDebito) { TipoDocumento = "D"; } else if (Comprob.Tipo.EsNotaCredito) { TipoDocumento = "M"; } else { TipoDocumento = "T"; } break; default: if (Comprob.Tipo.EsNotaDebito) { TipoDocumento = "D"; } else if (Comprob.Tipo.EsNotaCredito) { TipoDocumento = "C"; } else if (Comprob.Tipo.EsTicket) { TipoDocumento = "T"; } else { TipoDocumento = "F"; } break; } switch (Comprob.Tipo.Nomenclatura) { case "FM": case "NDM": case "NCM": Letra = "M"; break; case "FA": case "NDA": Letra = "A"; break; case "NCA": if (Modelo == Lbl.Impresion.ModelosFiscales.HasarTiquedora) Letra = "R"; else Letra = "A"; break; case "FB": case "NDB": Letra = "B"; break; case "NCB": if (Modelo == Lbl.Impresion.ModelosFiscales.HasarTiquedora) Letra = "S"; else Letra = "B"; break; case "FC": case "NDC": Letra = "C"; break; case "NCC": if (Modelo == Lbl.Impresion.ModelosFiscales.HasarTiquedora) Letra = "S"; else Letra = "C"; break; case "FE": case "NDE": case "NCE": Letra = "E"; break; } string ClienteTipoDoc = "DNI"; string ClienteNumDoc = Comprob.Cliente.NumeroDocumento.Replace("-", "").Replace(".", ""); if (Comprob.Cliente.TipoDocumento != null) { switch (Comprob.Cliente.TipoDocumento.Id) { case 1: ClienteTipoDoc = "DNI"; break; case 2: ClienteTipoDoc = "LE"; break; case 3: ClienteTipoDoc = "LC"; break; case 4: ClienteTipoDoc = "CI"; break; case 5: if (ClienteNumDoc.Length > 0) ClienteTipoDoc = "CUIL"; break; case 6: if (ClienteNumDoc.Length > 0) ClienteTipoDoc = "CUIT"; break; default: ClienteTipoDoc = "DNI"; break; } } if (Comprob.Cliente.SituacionTributaria != null) { switch (Comprob.Cliente.SituacionTributaria.Id) { case 1: ClienteNumDoc = Comprob.Cliente.NumeroDocumento.Replace("-", "").Replace(" ", "").Replace(".", ""); ClienteTipoDoc = "DNI"; break; case 2: ClienteTipoDoc = "CUIT"; ClienteNumDoc = Comprob.Cliente.ClaveTributaria.ToString().Replace("-", ""); break; case 3: ClienteTipoDoc = "CUIT"; ClienteNumDoc = Comprob.Cliente.ClaveTributaria.ToString().Replace("-", ""); break; case 4: ClienteTipoDoc = "CUIT"; ClienteNumDoc = Comprob.Cliente.ClaveTributaria.ToString().Replace("-", ""); break; case 5: ClienteTipoDoc = "CUIT"; ClienteNumDoc = Comprob.Cliente.ClaveTributaria.ToString().Replace("-", ""); break; } } Comando ComandoAEnviar; string TextoRemitoLinea1 = ""; string TextoRemitoLinea2 = ""; if (Comprob.IdRemito == 0) { if (Comprob.Obs == null) { TextoRemitoLinea1 = ""; } else if (Comprob.Obs.Length > 40) { TextoRemitoLinea1 = Comprob.Obs.Substring(0, 40); int RestoObs = Comprob.Obs.Length - 40; if (RestoObs > 40) RestoObs = 40; TextoRemitoLinea2 = Comprob.Obs.Substring(40, RestoObs); } else { TextoRemitoLinea1 = Comprob.Obs; } } else { TextoRemitoLinea1 = "Remito(s) " + Comprob.IdRemito.ToString(); } string Domicilio = Comprob.Cliente.Domicilio; string ClienteLocalidad = ""; if (Comprob.Cliente.Localidad != null) ClienteLocalidad = Comprob.Cliente.Localidad.ToString(); //si hay un documento abierto (fiscal, no fiscal o no fiscal homologado) lo cancelo Res = ObtenerEstadoImpresora(); if (Res.EstadoFiscal.DocumentoAbierto) { Res = CancelarDocumentoFiscal(); System.Threading.Thread.Sleep(500); } // *** Abrir Documento if (NotifHandler != null) NotifHandler(this, new ImpresoraEventArgs("Abrir documento fiscal")); switch (Modelo) { case Lbl.Impresion.ModelosFiscales.EpsonTiquedora: case Lbl.Impresion.ModelosFiscales.EpsonGenerico: case Lbl.Impresion.ModelosFiscales.Emulacion: string ClienteLinea1 = ""; string ClienteLinea2 = ""; if (Comprob.Cliente.ToString().Length > 40) { ClienteLinea1 = Comprob.Cliente.ToString().Substring(0, 40); ClienteLinea2 = Comprob.Cliente.ToString().Substring(40, Comprob.Cliente.ToString().Length - 40); } else { ClienteLinea1 = Comprob.Cliente.ToString(); ClienteLinea2 = ""; } if (Domicilio.Length > 40) Domicilio = Domicilio.Substring(0, 40); if (ClienteLocalidad.Length > 40) ClienteLocalidad = ClienteLocalidad.Substring(0, 40); string ClienteSituacionEpson = ""; switch (Comprob.Cliente.SituacionTributaria.Id) { case 1: ClienteSituacionEpson = "F"; break; case 2: ClienteSituacionEpson = "I"; break; case 3: ClienteSituacionEpson = "R"; break; case 4: ClienteSituacionEpson = "M"; break; case 5: ClienteSituacionEpson = "E"; break; default: ClienteSituacionEpson = "S"; break; } if (Modelo == Lbl.Impresion.ModelosFiscales.EpsonTiquedora) { // La impresora epson TMU220 no acepta vacios por eso cambio por un punto. string Vacio="."; if (TextoRemitoLinea1=="") TextoRemitoLinea1 = "."; if (TextoRemitoLinea2 == "") TextoRemitoLinea2 = "."; ComandoAEnviar = new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalAbrir, TipoDocumento, "C", Letra, "1", "P", "10", "I", FiscalizarTexto(ClienteSituacionEpson), FiscalizarTexto(ClienteLinea1), FiscalizarTexto(ClienteLinea2), FiscalizarTexto(ClienteTipoDoc), FiscalizarTexto(ClienteNumDoc), "N", FiscalizarTexto(Domicilio), FiscalizarTexto(ClienteLocalidad), Vacio, FiscalizarTexto(TextoRemitoLinea1), FiscalizarTexto(TextoRemitoLinea2), "C"); } else { ComandoAEnviar = new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalAbrir, TipoDocumento, "C", Letra, "1", "F", "12", "I", FiscalizarTexto(ClienteSituacionEpson), FiscalizarTexto(ClienteLinea1), FiscalizarTexto(ClienteLinea2), FiscalizarTexto(ClienteTipoDoc), FiscalizarTexto(ClienteNumDoc), "N", FiscalizarTexto(Domicilio), FiscalizarTexto(ClienteLocalidad), "", FiscalizarTexto(TextoRemitoLinea1), FiscalizarTexto(TextoRemitoLinea2), "C"); } Res = Enviar(ComandoAEnviar); break; case Lbl.Impresion.ModelosFiscales.HasarTiquedora: case Lbl.Impresion.ModelosFiscales.HasarGenerico: if (Comprob.Cliente.Id != 999) { //Sólo envío comando SetCustomerData (HasarDocumentoSetDatosCliente) //si el cliente NO es consumidor final string ClienteSituacionHasar = ""; switch (Comprob.Cliente.SituacionTributaria.Id) { case 1: ClienteSituacionHasar = "C"; break; case 2: ClienteSituacionHasar = "I"; break; case 3: // No existente en los modelos SMH/P- 715F, SMH/P-PR5F, SMH/P-441F y SMH/P-451F ClienteSituacionHasar = "N"; break; case 4: // No existente en el modelo SMH/P-PR4F ClienteSituacionHasar = "M"; break; case 5: ClienteSituacionHasar = "E"; break; case 6: ClienteSituacionHasar = "A"; break; case 7: ClienteSituacionHasar = "T"; break; } string TipoDocumentoClienteHasar = " "; switch (ClienteTipoDoc) { case "CUIT": TipoDocumentoClienteHasar = "C"; break; case "CUIL": TipoDocumentoClienteHasar = "L"; break; case "LE": TipoDocumentoClienteHasar = "0"; break; case "LC": TipoDocumentoClienteHasar = "1"; break; case "DNI": TipoDocumentoClienteHasar = "2"; break; case "PP": TipoDocumentoClienteHasar = "3"; break; case "CI": TipoDocumentoClienteHasar = "4"; break; default: TipoDocumentoClienteHasar = " ";// Sin clasificador break; } string NombreClienteHasar = Comprob.Cliente.ToString(); // Comando SetCustomerData (Manual Comandos Hasar) ComandoAEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoSetDatosCliente, FiscalizarTexto(NombreClienteHasar, 30), ClienteNumDoc, ClienteSituacionHasar, TipoDocumentoClienteHasar, FiscalizarTexto(Domicilio, 40)); Res = Enviar(ComandoAEnviar); } //Abrir documento string TipoDocumentoHasar = "B"; if (TipoDocumento == "D" && Letra == "A") TipoDocumentoHasar = "D"; //ND A else if (TipoDocumento == "D") TipoDocumentoHasar = "E"; //ND B Y C else if (TipoDocumento == "F" && Letra == "A") TipoDocumentoHasar = "A"; //Fac A else if (TipoDocumento == "F") TipoDocumentoHasar = "B"; //Fac B y C else if (TipoDocumento == "T") TipoDocumentoHasar = "T"; //Ticket if (Modelo == Lbl.Impresion.ModelosFiscales.HasarTiquedora) { string NombreFantasiaHasar = Lbl.Sys.Config.Empresa.Nombre.ToUpper(); int EspaciosParaCentrado = NombreFantasiaHasar.Length; int EspaciosAIncertar; Comando EstablecerTituloTiquet; if (NombreFantasiaHasar.Length <= 20) { if (NombreFantasiaHasar.Length >= 19) { // El caracter especial ô indica que la imprecion debe ser con doble ancho, en dicho caso La cantidad maxima de caracteres se reduce de 40 a 20 EstablecerTituloTiquet = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalNombreFantasia, "2", 'ô' + NombreFantasiaHasar); Res = Enviar(EstablecerTituloTiquet); } if (NombreFantasiaHasar.Length < 19) { EspaciosParaCentrado = (20 - NombreFantasiaHasar.Length) / 2; EspaciosAIncertar = NombreFantasiaHasar.Length + EspaciosParaCentrado; NombreFantasiaHasar = NombreFantasiaHasar.PadLeft(EspaciosAIncertar, ' '); // El caracter especial ô indica que la imprecion debe ser con doble ancho, en dicho caso La cantidad maxima de caracteres se reduce de 40 a 20 EstablecerTituloTiquet = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalNombreFantasia, "2", 'ô' + NombreFantasiaHasar); Res = Enviar(EstablecerTituloTiquet); } } else { EstablecerTituloTiquet = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalNombreFantasia, "2", NombreFantasiaHasar); Res = Enviar(EstablecerTituloTiquet); } //N° de línea de encabezamiento (1-10) o cola (11-20) //0: borra encabezamiento y cola, -1: borra encabezamiento, -2: borra cola. Comando EstablecerEncabezadoCola = new Comando(CodigosComandosFiscales.HasarDocumentoEstablecerEncabezadoCola, "12", " Muchas gracias por su compra"); Res = Enviar(EstablecerEncabezadoCola); } if (Letra == "S" || Letra == "R") { // Para notas de Crédito primero tengo que acentar los datos del comprobante original y luego abrir el documento string ComprobanteOriginal = Comprob.ComprobanteOriginal.Nombre; string[] partes = ComprobanteOriginal.Split(new char[] { '-' }); ComprobanteOriginal = partes[1]; // El segundo parámetro corresponde al numero de línea donde se va a imprimir la información del comprobante original // 0: Borra ambas líneas Comando ComandoEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalCargarComprobanteOriginal, "1", ComprobanteOriginal); Res = Enviar(ComandoEnviar); ComandoEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoNoFiscalHomologadoAbrir, Letra, "T" ); Res = Enviar(ComandoEnviar); } else { // El segundo parámetro corresponde al numero de línea donde se va a imprimir la información del comprobante original // 0: Borra ambas líneas // Borro cualquier línea que haya quedado de una nota de crédito anterior Comando ComandoEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalCargarComprobanteOriginal, "0", "1234"); Res = Enviar(ComandoEnviar); // Comando OpenFiscalReceipt (Manual de comandos Hasar) ComandoAEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalAbrir, TipoDocumentoHasar, "T"); Res = Enviar(ComandoAEnviar); } break; } if (Res.Error != ErroresFiscales.Ok) { Res.Lugar = "DocumentoFiscalAbrir"; return Res; } // *** Imprimir Detalles foreach (Lbl.Comprobantes.DetalleArticulo Detalle in Comprob.Articulos) { string StrCodigo = Lfx.Workspace.Master.CurrentConfig.Productos.CodigoPredeterminado(); if (Detalle.Articulo != null) { if (StrCodigo == "id_articulo") StrCodigo = Detalle.Articulo.Id.ToString(); else StrCodigo = DataBase.FieldString("SELECT " + StrCodigo + " FROM articulos WHERE id_articulo=" + Detalle.Articulo.Id.ToString()); } if (StrCodigo.Length > 0) StrCodigo = "(" + StrCodigo + ") "; decimal Cantidad = Detalle.Cantidad; decimal Unitario = Detalle.UnitarioAImprimir; //Si es cantidad negativa, pongo precio negativo y cantidad positiva if (Cantidad < 0) { Cantidad = -Cantidad; Unitario = -Unitario; } string ItemNombre = Detalle.Nombre; string ParametroSumaResta; switch (Modelo) { case Lbl.Impresion.ModelosFiscales.EpsonTiquedora: ParametroSumaResta = "M"; if (Unitario < 0) ParametroSumaResta = "R"; ComandoAEnviar = new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalItem, FiscalizarTexto(ItemNombre,18), FormatearNumeroEpson(Cantidad, 3).PadLeft(8, '0'), FormatearNumeroEpson(Math.Abs(Unitario), 2).PadLeft(9, '0'), "0000", ParametroSumaResta, "00001", "00000000", "", "", "", "0000", "000000000000000"); Res = Enviar(ComandoAEnviar); Res = Enviar(new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalSubtotal, "P", "")); break; case Lbl.Impresion.ModelosFiscales.EpsonGenerico: case Lbl.Impresion.ModelosFiscales.Emulacion: ParametroSumaResta = "M"; if (Unitario < 0) ParametroSumaResta = "R"; ComandoAEnviar = new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalItem, FiscalizarTexto(ItemNombre).PadRight(54).Substring(0, 54), FormatearNumeroEpson(Cantidad, 3).PadLeft(8, '0'), FormatearNumeroEpson(Math.Abs(Unitario), 2).PadLeft(9, '0'), "0000", ParametroSumaResta, "00001", "00000000", "", "", "", "0000", "000000000000000"); Res = Enviar(ComandoAEnviar); break; case Lbl.Impresion.ModelosFiscales.HasarTiquedora: case Lbl.Impresion.ModelosFiscales.HasarGenerico: if (Detalle.DatosSeguimiento != null && Detalle.DatosSeguimiento.Count > 0) { ComandoAEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalTexto, FiscalizarTexto(Detalle.DatosSeguimiento.ToString(), 50), "0" ); Res = Enviar(ComandoAEnviar); if (Res.Error != ErroresFiscales.Ok) { Res.Lugar = "DocumentoFiscalText"; return Res; } } if (Unitario < 0) { ComandoAEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalDescuentoGeneral, FiscalizarTexto(ItemNombre, 50), FormatearNumeroHasar(Math.Abs(Unitario), 2), "m", "0", "T"); } else { ComandoAEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalItem, FiscalizarTexto(ItemNombre, 50), FormatearNumeroHasar(Cantidad, 2), FormatearNumeroHasar(Unitario, 2), "0.0", /* IVA */ "M", "0.0", /* Impuestos Interno s */ "0", /* Campo Display */ "B" /* Precio total o base */ ); } Res = Enviar(ComandoAEnviar); break; } if (Res.Error != ErroresFiscales.Ok) { Res.Lugar = "DocumentoFiscalItem"; return Res; } } // Calculo el total real, tomando en cuenta el redondeo y los decimales if (Comprob.Descuento > 0) { decimal MontoDescuento = Comprob.SubTotal * (Comprob.Descuento / 100); switch (Modelo) { case Lbl.Impresion.ModelosFiscales.EpsonTiquedora: case Lbl.Impresion.ModelosFiscales.EpsonGenerico: case Lbl.Impresion.ModelosFiscales.Emulacion: ComandoAEnviar = new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalPagosYDescuentos, "Descuento " + Lfx.Types.Formatting.FormatCurrencyForPrint(Comprob.Descuento, 2) + "%", FormatearNumeroEpson(MontoDescuento, 2).PadLeft(12, '0'), "D"); Res = Enviar(ComandoAEnviar); break; case Lbl.Impresion.ModelosFiscales.HasarTiquedora: case Lbl.Impresion.ModelosFiscales.HasarGenerico: ComandoAEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalDescuentoGeneral, "Descuento " + Lfx.Types.Formatting.FormatCurrencyForPrint(Comprob.Descuento, 2) + "%", FormatearNumeroHasar(MontoDescuento, 2), "m", "0", "T"); Res = Enviar(ComandoAEnviar); break; } if (Res.Error != ErroresFiscales.Ok) { Res.Lugar = "DocumentoFiscalPagosYDescuentos:Descuento"; return Res; } } if (Math.Abs(Comprob.TotalSinRedondeo - Comprob.Total) >= 0.001m) { switch (Modelo) { case Lbl.Impresion.ModelosFiscales.EpsonTiquedora: case Lbl.Impresion.ModelosFiscales.EpsonGenerico: case Lbl.Impresion.ModelosFiscales.Emulacion: ComandoAEnviar = new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalPagosYDescuentos, "Ajustes por Redondeo", FormatearNumeroEpson((Comprob.Total - Comprob.TotalSinRedondeo), 2).PadLeft(12, '0'), "D"); Res = Enviar(ComandoAEnviar); break; case Lbl.Impresion.ModelosFiscales.HasarTiquedora: case Lbl.Impresion.ModelosFiscales.HasarGenerico: ComandoAEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalDescuentoGeneral, "Ajustes por Redondeo", FormatearNumeroHasar((Comprob.Total - Comprob.TotalSinRedondeo), 2), "m", "0", "T"); Res = Enviar(ComandoAEnviar); break; } if (Res.Error != ErroresFiscales.Ok) { // Error, pero continúo // Res.Lugar = "DocumentoFiscalPagosYDescuentos:Redondeo" // If Not (OFormFiscalEstado Is Nothing) Then OFormFiscalEstado.Listo() // Return Res } } //Recargos if (Comprob.Recargo > 0) { switch (Modelo) { case Lbl.Impresion.ModelosFiscales.EpsonTiquedora: case Lbl.Impresion.ModelosFiscales.EpsonGenerico: case Lbl.Impresion.ModelosFiscales.Emulacion: ComandoAEnviar = new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalPagosYDescuentos, "Recargo " + Lfx.Types.Formatting.FormatCurrencyForPrint(Comprob.Recargo, Lfx.Workspace.Master.CurrentConfig.Moneda.DecimalesCosto) + "%", FormatearNumeroEpson(Comprob.SubTotal * (Comprob.Recargo / 100), 2).PadLeft(12, '0'), "R"); Res = Enviar(ComandoAEnviar); break; case Lbl.Impresion.ModelosFiscales.HasarTiquedora: case Lbl.Impresion.ModelosFiscales.HasarGenerico: ComandoAEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalDevolucionesYRecargos, "Recargo " + Lfx.Types.Formatting.FormatCurrencyForPrint(Comprob.Recargo, Lfx.Workspace.Master.CurrentConfig.Moneda.DecimalesCosto) + "%", FormatearNumeroHasar(Comprob.SubTotal * (Comprob.Recargo / 100), 2).PadLeft(10, '0'), "M", "00000000000", "0", "T", "B"); Res = Enviar(ComandoAEnviar); break; } if (Res.Error != ErroresFiscales.Ok) { Res.Lugar = "DocumentoFiscalPagosYDescuentos:Interes"; return Res; } } // Pago switch (Modelo) { case Lbl.Impresion.ModelosFiscales.EpsonTiquedora: case Lbl.Impresion.ModelosFiscales.EpsonGenerico: case Lbl.Impresion.ModelosFiscales.Emulacion: ComandoAEnviar = new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalPagosYDescuentos, FiscalizarTexto(Comprob.FormaDePago.ToString(), 50), FormatearNumeroEpson(Comprob.Total, 2).PadLeft(12, '0'), "T"); Res = Enviar(ComandoAEnviar); break; case Lbl.Impresion.ModelosFiscales.HasarTiquedora: case Lbl.Impresion.ModelosFiscales.HasarGenerico: ComandoAEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalPago, FiscalizarTexto(Comprob.FormaDePago.ToString(), 50), FormatearNumeroHasar(Comprob.Total, 2), "T", "0"); Res = Enviar(ComandoAEnviar); break; } if (Res.Error != ErroresFiscales.Ok) { Res.Lugar = "DocumentoFiscalPagosYDescuentos:Pago"; return Res; } // *** Cerrar Documento switch (Modelo) { case Lbl.Impresion.ModelosFiscales.EpsonTiquedora: Res = Enviar(new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalCerrar, TipoDocumento, Letra, "")); break; case Lbl.Impresion.ModelosFiscales.EpsonGenerico: case Lbl.Impresion.ModelosFiscales.Emulacion: Res = Enviar(new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalCerrar, TipoDocumento, Letra, "Final")); break; case Lbl.Impresion.ModelosFiscales.HasarTiquedora: case Lbl.Impresion.ModelosFiscales.HasarGenerico: if (Letra == "S" || Letra == "R") { // Si es nota de credito cierro dicha nota Res = Enviar(new Comando(CodigosComandosFiscales.HasarDocumentoNoFiscalHomologadoCerrar, "1", "")); } else { // Comando CloseFiscalReceipt (Manual de comandos hasar) Res = Enviar(new Comando(CodigosComandosFiscales.HasarDocumentoFiscalCerrar, "1")); } break; } if (Res.Error != ErroresFiscales.Ok) { Res.Lugar = "DocumentoFiscalCerrar"; return Res; } else { if (NotifHandler != null) NotifHandler(this, new ImpresoraEventArgs("Asentando el movimiento")); IDbTransaction Trans = null; try { Trans = Comprob.Connection.BeginTransaction(IsolationLevel.Serializable); // Marco la factura como impresa y numerada Comprob.Numerar(Res.NumeroComprobante, true); // Mover stock si corresponde Comprob.MoverExistencias(false); // Asentar pagos si corresponde Comprob.AsentarPago(false); Trans.Commit(); } catch (Exception ex) { Res = new Respuesta(ErroresFiscales.Error); Res.Mensaje = ex.ToString(); if (Trans != null) Trans.Rollback(); } if (NotifHandler != null) NotifHandler(this, new ImpresoraEventArgs("Se imprimió el comprobante")); return Res; } }
private void Log(Respuesta respuesta) { Log(respuesta.ToString()); }
public Lazaro.Impresion.Comprobantes.Fiscal.Respuesta Inicializar() { switch (Modelo) { case Lbl.Impresion.ModelosFiscales.Emulacion: if (m_TextEmulacion == null) { m_TextEmulacion = new System.Text.StringBuilder("Emulación iniciada" + System.Environment.NewLine); NotificacionEventHandler NotifHandler = Notificacion; if (NotifHandler != null) NotifHandler(this, new ImpresoraEventArgs(ImpresoraEventArgs.EventTypes.Inicializada)); } break; default: if (PuertoSerie.IsOpen == false) { PuertoSerie.ReadTimeout = 8000; PuertoSerie.WriteTimeout = 5000; PuertoSerie.DataBits = 8; PuertoSerie.StopBits = System.IO.Ports.StopBits.One; PuertoSerie.Parity = System.IO.Ports.Parity.None; PuertoSerie.Encoding = DefaultEncoding; SeqNum = FIRST_SEQ; if (Modelo != Lbl.Impresion.ModelosFiscales.HasarGenerico && Modelo != Lbl.Impresion.ModelosFiscales.HasarTiquedora) { PuertoSerie.Handshake = System.IO.Ports.Handshake.XOnXOff; PuertoSerie.RtsEnable = true; } try { PuertoSerie.Open(); } catch (Exception ex) { Respuesta Res = new Respuesta(ErroresFiscales.Error); Res.Lugar = "Fiscal.ConexionImpresora.Inicializar()"; Res.Mensaje = ex.ToString(); return Res; } PuertoSerie.PinChanged += new System.IO.Ports.SerialPinChangedEventHandler(Impresora_PinChanged); PuertoSerie.ErrorReceived += new System.IO.Ports.SerialErrorReceivedEventHandler(Impresora_ErrorReceived); if (Modelo == Lbl.Impresion.ModelosFiscales.HasarGenerico || Modelo == Lbl.Impresion.ModelosFiscales.HasarTiquedora) { System.Threading.Thread.Sleep(100); //Configuración inicial Hasar Lazaro.Impresion.Comprobantes.Fiscal.Respuesta Res = ObtenerEstadoImpresora(); if (Res.EstadoFiscal.DocumentoFiscalAbierto) Res = CancelarDocumentoFiscal(); else if (Res.EstadoFiscal.DocumentoAbierto) Res = CancelarDocumentoFiscal(); } NotificacionEventHandler NotifHandler = Notificacion; if (NotifHandler != null) NotifHandler(this, new ImpresoraEventArgs(ImpresoraEventArgs.EventTypes.Inicializada)); } break; } return new Respuesta(ErroresFiscales.Ok); }
private Lazaro.Impresion.Comprobantes.Fiscal.Respuesta EnviarAEmulacion(Comando comando) { Respuesta Res = new Respuesta(ErroresFiscales.Ok); Res.CodigoComando = comando.CodigoComando; Res.Secuencia = comando.Secuencia; Res.Campos = new List<string>(); Res.Campos.Add("0080"); //Estado Impresora Res.Campos.Add("0600"); //Estado Fiscal m_TextEmulacion.AppendLine("CMD " + comando.CodigoComando.ToString() + System.Environment.NewLine); System.Threading.Thread.Sleep(200); switch (comando.CodigoComando) { case CodigosComandosFiscales.EpsonDocumentoFiscalCerrar: int LastComprob = Lfx.Workspace.Master.CurrentConfig.ReadGlobalSetting<int>("ServidorFiscal.UltimoComprobEmulacionPV" + this.PuntoDeVenta.Numero.ToString(), 0) + 1; Res.Campos.Add(LastComprob.ToString("00000000")); Lfx.Workspace.Master.CurrentConfig.WriteGlobalSetting("ServidorFiscal", "UltimoComprobEmulacionPV" + this.PuntoDeVenta.Numero.ToString(), LastComprob.ToString()); System.Console.WriteLine(m_TextEmulacion.ToString()); m_TextEmulacion = new System.Text.StringBuilder(); break; } Log(Res); return Res; }