Exemple #1
0
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
Exemple #2
0
 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)
Exemple #3
0
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)
Exemple #5
0
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)
Exemple #6
0
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,
    )
Exemple #7
0
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)
Exemple #8
0
        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))
Exemple #9
0
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)
Exemple #10
0
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
Exemple #11
0
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)
Exemple #12
0
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'
    },
Exemple #13
0
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,
Exemple #14
0
    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():
Exemple #15
0
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__)
Exemple #16
0
    def plc_init(request):
        client = PLC()
        client.Micro800 = config.get('plc', 'micro800') or False
        client.IPAddress = request.get('url', '')

        return client
Exemple #17
0
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__)
Exemple #18
0
                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
Exemple #19
0
        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"]
Exemple #20
0
                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
Exemple #21
0
 def __init__(self, *args, **kwargs):
     self.encoding = config.get('odoo', 'force_receipt_encoding')
     self.vendor_product = None
     ThreadDriver.__init__(self, args, kwargs)
Exemple #22
0
        # 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'))
Exemple #23
0
                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'])
Exemple #24
0
        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']
Exemple #25
0
 def __init__(self, *args, **kwargs):
     self.encoding = config.get('odoo', 'force_receipt_encoding')
     self.vendor_product = None
     ThreadDriver.__init__(self, args, kwargs)