import java.util.List;
import giovynet.nativelink.SerialPort;
import giovynet.serial.Baud;
import giovynet.serial.Com;
import giovynet.serial.Parameters;
public class LayoutBoleta
{
Com com;
Boolean sw=false;
public static void main(String[] args)
{
new LayoutBoleta();
}
public LayoutBoleta()
{
Boolean estadoImpresion=true;
estadoImpresion=Imprimir("BOL");
estadoImpresion=Imprimir("X");
estadoImpresion=Imprimir("Z");
if(estadoImpresion)
System.out.println("Impresión realizado con exito.");
else
System.out.println("Error al imprimir.");
}
public Boolean Imprimir(String tipo)
{
if(tipo.equals("X"))
{
if(informeX())
return true;
else
return false;
}
else if(tipo.equals("Z"))
{
if(informeZ())
return true;
else
return false;
}
else if(tipo.equals("BOL"))
{
if(imprimirBoleta())
return true;
else
return false;
}
else
return false;
}
public Boolean informeX()
{
if(openCom("COM1"))
{
//Linea Informe X
if(setCommand("01", ""))
{
if(closeCom())
return true;
else
return false;
}
else
{
closeCom();
return false;
}
}
else
return false;
}
public Boolean informeZ()
{
if(openCom("COM1"))
{
//Linea Informe Z
if(setCommand("021", ""))
{
//Línea Apertura Período de Ventas, Valida modo entrenamiento,
//en modo fiscal retorna error en caso de haber pasado 27 horas
setCommand("32", "");
if(closeCom())
return true;
else
return false;
}
else
{
closeCom();
return false;
}
}
else
return false;
}
public Boolean imprimirBoleta()
{
if(openCom("COM1"))
{
//Línea Apertura Período de Ventas, Valida modo entrenamiento,
//en modo fiscal retorna error error en caso de haber pasado 27 horas
//sw=setCommand("32", "");
//Linea inicio Boleta
if(!setCommand("001", ""))
return false;
//Línea Inicio Comentario
if(!setCommand("60", ""))
return false;
//Línea Salto de Línea
if(!setCommand("30", ""))
return false;
//Linea Comentario
if(!setCommand("111", "BOLETA FISCAL"))
return false;
//Línea Salto de Línea
if(!setCommand("30", ""))
return false;
//Línea Fin Comentario
if(!setCommand("61", ""))
return false;
//Línea Boleta Caja
if(!setCommand("12", ""))
return false;
//Línea venta Item/*
long totalBoleta=0;
for(int i=0; i<2; i++)
{
//Agregando ceros a la izquierda del código
String codigo=formatNumber(13, "123"+i);
//Agregando ceros a la izquierda de la cantidad
String cantidad=formatNumber(6, "100")+"000";
//Agregando ceros a la izquierda del precio unitario
String precioUnitario=formatNumber(9, "200");
//Agregando ceros a la izquierda del precio total
String precioTotal=formatNumber(9, "20000");
//Sumando el producto al total de la boleta
totalBoleta+=20000;
//Descripción Producto
String descripcion="Producto 0"+i;
//Linea Agregar Item
if(!setCommand("13111", codigo+""+cantidad+""+precioUnitario+""+precioTotal+""+descripcion))
return false;
}
//Linea Descuento Total
// if(!setCommand("1711", formatNumber(9, "10")))
// return false;
//Agregando ceros a la izquierda al total de la boleta
String totalString=formatNumber(10, totalBoleta+"");
//Línea Sub/total
if(!setCommand("19", totalString))
return false;
//Línea Total
if(!setCommand("20", totalString))
return false;
//Linea Formas pagos
if(!setCommand("2611", "01"+formatNumber(10, "50000")))//Efectivo
return false;
//Linea Fin pagos
if(!setCommand("271", formatNumber(9, "5000"))) //Donación
return false;
//Línea Inicio Comentario
if(!setCommand("60", ""))
return false;
//Linea Comentario
if(!setCommand("111", "Rut Cajero(a): 3.333.333-3"))
return false;
//Linea Comentario
if(!setCommand("111", "Nombre Cajero(a): Ernesto Gonzales"))
return false;
//Línea Fin Comentario
if(!setCommand("61", ""))
return false;
//Línea Fin, con corte de papel
if(!setCommand("99", ""))
return false;
//Línea Apertura de Cajón
if(!setCommand("34", "255255"))
return false;
//Cerrando el puerto COM
closeCom();
return true;
}
else
return false;
}
public boolean openCom(String puerto)
{
SerialPort serialPort = new SerialPort();
List<String> portsFree = null;
try {
portsFree=serialPort.getFreeSerialPort();
}
catch (Exception e){
return false;
}
if(portsFree!=null&&portsFree.size()>0)
{
Parameters parameters = null;
try{
parameters = new Parameters();
}
catch (Exception e){
return false;
}
parameters.setPort(puerto);
parameters.setBaudRate(Baud._19200);
parameters.setByteSize("8");
parameters.setParity("n");
try{
com=new Com(parameters);
return true;
}
catch(Exception e) {
System.out.println(e.getMessage());
return false;
}
}
else
return false;
}
public boolean closeCom()
{
try {
com.close();
return true;
}
catch (Exception e) {
return false;
}
}
public boolean setCommand(String line, String comand)
{
try{
com.sendSingleData(135);
}
catch (Exception e) {
return false;
}
String finalComand=line+comand;
for(int i=0; i<finalComand.toCharArray().length; i++)
{
try{
com.sendSingleData(finalComand.toCharArray()[i]);
}catch(Exception e){
return false;
}
}
try{
com.sendSingleData(136);
if(line.equals("1711"))
sw=true;
else
sw=false;
return getResponse(sw);
}
catch (Exception e) {
return false;
}
}
public Boolean getResponse(Boolean sw)
{
byte bytes=0;
String response=new String();
while(bytes!=13 && bytes!=12)
{
try{
bytes=(byte)com.receiveSingleChar();
}catch(Exception e){
return false;
}
if(bytes==10)
return true;
else
response+=bytes; //En el objeto response de tipo String se alamace todo el código de retorna de la impresora en formato INT
if(sw)
System.out.println("bytes: "+bytes);
}
/**
* la variable response contiene
* la respuesta de impresora por el ultimo comando ingresadoo
* esta variable o objeto debe ser tratado según el manual de usuario
*/
return true;
}
public String formatNumber(int largo, String number)
{
String cerosIzqierda=new String();
for(int i=0; i<(largo-number.length()); i++)
cerosIzqierda+="0";
return cerosIzqierda+number;
}
}