From 738868a1db9544700c623787aec2f6e408f77b2b Mon Sep 17 00:00:00 2001 From: Antoine Prieels Date: Fri, 22 Nov 2019 09:05:46 +0000 Subject: [PATCH] [IMP] hw_drivers: Dual customer display MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Customer displays were all using the same URL and therefore could only show the same products. We now use different URLs per screen. Two screens connected to the same IoT Box can now display customer displays from different POS. closes odoo/odoo#41026 Taskid: 2123511 X-original-commit: 12569b0e7f7a9e447f8df908597131911c5cfef8 Signed-off-by: Antoine Prieƫls --- addons/hw_drivers/drivers/DisplayDriver.py | 22 +++++++++++++++------- addons/hw_drivers/static/src/js/worker.js | 2 +- addons/hw_drivers/views/pos_display.html | 1 + 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/addons/hw_drivers/drivers/DisplayDriver.py b/addons/hw_drivers/drivers/DisplayDriver.py index 167b485586d..aed483fc5ea 100644 --- a/addons/hw_drivers/drivers/DisplayDriver.py +++ b/addons/hw_drivers/drivers/DisplayDriver.py @@ -71,7 +71,7 @@ class DisplayDriver(Driver): def run(self): while self.device_identifier != 'distant_display': time.sleep(60) - if self.url != 'http://localhost:8069/point_of_sale/display/': + if self.url != 'http://localhost:8069/point_of_sale/display/' + self.device_identifier: # Refresh the page every minute self.call_xdotools('F5') @@ -80,7 +80,7 @@ class DisplayDriver(Driver): os.environ['XAUTHORITY'] = '/run/lightdm/pi/xauthority' firefox_env = os.environ.copy() firefox_env['HOME'] = '/tmp/' + self._x_screen - self.url = url or 'http://localhost:8069/point_of_sale/display/' + self.url = url or 'http://localhost:8069/point_of_sale/display/' + self.device_identifier new_window = subprocess.call(['xdotool', 'search', '--onlyvisible', '--screen', self._x_screen, '--class', 'Firefox']) subprocess.Popen(['firefox', self.url], env=firefox_env) if new_window: @@ -169,9 +169,13 @@ class DisplayController(http.Controller): return {'status': 'OWNER'} return {'status': 'NOWNER'} - @http.route(['/point_of_sale/get_serialized_order'], type='json', auth='none') - def get_serialized_order(self): - display = DisplayDriver.get_default_display() + @http.route(['/point_of_sale/get_serialized_order', '/point_of_sale/get_serialized_order/'], type='json', auth='none') + def get_serialized_order(self, display_identifier=None): + if display_identifier: + display = iot_devices.get(display_identifier) + else: + display = DisplayDriver.get_default_display() + if display: return display.get_serialized_order() return { @@ -179,8 +183,8 @@ class DisplayController(http.Controller): 'error': "No display found", } - @http.route(['/point_of_sale/display'], type='http', auth='none') - def display(self): + @http.route(['/point_of_sale/display', '/point_of_sale/display/'], type='http', auth='none') + def display(self, display_identifier=None): cust_js = None interfaces = ni.interfaces() @@ -200,9 +204,13 @@ class DisplayController(http.Controller): 'icon': 'sitemap' if 'eth' in iface_id else 'wifi', }) + if not display_identifier: + display_identifier = DisplayDriver.get_default_display().device_identifier + return pos_display_template.render({ 'title': "Odoo -- Point of Sale", 'breadcrumb': 'POS Client display', 'cust_js': cust_js, 'display_ifaces': display_ifaces, + 'display_identifier': display_identifier, }) diff --git a/addons/hw_drivers/static/src/js/worker.js b/addons/hw_drivers/static/src/js/worker.js index a485a946588..8de756173a7 100644 --- a/addons/hw_drivers/static/src/js/worker.js +++ b/addons/hw_drivers/static/src/js/worker.js @@ -8,7 +8,7 @@ function longpolling() { $.ajax({ type: 'POST', - url: window.location.origin+'/point_of_sale/get_serialized_order', + url: window.location.origin + '/point_of_sale/get_serialized_order/' + display_identifier, dataType: 'json', beforeSend: function(xhr){xhr.setRequestHeader('Content-Type', 'application/json');}, data: JSON.stringify({jsonrpc: '2.0'}), diff --git a/addons/hw_drivers/views/pos_display.html b/addons/hw_drivers/views/pos_display.html index b7cb5fd52bb..4177462f072 100644 --- a/addons/hw_drivers/views/pos_display.html +++ b/addons/hw_drivers/views/pos_display.html @@ -9,6 +9,7 @@