public Result Print(CommandDocument document) { int ultimo = 0; Documentos curso; try { printer = new HASAR(); Inicializar(printer, document.Header); printer.Comenzar(); if (HasError(printer, document.Header, out message)) { throw new Exception(message); } //si no hay comprobante abierto cancela curso = printer.DocumentoEnCurso; if (curso == Documentos.D_NO_DOCUMENTO_EN_CURSO) { throw new Exception("No hay documentos en curso iniciados"); } //imprimir los comandos foreach (var command in document.Commands) { printer.Enviar(command); } double total = 0; printer.LeerMontoTotal(FiscalHelper.GetDocumentoIVA(curso), out total); DocPrinter doc = new DocPrinter(); doc.Class = FiscalHelper.GetDocumentClass(curso); doc.DocDate = printer.FechaHoraFiscal; doc.PosNum = FiscalHelper.GetPosNumer(printer); doc.Type = FiscalHelper.GetDocumentType(curso); doc.DocNum = FiscalHelper.GetUltimoComprobanteACancelar(curso, printer).ToString(); doc.TotalAmount = total; printer.Finalizar(); return(new Success(doc)); } catch (Exception ex) { printer.Abortar(); try { curso = printer.DocumentoEnCurso; if (curso != Documentos.D_NO_DOCUMENTO_EN_CURSO) { ultimo = FiscalHelper.GetUltimoComprobanteACancelar(curso, printer); printer.TratarDeCancelarTodo(); } } catch (Exception) { } printer.Finalizar(); return(new Fail((ultimo == 0) ? string.Empty : ultimo.ToString(), ex.Message, ex)); } }
public void Inicializar(HASAR printer, Header header) { printer.Transporte = TiposDeTransporte.SOCKET_TCP; printer.DireccionIP = header.Ip; printer.Puerto = header.Port; var modelo = FiscalHelper.GetModeloFiscal(header.PrinterModel); if (modelo != null) { printer.Modelo = (ModelosDeImpresoras)modelo; } printer.ReintentoConstante = true; printer.FaltaPapel += printer_FaltaPapel; //para comandos este evento se ejecuta siempre por eso lo comento //printer.ErrorFiscal += printer_ErrorFiscal; printer.ErrorImpresora += printer_ErrorImpresora; }
public Result Print(OpenCommandDocument document) { int ultimo = 0; Documentos curso; try { printer = new HASAR(); Inicializar(printer, document.Header); printer.Comenzar(); if (HasError(printer, document.Header, out message)) { throw new Exception(message); } try { //si hay un documento en curso busco el numero al cancelarlo curso = printer.DocumentoEnCurso; if (curso != Documentos.D_NO_DOCUMENTO_EN_CURSO) { ultimo = FiscalHelper.GetUltimoComprobanteACancelar(curso, printer); printer.TratarDeCancelarTodo(); } } catch (Exception) { } if (HasError(printer, document.Header, out message)) { throw new Exception(message); } //imprimir los comandos foreach (var command in document.Commands) { printer.Enviar(command); } //pedir comprobate curso = printer.DocumentoEnCurso; DocPrinter doc = new DocPrinter(); doc.Class = FiscalHelper.GetDocumentClass(curso); doc.DocDate = printer.FechaHoraFiscal; doc.PosNum = FiscalHelper.GetPosNumer(printer); doc.Type = FiscalHelper.GetDocumentType(curso); doc.DocNum = FiscalHelper.GetUltimoComprobanteACancelar(curso, printer).ToString(); printer.Finalizar(); return(new Success((ultimo != 0) ? ultimo.ToString() : string.Empty, doc)); } catch (Exception ex) { printer.Abortar(); try { curso = printer.DocumentoEnCurso; if (curso != Documentos.D_NO_DOCUMENTO_EN_CURSO) { ultimo = FiscalHelper.GetUltimoComprobanteACancelar(curso, printer); printer.TratarDeCancelarTodo(); } } catch (Exception) { } printer.Finalizar(); return(new Fail((ultimo != 0) ? ultimo.ToString() : string.Empty, ex.Message, ex)); } }