/******************************************************************************
* Product: Adempiere ERP & CRM Smart Business Solution *
* Copyright (C) 1999-2007 ComPiere, Inc. All Rights Reserved. *
* This program is free software, you can redistribute it and/or modify it *
* under the terms version 2 of the GNU General Public License as published *
* by the Free Software Foundation. This program is distributed in the hope *
* that it will be useful, but WITHOUT ANY WARRANTY, without even the implied *
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU General Public License for more details. *
* You should have received a copy of the GNU General Public License along *
* with this program, if not, write to the Free Software Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
* For the text or an alternative of this public license, you may reach us *
* ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA *
* or via info@compiere.org or http://www.compiere.org/license.html *
*****************************************************************************/
package ar.com.ergio.print.fiscal;
import java.io.IOException;
import java.math.BigDecimal;
import ar.com.ergio.print.fiscal.comm.FiscalComm;
import ar.com.ergio.print.fiscal.document.CreditNote;
import ar.com.ergio.print.fiscal.document.DNFH;
import ar.com.ergio.print.fiscal.document.DebitNote;
import ar.com.ergio.print.fiscal.document.Invoice;
import ar.com.ergio.print.fiscal.document.NonFiscalDocument;
import ar.com.ergio.print.fiscal.exception.DocumentException;
import ar.com.ergio.print.fiscal.exception.FiscalPrinterIOException;
import ar.com.ergio.print.fiscal.exception.FiscalPrinterStatusError;
import ar.com.ergio.print.fiscal.msg.FiscalMessages;
/**
* Impresora fiscal. Interfaz publica para la comunicación con impresoras
* fiscales. Cada clase que represente una impresora fiscal debe impementar
* esta interfaz.
* @author Franco Bonafine
* @date 22/01/2008
* @contributor Emiliano Pereyra - http://www.ergio.com.ar
*/
public interface FiscalPrinterDevice {
/**
* Da formato de cantidad a un número.
* @param quantity: número a formatear.
* @return <code>String</code> que contiene la cantidad formateada.
*/
public String formatQuantity(BigDecimal quantity);
/**
* Da formato de monto a un número.
* @param amount: número a formatear
* @return <code>String</code> que contiene el monto formateado.
*/
public String formatAmount(BigDecimal amount);
/**
* Da formato de monto a un número para las percepciones (nnnnnnnnn.nn)
* @author Emiliano Pereyra
* @param amount: número a formatear
* @return <code>String</code> que contiene el monto formateado.
*/
public String formatPerceptionAmount(BigDecimal amount);
/**
* Formatea un texto.
* @param text: texto a formatear.
* @param maxLength: longitud máxima para el texto.
* @return <code>String</code> que contiene el texto formateado.
*/
public String formatText(String text, int maxLength);
/**
* Formatea un número.
* @param number: número a formatear.
* @param integerPart: cantidad de dígitos para la parte entera.
* @param decimalPart: cantidad de dígitos para la parte decimal.
* @return <code>String</code> con el número formateado.
*/
public String formatNumber(BigDecimal number, int integerPart, int decimalPart);
/**
* @return La interfaz de comunicación con el dispositivo fiscal.
*/
public FiscalComm getFiscalComm();
/**
* Asigna la interfaz de comunicación con el dispositivo fiscal.
* @param fiscalComm interfaz de comunicación.
*/
public void setFiscalComm(FiscalComm fiscalComm);
/**
* @return Retorna el conjunto de mensajes recibido de la impresora fiscal
* luego de cada ejecución de algún comando a la misma. En caso de que no
* existan mensajes retorna un <code>FiscalMessages</code> donde
* <code>isEmpty()</code> es verdadero.
*/
public FiscalMessages getMessages();
/**
* Impresión de una factura.
* @param invoice Factura a imprimir.
* @throws FiscalPrinterStatusError cuando la impresora fiscal
* retorna un error en su estado a partir de la ejecución de algún comando.
* @throws FiscalPrinterIOException cuando se produce algún error
* inesperado en la comunicación con el dispositivo fiscal.
* @throws DocumentException cuando la factura contiene errores y no puede ser
* enviado a imprimir.
*/
public void printDocument(Invoice invoice) throws FiscalPrinterStatusError, FiscalPrinterIOException, DocumentException;
/**
* Impresión de una nota de crédito.
* @param creditNote Nota de crédito a imprimir.
* @throws FiscalPrinterStatusError cuando la impresora fiscal
* retorna un error en su estado a partir de la ejecución de algún comando.
* @throws FiscalPrinterIOException cuando se produce algún error
* inesperado en la comunicación con el dispositivo fiscal.
* @throws DocumentException cuando la factura contiene errores y no puede ser
* enviado a imprimir.
*/
public void printDocument(CreditNote creditNote) throws FiscalPrinterStatusError, FiscalPrinterIOException, DocumentException;
/**
* Impresión de una nota de débito.
* @param debitNote Nota de débito a imprimir.
* @throws FiscalPrinterStatusError cuando la impresora fiscal
* retorna un error en su estado a partir de la ejecución de algún comando.
* @throws FiscalPrinterIOException cuando se produce algún error
* inesperado en la comunicación con el dispositivo fiscal.
* @throws DocumentException cuando la factura contiene errores y no puede ser
* enviado a imprimir.
*/
public void printDocument(DebitNote debitNote) throws FiscalPrinterStatusError, FiscalPrinterIOException, DocumentException;
/**
* Impresión de un documento no fiscal
* @param nonFiscalDocument Documento no fiscal a imprimir
* @throws FiscalPrinterStatusError cuando la impresora fiscal
* retorna un error en su estado a partir de la ejecución de algún comando.
* @throws FiscalPrinterIOException cuando se produce algún error
* inesperado en la comunicación con el dispositivo fiscal.
* @throws DocumentException cuando el documento no fiscal contiene errores y no
* puede ser enviado a imprimir.
*/
public void printDocument(NonFiscalDocument nonFiscalDocument) throws FiscalPrinterStatusError, FiscalPrinterIOException, DocumentException;
/**
* Impresión de un documento no-fiscal homologado
*
* @param dnfh Documento no-fiscal homologado a imprimir
*
* @throws FiscalPrinterStatusError cuando la impresora fiscal retorna un error en su estado a
* partir de la ejecución de algún comando.
* @throws FiscalPrinterIOException cuando se produce algún error inesperado en la comunicación
* con el dispositivo fiscal.
* @throws DocumentException cuando el documento no fiscal contiene errores y no puede ser
* enviado a imprimir.
*/
public void printDocument(DNFH dnfh) throws FiscalPrinterStatusError, FiscalPrinterIOException, DocumentException;
/**
* Realiza el cierre fiscal.
* @param type tipo de cierre
* @throws FiscalPrinterStatusError
* @throws FiscalPrinterIOException
*/
public void fiscalClose(String type) throws FiscalPrinterStatusError, FiscalPrinterIOException;
/**
* @return Retorna el número del comprobante creado ultimamente por la
* impresora.
*/
public String getLastDocumentNo();
/**
* Conecta la impresora con el dispositivo fiscal. Aquí se debe efectivizar
* la conexión de la interfaz de comunicación con el dispositivo.
* Para efectuar cualquier operación con la impresora fiscal es necesario
* que primero se invoque a este método.
* @throws IOException Cuando se preduce algún error en el intento de conexión
* con el dispositivo.
*/
public void connect() throws IOException;
/**
* Desconecta la impresora con el dispositivo fiscal. Luego de invocar este
* método no es posible realizar alguna operación con la impresora hasta que
* sea invocado nuevamente el método <code>FiscalPrinter.connect()</code>
* @throws IOException Cuando se produce algún error en el intento de
* desconexión con el dispositivo.
*/
public void close() throws IOException;
/**
* Indica si en la impresora fiscal se encuentra un documento abierto
* actualmente.
* @return Verdadero en caso de que exista un documento abierto.
*/
public boolean hasDocumentOpened();
/**
* @return Retorna el manejador de eventos de la impresora fiscal.
*/
public FiscalPrinterListener getEventListener();
/**
* Asigna el manejador de eventos que dispara la impresora fiscal.
* @param eventListener Manejador de eventos a asignar.
*/
public void setEventListener(FiscalPrinterListener eventListener);
public boolean isConnected();
/**
* @return La cantidad de pagos permitidos para la impresión. Ciertas marcas
* y modelos tienen una limitación en la cantidad de pagos que se
* pueden imprimir con su descripción y su importe en el ticket o
* factura.
*/
public int getAllowedPaymentQty();
}