Browse Source

[ADD] ticket layout

Gogs 7 năm trước cách đây
mục cha
commit
4995869c69
2 tập tin đã thay đổi với 81 bổ sung1 xóa
  1. 5 1
      controllers/main.py
  2. 76 0
      static/src/js/main.js

+ 5 - 1
controllers/main.py

@@ -63,7 +63,11 @@ class PrintEngineController(http.Controller):
             'protocol': socket.protocol,
             'host': socket.host,
             'port': socket.port,
-            'path': socket.path
+            'path': socket.path,
+            'printers': [{
+                'name': printer.name,
+                'isDefault': printer.is_default
+            } for printer in socket.printer_ids]
         } for socket in socket_obj.search([('active', '=', True)])]
 
     '''

+ 76 - 0
static/src/js/main.js

@@ -2,6 +2,29 @@
 (function () {
     var instance = openerp
     openerp.print_engine = {}
+
+    String.prototype.add = function (string) {
+        return this.concat(string);
+    }
+
+    String.prototype.center = function (width, padding) {
+        padding = padding || '';
+        padding = padding.substr(0, 1);
+
+        if (this.length < width) {
+            var length = width - this.length;
+            var remain = (length % 2 == 0) ? '' : padding;
+            var pads = padding.repeat(parseInt(length / 2));
+
+            return pads + this + pads + remain;
+        } else {
+            return this;
+        }
+    }
+
+    String.prototype.lineFeed = function () {
+        return this + '\n';
+    }
     
     /**
      * 
@@ -179,6 +202,59 @@
             }
 
             this.sendToSocket(commands)
+        },
+        printTicket(company, address, phone, items, total, change, customer) {
+            company = company || 'SIN NOMBRE';
+            var buffer = '';
+            buffer = buffer.add(company.center(40, ' ').toUpperCase()).lineFeed();
+            
+            if (address) {
+                buffer = buffer.add(address.center(40, ' ')).lineFeed();
+            }
+
+            if (phone) {
+                buffer = buffer.add(phone.center(40, ' ')).lineFeed();
+            }
+
+            buffer = buffer.add('-'.center(40, '-')).lineFeed();
+            buffer = buffer.add('DESCRIPCION').lineFeed();
+            buffer = buffer.add('PRECIO        CANTIDAD        SUBTOTAL').lineFeed();
+            buffer = buffer.add('-'.center(40, '-')).lineFeed();
+
+            if (!!items && items.length > 0) {
+                for (var i = 0; i < items.length; i++) {
+                    buffer = buffer.add(items[i][0].toUpperCase()).lineFeed();
+                    buffer = buffer.add(items[i][1] + '\t\t' + items[i][2] + '\t\t' + items[i][3]).lineFeed();
+                }
+            }
+
+            buffer = buffer.add('-'.center(40, '-')).lineFeed();
+
+            buffer = buffer.add('TOTAL:            ' + total).lineFeed();
+            buffer = buffer.add('RECIBIDO:         ' + 5000).lineFeed();
+            buffer = buffer.add('VUELTO:           ' + change).lineFeed();
+            buffer = buffer.add('CLIENTE:          ' + customer).lineFeed().lineFeed(); 
+            buffer = buffer.lineFeed().add('GRACIAS POR SU PREFERENCIA!!!'.center(40, ' ')).lineFeed().lineFeed().lineFeed().lineFeed().lineFeed().lineFeed().lineFeed();
+
+            if (this.sockets.length === 0) {
+                instance.web.notification.do_warn('Atención', 'No hay sockets registrados');
+                return;
+            }
+
+            var printer = null;
+            for (var j = 0; j < this.sockets[0].printers.length; j++) {
+                if (this.sockets[0].printers[j].isDefault) {
+                    printer = this.sockets[0].printers[j];
+                    break;
+                }
+            }
+
+            if (!printer) {
+                instance.web.notification.do_warn('Atención', 'No hay impresora por defecto');
+                return;
+            }
+
+            this.print(printer.name, buffer);
         }
     });