openerp-community-reviewer team mailing list archive
-
openerp-community-reviewer team
-
Mailing list archive
-
Message #07792
[Merge] lp:~sylvain-legal/openerp-pos/7.0_pos_restaurant into lp:openerp-pos
Sylvain LE GAL (GRAP) has proposed merging lp:~sylvain-legal/openerp-pos/7.0_pos_restaurant into lp:openerp-pos with lp:~sylvain-legal/openerp-pos/7.0_pos_second_header as a prerequisite.
Commit message:
[ADD] Add new module to manage restaurant informations in Point Of Sale
Requested reviews:
OpenERP Community Reviewer/Maintainer (openerp-community-reviewer)
For more details, see:
https://code.launchpad.net/~sylvain-legal/openerp-pos/7.0_pos_restaurant/+merge/228822
This module add extra-features for point of Sale module related to restaurant.
For the time being, it adds:
- pos_table model to select the table of the customers;
- a field in pos_order to select the number of covers;
That features are available in back-end AND front-end views.
Nota: depends on pos_second_header module, not merged yet.
--
https://code.launchpad.net/~sylvain-legal/openerp-pos/7.0_pos_restaurant/+merge/228822
Your team OpenERP Community Reviewer/Maintainer is requested to review the proposed merge of lp:~sylvain-legal/openerp-pos/7.0_pos_restaurant into lp:openerp-pos.
=== added file '__init__.py'
--- __init__.py 1970-01-01 00:00:00 +0000
+++ __init__.py 2014-07-30 10:55:25 +0000
@@ -0,0 +1,23 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# Point Of Sale - Restaurant module for OpenERP
+# Copyright (C) 2013-Today GRAP (http://www.grap.coop)
+# @author Sylvain LE GAL (https://twitter.com/legalsylvain)
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+import model
=== added file '__openerp__.py'
--- __openerp__.py 1970-01-01 00:00:00 +0000
+++ __openerp__.py 2014-07-30 10:55:25 +0000
@@ -0,0 +1,69 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# Point Of Sale - Restaurant module for OpenERP
+# Copyright (C) 2013-Today GRAP (http://www.grap.coop)
+# @author Sylvain LE GAL (https://twitter.com/legalsylvain)
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+{
+ 'name': 'Point of Sale - Restaurant',
+ 'version': '0.2',
+ 'category': 'Sale',
+ 'description': """
+Add extra informations for restaurant
+=====================================
+Features :
+----------
+ * Add a model 'pos.table' managed in point_of_sale configuration menu;
+ * Add a field table_id on pos_order;
+ * Possibility to select table in back-office view and tactile view;
+
+Copyright, Authors:
+-------------------------------
+ * Copyright: 2013, GRAP: Groupement Régional Alimentaire de Proximité;
+ * Author:
+ * Sylvain LE GAL (https://twitter.com/legalsylvain);""",
+ 'author': 'GRAP',
+ 'website': 'http://www.grap.coop',
+ 'license': 'AGPL-3',
+ 'depends': [
+ 'point_of_sale',
+ 'pos_second_header',
+ ],
+ 'demo': [
+ 'demo/pos_table.yml',
+ 'demo/sale_shop.yml',
+ ],
+ 'data': [
+ 'security/ir_rule.yml',
+ 'security/ir_module_category.yml',
+ 'security/res_groups.yml',
+ 'security/ir_model_access.yml',
+ 'view/view.xml',
+ 'view/action.xml',
+ 'view/menu.xml',
+ ],
+ 'qweb': [
+ 'static/src/xml/pr.xml',
+ ],
+ 'js': [
+ 'static/src/js/pr.js',
+ ],
+ 'css': [
+ 'static/src/css/pr.css',
+ ],
+}
=== added directory 'demo'
=== added file 'demo/pos_table.yml'
--- demo/pos_table.yml 1970-01-01 00:00:00 +0000
+++ demo/pos_table.yml 2014-07-30 10:55:25 +0000
@@ -0,0 +1,102 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# Point Of Sale - Restaurant module for OpenERP
+# Copyright (C) 2013-2014 GRAP (http://www.grap.coop)
+# @author Sylvain LE GAL (https://twitter.com/legalsylvain)
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+- !record {model: pos.table, id: pos_table_01}:
+ name: Table 01
+ shop_id: sale.sale_shop_1
+ image: iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY2NUNGMjhDNEJGNzExRTI5MTMwOUFBNzYyRjZGRjBBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjY2NUNGMjhENEJGNzExRTI5MTMwOUFBNzYyRjZGRjBBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjY1Q0YyOEE0QkY3MTFFMjkxMzA5QUE3NjJGNkZGMEEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjY1Q0YyOEI0QkY3MTFFMjkxMzA5QUE3NjJGNkZGMEEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4WE30uAAAB+0lEQVR42uybu0oDQRSGd0JYEJJeSKUP4QMIgpWtzyAE7MSX8BEE2zTWlkLqIMQmlZUQ0FKbtRnPkFGWZZadMzMnk7D/Dz+Egbl9c9m5RWmtixgppYqcii3/oOi5BgEtXpKn9UZouCvcxC0Dy3tAviU/kt+NqSzaZVYX8jVpQn7ZRPsP4wLQNo0Js/In5JUjXae968SovGm1ZTODQADapuXbE07JlW/lyR8SAKYuwhEAtE2zSyPymlF5Vg/gzAGXAnOQT5pX5EPRz4hnD6gEekDlUcQ5t/U5PUD5fkebMyvFU65wE1SrKCe8TV92GHAbVol8BjNoJJk4FkIAAAAAAAAAAAAAAAAA0FMNQyPSJujcHlE1xQ3PKs5usCrCz/La9E0ed23sArf5yXeDC4EGeN2nOWAmkP8s+xgIPRRNYN9D0aD0kx+K1o7Fl4kq73ssvjsAaj3hmvwcULC5jcuZTEUBqIR3g20JxV4e7sxXACvBDn16hnF1TL4hP5F/si2EMg6BusxK0lyTnZEvyEexQ2DfADRlALz1GUBrvpgEsR0GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAUpejovmmBHDvCHvYAoC4fLkvRBwvRv5kXn3cFZv/+K3t73ILAJz55nghkkWx5R/mLkBu/QowANEUSRYOoowzAAAAAElFTkSuQmCC
+
+- !record {model: pos.table, id: pos_table_02}:
+ name: Table 02
+ shop_id: sale.sale_shop_1
+ image: iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY2NUNGMjhDNEJGNzExRTI5MTMwOUFBNzYyRjZGRjBBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjY2NUNGMjhENEJGNzExRTI5MTMwOUFBNzYyRjZGRjBBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjY1Q0YyOEE0QkY3MTFFMjkxMzA5QUE3NjJGNkZGMEEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjY1Q0YyOEI0QkY3MTFFMjkxMzA5QUE3NjJGNkZGMEEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4WE30uAAAB+0lEQVR42uybu0oDQRSGd0JYEJJeSKUP4QMIgpWtzyAE7MSX8BEE2zTWlkLqIMQmlZUQ0FKbtRnPkFGWZZadMzMnk7D/Dz+Egbl9c9m5RWmtixgppYqcii3/oOi5BgEtXpKn9UZouCvcxC0Dy3tAviU/kt+NqSzaZVYX8jVpQn7ZRPsP4wLQNo0Js/In5JUjXae968SovGm1ZTODQADapuXbE07JlW/lyR8SAKYuwhEAtE2zSyPymlF5Vg/gzAGXAnOQT5pX5EPRz4hnD6gEekDlUcQ5t/U5PUD5fkebMyvFU65wE1SrKCe8TV92GHAbVol8BjNoJJk4FkIAAAAAAAAAAAAAAAAA0FMNQyPSJujcHlE1xQ3PKs5usCrCz/La9E0ed23sArf5yXeDC4EGeN2nOWAmkP8s+xgIPRRNYN9D0aD0kx+K1o7Fl4kq73ssvjsAaj3hmvwcULC5jcuZTEUBqIR3g20JxV4e7sxXACvBDn16hnF1TL4hP5F/si2EMg6BusxK0lyTnZEvyEexQ2DfADRlALz1GUBrvpgEsR0GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAUpejovmmBHDvCHvYAoC4fLkvRBwvRv5kXn3cFZv/+K3t73ILAJz55nghkkWx5R/mLkBu/QowANEUSRYOoowzAAAAAElFTkSuQmCC
+
+- !record {model: pos.table, id: pos_table_03}:
+ name: Table 03
+ shop_id: sale.sale_shop_1
+ image: iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY2NUNGMjhDNEJGNzExRTI5MTMwOUFBNzYyRjZGRjBBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjY2NUNGMjhENEJGNzExRTI5MTMwOUFBNzYyRjZGRjBBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjY1Q0YyOEE0QkY3MTFFMjkxMzA5QUE3NjJGNkZGMEEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjY1Q0YyOEI0QkY3MTFFMjkxMzA5QUE3NjJGNkZGMEEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4WE30uAAAB+0lEQVR42uybu0oDQRSGd0JYEJJeSKUP4QMIgpWtzyAE7MSX8BEE2zTWlkLqIMQmlZUQ0FKbtRnPkFGWZZadMzMnk7D/Dz+Egbl9c9m5RWmtixgppYqcii3/oOi5BgEtXpKn9UZouCvcxC0Dy3tAviU/kt+NqSzaZVYX8jVpQn7ZRPsP4wLQNo0Js/In5JUjXae968SovGm1ZTODQADapuXbE07JlW/lyR8SAKYuwhEAtE2zSyPymlF5Vg/gzAGXAnOQT5pX5EPRz4hnD6gEekDlUcQ5t/U5PUD5fkebMyvFU65wE1SrKCe8TV92GHAbVol8BjNoJJk4FkIAAAAAAAAAAAAAAAAA0FMNQyPSJujcHlE1xQ3PKs5usCrCz/La9E0ed23sArf5yXeDC4EGeN2nOWAmkP8s+xgIPRRNYN9D0aD0kx+K1o7Fl4kq73ssvjsAaj3hmvwcULC5jcuZTEUBqIR3g20JxV4e7sxXACvBDn16hnF1TL4hP5F/si2EMg6BusxK0lyTnZEvyEexQ2DfADRlALz1GUBrvpgEsR0GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAUpejovmmBHDvCHvYAoC4fLkvRBwvRv5kXn3cFZv/+K3t73ILAJz55nghkkWx5R/mLkBu/QowANEUSRYOoowzAAAAAElFTkSuQmCC
+
+- !record {model: pos.table, id: pos_table_04}:
+ name: Table 04
+ shop_id: sale.sale_shop_1
+ image: iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY2NUNGMjhDNEJGNzExRTI5MTMwOUFBNzYyRjZGRjBBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjY2NUNGMjhENEJGNzExRTI5MTMwOUFBNzYyRjZGRjBBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjY1Q0YyOEE0QkY3MTFFMjkxMzA5QUE3NjJGNkZGMEEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjY1Q0YyOEI0QkY3MTFFMjkxMzA5QUE3NjJGNkZGMEEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4WE30uAAAB+0lEQVR42uybu0oDQRSGd0JYEJJeSKUP4QMIgpWtzyAE7MSX8BEE2zTWlkLqIMQmlZUQ0FKbtRnPkFGWZZadMzMnk7D/Dz+Egbl9c9m5RWmtixgppYqcii3/oOi5BgEtXpKn9UZouCvcxC0Dy3tAviU/kt+NqSzaZVYX8jVpQn7ZRPsP4wLQNo0Js/In5JUjXae968SovGm1ZTODQADapuXbE07JlW/lyR8SAKYuwhEAtE2zSyPymlF5Vg/gzAGXAnOQT5pX5EPRz4hnD6gEekDlUcQ5t/U5PUD5fkebMyvFU65wE1SrKCe8TV92GHAbVol8BjNoJJk4FkIAAAAAAAAAAAAAAAAA0FMNQyPSJujcHlE1xQ3PKs5usCrCz/La9E0ed23sArf5yXeDC4EGeN2nOWAmkP8s+xgIPRRNYN9D0aD0kx+K1o7Fl4kq73ssvjsAaj3hmvwcULC5jcuZTEUBqIR3g20JxV4e7sxXACvBDn16hnF1TL4hP5F/si2EMg6BusxK0lyTnZEvyEexQ2DfADRlALz1GUBrvpgEsR0GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAUpejovmmBHDvCHvYAoC4fLkvRBwvRv5kXn3cFZv/+K3t73ILAJz55nghkkWx5R/mLkBu/QowANEUSRYOoowzAAAAAElFTkSuQmCC
+
+- !record {model: pos.table, id: pos_table_05}:
+ name: Table 05
+ shop_id: sale.sale_shop_1
+ image: iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY2NUNGMjhDNEJGNzExRTI5MTMwOUFBNzYyRjZGRjBBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjY2NUNGMjhENEJGNzExRTI5MTMwOUFBNzYyRjZGRjBBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjY1Q0YyOEE0QkY3MTFFMjkxMzA5QUE3NjJGNkZGMEEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjY1Q0YyOEI0QkY3MTFFMjkxMzA5QUE3NjJGNkZGMEEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4WE30uAAAB+0lEQVR42uybu0oDQRSGd0JYEJJeSKUP4QMIgpWtzyAE7MSX8BEE2zTWlkLqIMQmlZUQ0FKbtRnPkFGWZZadMzMnk7D/Dz+Egbl9c9m5RWmtixgppYqcii3/oOi5BgEtXpKn9UZouCvcxC0Dy3tAviU/kt+NqSzaZVYX8jVpQn7ZRPsP4wLQNo0Js/In5JUjXae968SovGm1ZTODQADapuXbE07JlW/lyR8SAKYuwhEAtE2zSyPymlF5Vg/gzAGXAnOQT5pX5EPRz4hnD6gEekDlUcQ5t/U5PUD5fkebMyvFU65wE1SrKCe8TV92GHAbVol8BjNoJJk4FkIAAAAAAAAAAAAAAAAA0FMNQyPSJujcHlE1xQ3PKs5usCrCz/La9E0ed23sArf5yXeDC4EGeN2nOWAmkP8s+xgIPRRNYN9D0aD0kx+K1o7Fl4kq73ssvjsAaj3hmvwcULC5jcuZTEUBqIR3g20JxV4e7sxXACvBDn16hnF1TL4hP5F/si2EMg6BusxK0lyTnZEvyEexQ2DfADRlALz1GUBrvpgEsR0GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAUpejovmmBHDvCHvYAoC4fLkvRBwvRv5kXn3cFZv/+K3t73ILAJz55nghkkWx5R/mLkBu/QowANEUSRYOoowzAAAAAElFTkSuQmCC
+
+- !record {model: pos.table, id: pos_table_06}:
+ name: Table 06
+ shop_id: sale.sale_shop_1
+ image: iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY2NUNGMjhDNEJGNzExRTI5MTMwOUFBNzYyRjZGRjBBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjY2NUNGMjhENEJGNzExRTI5MTMwOUFBNzYyRjZGRjBBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjY1Q0YyOEE0QkY3MTFFMjkxMzA5QUE3NjJGNkZGMEEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjY1Q0YyOEI0QkY3MTFFMjkxMzA5QUE3NjJGNkZGMEEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4WE30uAAAB+0lEQVR42uybu0oDQRSGd0JYEJJeSKUP4QMIgpWtzyAE7MSX8BEE2zTWlkLqIMQmlZUQ0FKbtRnPkFGWZZadMzMnk7D/Dz+Egbl9c9m5RWmtixgppYqcii3/oOi5BgEtXpKn9UZouCvcxC0Dy3tAviU/kt+NqSzaZVYX8jVpQn7ZRPsP4wLQNo0Js/In5JUjXae968SovGm1ZTODQADapuXbE07JlW/lyR8SAKYuwhEAtE2zSyPymlF5Vg/gzAGXAnOQT5pX5EPRz4hnD6gEekDlUcQ5t/U5PUD5fkebMyvFU65wE1SrKCe8TV92GHAbVol8BjNoJJk4FkIAAAAAAAAAAAAAAAAA0FMNQyPSJujcHlE1xQ3PKs5usCrCz/La9E0ed23sArf5yXeDC4EGeN2nOWAmkP8s+xgIPRRNYN9D0aD0kx+K1o7Fl4kq73ssvjsAaj3hmvwcULC5jcuZTEUBqIR3g20JxV4e7sxXACvBDn16hnF1TL4hP5F/si2EMg6BusxK0lyTnZEvyEexQ2DfADRlALz1GUBrvpgEsR0GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAUpejovmmBHDvCHvYAoC4fLkvRBwvRv5kXn3cFZv/+K3t73ILAJz55nghkkWx5R/mLkBu/QowANEUSRYOoowzAAAAAElFTkSuQmCC
+
+- !record {model: pos.table, id: pos_table_07}:
+ name: Table 07
+ shop_id: sale.sale_shop_1
+ image: iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY2NUNGMjhDNEJGNzExRTI5MTMwOUFBNzYyRjZGRjBBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjY2NUNGMjhENEJGNzExRTI5MTMwOUFBNzYyRjZGRjBBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjY1Q0YyOEE0QkY3MTFFMjkxMzA5QUE3NjJGNkZGMEEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjY1Q0YyOEI0QkY3MTFFMjkxMzA5QUE3NjJGNkZGMEEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4WE30uAAAB+0lEQVR42uybu0oDQRSGd0JYEJJeSKUP4QMIgpWtzyAE7MSX8BEE2zTWlkLqIMQmlZUQ0FKbtRnPkFGWZZadMzMnk7D/Dz+Egbl9c9m5RWmtixgppYqcii3/oOi5BgEtXpKn9UZouCvcxC0Dy3tAviU/kt+NqSzaZVYX8jVpQn7ZRPsP4wLQNo0Js/In5JUjXae968SovGm1ZTODQADapuXbE07JlW/lyR8SAKYuwhEAtE2zSyPymlF5Vg/gzAGXAnOQT5pX5EPRz4hnD6gEekDlUcQ5t/U5PUD5fkebMyvFU65wE1SrKCe8TV92GHAbVol8BjNoJJk4FkIAAAAAAAAAAAAAAAAA0FMNQyPSJujcHlE1xQ3PKs5usCrCz/La9E0ed23sArf5yXeDC4EGeN2nOWAmkP8s+xgIPRRNYN9D0aD0kx+K1o7Fl4kq73ssvjsAaj3hmvwcULC5jcuZTEUBqIR3g20JxV4e7sxXACvBDn16hnF1TL4hP5F/si2EMg6BusxK0lyTnZEvyEexQ2DfADRlALz1GUBrvpgEsR0GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAUpejovmmBHDvCHvYAoC4fLkvRBwvRv5kXn3cFZv/+K3t73ILAJz55nghkkWx5R/mLkBu/QowANEUSRYOoowzAAAAAElFTkSuQmCC
+
+- !record {model: pos.table, id: pos_table_08}:
+ name: Table 08
+ shop_id: sale.sale_shop_1
+ image: iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY2NUNGMjhDNEJGNzExRTI5MTMwOUFBNzYyRjZGRjBBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjY2NUNGMjhENEJGNzExRTI5MTMwOUFBNzYyRjZGRjBBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjY1Q0YyOEE0QkY3MTFFMjkxMzA5QUE3NjJGNkZGMEEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjY1Q0YyOEI0QkY3MTFFMjkxMzA5QUE3NjJGNkZGMEEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4WE30uAAAB+0lEQVR42uybu0oDQRSGd0JYEJJeSKUP4QMIgpWtzyAE7MSX8BEE2zTWlkLqIMQmlZUQ0FKbtRnPkFGWZZadMzMnk7D/Dz+Egbl9c9m5RWmtixgppYqcii3/oOi5BgEtXpKn9UZouCvcxC0Dy3tAviU/kt+NqSzaZVYX8jVpQn7ZRPsP4wLQNo0Js/In5JUjXae968SovGm1ZTODQADapuXbE07JlW/lyR8SAKYuwhEAtE2zSyPymlF5Vg/gzAGXAnOQT5pX5EPRz4hnD6gEekDlUcQ5t/U5PUD5fkebMyvFU65wE1SrKCe8TV92GHAbVol8BjNoJJk4FkIAAAAAAAAAAAAAAAAA0FMNQyPSJujcHlE1xQ3PKs5usCrCz/La9E0ed23sArf5yXeDC4EGeN2nOWAmkP8s+xgIPRRNYN9D0aD0kx+K1o7Fl4kq73ssvjsAaj3hmvwcULC5jcuZTEUBqIR3g20JxV4e7sxXACvBDn16hnF1TL4hP5F/si2EMg6BusxK0lyTnZEvyEexQ2DfADRlALz1GUBrvpgEsR0GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAUpejovmmBHDvCHvYAoC4fLkvRBwvRv5kXn3cFZv/+K3t73ILAJz55nghkkWx5R/mLkBu/QowANEUSRYOoowzAAAAAElFTkSuQmCC
+
+- !record {model: pos.table, id: pos_table_09}:
+ name: Table 09
+ shop_id: sale.sale_shop_1
+ image: iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY2NUNGMjhDNEJGNzExRTI5MTMwOUFBNzYyRjZGRjBBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjY2NUNGMjhENEJGNzExRTI5MTMwOUFBNzYyRjZGRjBBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjY1Q0YyOEE0QkY3MTFFMjkxMzA5QUE3NjJGNkZGMEEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjY1Q0YyOEI0QkY3MTFFMjkxMzA5QUE3NjJGNkZGMEEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4WE30uAAAB+0lEQVR42uybu0oDQRSGd0JYEJJeSKUP4QMIgpWtzyAE7MSX8BEE2zTWlkLqIMQmlZUQ0FKbtRnPkFGWZZadMzMnk7D/Dz+Egbl9c9m5RWmtixgppYqcii3/oOi5BgEtXpKn9UZouCvcxC0Dy3tAviU/kt+NqSzaZVYX8jVpQn7ZRPsP4wLQNo0Js/In5JUjXae968SovGm1ZTODQADapuXbE07JlW/lyR8SAKYuwhEAtE2zSyPymlF5Vg/gzAGXAnOQT5pX5EPRz4hnD6gEekDlUcQ5t/U5PUD5fkebMyvFU65wE1SrKCe8TV92GHAbVol8BjNoJJk4FkIAAAAAAAAAAAAAAAAA0FMNQyPSJujcHlE1xQ3PKs5usCrCz/La9E0ed23sArf5yXeDC4EGeN2nOWAmkP8s+xgIPRRNYN9D0aD0kx+K1o7Fl4kq73ssvjsAaj3hmvwcULC5jcuZTEUBqIR3g20JxV4e7sxXACvBDn16hnF1TL4hP5F/si2EMg6BusxK0lyTnZEvyEexQ2DfADRlALz1GUBrvpgEsR0GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAUpejovmmBHDvCHvYAoC4fLkvRBwvRv5kXn3cFZv/+K3t73ILAJz55nghkkWx5R/mLkBu/QowANEUSRYOoowzAAAAAElFTkSuQmCC
+
+- !record {model: pos.table, id: pos_table_10}:
+ name: Table 10
+ shop_id: sale.sale_shop_1
+ image: iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY2NUNGMjhDNEJGNzExRTI5MTMwOUFBNzYyRjZGRjBBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjY2NUNGMjhENEJGNzExRTI5MTMwOUFBNzYyRjZGRjBBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjY1Q0YyOEE0QkY3MTFFMjkxMzA5QUE3NjJGNkZGMEEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjY1Q0YyOEI0QkY3MTFFMjkxMzA5QUE3NjJGNkZGMEEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4WE30uAAAB+0lEQVR42uybu0oDQRSGd0JYEJJeSKUP4QMIgpWtzyAE7MSX8BEE2zTWlkLqIMQmlZUQ0FKbtRnPkFGWZZadMzMnk7D/Dz+Egbl9c9m5RWmtixgppYqcii3/oOi5BgEtXpKn9UZouCvcxC0Dy3tAviU/kt+NqSzaZVYX8jVpQn7ZRPsP4wLQNo0Js/In5JUjXae968SovGm1ZTODQADapuXbE07JlW/lyR8SAKYuwhEAtE2zSyPymlF5Vg/gzAGXAnOQT5pX5EPRz4hnD6gEekDlUcQ5t/U5PUD5fkebMyvFU65wE1SrKCe8TV92GHAbVol8BjNoJJk4FkIAAAAAAAAAAAAAAAAA0FMNQyPSJujcHlE1xQ3PKs5usCrCz/La9E0ed23sArf5yXeDC4EGeN2nOWAmkP8s+xgIPRRNYN9D0aD0kx+K1o7Fl4kq73ssvjsAaj3hmvwcULC5jcuZTEUBqIR3g20JxV4e7sxXACvBDn16hnF1TL4hP5F/si2EMg6BusxK0lyTnZEvyEexQ2DfADRlALz1GUBrvpgEsR0GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAUpejovmmBHDvCHvYAoC4fLkvRBwvRv5kXn3cFZv/+K3t73ILAJz55nghkkWx5R/mLkBu/QowANEUSRYOoowzAAAAAElFTkSuQmCC
+
+- !record {model: pos.table, id: pos_bar_01}:
+ name: Bar 01
+ shop_id: sale.sale_shop_1
+ image: iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjBBNzZGRkM4NEJGNjExRTJCOEMwOTIzQjBENkZDOTY2IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjBBNzZGRkM5NEJGNjExRTJCOEMwOTIzQjBENkZDOTY2Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MEE3NkZGQzY0QkY2MTFFMkI4QzA5MjNCMEQ2RkM5NjYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MEE3NkZGQzc0QkY2MTFFMkI4QzA5MjNCMEQ2RkM5NjYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6OpXa5AAADoklEQVR42uxav2sbMRS+a6BQcAkUElrcpVuXQqFroasn/w0JDp08FbwGXAKe0tFQcGj/AoOnrFkzGTwVAoGCQ0pDINBgCDi4T+VdeajWk+5Oqk+yBA/j404/vtO97/skJYvFIskTUB5CHEBMMQ7w2kpK3v7/M54CAPREu1L0fAUgxUEZlzRNf8LPFjyX4n9RwRXE9qoAKFMeJGteigBwlL15fPuibEE0vESgYBI8hLiU8sAYYiP4JCiBMZBAaAWfBKWEWIefbxA1vHQB8RLidi2SIDQuBvyJXBKAfPApBaRlEYRZUMNZUMdLtzgLLtaFBsWAP5L/ApD9YFlgSSJMMPuPSTKcQ7z2kgWI1l8EFn88iwkAvQAH/9ezaGkw0/qBKt8rGO929AIaAI40z+wKJ5iFmDRSPJeEkKDDx0vusxJSX3Y1ff+qzaJE66u+o5nI8BILyKUrPbPvmgWQdWZMvw+NkiCpsM9UdgaxyQBQw9Wi7P5fRCi5EEKb2CdVf/u5zRBy+4ipdKhRYe+l+z87BGDI9FOMYaOQG8Q3OWEq75C+DP4jnX0h7XaY+ybZTC1sh3HqThUNCMX3FjvySFKDrmKMbSXY9lxxn+hz3cp6gCbBiIWRp9ihFxDXDgd/jW0k2OalSaK2siACpcmgfUJWgxoOAWgQ73HCzMqmkxUhKG1OZjI0aCO6pH5Orrdd7wtw9Ngkb+jY4uCPyQxrFqE7mwBw9HhDvtEnEOcWBv8d68pyzE0RurO6KKqhR5ql30DclRj8HdahYxkt3VlfFdbQ44B8r60SALQMdIYR3blaFufocaekSKIg7pSlOycAaOhxRpbF8ook+hmpQM5Fdy4B4OjxDI1KHpFExQ5nctor3xmSzJCKHofkngYjpmSxw5mcfiW2xiQAOHrsGIqkroHJGdE9yCoBwNEjNU0qkUTFjsrkTMgnVUkAOHqkpkkWSedE7KhMznTZokoVARDllSJzU9OUiSQqdlQmZ6baaKkqABw99iSR1NKYnDnxGF4BwNFjUwGYku58BUBFj9Q0cSanX+kTIoYAqOgxU3sqlTgyOXLjAwAcPQ4UPmFCTp0EAYDOPWrpLgQAOHrU0l0oAHD0yNJdSACo6LHt3TE5PE9QeFdLrsrXQ1LBnQ+IAEQAIgARgAhABCACEAGIAEQAIgARgCLlHcSpwcrPMnfIxSnWbbW4sMN0B8h2+QHxrOp2+N7hjL334RPYwzfl4u3v2a70twADADekR6mcQsJuAAAAAElFTkSuQmCC
+
+- !record {model: pos.table, id: pos_bar_02}:
+ name: Bar 02
+ shop_id: sale.sale_shop_1
+ image: iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjBBNzZGRkM4NEJGNjExRTJCOEMwOTIzQjBENkZDOTY2IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjBBNzZGRkM5NEJGNjExRTJCOEMwOTIzQjBENkZDOTY2Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MEE3NkZGQzY0QkY2MTFFMkI4QzA5MjNCMEQ2RkM5NjYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MEE3NkZGQzc0QkY2MTFFMkI4QzA5MjNCMEQ2RkM5NjYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6OpXa5AAADoklEQVR42uxav2sbMRS+a6BQcAkUElrcpVuXQqFroasn/w0JDp08FbwGXAKe0tFQcGj/AoOnrFkzGTwVAoGCQ0pDINBgCDi4T+VdeajWk+5Oqk+yBA/j404/vtO97/skJYvFIskTUB5CHEBMMQ7w2kpK3v7/M54CAPREu1L0fAUgxUEZlzRNf8LPFjyX4n9RwRXE9qoAKFMeJGteigBwlL15fPuibEE0vESgYBI8hLiU8sAYYiP4JCiBMZBAaAWfBKWEWIefbxA1vHQB8RLidi2SIDQuBvyJXBKAfPApBaRlEYRZUMNZUMdLtzgLLtaFBsWAP5L/ApD9YFlgSSJMMPuPSTKcQ7z2kgWI1l8EFn88iwkAvQAH/9ezaGkw0/qBKt8rGO929AIaAI40z+wKJ5iFmDRSPJeEkKDDx0vusxJSX3Y1ff+qzaJE66u+o5nI8BILyKUrPbPvmgWQdWZMvw+NkiCpsM9UdgaxyQBQw9Wi7P5fRCi5EEKb2CdVf/u5zRBy+4ipdKhRYe+l+z87BGDI9FOMYaOQG8Q3OWEq75C+DP4jnX0h7XaY+ybZTC1sh3HqThUNCMX3FjvySFKDrmKMbSXY9lxxn+hz3cp6gCbBiIWRp9ihFxDXDgd/jW0k2OalSaK2siACpcmgfUJWgxoOAWgQ73HCzMqmkxUhKG1OZjI0aCO6pH5Orrdd7wtw9Ngkb+jY4uCPyQxrFqE7mwBw9HhDvtEnEOcWBv8d68pyzE0RurO6KKqhR5ql30DclRj8HdahYxkt3VlfFdbQ44B8r60SALQMdIYR3blaFufocaekSKIg7pSlOycAaOhxRpbF8ook+hmpQM5Fdy4B4OjxDI1KHpFExQ5nctor3xmSzJCKHofkngYjpmSxw5mcfiW2xiQAOHrsGIqkroHJGdE9yCoBwNEjNU0qkUTFjsrkTMgnVUkAOHqkpkkWSedE7KhMznTZokoVARDllSJzU9OUiSQqdlQmZ6baaKkqABw99iSR1NKYnDnxGF4BwNFjUwGYku58BUBFj9Q0cSanX+kTIoYAqOgxU3sqlTgyOXLjAwAcPQ4UPmFCTp0EAYDOPWrpLgQAOHrU0l0oAHD0yNJdSACo6LHt3TE5PE9QeFdLrsrXQ1LBnQ+IAEQAIgARgAhABCACEAGIAEQAIgARgCLlHcSpwcrPMnfIxSnWbbW4sMN0B8h2+QHxrOp2+N7hjL334RPYwzfl4u3v2a70twADADekR6mcQsJuAAAAAElFTkSuQmCC
+
+- !record {model: pos.table, id: pos_bar_03}:
+ name: Bar 03
+ shop_id: sale.sale_shop_1
+ image: iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjBBNzZGRkM4NEJGNjExRTJCOEMwOTIzQjBENkZDOTY2IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjBBNzZGRkM5NEJGNjExRTJCOEMwOTIzQjBENkZDOTY2Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MEE3NkZGQzY0QkY2MTFFMkI4QzA5MjNCMEQ2RkM5NjYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MEE3NkZGQzc0QkY2MTFFMkI4QzA5MjNCMEQ2RkM5NjYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6OpXa5AAADoklEQVR42uxav2sbMRS+a6BQcAkUElrcpVuXQqFroasn/w0JDp08FbwGXAKe0tFQcGj/AoOnrFkzGTwVAoGCQ0pDINBgCDi4T+VdeajWk+5Oqk+yBA/j404/vtO97/skJYvFIskTUB5CHEBMMQ7w2kpK3v7/M54CAPREu1L0fAUgxUEZlzRNf8LPFjyX4n9RwRXE9qoAKFMeJGteigBwlL15fPuibEE0vESgYBI8hLiU8sAYYiP4JCiBMZBAaAWfBKWEWIefbxA1vHQB8RLidi2SIDQuBvyJXBKAfPApBaRlEYRZUMNZUMdLtzgLLtaFBsWAP5L/ApD9YFlgSSJMMPuPSTKcQ7z2kgWI1l8EFn88iwkAvQAH/9ezaGkw0/qBKt8rGO929AIaAI40z+wKJ5iFmDRSPJeEkKDDx0vusxJSX3Y1ff+qzaJE66u+o5nI8BILyKUrPbPvmgWQdWZMvw+NkiCpsM9UdgaxyQBQw9Wi7P5fRCi5EEKb2CdVf/u5zRBy+4ipdKhRYe+l+z87BGDI9FOMYaOQG8Q3OWEq75C+DP4jnX0h7XaY+ybZTC1sh3HqThUNCMX3FjvySFKDrmKMbSXY9lxxn+hz3cp6gCbBiIWRp9ihFxDXDgd/jW0k2OalSaK2siACpcmgfUJWgxoOAWgQ73HCzMqmkxUhKG1OZjI0aCO6pH5Orrdd7wtw9Ngkb+jY4uCPyQxrFqE7mwBw9HhDvtEnEOcWBv8d68pyzE0RurO6KKqhR5ql30DclRj8HdahYxkt3VlfFdbQ44B8r60SALQMdIYR3blaFufocaekSKIg7pSlOycAaOhxRpbF8ook+hmpQM5Fdy4B4OjxDI1KHpFExQ5nctor3xmSzJCKHofkngYjpmSxw5mcfiW2xiQAOHrsGIqkroHJGdE9yCoBwNEjNU0qkUTFjsrkTMgnVUkAOHqkpkkWSedE7KhMznTZokoVARDllSJzU9OUiSQqdlQmZ6baaKkqABw99iSR1NKYnDnxGF4BwNFjUwGYku58BUBFj9Q0cSanX+kTIoYAqOgxU3sqlTgyOXLjAwAcPQ4UPmFCTp0EAYDOPWrpLgQAOHrU0l0oAHD0yNJdSACo6LHt3TE5PE9QeFdLrsrXQ1LBnQ+IAEQAIgARgAhABCACEAGIAEQAIgARgCLlHcSpwcrPMnfIxSnWbbW4sMN0B8h2+QHxrOp2+N7hjL334RPYwzfl4u3v2a70twADADekR6mcQsJuAAAAAElFTkSuQmCC
+
+- !record {model: pos.table, id: pos_terrace_01}:
+ name: Terrace 01
+ shop_id: sale.sale_shop_1
+ image: iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjZEMUEzMTFENEJGMzExRTI4RTgxRjY0NDhDNDMzNjg1IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjZEMUEzMTFFNEJGMzExRTI4RTgxRjY0NDhDNDMzNjg1Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NkQxQTMxMUI0QkYzMTFFMjhFODFGNjQ0OEM0MzM2ODUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NkQxQTMxMUM0QkYzMTFFMjhFODFGNjQ0OEM0MzM2ODUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7xX2nFAAAD7UlEQVR42uxb/2dbURS/WyaUUkIIYZQSQigh9KexnzadsZ9K2E8j/0F/DSVTRn8qIz/MGKOEEEJqtSmjlEzHdD+OkSmP0EqlSsjutRPL4n45973zXl723uFDvHdz7znn3Xvu+XIvY/OhLMcBRw9wAM8iQTmOPsd4BuJZPgoKaEiEn6AZBQVcahQwCJqZO3NQwDhMPN1lEadYAVFXwD2LtmWOpxwpjq8cLzmuXIwp/rOieHftUo5ljm2OEvRxyPGGSkkJcFRmLXYPBrSlJvE2KHyHH5K+2hxJCgVUNAxfulBCntAREu0dDX/bFAroaAZwq4QsOEQXgIYLV7hgEF7ghEIBx4ZBJkrIBWi7UqA4E19nFLvAN0QbYdR2A1TAK44MEe+o6eogtB2kG9tD8rNGNWDJ4MOHTQFDjofUg5qU0EJsp4849jhOObocI0AXnu1Bm4Shr3dBCz+thL7CCKq2MLFW64gZNNtfXbPO04plOfBT+NktzAFliC+/Kmm3xFEDpsYuMYA+ljzwMRfKwJQeE+EUafVDQescPwmFn3a918MufAa5RXlRQmhnQhI57VsQWRbBo0vB7zK8wyyHZBgVUDMw/gEZ7OShra6vWtiEzxqsvRuGdwy7Q6jqCPsaZnc89KtTwn5YhF8G70vGZMfHcHwIY8+dygoGRxCze6U89CUbo0yVFJ2u1cm2Hl3t7oHi+SFROPod+rIZ20oeVa0Om7I6UbSvEM6yikXGx1qehoUjIktaqnIFBUIFFBRjOJK21vLYRGmymP9W0TZNqIC0YoxbSVsreeLKEMcni/ZHkmdXmriAMsZgyLGt5cn7ZARfzMkIupJnOk8/29CUt68rBmgTKqCtGKNuSNq4kYfUEaI48uKrIxS7wkT0WrPWqh76rS5CMIQJh6vEwocuHMYkRDoWCZH2oiVEBInU9bmB8RG4n1uQBlsBFOFZU2PwJjhn8jR5KGiN4eqIbuEwwnqfX1Rk/mSGe9D3QtB/XRgRkdl7+CJ9MFg5hU3Y1fgIGAyhD9maX2V/S2Pk3p0uLr9QMFrUzAbq4uh9RX/ig5T8FF5n4I4N/xfFjE1wYEQ5/Iz9e5SlC+82mbnw0WK0Z5Y8Cz/Z4oLangaM/uCWklJIqz5iwZWsMCV3h8om1JDr9jhAQ9xE8kQSL7SQ1jrIPTqLNKrGj4LJCd4g3j/h+GIpgJc7Q784HjPzWeUbCm1vMdoDSZR3hjYMM4GsNvFWYWndHEiivjO0odihxDgJynX3DKbqZ/bnOJtb19SPO0MiohSnRz+C4M+xf4zvDLGIU6yAWAHBk27vvo6CAnS1u6MozDrKO0MLSxR3hkjotwADAJFcu/YEPytUAAAAAElFTkSuQmCC
+
+- !record {model: pos.table, id: pos_terrace_02}:
+ name: Terrace 02
+ shop_id: sale.sale_shop_1
+ image: iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjZEMUEzMTFENEJGMzExRTI4RTgxRjY0NDhDNDMzNjg1IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjZEMUEzMTFFNEJGMzExRTI4RTgxRjY0NDhDNDMzNjg1Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NkQxQTMxMUI0QkYzMTFFMjhFODFGNjQ0OEM0MzM2ODUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NkQxQTMxMUM0QkYzMTFFMjhFODFGNjQ0OEM0MzM2ODUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7xX2nFAAAD7UlEQVR42uxb/2dbURS/WyaUUkIIYZQSQigh9KexnzadsZ9K2E8j/0F/DSVTRn8qIz/MGKOEEEJqtSmjlEzHdD+OkSmP0EqlSsjutRPL4n45973zXl723uFDvHdz7znn3Xvu+XIvY/OhLMcBRw9wAM8iQTmOPsd4BuJZPgoKaEiEn6AZBQVcahQwCJqZO3NQwDhMPN1lEadYAVFXwD2LtmWOpxwpjq8cLzmuXIwp/rOieHftUo5ljm2OEvRxyPGGSkkJcFRmLXYPBrSlJvE2KHyHH5K+2hxJCgVUNAxfulBCntAREu0dDX/bFAroaAZwq4QsOEQXgIYLV7hgEF7ghEIBx4ZBJkrIBWi7UqA4E19nFLvAN0QbYdR2A1TAK44MEe+o6eogtB2kG9tD8rNGNWDJ4MOHTQFDjofUg5qU0EJsp4849jhOObocI0AXnu1Bm4Shr3dBCz+thL7CCKq2MLFW64gZNNtfXbPO04plOfBT+NktzAFliC+/Kmm3xFEDpsYuMYA+ljzwMRfKwJQeE+EUafVDQescPwmFn3a918MufAa5RXlRQmhnQhI57VsQWRbBo0vB7zK8wyyHZBgVUDMw/gEZ7OShra6vWtiEzxqsvRuGdwy7Q6jqCPsaZnc89KtTwn5YhF8G70vGZMfHcHwIY8+dygoGRxCze6U89CUbo0yVFJ2u1cm2Hl3t7oHi+SFROPod+rIZ20oeVa0Om7I6UbSvEM6yikXGx1qehoUjIktaqnIFBUIFFBRjOJK21vLYRGmymP9W0TZNqIC0YoxbSVsreeLKEMcni/ZHkmdXmriAMsZgyLGt5cn7ZARfzMkIupJnOk8/29CUt68rBmgTKqCtGKNuSNq4kYfUEaI48uKrIxS7wkT0WrPWqh76rS5CMIQJh6vEwocuHMYkRDoWCZH2oiVEBInU9bmB8RG4n1uQBlsBFOFZU2PwJjhn8jR5KGiN4eqIbuEwwnqfX1Rk/mSGe9D3QtB/XRgRkdl7+CJ9MFg5hU3Y1fgIGAyhD9maX2V/S2Pk3p0uLr9QMFrUzAbq4uh9RX/ig5T8FF5n4I4N/xfFjE1wYEQ5/Iz9e5SlC+82mbnw0WK0Z5Y8Cz/Z4oLangaM/uCWklJIqz5iwZWsMCV3h8om1JDr9jhAQ9xE8kQSL7SQ1jrIPTqLNKrGj4LJCd4g3j/h+GIpgJc7Q784HjPzWeUbCm1vMdoDSZR3hjYMM4GsNvFWYWndHEiivjO0odihxDgJynX3DKbqZ/bnOJtb19SPO0MiohSnRz+C4M+xf4zvDLGIU6yAWAHBk27vvo6CAnS1u6MozDrKO0MLSxR3hkjotwADAJFcu/YEPytUAAAAAElFTkSuQmCC
+
+- !record {model: pos.table, id: pos_terrace_03}:
+ name: Terrace 03
+ shop_id: sale.sale_shop_1
+ image: iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjZEMUEzMTFENEJGMzExRTI4RTgxRjY0NDhDNDMzNjg1IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjZEMUEzMTFFNEJGMzExRTI4RTgxRjY0NDhDNDMzNjg1Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NkQxQTMxMUI0QkYzMTFFMjhFODFGNjQ0OEM0MzM2ODUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NkQxQTMxMUM0QkYzMTFFMjhFODFGNjQ0OEM0MzM2ODUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7xX2nFAAAD7UlEQVR42uxb/2dbURS/WyaUUkIIYZQSQigh9KexnzadsZ9K2E8j/0F/DSVTRn8qIz/MGKOEEEJqtSmjlEzHdD+OkSmP0EqlSsjutRPL4n45973zXl723uFDvHdz7znn3Xvu+XIvY/OhLMcBRw9wAM8iQTmOPsd4BuJZPgoKaEiEn6AZBQVcahQwCJqZO3NQwDhMPN1lEadYAVFXwD2LtmWOpxwpjq8cLzmuXIwp/rOieHftUo5ljm2OEvRxyPGGSkkJcFRmLXYPBrSlJvE2KHyHH5K+2hxJCgVUNAxfulBCntAREu0dDX/bFAroaAZwq4QsOEQXgIYLV7hgEF7ghEIBx4ZBJkrIBWi7UqA4E19nFLvAN0QbYdR2A1TAK44MEe+o6eogtB2kG9tD8rNGNWDJ4MOHTQFDjofUg5qU0EJsp4849jhOObocI0AXnu1Bm4Shr3dBCz+thL7CCKq2MLFW64gZNNtfXbPO04plOfBT+NktzAFliC+/Kmm3xFEDpsYuMYA+ljzwMRfKwJQeE+EUafVDQescPwmFn3a918MufAa5RXlRQmhnQhI57VsQWRbBo0vB7zK8wyyHZBgVUDMw/gEZ7OShra6vWtiEzxqsvRuGdwy7Q6jqCPsaZnc89KtTwn5YhF8G70vGZMfHcHwIY8+dygoGRxCze6U89CUbo0yVFJ2u1cm2Hl3t7oHi+SFROPod+rIZ20oeVa0Om7I6UbSvEM6yikXGx1qehoUjIktaqnIFBUIFFBRjOJK21vLYRGmymP9W0TZNqIC0YoxbSVsreeLKEMcni/ZHkmdXmriAMsZgyLGt5cn7ZARfzMkIupJnOk8/29CUt68rBmgTKqCtGKNuSNq4kYfUEaI48uKrIxS7wkT0WrPWqh76rS5CMIQJh6vEwocuHMYkRDoWCZH2oiVEBInU9bmB8RG4n1uQBlsBFOFZU2PwJjhn8jR5KGiN4eqIbuEwwnqfX1Rk/mSGe9D3QtB/XRgRkdl7+CJ9MFg5hU3Y1fgIGAyhD9maX2V/S2Pk3p0uLr9QMFrUzAbq4uh9RX/ig5T8FF5n4I4N/xfFjE1wYEQ5/Iz9e5SlC+82mbnw0WK0Z5Y8Cz/Z4oLangaM/uCWklJIqz5iwZWsMCV3h8om1JDr9jhAQ9xE8kQSL7SQ1jrIPTqLNKrGj4LJCd4g3j/h+GIpgJc7Q784HjPzWeUbCm1vMdoDSZR3hjYMM4GsNvFWYWndHEiivjO0odihxDgJynX3DKbqZ/bnOJtb19SPO0MiohSnRz+C4M+xf4zvDLGIU6yAWAHBk27vvo6CAnS1u6MozDrKO0MLSxR3hkjotwADAJFcu/YEPytUAAAAAElFTkSuQmCC
+
=== added file 'demo/sale_shop.yml'
--- demo/sale_shop.yml 1970-01-01 00:00:00 +0000
+++ demo/sale_shop.yml 2014-07-30 10:55:25 +0000
@@ -0,0 +1,24 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# Point Of Sale - Restaurant module for OpenERP
+# Copyright (C) 2013-2014 GRAP (http://www.grap.coop)
+# @author Sylvain LE GAL (https://twitter.com/legalsylvain)
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+- !record {model: sale.shop, id: sale.sale_shop_1}:
+ max_covers: 30
=== added directory 'i18n'
=== added file 'i18n/fr.po'
--- i18n/fr.po 1970-01-01 00:00:00 +0000
+++ i18n/fr.po 2014-07-30 10:55:25 +0000
@@ -0,0 +1,210 @@
+##############################################################################
+#
+# Point Of Sale - Restaurant module for OpenERP
+# Copyright (C) 2013-2014 GRAP (http://www.grap.coop)
+# @author Sylvain LE GAL (https://twitter.com/legalsylvain)
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+# * pos_restaurant
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 7.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-04-16 15:38+0000\n"
+"PO-Revision-Date: 2014-04-16 15:38+0000\n"
+"Last-Translator: <>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: pos_restaurant
+#: field:pos.table,active:0
+msgid "Active"
+msgstr "Active"
+
+#. module: pos_restaurant
+#: help:pos.table,active:0
+msgid "By unchecking the active field you can disable a table without deleting it."
+msgstr "En décochant cette case, vous pouvez désactiver une table, sans la supprimer."
+
+#. module: pos_restaurant
+#. openerp-web
+#: code:addons/pos_restaurant/static/src/xml/pr.xml:42
+#: code:addons/pos_restaurant/static/src/xml/pr.xml:99
+#, python-format
+msgid "Cancel"
+msgstr "Annuler"
+
+#. module: pos_restaurant
+#: field:pos.table,company_id:0
+msgid "Company"
+msgstr "Société"
+
+#. module: pos_restaurant
+#. openerp-web
+#: code:addons/pos_restaurant/static/src/js/pr.js:51
+#: field:pos.order,covers:0
+#, python-format
+msgid "Covers"
+msgstr "Couverts"
+
+#. module: pos_restaurant
+#. openerp-web
+#: code:addons/pos_restaurant/static/src/xml/pr.xml:39
+#, python-format
+msgid "Covers Quantity Selection"
+msgstr "Sélection du nombre de couverts"
+
+#. module: pos_restaurant
+#: help:pos.order,covers:0
+msgid "Covers in a restaurant"
+msgstr "Nombre de couverts dans la restauration"
+
+#. module: pos_restaurant
+#. openerp-web
+#: code:addons/pos_restaurant/static/src/js/pr.js:182
+#, python-format
+msgid "Del."
+msgstr "Suppr."
+
+#. module: pos_restaurant
+#: model:ir.actions.act_window,help:pos_restaurant.action_view_pos_table
+msgid "Display and manage tables in restaurant."
+msgstr "Afficher et gérer les tables d'un restaurant."
+
+#. module: pos_restaurant
+#: field:pos.table,image:0
+msgid "Image"
+msgstr "Image"
+
+#. module: pos_restaurant
+#: model:res.groups,name:pos_restaurant.res_group_restaurant_manager
+msgid "Manager"
+msgstr "Responsable"
+
+#. module: pos_restaurant
+#: field:sale.shop,max_covers:0
+msgid "Max Covers"
+msgstr "Nombre de couverts maximum"
+
+#. module: pos_restaurant
+#: field:pos.table,name:0
+msgid "Name"
+msgstr "Nom"
+
+#. module: pos_restaurant
+#: code:_description:0
+#: model:ir.model,name:pos_restaurant.model_pos_order
+#, python-format
+msgid "Point of Sale"
+msgstr "Point de Vente"
+
+#. module: pos_restaurant
+#: model:ir.module.category,name:pos_restaurant.ir_module_category_restaurant
+#: model:ir.ui.menu,name:pos_restaurant.menu_pos_restaurant
+msgid "Restaurant"
+msgstr "Restaurant"
+
+#. module: pos_restaurant
+#: code:_description:0
+#: model:ir.model,name:pos_restaurant.model_pos_table
+#, python-format
+msgid "Restaurant table"
+msgstr "Table de restaurant"
+
+#. module: pos_restaurant
+#: model:ir.ui.menu,name:pos_restaurant.menu_table
+msgid "Restaurant tables"
+msgstr "Tables de restaurant"
+
+#. module: pos_restaurant
+#: code:_description:0
+#: model:ir.model,name:pos_restaurant.model_sale_shop
+#, python-format
+msgid "Sales Shop"
+msgstr "Magasin"
+
+#. module: pos_restaurant
+#: model:ir.module.category,description:pos_restaurant.ir_module_category_restaurant
+msgid "Select the level of access of restaurant informations in Point Of Sale"
+msgstr "Sélectionner le niveau d'accès aux informations liées à au restaurant dans le point de vente."
+
+#. module: pos_restaurant
+#: help:pos.table,shop_id:0
+msgid "Select the shop"
+msgstr "Choisir le magasin"
+
+#. module: pos_restaurant
+#: field:pos.table,shop_id:0
+msgid "Shop"
+msgstr "Magasin"
+
+#. module: pos_restaurant
+#. openerp-web
+#: code:addons/pos_restaurant/static/src/js/pr.js:171
+#: field:pos.order,table_id:0
+#, python-format
+msgid "Table"
+msgstr "Table"
+
+#. module: pos_restaurant
+#. openerp-web
+#: code:addons/pos_restaurant/static/src/xml/pr.xml:96
+#, python-format
+msgid "Table Selection"
+msgstr "Sélection d'une table"
+
+#. module: pos_restaurant
+#: sql_constraint:pos.table:0
+msgid "Table name must be unique by shop!"
+msgstr "Les noms de table doivent être unique par magasin!"
+
+#. module: pos_restaurant
+#: model:ir.actions.act_window,name:pos_restaurant.action_view_pos_table
+#: view:pos.table:0
+msgid "Tables"
+msgstr "Tables"
+
+#. module: pos_restaurant
+#: model:res.groups,comment:pos_restaurant.res_group_restaurant_manager
+msgid "The user can see and manage Restaurant field. (Covers, Table, etc.)"
+msgstr "L'utilisateur peut voir et modifier ou supprimer les champs liés à la restauration. (Couverts, Table, etc.)"
+
+#. module: pos_restaurant
+#: model:res.groups,comment:pos_restaurant.res_group_restaurant_user
+msgid "The user can see and use Restaurant field. (Covers, Table, etc.)"
+msgstr "L'utilisateur peut voir et utiliser les champs liés à la restauration. (Couverts, Table, etc.)"
+
+#. module: pos_restaurant
+#: help:sale.shop,max_covers:0
+msgid "This is the number of buttons displayed in the front-end point of sale."
+msgstr "C'est le nombre de boutons affichée dans le point de vente tactile."
+
+#. module: pos_restaurant
+#: model:res.groups,name:pos_restaurant.res_group_restaurant_user
+msgid "User"
+msgstr "Utilisateur"
+
+#. module: pos_restaurant
+#: help:pos.order,table_id:0
+msgid "select the table where the customers is."
+msgstr "Sélectionner la table où les clients se trouvent."
+
=== added directory 'model'
=== added file 'model/__init__.py'
--- model/__init__.py 1970-01-01 00:00:00 +0000
+++ model/__init__.py 2014-07-30 10:55:25 +0000
@@ -0,0 +1,25 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# Point Of Sale - Restaurant module for OpenERP
+# Copyright (C) 2013-2014 GRAP (http://www.grap.coop)
+# @author Sylvain LE GAL (https://twitter.com/legalsylvain)
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+import sale_shop
+import pos_order
+import pos_table
=== added file 'model/pos_order.py'
--- model/pos_order.py 1970-01-01 00:00:00 +0000
+++ model/pos_order.py 2014-07-30 10:55:25 +0000
@@ -0,0 +1,63 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# Point Of Sale - Restaurant module for OpenERP
+# Copyright (C) 2013-2014 GRAP (http://www.grap.coop)
+# @author Sylvain LE GAL (https://twitter.com/legalsylvain)
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+from openerp.osv import fields
+from openerp.osv.orm import Model
+
+
+class pos_order(Model):
+ _inherit = 'pos.order'
+
+ # Columns section
+ _columns = {
+ 'table_id': fields.many2one(
+ 'pos.table', 'Table',
+ groups="pos_restaurant.res_group_restaurant_user",
+ help="select the table where the customers is."),
+ 'covers': fields.integer(
+ 'Covers', groups="pos_restaurant.res_group_restaurant_user",
+ help="Covers in a restaurant"),
+ }
+
+ # Overload section
+ def create_from_ui(self, cr, uid, orders, context=None):
+ """Overload function to save table_id and covers"""
+ # Call Parent function to save new orders
+ order_ids = super(pos_order, self).create_from_ui(
+ cr, uid, orders, context=context)
+
+ orders_saved = self.read(
+ cr, uid, order_ids, ['pos_reference'], context=context)
+
+ # Save extra information related to restaurants
+ for order_saved in orders_saved:
+ for o in orders:
+ if o['data']['name'] == order_saved['pos_reference']:
+ order = o['data']
+ if list(set(['table_id', 'covers']) & set(order.keys())):
+ vals = {
+ 'table_id': order.get('table_id', False),
+ 'covers': order.get('covers', 0)}
+ super(pos_order, self).write(
+ cr, uid, [order_saved['id']], vals, context=context)
+
+ return order_ids
=== added file 'model/pos_table.py'
--- model/pos_table.py 1970-01-01 00:00:00 +0000
+++ model/pos_table.py 2014-07-30 10:55:25 +0000
@@ -0,0 +1,61 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# Point Of Sale - Restaurant module for OpenERP
+# Copyright (C) 2013-2014 GRAP (http://www.grap.coop)
+# @author Sylvain LE GAL (https://twitter.com/legalsylvain)
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+from openerp.osv import fields
+from openerp.osv.orm import Model
+
+
+class pos_table(Model):
+ _description = 'Restaurant table'
+ _name = 'pos.table'
+ _order = 'name'
+
+ # Columns section
+ _columns = {
+ 'name': fields.char('Name', required=True, size=64),
+ 'image': fields.binary('Image'),
+ 'active': fields.boolean(
+ 'Active',
+ help="""By unchecking the active field you can disable """
+ """a table without deleting it."""),
+ 'shop_id': fields.many2one(
+ 'sale.shop', 'Shop', help="Select the shop", required=True,),
+ 'company_id': fields.related(
+ 'shop_id', 'company_id', type='many2one', relation='res.company',
+ string='Company', store=True, readonly=True, required=False),
+ }
+
+ _defaults = {
+ 'active': True,
+ }
+
+ _sql_constraints = [
+ ('name_shop_uniq', 'unique(name,shop_id)',
+ 'Table name must be unique by shop!'),
+ ]
+
+ # Overload section
+ def copy(self, cr, uid, id, default={}, context=None):
+ table = self.read(cr, uid, id, ['name'], context=context)
+ data = {'name': '%s (copy)' % (table['name'])}
+ data.update(default)
+ return super(pos_table, self).copy(cr, uid, id, data, context=context)
=== added file 'model/sale_shop.py'
--- model/sale_shop.py 1970-01-01 00:00:00 +0000
+++ model/sale_shop.py 2014-07-30 10:55:25 +0000
@@ -0,0 +1,40 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# Point Of Sale - Restaurant module for OpenERP
+# Copyright (C) 2013-2014 GRAP (http://www.grap.coop)
+# @author Sylvain LE GAL (https://twitter.com/legalsylvain)
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+from openerp.osv import fields
+from openerp.osv.orm import Model
+
+
+class sale_shop(Model):
+ _inherit = 'sale.shop'
+
+ # Columns section
+ _columns = {
+ 'max_covers': fields.integer(
+ 'Max Covers', groups="pos_restaurant.res_group_restaurant_manager",
+ help="""This is the number of buttons displayed"""
+ """ in the front-end point of sale."""),
+ }
+
+ _defaults = {
+ 'max_covers': 0,
+ }
=== added directory 'security'
=== added file 'security/ir_model_access.yml'
--- security/ir_model_access.yml 1970-01-01 00:00:00 +0000
+++ security/ir_model_access.yml 2014-07-30 10:55:25 +0000
@@ -0,0 +1,48 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# Point Of Sale - Restaurant module for OpenERP
+# Copyright (C) 2013-2014 GRAP (http://www.grap.coop)
+# @author Sylvain LE GAL (https://twitter.com/legalsylvain)
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+###############################################################################
+# Reader Access
+###############################################################################
+
+- !record {model: ir.model.access, id: ir_model_access_restaurant_user}:
+ group_id: res_group_restaurant_user
+ model_id: pos_restaurant.model_pos_table
+ name: Point Of Sale - Restaurant User
+ perm_read: true
+ perm_create: false
+ perm_write: false
+ perm_unlink: false
+
+###############################################################################
+# Manager Access
+###############################################################################
+
+
+- !record {model: ir.model.access, id: ir_model_access_restaurant_manager}:
+ group_id: res_group_restaurant_manager
+ model_id: pos_restaurant.model_pos_table
+ name: Point Of Sale - Restaurant Manager
+ perm_read: true
+ perm_create: true
+ perm_write: true
+ perm_unlink: true
=== added file 'security/ir_module_category.yml'
--- security/ir_module_category.yml 1970-01-01 00:00:00 +0000
+++ security/ir_module_category.yml 2014-07-30 10:55:25 +0000
@@ -0,0 +1,26 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# Point Of Sale - Restaurant module for OpenERP
+# Copyright (C) 2013-2014 GRAP (http://www.grap.coop)
+# @author Sylvain LE GAL (https://twitter.com/legalsylvain)
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+- !record {model: ir.module.category, id: ir_module_category_restaurant}:
+ name: Restaurant
+ sequence: 200
+ description: Select the level of access of restaurant informations in Point Of Sale
=== added file 'security/ir_rule.yml'
--- security/ir_rule.yml 1970-01-01 00:00:00 +0000
+++ security/ir_rule.yml 2014-07-30 10:55:25 +0000
@@ -0,0 +1,27 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# Point Of Sale - Restaurant module for OpenERP
+# Copyright (C) 2013-2014 GRAP (http://www.grap.coop)
+# @author Sylvain LE GAL (https://twitter.com/legalsylvain)
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+- !record {model: ir.rule, id: ir_rule_pos_table}:
+ name: Point Of Sale - Restaurant Table
+ domain_force: '[(''company_id'', ''='', user.company_id.id)]'
+ model_id: pos_restaurant.model_pos_table
+
=== added file 'security/res_groups.yml'
--- security/res_groups.yml 1970-01-01 00:00:00 +0000
+++ security/res_groups.yml 2014-07-30 10:55:25 +0000
@@ -0,0 +1,35 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# Point Of Sale - Restaurant module for OpenERP
+# Copyright (C) 2013-2014 GRAP (http://www.grap.coop)
+# @author Sylvain LE GAL (https://twitter.com/legalsylvain)
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+- !record {model: res.groups, id: res_group_restaurant_user}:
+ category_id: ir_module_category_restaurant
+ name: User
+ comment: The user can see and use Restaurant field. (Covers, Table, etc.)
+
+- !record {model: res.groups, id: res_group_restaurant_manager}:
+ category_id: ir_module_category_restaurant
+ name: Manager
+ implied_ids:
+ - pos_restaurant.res_group_restaurant_user
+ users:
+ - base.user_root
+ comment: The user can see and manage Restaurant field. (Covers, Table, etc.)
=== added directory 'static'
=== added directory 'static/src'
=== added directory 'static/src/css'
=== added file 'static/src/css/pr.css'
--- static/src/css/pr.css 1970-01-01 00:00:00 +0000
+++ static/src/css/pr.css 2014-07-30 10:55:25 +0000
@@ -0,0 +1,158 @@
+/******************************************************************************
+ Point Of Sale - Restaurant module for OpenERP
+ Copyright (C) 2014 GRAP (http://www.grap.coop)
+ @author Sylvain LE GAL (https://twitter.com/legalsylvain)
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+******************************************************************************/
+
+/* ********* Current table name ********* */
+
+.point-of-sale #rightheader #table-name{
+ width:100px;
+}
+.point-of-sale #rightheader #remove-table-button{
+ width:80px;
+}
+
+/* ********* Current covers quantity ********* */
+.point-of-sale #rightheader #covers-quantity{
+ width:50px;
+}
+
+/* ********* Table / Covers PopUp ********* */
+.point-of-sale .modal-dialog .popup-select-table,
+ .point-of-sale .modal-dialog .popup-select-covers{
+ margin-left:0;
+ margin-top:0;
+ left:5%;
+ width: 90%;
+ top:5%;
+ height:85%;
+}
+.point-of-sale .modal-dialog .popup-select-table .table-header,
+ .point-of-sale .modal-dialog .popup-select-table .covers-header{
+ height:65px;
+}
+
+.point-of-sale .modal-dialog .popup-select-table #table-cancel,
+ .point-of-sale .modal-dialog .popup-select-covers #covers-cancel{
+ top: 0px;
+ position: absolute;
+ right: 10px;
+}
+/* ********* table / Covers List ********* */
+
+.point-of-sale .table-list,
+ .point-of-sale .covers-list {
+ padding:10px !important;
+}
+
+.point-of-sale .table-list-container,
+ .point-of-sale .covers-list-container {
+ position:absolute;
+ top:70px;
+ bottom:0px;
+ left:0px;
+ right:0px;
+}
+
+.point-of-sale .table-list-scroller,
+ .point-of-sale .covers-list-scroller{
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ -ms-box-sizing: border-box;
+ box-sizing: border-box;
+ width:100%;
+ height:100%;
+ overflow: hidden;
+}
+
+/* ********* Table Scrollbar ********* */
+/* Fix incorrect display of buttons.*/
+/* TODO: found why it is necessary and remove top,bottom and left values*/
+.point-of-sale .table-list-container .scrollbar .up-button,
+ .point-of-sale .covers-list-container .scrollbar .up-button{
+ top: -10px;
+ left: -5px;
+}
+.point-of-sale .table-list-container .scrollbar .down-button,
+ .point-of-sale .covers-list-container .scrollbar .down-button {
+ left: -5px;
+ bottom: -5px;
+}
+
+/* ********* Table / Covers Item ********* */
+
+.point-of-sale .table,
+ .point-of-sale .covers {
+ position:relative;
+ vertical-align: top;
+ display: inline-block;
+ font-size: 11px;
+ margin: 5px !important;
+ width: 150px;
+ height:150px;
+ background:#fff;
+ border: 1px solid #fff;
+ border-radius: 3px;
+ overflow: hidden;
+ -webkit-box-shadow: 0px 2px 0px #dad8e4, 0px 1px 8px #636480;
+ -moz-box-shadow: 0px 2px 0px #dad8e4, 0px 1px 8px #636480;
+ box-shadow: 0px 2px 0px #dad8e4, 0px 1px 8px #636480;
+}
+
+.point-of-sale .table .table-name,
+ .point-of-sale .covers .covers-quantity{
+ position: absolute;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ -ms-box-sizing: border-box;
+ box-sizing: border-box;
+ text-align:center;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ background: -webkit-linear-gradient(-90deg,rgba(255,255,255,0),rgba(255,255,255,1), rgba(255,255,255,1));
+ background: -moz-linear-gradient(-90deg,rgba(255,255,255,0),rgba(255,255,255,1), rgba(255,255,255,1));
+ background: -ms-linear-gradient(-90deg,rgba(255,255,255,0),rgba(255,255,255,1), rgba(255,255,255,1));
+ padding: 3px;
+ width:100%;
+}
+.point-of-sale .covers .covers-quantity{
+ font-size: 40px;
+ height: 100%;
+}
+.point-of-sale .covers .covers-quantity .covers-text,
+ .point-of-sale .table .table-name .table-text{
+ position: relative;
+ top: 50%;
+ transform: translateY(-50%);
+ -webkit-transform: translateY(-50%);
+}
+
+.point-of-sale .table .table-name{
+ font-size: 22px;
+ top:64px;
+ height: 86px;
+}
+
+.point-of-sale .table .table-img {
+ position: absolute;
+ top: 0px;
+ left: 0px;
+ width: 150px;
+ height: 64px;
+ background: white;
+ text-align: center;
+}
=== added directory 'static/src/img'
=== added file 'static/src/img/icon.png'
Binary files static/src/img/icon.png 1970-01-01 00:00:00 +0000 and static/src/img/icon.png 2014-07-30 10:55:25 +0000 differ
=== added directory 'static/src/js'
=== added file 'static/src/js/pr.js'
--- static/src/js/pr.js 1970-01-01 00:00:00 +0000
+++ static/src/js/pr.js 2014-07-30 10:55:25 +0000
@@ -0,0 +1,440 @@
+/******************************************************************************
+ Point Of Sale - Restaurant module for OpenERP
+ Copyright (C) 2013-Today GRAP (http://www.grap.coop)
+ @author Sylvain LE GAL (https://twitter.com/legalsylvain)
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+******************************************************************************/
+
+openerp.pos_restaurant = function (instance) {
+ module = instance.point_of_sale;
+ _t = instance.web._t;
+
+ /*************************************************************************
+ Define : CoversOrderWidget that display the covers quantity
+ of the current pos order and buttons to select current covers quantity.
+ */
+ module.CoversOrderWidget = module.PosBaseWidget.extend({
+ template: 'CoversOrderWidget',
+
+ /* Overload Section */
+ init: function(parent, options){
+ this._super(parent,options);
+ this.pos.bind('change:selectedOrder', this.refresh, this);
+ },
+
+ start: function(){
+ this._super();
+ this._build_widgets();
+ },
+
+ /* Custom Section */
+ refresh: function(){
+ this.renderElement();
+ this._build_widgets();
+ },
+
+ _build_widgets: function(){
+ // Create a button to open the covers popup
+ this.select_covers_button = new module.HeaderButtonWidget(this,{
+ label:_t('Covers'),
+ action: function(){
+ self.screen_selector.show_popup('select-covers');
+ },
+ });
+ this.select_covers_button.replace($('.placeholder-SelectCoversButton'));
+ this.select_covers_button.renderElement();
+ },
+
+ get_name: function(){
+ return this.pos.get('selectedOrder').get_covers();
+ },
+ });
+
+ /*************************************************************************
+ Define : CoversWidget that display a covers quantity
+ */
+ module.CoversWidget = module.PosBaseWidget.extend({
+ template: 'CoversWidget',
+
+ /* Overload Section */
+ init: function(parent, options) {
+ this._super(parent,options);
+ this.quantity = options.quantity;
+ },
+
+ renderElement: function() {
+ this._super();
+ var self = this;
+ $("a", this.$el).click(function(e){
+ self.pos.get('selectedOrder').set_covers(self.quantity);
+ self.pos_widget.covers_order.refresh();
+ self.pos_widget.screen_selector.set_current_screen('products');
+ });
+ },
+ });
+
+ /*************************************************************************
+ Define : CoversListScreenWidget that display a list of covers.
+ */
+ module.CoversListScreenWidget = module.ScreenWidget.extend({
+ template:'CoversListScreenWidget',
+
+ /* Overload Section */
+ start: function() {
+ this._super();
+ var self = this;
+
+ // Display covers list
+ this.covers_list = [];
+ for(var i = 0, len = this.pos.get('max_covers') + 1; i < len; i++){
+ var covers = new module.CoversWidget(this, {
+ quantity: i,
+ });
+ this.covers_list.push(covers);
+ covers.appendTo(this.$('.covers-list'));
+ }
+
+ // Display scrollbar
+ this.scrollbar = new module.ScrollbarWidget(this,{
+ target_widget: this,
+ target_selector: '.covers-list-scroller',
+ on_show: function(){
+ self.$('.covers-list-scroller').css({'padding-right':'62px'},100);
+ },
+ on_hide: function(){
+ self.$('.covers-list-scroller').css({'padding-right':'0px'},100);
+ },
+ });
+ this.scrollbar.replace(this.$('.placeholder-ScrollbarWidget'));
+ },
+ });
+
+ /*************************************************************************
+ Define : SelectCoversPopupWidget that display a pop up to select
+ covers quantity
+ */
+ module.SelectCoversPopupWidget = module.PopUpWidget.extend({
+ template:'SelectCoversPopupWidget',
+
+ /* Overload Section */
+ start: function(){
+ this._super();
+ this.covers_list_widget = new module.CoversListScreenWidget(this,{});
+ this.covers_list_widget.renderElement();
+ this.covers_list_widget.replace($('.placeholder-CoversListScreenWidget'));
+ this.$('#covers-cancel').off('click').click(function(){
+ self.pos_widget.screen_selector.set_current_screen('products');
+ });
+ },
+
+ });
+
+ /*************************************************************************
+ Define : TableOrderWidget that display the name of the table
+ of the current pos order and buttons to select or remove current table.
+ */
+ module.TableOrderWidget = module.PosBaseWidget.extend({
+ template: 'TableOrderWidget',
+
+ /* Overload Section */
+ init: function(parent, options){
+ this._super(parent,options);
+ this.pos.bind('change:selectedOrder', this.refresh, this);
+ },
+
+ start: function(){
+ this._super();
+ this._build_widgets();
+ },
+
+ /* Custom Section */
+ refresh: function(){
+ this.renderElement();
+ this._build_widgets();
+ },
+
+ _build_widgets: function(){
+ // Create a button to open the table popup
+ this.select_table_button = new module.HeaderButtonWidget(this,{
+ label:_t('Table'),
+ action: function(){
+ self.screen_selector.show_popup('select-table');
+ },
+ });
+ this.select_table_button.replace($('.placeholder-SelectTableButton'));
+ this.select_table_button.renderElement();
+
+ if (this.pos.get('selectedOrder').get_table_name() !== ""){
+ // Create a button to remove the current table
+ this.remove_table_button = new module.HeaderButtonWidget(this,{
+ label:_t('Del.'),
+ action: function(){
+ this.pos.get('selectedOrder').set_table(undefined);
+ this.pos_widget.table_order.refresh();
+ this.hide();
+ },
+ });
+ this.remove_table_button.replace($('.placeholder-RemoveTableButton'));
+ this.remove_table_button.renderElement();
+ }
+ },
+
+ get_name: function(){
+ return this.pos.get('selectedOrder').get_table_name();
+ },
+ });
+
+ /*************************************************************************
+ Define : TableWidget that display a table
+ */
+ module.TableWidget = module.PosBaseWidget.extend({
+ template: 'TableWidget',
+
+ /* Overload Section */
+ init: function(parent, options) {
+ this._super(parent,options);
+ this.model = options.model;
+ },
+
+ renderElement: function() {
+ this._super();
+ var self = this;
+ this.$('img').replaceWith(this.pos_widget.image_cache.get_image(this.model.get_image_url()));
+ $("a", this.$el).click(function(e){
+ self.pos.get('selectedOrder').set_table(self.model.toJSON());
+ self.pos_widget.table_order.refresh();
+ self.pos_widget.screen_selector.set_current_screen('products');
+ });
+ },
+ });
+
+ /*************************************************************************
+ Define : TableListScreenWidget that display a list of tables.
+ */
+ module.TableListScreenWidget = module.ScreenWidget.extend({
+ template:'TableListScreenWidget',
+
+ /* Overload Section */
+ start: function() {
+ this._super();
+ var self = this;
+
+ // Display table list
+ this.table_list = [];
+ var tables = this.pos.get('table_list') || [];
+ for(var i = 0, len = tables.models.length; i < len; i++){
+ var table = new module.TableWidget(this, {
+ model: tables.models[i],
+ });
+ this.table_list.push(table);
+ table.appendTo(this.$('.table-list'));
+ }
+
+ // Display scrollbar
+ this.scrollbar = new module.ScrollbarWidget(this,{
+ target_widget: this,
+ target_selector: '.table-list-scroller',
+ on_show: function(){
+ self.$('.table-list-scroller').css({'padding-right':'62px'},100);
+ },
+ on_hide: function(){
+ self.$('.table-list-scroller').css({'padding-right':'0px'},100);
+ },
+ });
+ this.scrollbar.replace(this.$('.placeholder-ScrollbarWidget'));
+ },
+ });
+
+ /*************************************************************************
+ Define : SelectTablePopupWidget that display a pop up to search
+ and select table.
+ */
+ module.SelectTablePopupWidget = module.PopUpWidget.extend({
+ template:'SelectTablePopupWidget',
+
+ /* Overload Section */
+ start: function(){
+ this._super();
+ var self = this;
+ this.table_list_widget = new module.TableListScreenWidget(this,{});
+ },
+
+ show: function(){
+ this._super();
+ var self = this;
+ this.table_list_widget.renderElement();
+ this.table_list_widget.replace($('.placeholder-TableListScreenWidget'));
+ this.$('#table-cancel').off('click').click(function(){
+ self.pos_widget.screen_selector.set_current_screen('products');
+ });
+ },
+
+ });
+
+
+ /*************************************************************************
+ Overload : PosWidget to include button in PosOrderHeaderWidget widget
+ to select or unselect tables
+ */
+ module.PosWidget = module.PosWidget.extend({
+
+ /* Overload Section */
+ build_widgets: function(){
+ this._super();
+ var self = this;
+ if (this.pos.get('table_list').length != 0){
+ // create a pop up 'select-table' to search and select tables
+ this.select_table_popup = new module.SelectTablePopupWidget(this, {});
+ this.select_table_popup.appendTo($('.point-of-sale'));
+ this.select_table_popup.hide();
+ this.screen_selector.popup_set['select-table'] = this.select_table_popup;
+
+ // Add a widget to manage table
+ this.table_order = new module.TableOrderWidget(this,{});
+ this.table_order.appendTo(this.$('#pos_order_header'));
+ }
+ if (this.pos.get('max_covers') > 0){
+ // create a pop up 'select-covers' to covers quantity
+ this.select_covers_popup = new module.SelectCoversPopupWidget(this, {});
+ this.select_covers_popup.appendTo($('.point-of-sale'));
+ this.select_covers_popup.hide();
+ this.screen_selector.popup_set['select-covers'] = this.select_covers_popup;
+
+ // Add a widget to manage covers
+ this.covers_order = new module.CoversOrderWidget(this,{});
+ this.covers_order.appendTo(this.$('#pos_order_header'));
+ }
+ },
+ });
+
+ /*************************************************************************
+ Define : New Model 'module.Table'
+ */
+ module.Table = Backbone.Model.extend({
+ get_image_url: function(){
+ return instance.session.url('/web/binary/image', {model: 'pos.table', field: 'image', id: this.get('id')});
+ },
+ });
+
+ module.TableCollection = Backbone.Collection.extend({
+ model: module.Table,
+ });
+
+ /*************************************************************************
+ Overload : Model 'module.Order'
+// */
+ module.Order = module.Order.extend({
+ set_covers: function(covers){
+ this.set('covers',covers);
+ },
+ get_covers: function(){
+ return this.get('covers');
+ },
+ set_table: function(table){
+ this.set('table',table);
+ },
+ get_table: function(){
+ return this.get('table');
+ },
+ get_table_name: function(){
+ var table = this.get('table');
+ return table ? table.name : "";
+ },
+ });
+
+ var _initialize_Order_ = module.Order.prototype.initialize;
+ module.Order.prototype.initialize = function(attributes){
+ _initialize_Order_.call(this, attributes);
+ this.set({
+ 'table': null,
+ 'covers': 0,
+ });
+ };
+
+ var _exportAsJSON_Order_ = module.Order.prototype.exportAsJSON;
+ module.Order.prototype.exportAsJSON = function(){
+ result = _exportAsJSON_Order_.call(this);
+ if (this.pos.get('group_restaurant_user')){
+ result['table_id'] = this.get('table') ? this.get('table').id : undefined;
+ result['covers'] = this.get('covers');
+ }
+ return result;
+ };
+
+ /*************************************************************************
+ Overload : Model 'module.PosModel'
+ */
+ /*
+ Overload: PosModel.initialize() to define one new list.
+ 'table_list' are the list of all tables available;
+ */
+ var _initialize_PosModel_ = module.PosModel.prototype.initialize;
+ module.PosModel.prototype.initialize = function(session, attributes){
+ _initialize_PosModel_.call(this, session, attributes);
+ this.set({
+ 'group_restaurant_user': false,
+ 'table_list': new module.TableCollection(),
+ 'max_covers': 0,
+ });
+ };
+
+ /*
+ Overload: PosModel.load_server_data() function to get in memory
+ tables.
+ */
+ var _load_server_data_PosModel_ = module.PosModel.prototype.load_server_data;
+ module.PosModel.prototype.load_server_data = function(){
+ var self = this;
+ var load_def = _load_server_data_PosModel_.call(self).then(function(){
+ return self.load_tables_data();
+ });
+ return load_def;
+ };
+
+ module.PosModel = module.PosModel.extend({
+ load_tables_data: function(){
+ var self = this;
+ var res_users_obj = new instance.web.Model('res.users');
+
+ var loaded = res_users_obj.call(
+ 'has_group',
+ ['pos_restaurant.res_group_restaurant_user'],
+ undefined,{}
+ ).then(function(result){
+ self.set({'group_restaurant_user' : result});
+ if (result){
+ return self.fetch(
+ 'pos.table',
+ ['name'],
+ [['shop_id', '=', self.get('shop').id]]
+ ).then(function(tables){
+ self.set({'table_list' : new module.TableCollection(tables)});
+ return self.fetch(
+ 'sale.shop',
+ ['max_covers'],
+ [['id', '=', self.get('shop').id]]
+ ).then(function(max_covers){
+ self.set({'max_covers' : max_covers[0].max_covers});
+ });
+ });
+ }else{
+ return true;
+ }
+ });
+ return loaded;
+ },
+ });
+};
+
=== added directory 'static/src/xml'
=== added file 'static/src/xml/pr.xml'
--- static/src/xml/pr.xml 1970-01-01 00:00:00 +0000
+++ static/src/xml/pr.xml 2014-07-30 10:55:25 +0000
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- ********************************************************************** -->
+<!--Point Of Sale - Restaurant module for OpenERP -->
+<!--Copyright (C) 2013-Today GRAP (http://www.grap.coop) -->
+<!--@author Sylvain LE GAL (https://twitter.com/legalsylvain) -->
+
+<!--This program is free software: you can redistribute it and/or modify -->
+<!--it under the terms of the GNU Affero General Public License as -->
+<!--published by the Free Software Foundation, either version 3 of the -->
+<!--License, or (at your option) any later version. -->
+
+<!--This program is distributed in the hope that it will be useful, -->
+<!--but WITHOUT ANY WARRANTY; without even the implied warranty of -->
+<!--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -->
+<!--GNU Affero General Public License for more details. -->
+
+<!--You should have received a copy of the GNU Affero General Public License-->
+<!--along with this program. If not, see <http://www.gnu.org/licenses/>. -->
+<!-- ********************************************************************** -->
+<templates id="template" xml:space="preserve">
+
+<!-- Covers display -->
+
+ <t t-name="CoversOrderWidget">
+ <div class="extra-label">
+ <span class="placeholder-SelectCoversButton" />
+ </div>
+ <div id="covers-quantity" class="extra-label">
+ <div class="extra-text">
+ <t t-esc="widget.get_name()" />
+ </div>
+ </div>
+ </t>
+
+ <t t-name="SelectCoversPopupWidget">
+ <div class="modal-dialog">
+ <div class="popup popup-select-covers">
+ <div class="covers-header">
+ <div id="covers-title">
+ Covers Quantity Selection
+ </div>
+ <div id="covers-cancel" class="button">
+ Cancel
+ </div>
+ </div>
+ <div class="content-container">
+ <span class="placeholder-CoversListScreenWidget" />
+ </div>
+ </div>
+ </div>
+ </t>
+
+ <t t-name="CoversListScreenWidget">
+ <div class='covers-list-container'>
+ <div class="covers-list-scroller">
+ <ol id="covers-screen-ol" class="covers-list">
+ </ol>
+ </div>
+ <div class="shadow-top"></div>
+ <span class="placeholder-ScrollbarWidget" />
+ </div>
+ </t>
+
+ <t t-name="CoversWidget">
+ <li class='covers'>
+ <a href="#">
+ <div class="covers-quantity">
+ <div class="covers-text">
+ <t t-esc="widget.quantity"/>
+ </div>
+ </div>
+ </a>
+ </li>
+ </t>
+
+<!-- Table display -->
+
+ <t t-name="TableOrderWidget">
+ <div class="extra-label">
+ <span class="placeholder-SelectTableButton" />
+ </div>
+ <div id="table-name" class="extra-label">
+ <div class="extra-text">
+ <t t-esc="widget.get_name()" />
+ </div>
+ </div>
+ <div id="remove-table-button" class="extra-label">
+ <span class="placeholder-RemoveTableButton" />
+ </div>
+ </t>
+
+ <t t-name="SelectTablePopupWidget">
+ <div class="modal-dialog">
+ <div class="popup popup-select-table">
+ <div class="table-header">
+ <div id="table-title">
+ Table Selection
+ </div>
+ <div id="table-cancel" class="button">
+ Cancel
+ </div>
+ </div>
+ <div class="content-container">
+ <span class="placeholder-TableListScreenWidget" />
+ </div>
+ </div>
+ </div>
+ </t>
+
+ <t t-name="TableListScreenWidget">
+ <div class='table-list-container'>
+ <div class="table-list-scroller">
+ <ol id="table-screen-ol" class="table-list">
+ </ol>
+ </div>
+ <div class="shadow-top"></div>
+ <span class="placeholder-ScrollbarWidget" />
+ </div>
+ </t>
+
+ <t t-name="TableWidget">
+ <li class='table'>
+ <a href="#">
+ <div class="table-img">
+ <img sr='' />
+ </div>
+ <div class="table-name">
+ <div class="table-text">
+ <t t-esc="widget.model.get('name')"/>
+ </div>
+ </div>
+ </a>
+ </li>
+ </t>
+
+</templates>
=== added directory 'view'
=== added file 'view/action.xml'
--- view/action.xml 1970-01-01 00:00:00 +0000
+++ view/action.xml 2014-07-30 10:55:25 +0000
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- ********************************************************************** -->
+<!--Point Of Sale - Restaurant module for OpenERP -->
+<!--Copyright (C) 2013-Today GRAP (http://www.grap.coop) -->
+<!--@author Sylvain LE GAL (https://twitter.com/legalsylvain) -->
+
+<!--This program is free software: you can redistribute it and/or modify -->
+<!--it under the terms of the GNU Affero General Public License as -->
+<!--published by the Free Software Foundation, either version 3 of the -->
+<!--License, or (at your option) any later version. -->
+
+<!--This program is distributed in the hope that it will be useful, -->
+<!--but WITHOUT ANY WARRANTY; without even the implied warranty of -->
+<!--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -->
+<!--GNU Affero General Public License for more details. -->
+
+<!--You should have received a copy of the GNU Affero General Public License-->
+<!--along with this program. If not, see <http://www.gnu.org/licenses/>. -->
+<!-- ********************************************************************** -->
+<openerp>
+ <data>
+
+ <record id="action_view_pos_table" model="ir.actions.act_window">
+ <field name="name">Tables</field>
+ <field name="type">ir.actions.act_window</field>
+ <field name="res_model">pos.table</field>
+ <field name="view_type">form</field>
+ <field name="view_mode">tree,form,kanban</field>
+ <field name="help">Display and manage tables in restaurant.</field>
+ </record>
+
+ </data>
+</openerp>
=== added file 'view/menu.xml'
--- view/menu.xml 1970-01-01 00:00:00 +0000
+++ view/menu.xml 2014-07-30 10:55:25 +0000
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- ********************************************************************** -->
+<!--Point Of Sale - Restaurant module for OpenERP -->
+<!--Copyright (C) 2013-Today GRAP (http://www.grap.coop) -->
+<!--@author Sylvain LE GAL (https://twitter.com/legalsylvain) -->
+
+<!--This program is free software: you can redistribute it and/or modify -->
+<!--it under the terms of the GNU Affero General Public License as -->
+<!--published by the Free Software Foundation, either version 3 of the -->
+<!--License, or (at your option) any later version. -->
+
+<!--This program is distributed in the hope that it will be useful, -->
+<!--but WITHOUT ANY WARRANTY; without even the implied warranty of -->
+<!--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -->
+<!--GNU Affero General Public License for more details. -->
+
+<!--You should have received a copy of the GNU Affero General Public License-->
+<!--along with this program. If not, see <http://www.gnu.org/licenses/>. -->
+<!-- ********************************************************************** -->
+<openerp>
+ <data>
+ <menuitem id="menu_pos_restaurant"
+ name="Restaurant"
+ parent="point_of_sale.menu_point_root"
+ sequence="50"/>
+
+ <menuitem id="menu_table"
+ name="Restaurant tables"
+ parent="menu_pos_restaurant"
+ action="action_view_pos_table"
+ sequence="1"/>
+ </data>
+
+</openerp>
=== added file 'view/view.xml'
--- view/view.xml 1970-01-01 00:00:00 +0000
+++ view/view.xml 2014-07-30 10:55:25 +0000
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- ********************************************************************** -->
+<!--Point Of Sale - Restaurant module for OpenERP -->
+<!--Copyright (C) 2013-Today GRAP (http://www.grap.coop) -->
+<!--@author Sylvain LE GAL (https://twitter.com/legalsylvain) -->
+
+<!--This program is free software: you can redistribute it and/or modify -->
+<!--it under the terms of the GNU Affero General Public License as -->
+<!--published by the Free Software Foundation, either version 3 of the -->
+<!--License, or (at your option) any later version. -->
+
+<!--This program is distributed in the hope that it will be useful, -->
+<!--but WITHOUT ANY WARRANTY; without even the implied warranty of -->
+<!--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -->
+<!--GNU Affero General Public License for more details. -->
+
+<!--You should have received a copy of the GNU Affero General Public License-->
+<!--along with this program. If not, see <http://www.gnu.org/licenses/>. -->
+<!-- ********************************************************************** -->
+<openerp>
+ <data>
+
+<!-- View : pos.order -->
+ <record id="view_pos_order_tree" model="ir.ui.view">
+ <field name="name">pos.order.tree</field>
+ <field name="model">pos.order</field>
+ <field name="inherit_id" ref="point_of_sale.view_pos_order_tree" />
+ <field name="arch" type="xml">
+ <field name="partner_id" position="after">
+ <field name="table_id" />
+ <field name="covers" />
+ </field>
+ </field>
+ </record>
+
+ <record id="view_pos_order_form" model="ir.ui.view">
+ <field name="name">pos.order.form</field>
+ <field name="model">pos.order</field>
+ <field name="inherit_id" ref="point_of_sale.view_pos_pos_form" />
+ <field name="arch" type="xml">
+ <field name="partner_id" position="after">
+ <field name="table_id"
+ options="{'quick_create':false}"/>
+ <field name="covers" />
+ </field>
+ </field>
+ </record>
+
+<!-- View : sale.shop -->
+ <record id="view_sale_shop_form" model="ir.ui.view">
+ <field name="name">sale.shop.form</field>
+ <field name="model">sale.shop</field>
+ <field name="inherit_id" ref="sale.view_shop_form" />
+ <field name="arch" type="xml">
+ <field name="pricelist_id" position="after">
+ <field name="max_covers" />
+ </field>
+ </field>
+ </record>
+
+<!-- View : pos.table -->
+ <record id="view_pos_table_tree" model="ir.ui.view">
+ <field name="name">pos.table.tree</field>
+ <field name="model">pos.table</field>
+ <field name="arch" type="xml">
+ <tree string="Tables">
+ <field name="name"/>
+ <field name="shop_id"/>
+ <field name="company_id" groups="base.group_multi_company"/>
+ <field name="active"/>
+ </tree>
+ </field>
+ </record>
+
+ <record id="view_pos_table_search" model="ir.ui.view">
+ <field name="name">pos.table.search</field>
+ <field name="model">pos.table</field>
+ <field name="arch" type="xml">
+ <search>
+ <field name="name" />
+ <field name="shop_id"/>
+ </search>
+ </field>
+ </record>
+
+ <record id="view_pos_table_form" model="ir.ui.view">
+ <field name="name">pos.table.form</field>
+ <field name="model">pos.table</field>
+ <field name="arch" type="xml">
+ <form string="Tables" version="7.0">
+ <sheet>
+ <group>
+ <group>
+ <field name="image" widget="image" class="oe_avatar oe_left"/>
+ </group>
+ <group>
+ <field name="name"/>
+ <field name="shop_id"/>
+ <field name="company_id" groups="base.group_multi_company"/>
+ <field name="active"/>
+ </group>
+ </group>
+ </sheet>
+ </form>
+ </field>
+ </record>
+
+ <record id="view_pos_table_kanban" model="ir.ui.view">
+ <field name="name">pos.table.kanban</field>
+ <field name="model">pos.table</field>
+ <field name="arch" type="xml">
+ <kanban>
+ <field name="name"/>
+ <templates>
+ <t t-name="kanban-box">
+ <div class="oe_kanban_box oe_kanban_color_border">
+ <div style="height:150px;width:150px;overflow:hidden;">
+ <div style="height:40px;width:150px;border-bottom:1px solid #999999;padding-left:5px;">
+ <a type="edit">
+ <ul>
+ <li><field name="name"/></li>
+ <li><field name="shop_id"/></li>
+ </ul>
+ </a>
+ </div>
+ <div style="height:110px;width:150px;text-align:center;vertical-align:middle;padding: 5px 5px 5px 5px">
+ <img t-att-src="kanban_image('pos.table', 'image', record.id.value)" width="95"/>
+ </div>
+ </div>
+ </div>
+ </t>
+ </templates>
+ </kanban>
+ </field>
+ </record>
+
+ </data>
+</openerp>
Follow ups