def serial_options(options): values = {} values["port"] = options.get( "port", config.get("serial_driver", "port") or "/dev/ttyS0") values["baudrate"] = options.get( "baudrate", config.getint("serial_driver", "baudrate")) values["bytesize"] = options.get( "bytesize", config.getint("serial_driver", "bytesize")) values["parity"] = options.get("parity", config.get("serial_driver", "parity")) values["stopbits"] = options.get( "stopbits", config.getint("serial_driver", "stopbits")) values["rtscts"] = options.get( "rtscts", config.getboolean("serial_driver", "rtscts")) values["xonxoff"] = options.get( "xonxoff", config.getboolean("serial_driver", "xonxoff")) values["timeout"] = options.get("timeout", config.getint("serial_driver", "timeout")) values["eol_cr"] = options.get( "eol_cr", config.getboolean("serial_driver", "eol_cr")) values["eol_lf"] = options.get( "eol_lf", config.getboolean("serial_driver", "eol_lf")) data = options.get("data", "") if values["eol_cr"]: data += serial.CR if values["eol_lf"]: data += serial.LF return values, data
def __init__(self, *args, **kwargs): self.eprint = None self.vendor_product = None if device_type == "usb": printers = self.connected_usb_devices() if printers: printer = printers[0] idVendor = printer.get("vendor") idProduct = printer.get("product") kwargs["in_ep"] = printer.get("in_ep", 0x82) kwargs["out_ep"] = printer.get("out_ep", 0x01) kwargs["timeout"] = 0 POSDriver.__init__(self, idVendor, idProduct, **kwargs) elif device_type == "serial": kwargs["devfile"] = config.get("escpos_driver", "serial_device_name") kwargs["baudrate"] = config.getint("escpos_driver", "serial_baudrate") kwargs["bytesize"] = config.getint("escpos_driver", "serial_bytesize") kwargs["timeout"] = config.getint("escpos_driver", "serial_timeout") POSDriver.__init__(self, **kwargs) elif device_type == "win32": kwargs["printer_name"] = config.get("escpos_driver", "printer_name") POSDriver.__init__(self, **kwargs) ThreadDriver.__init__(self, *args, **kwargs)
def serial_options(options): values = {} values['port'] = options.get( 'port', config.get('serial_driver', 'port') or '/dev/ttyS0') values['baudrate'] = options.get( 'baudrate', config.getint('serial_driver', 'baudrate')) values['bytesize'] = options.get( 'bytesize', config.getint('serial_driver', 'bytesize')) values['parity'] = options.get('parity', config.get('serial_driver', 'parity')) values['stopbits'] = options.get( 'stopbits', config.getint('serial_driver', 'stopbits')) values['rtscts'] = options.get( 'rtscts', config.getboolean('serial_driver', 'rtscts')) values['xonxoff'] = options.get( 'xonxoff', config.getboolean('serial_driver', 'xonxoff')) values['timeout'] = options.get('timeout', config.getint('serial_driver', 'timeout')) values['eol_cr'] = options.get( 'eol_cr', config.getboolean('serial_driver', 'eol_cr')) values['eol_lf'] = options.get( 'eol_lf', config.getboolean('serial_driver', 'eol_lf')) data = options.get('data', '') if values['eol_cr']: data += serial.CR if values['eol_lf']: data += serial.LF return values, data
def get_signature_http(): file_ = None data = None download_path = config.get("signature_driver", "download_path") or "/tmp" signature_file = config.get("signature_driver", "signature_file") or "signature.svg" try: mtp = pymtp.MTP() mtp.connect() except Exception, err: app.logger.error("Unable to connect device %s" % str(err)) return jsonify(jsonrpc="2.0", result=data)
def get_signature_http(): file_ = None data = None download_path = config.get('signature_driver', 'download_path') or \ '/tmp' signature_file = config.get('signature_driver', 'signature_file') or \ 'signature.svg' try: mtp = pymtp.MTP() mtp.connect() except Exception, err: app.logger.error('Unable to connect device %s' % str(err)) return jsonify(jsonrpc='2.0', result=data)
def system(): pywebdriver_info = [] pywebdriver_info.append({ "name": _("CORS allowed origins"), "value": config.get("flask", "cors_origins"), }) system_info = [] system_info.append({"name": _("OS - System"), "value": platform.system()}) system_info.append({ "name": _("OS - Release"), "value": platform.release() }) system_info.append({ "name": _("OS - Version"), "value": platform.version() }) system_info.append({"name": _("Machine"), "value": platform.machine()}) system_info.append({ "name": _("Python Version"), "value": platform.python_version() }) installed_python_packages = get_installed_distributions() installed_python_packages = sorted(installed_python_packages, key=lambda package: package.key) return render_template( "system.html", pywebdriver_info=pywebdriver_info, system_info=system_info, installed_python_packages=installed_python_packages, )
def system(): pywebdriver_info = [] pywebdriver_info.append({ 'name': _('CORS allowed origins'), 'value': config.get('flask', 'cors_origins') }) system_info = [] system_info.append({'name': _('OS - System'), 'value': platform.system()}) system_info.append({ 'name': _('OS - Distribution'), 'value': platform.linux_distribution() }) system_info.append({ 'name': _('OS - Release'), 'value': platform.release() }) system_info.append({ 'name': _('OS - Version'), 'value': platform.version() }) system_info.append({'name': _('Machine'), 'value': platform.machine()}) system_info.append({ 'name': _('Python Version'), 'value': platform.python_version() }) installed_python_packages = get_installed_distributions() installed_python_packages = sorted(installed_python_packages, key=lambda package: package.key) return render_template('system.html', pywebdriver_info=pywebdriver_info, system_info=system_info, installed_python_packages=installed_python_packages)
def open_printer(self): if self.device: return try: if device_type == 'usb': printers = self.connected_usb_devices() if printers: printer = printers[0] self.interface = printer.get('interface', 0) self.idVendor = printer.get('vendor') self.idProduct = printer.get('product') self.in_ep = printer.get('in_ep', 0x82) self.out_ep = printer.get('out_ep', 0x01) self.timeout = 0 self.profile = capabilities.get_profile(None) self.magic = MagicEncode(self, {}) self.open() self.vendor_product = '%s_%s' % (self.idVendor, self.idProduct) elif device_type == 'serial': self.devfile = config.get('escpos_driver', 'serial_device_name') self.baudrate = config.getint('escpos_driver', 'serial_baudrate') self.bytesize = config.getint('escpos_driver', 'serial_bytesize') self.timeout = config.getint('escpos_driver', 'serial_timeout') self.open() except Exception as e: self.set_status('error', str(e))
def print_xml_receipt_json(): """ For Odoo 8.0+""" receipt = request.json['params']['receipt'] encoding = config.get('odoo', 'force_receipt_encoding') if encoding != '': drivers['escpos'].push_task('xml_receipt', receipt.encode(encoding)) else: drivers['escpos'].push_task('xml_receipt', receipt) return jsonify(jsonrpc='2.0', result=True)
def serial_options(options): values = {} values['port'] = options.get('port', config.get('serial_driver', 'port') or '/dev/ttyS0' ) values['baudrate'] = options.get('baudrate', config.getint('serial_driver', 'baudrate') ) values['bytesize'] = options.get('bytesize', config.getint('serial_driver', 'bytesize') ) values['parity'] = options.get('parity', config.get('serial_driver', 'parity') ) values['stopbits'] = options.get('stopbits', config.getint('serial_driver', 'stopbits') ) values['rtscts'] = options.get('rtscts', config.getboolean('serial_driver', 'rtscts') ) values['xonxoff'] = options.get('xonxoff', config.getboolean('serial_driver', 'xonxoff') ) values['timeout'] = options.get('timeout', config.getint('serial_driver', 'timeout') ) values['eol_cr'] = options.get('eol_cr', config.getboolean('serial_driver', 'eol_cr') ) values['eol_lf'] = options.get('eol_lf', config.getboolean('serial_driver', 'eol_lf') ) data = options.get('data','') if values['eol_cr']: data += serial.CR if values['eol_lf']: data += serial.LF return values, data
def get_signature_http(): file_ = None data = None download_path = config.get('signature_driver', 'download_path') or \ '/tmp' signature_file = config.get('signature_driver', 'signature_file') or \ 'signature.svg' try: mtp = pymtp.MTP() mtp.connect() except Exception as err: app.logger.error('Unable to connect device %s' % str(err)) return jsonify(jsonrpc='2.0', result=data) for f in mtp.get_filelisting(): if f.filename == signature_file: file_ = f break if file_: dest_file = os.path.join(download_path, signature_file) try: mtp.get_file_to_file(file_.item_id, dest_file) app.logger.debug('file downloaded to %s' % dest_file) with open(dest_file, 'r') as f: data = f.read() app.logger.debug(data) mtp.delete_object(file_.item_id) except Exception as err: app.logger.error('error during file transfer %s' % str(err)) else: app.logger.error('file not found on the device: %s' % signature_file) mtp.disconnect() return jsonify(jsonrpc='2.0', result=data)
from xmlescpos import Layout from escpos import capabilities from escpos.magicencode import MagicEncode import usb.core import math meta = { 'name': "ESCPOS Printer", 'description': """This plugin add the support of ESCPOS Printer for your pywebdriver""", 'require_pip': ['pyxmlescpos'], 'require_debian': [], } if (config.has_option('escpos_driver', 'device_type') and config.get('escpos_driver', 'device_type') == 'serial'): device_type = 'serial' else: device_type = 'usb' SUPPORTED_DEVICES = [ { 'vendor': 0x04b8, 'product': 0x0e03, 'name': 'Epson TM-T20' }, { 'vendor': 0x04b8, 'product': 0x0202, 'name': 'Epson TM-T70' },
from xmlescpos import Layout from pywebdriver import app, config, drivers from .base_driver import ThreadDriver meta = { "name": "ESCPOS Printer", "description": """This plugin add the support of ESCPOS Printer for your pywebdriver""", "require_pip": ["pyxmlescpos"], "require_debian": [], } if (config.has_option("escpos_driver", "device_type") and config.get("escpos_driver", "device_type") == "serial"): device_type = "serial" elif (config.has_option("escpos_driver", "device_type") and config.get("escpos_driver", "device_type") == "win32"): device_type = "win32" else: device_type = "usb" SUPPORTED_DEVICES = [ { "vendor": 0x04B8, "product": 0x0E03, "name": "Epson TM-T20" }, { "vendor": 0x04B8,
def get_status(self): self.status = {'status': 'connected', 'messages': []} # When I use Odoo POS v8, it regularly goes through that code # and sends 999.99 to the credit card reader !!! # Si I comment the line below -- Alexis # telium_driver.push_task('transaction_start', json.dumps( # self.get_payment_info_from_price(999.99, 'card'), sort_keys=True)) # TODO Improve : Get the real model connected if self.status['status'] == 'connected': self.vendor_product = 'telium_image' else: self.vendor_product = False return self.status driver_config = {} if config.get('telium_driver', 'device_name'): driver_config['telium_terminal_device_name'] =\ config.get('telium_driver', 'device_name') if config.getint('telium_driver', 'device_rate'): driver_config['telium_terminal_device_rate'] =\ config.getint('telium_driver', 'device_rate') telium_driver = TeliumDriver(driver_config) drivers['telium'] = telium_driver @app.route( '/hw_proxy/payment_terminal_transaction_start', methods=['POST', 'GET', 'PUT', 'OPTIONS']) @cross_origin(headers=['Content-Type']) def payment_terminal_transaction_start():
from pywebdriver import config from configparser import NoOptionError from importlib import import_module DEFAULT_DRIVERS = [ "cups_driver", "win32print_driver", "display_driver", "escpos_driver", "serial_driver", "signature_driver", "telium_driver", "opcua_driver", "odoo7", "odoo8", ] try: drivers = config.get("application", "drivers").split(",") except NoOptionError: drivers = DEFAULT_DRIVERS for driver in drivers: globals()[driver] = import_module("." + driver, __package__)
def plc_init(request): client = PLC() client.Micro800 = config.get('plc', 'micro800') or False client.IPAddress = request.get('url', '') return client
from pywebdriver import config from configparser import NoOptionError from importlib import import_module DEFAULT_DRIVERS = [ 'cups_driver', 'win32print_driver', 'display_driver', 'escpos_driver', 'serial_driver', 'signature_driver', 'telium_driver', 'opcua_driver', 'odoo7', 'odoo8', ] try: drivers = config.get('application', 'drivers').split(',') except NoOptionError: drivers = DEFAULT_DRIVERS for driver in drivers: globals()[driver] = import_module('.' + driver, __package__)
self.set_status("connected") # When I use Odoo POS v8, it regularly displays # "PyWebDriver / PosBox Status" on the LCD !!! # So I comment the line below -- Alexis de Lattre # display_driver.push_task( # 'send_text', [_(u'PyWebDriver'), _(u'PosBox Status')]) # TODO Improve Me # For the time being, it's not possible to know if the display # is 'disconnected' in 'error' state # Maybe could be possible, improving pyposdisplay library. except Exception: pass return self.status driver_config = {} if config.get("display_driver", "device_name"): driver_config["customer_display_device_name"] = config.get( "display_driver", "device_name") if config.getint("display_driver", "device_rate"): driver_config["customer_display_device_rate"] = config.getint( "display_driver", "device_rate") if config.getfloat("display_driver", "device_timeout"): driver_config["customer_display_device_timeout"] = config.getfloat( "display_driver", "device_timeout") driver_name = "bixolon" if config.has_option("display_driver", "driver_name"): driver_name = config.get("display_driver", "driver_name") display_driver = DisplayDriver(driver_config, use_driver_name=driver_name) drivers["display_driver"] = display_driver
self.status = {"status": "connected", "messages": []} # When I use Odoo POS v8, it regularly goes through that code # and sends 999.99 to the credit card reader !!! # Si I comment the line below -- Alexis # telium_driver.push_task('transaction_start', json.dumps( # self.get_payment_info_from_price(999.99, 'card'), sort_keys=True)) # TODO Improve : Get the real model connected if self.status["status"] == "connected": self.vendor_product = "telium_image" else: self.vendor_product = False return self.status driver_config = {} if config.get("telium_driver", "device_name"): driver_config["telium_terminal_device_name"] = config.get( "telium_driver", "device_name") if config.getint("telium_driver", "device_rate"): driver_config["telium_terminal_device_rate"] = config.getint( "telium_driver", "device_rate") telium_driver = TeliumDriver(driver_config) drivers["telium"] = telium_driver @app.route("/hw_proxy/payment_terminal_transaction_start", methods=["POST", "GET", "PUT"]) def payment_terminal_transaction_start(): app.logger.debug("Telium: Call payment_terminal_transaction_start") payment_info = request.json["params"]["payment_info"]
self.set_status('connected') # When I use Odoo POS v8, it regularly displays # "PyWebDriver / PosBox Status" on the LCD !!! # So I comment the line below -- Alexis de Lattre # display_driver.push_task( # 'send_text', [_(u'PyWebDriver'), _(u'PosBox Status')]) # TODO Improve Me # For the time being, it's not possible to know if the display # is 'disconnected' in 'error' state # Maybe could be possible, improving pyposdisplay library. except Exception: pass return self.status driver_config = {} if config.get('display_driver', 'device_name'): driver_config['customer_display_device_name'] =\ config.get('display_driver', 'device_name') if config.getint('display_driver', 'device_rate'): driver_config['customer_display_device_rate'] =\ config.getint('display_driver', 'device_rate') if config.getfloat('display_driver', 'device_timeout'): driver_config['customer_display_device_timeout'] =\ config.getfloat('display_driver', 'device_timeout') driver_name = 'bixolon' if config.has_option('display_driver', 'driver_name'): driver_name = config.get('display_driver', 'driver_name') display_driver = DisplayDriver(driver_config, use_driver_name=driver_name) drivers['display_driver'] = display_driver
def __init__(self, *args, **kwargs): self.encoding = config.get('odoo', 'force_receipt_encoding') self.vendor_product = None ThreadDriver.__init__(self, args, kwargs)
# Paymentlines eprint.set(align='center') for line in receipt['paymentlines']: eprint.text(printline(line['journal'], money(line['amount']), ratio=0.6)) eprint.text('\n'); eprint.set(align='center',height=2) eprint.text(printline(_(u' CHANGE'),money(receipt['change']),width=40, ratio=0.6)) eprint.set(align='center') eprint.text('\n'); # Extra Payment info if receipt['total_discount'] != 0: eprint.text(printline(_(u'Discounts'),money(receipt['total_discount']),width=40, ratio=0.6)) if taxincluded: print_taxes() eprint.text(printline(_(u'Taxes'),money(receipt['total_tax']),width=40, ratio=0.6)) # Footer if check(receipt.get('footer')): eprint.text('\n'+receipt['footer']+'\n\n') eprint.text(receipt['name']+'\n') eprint.text( str(receipt['date']['date']).zfill(2) +'/'+ str(receipt['date']['month']+1).zfill(2) +'/'+ str(receipt['date']['year']).zfill(4) +' '+ str(receipt['date']['hour']).zfill(2) +':'+ str(receipt['date']['minute']).zfill(2) ) drivers['escpos'] = EscposDriver(port=config.get('flask', 'port'))
self.set_status('connected') # When I use Odoo POS v8, it regularly displays # "PyWebDriver / PosBox Status" on the LCD !!! # So I comment the line below -- Alexis de Lattre # display_driver.push_task( # 'send_text', [_(u'PyWebDriver'), _(u'PosBox Status')]) # TODO Improve Me # For the time being, it's not possible to know if the display # is 'disconnected' in 'error' state # Maybe could be possible, improving pyposdisplay library. except Exception as e: pass return self.status driver_config = {} if config.get('display_driver', 'device_name'): driver_config['customer_display_device_name'] =\ config.get('display_driver', 'device_name') if config.getint('display_driver', 'device_rate'): driver_config['customer_display_device_rate'] =\ config.getint('display_driver', 'device_rate') if config.getint('display_driver', 'device_timeout'): driver_config['customer_display_device_timeout'] =\ config.getint('display_driver', 'device_timeout') display_driver = DisplayDriver(driver_config) drivers['display_driver'] = display_driver @app.route( '/hw_proxy/send_text_customer_display', methods=['POST', 'GET', 'PUT', 'OPTIONS'])
def get_status(self): self.status = {'status': 'connected', 'messages': []} # When I use Odoo POS v8, it regularly goes through that code # and sends 999.99 to the credit card reader !!! # Si I comment the line below -- Alexis # telium_driver.push_task('transaction_start', json.dumps( # self.get_payment_info_from_price(999.99, 'card'), sort_keys=True)) # TODO Improve : Get the real model connected if self.status['status'] == 'connected': self.vendor_product = 'telium_image' else: self.vendor_product = False return self.status driver_config = {} if config.get('telium_driver', 'device_name'): driver_config['telium_terminal_device_name'] =\ config.get('telium_driver', 'device_name') if config.getint('telium_driver', 'device_rate'): driver_config['telium_terminal_device_rate'] =\ config.getint('telium_driver', 'device_rate') telium_driver = TeliumDriver(driver_config) drivers['telium'] = telium_driver @app.route('/hw_proxy/payment_terminal_transaction_start', methods=['POST', 'GET', 'PUT', 'OPTIONS']) @cross_origin(headers=['Content-Type']) def payment_terminal_transaction_start(): app.logger.debug('Telium: Call payment_terminal_transaction_start') payment_info = request.json['params']['payment_info']