forked from reingart/pyfiscalprinter
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ejemplo.php
92 lines (78 loc) · 3.59 KB
/
ejemplo.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<?php
# Ejemplo de Uso de Interface COM para imprimir en controladores fiscales
# homologados por AFIP en Argentina (Hasar, Epson y similares) utilizando
# intefaz PyFiscalPrinter: https://code.google.com/p/pyfiscalprinter/
# 2014 (C) Mariano Reingart <[email protected]>
# En Windows habilitar COM en php.ini: extension=c:\PHP\ext\php_com_dotnet.dll
# Para Linux instalar: sudo pecl install dbus-0.1.1
# Registrar/iniciar python controlador.py --register (Windows), --dbus (Linux)
error_reporting(-1);
try {
# Crear objeto interface con el componente del controlador fiscal:
if (@class_exists('COM')) {
echo "creando interface ...";
$ctrl = new COM('PyFiscalPrinter') or die("No se puede crear el objeto");
echo "interface creada version {$ctrl->Version}\n";
# habilitar excecpciones (capturarlas con un bloque try/except), ver abajo:
$ctrl->LanzarExcepciones = true;
} else if (@class_exists('Dbus')) {
$dbus = new Dbus( Dbus::BUS_SESSION, true );
$ctrl = $dbus->createProxy("ar.com.pyfiscalprinter.Service",
"/ar/com/pyfiscalprinter/Object",
"ar.com.pyfiscalprinter.Interface");
} else {
echo "No existe soporte para COM (Windows) o DBus (Linux) \n";
exit(1);
}
# Iniciar conexión con el controlador fiscal:
$marca = "epson"; // configurar "hasar" o "epson"
$modelo = "epsonlx300+"; // "tickeadoras", "epsonlx300+", "tm-220-af"
// "615", "715v1", "715v2", "320"
$puerto = "dummy"; // "COM1", "COM2", etc. o "/dev/ttyS0" en linux
$equipo = ""; // IP si no esta conectada a esta máquina
$ok = $ctrl->Conectar($marca, $modelo, $puerto, $equipo);
# Analizar errores (si no se habilito lanzar excepciones)
if (!$ok) {
echo "Excepcion: {$ctrl->Excepcion}\n";
echo "Traza: {$ctrl->Traceback}\n";
exit(1);
}
# Consultar el último número de comprobante impreso por el controlador:
# IMPORTANTE: en modo dummy solicita el número de comprobante por consola
$tipo_cbte = 83;
$ult = $ctrl->ConsultarUltNro($tipo_cbte);
echo "Ultimo Nro de Cbte {$ult}\n";
# Creo una factura de ejemplo:
$tipo_cbte = 6; // factura B
$tipo_doc = 80; // CUIT
$nro_doc = "20267565393";
$nombre_cliente = 'Mariano Reingart';
$domicilio_cliente = 'Balcarce 50';
$tipo_responsable = 5; // consumidor final
$referencia = ""; // solo para NC / ND
$ok = $ctrl->AbrirComprobante($tipo_cbte, $tipo_responsable,
$tipo_doc, $nro_doc,
$nombre_cliente, $domicilio_cliente,
$referencia);
echo "Abrir Comprobante = {$ok}\n";
# Imprimo un artículo:
$codigo = "P0001";
$ds = "Descripcion del producto P0001";
$qty = 1.00;
$precio = 100.00;
$bonif = 0.00;
$alic_iva = 21.00;
$importe = 121.00;
$ok = $ctrl->ImprimirItem($ds, $qty, $importe, $alic_iva);
echo "ImprimirItem = {$ok}\n";
# Imprimir un pago (si es superior al total, se imprime el vuelto):
$ok = $ctrl->ImprimirPago("efectivo", $importe);
echo "ImprimirPago = {$ok}\n";
# Finalizar el comprobante (imprime pie del comprobante, CF DGI, etc.)
$ok = $ctrl->CerrarComprobante();
echo "CerrarComprobante = {$ok}\n";
} catch (Exception $e) {
echo 'Excepción: ', $e->getMessage(), "\n";
}
echo "Finalizado\n";
?>