From e305cd9fe556b9e519a5a11e30097cadebbffd2f Mon Sep 17 00:00:00 2001 From: Houssine BAKKALI Date: Sun, 26 Feb 2017 16:02:05 +0100 Subject: [PATCH] add pos_access_right module from la louve --- pos_access_right/README.rst | 106 +++++++++++++ pos_access_right/__init__.py | 2 + pos_access_right/__init__.pyc | Bin 0 -> 188 bytes pos_access_right/__openerp__.py | 25 ++++ pos_access_right/demo/res_groups.yml | 26 ++++ pos_access_right/i18n/fr.po | 135 +++++++++++++++++ pos_access_right/models/__init__.py | 2 + pos_access_right/models/__init__.pyc | Bin 0 -> 199 bytes pos_access_right/models/pos_config.py | 75 ++++++++++ pos_access_right/models/pos_config.pyc | Bin 0 -> 3210 bytes pos_access_right/security/res_groups.yml | 25 ++++ .../static/description/admin_numpad.png | Bin 0 -> 9506 bytes .../static/description/demo_error.png | Bin 0 -> 11877 bytes .../static/description/demo_numpad.png | Bin 0 -> 9335 bytes pos_access_right/static/description/icon.png | Bin 0 -> 4374 bytes .../static/description/new_groups.png | Bin 0 -> 15280 bytes .../static/src/css/pos_access_right.css | 13 ++ .../static/src/js/pos_access_right.js | 140 ++++++++++++++++++ pos_access_right/static/src/xml/templates.xml | 17 +++ 19 files changed, 566 insertions(+) create mode 100644 pos_access_right/README.rst create mode 100644 pos_access_right/__init__.py create mode 100644 pos_access_right/__init__.pyc create mode 100644 pos_access_right/__openerp__.py create mode 100644 pos_access_right/demo/res_groups.yml create mode 100644 pos_access_right/i18n/fr.po create mode 100644 pos_access_right/models/__init__.py create mode 100644 pos_access_right/models/__init__.pyc create mode 100644 pos_access_right/models/pos_config.py create mode 100644 pos_access_right/models/pos_config.pyc create mode 100644 pos_access_right/security/res_groups.yml create mode 100644 pos_access_right/static/description/admin_numpad.png create mode 100644 pos_access_right/static/description/demo_error.png create mode 100644 pos_access_right/static/description/demo_numpad.png create mode 100644 pos_access_right/static/description/icon.png create mode 100644 pos_access_right/static/description/new_groups.png create mode 100644 pos_access_right/static/src/css/pos_access_right.css create mode 100644 pos_access_right/static/src/js/pos_access_right.js create mode 100644 pos_access_right/static/src/xml/templates.xml diff --git a/pos_access_right/README.rst b/pos_access_right/README.rst new file mode 100644 index 0000000..68f7ce9 --- /dev/null +++ b/pos_access_right/README.rst @@ -0,0 +1,106 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +====================================================== +Point of Sale - Extra Access Right for Certain Actions +====================================================== + +This module extends Odoo Point Of Sale features, restricting possibility +to cashier to make some actions in the Point of Sale (set discount, change +unit prices, etc...) + +this module can be usefull to limit errors and / or fraud. + +This module will add the following groups to Odoo: + +* PoS - Negative Quantity: The cashier can sell negative quantity in Point Of + Sale (ie, can return products); + +* PoS - Discount: The cashier can set Discount in Point Of Sale; + +* PoS - Change Unit Price: The cashier can change the unit price of a product + in Point Of Sale; + +* PoS - Many Orders: The cashier can many orders at the same time; + +* PoS - Delete Order: The cashier can not delete a full order; + +.. image:: /pos_access_right/static/description/new_groups.png + +If a user doesn't belong to a group, he can not use the according feature. + +For example, here is the default numpad for the demo data user : + +.. image:: /pos_access_right/static/description/demo_numpad.png + +If the user try to use a forbidden feature, here is the warning displayed. + +.. image:: /pos_access_right/static/description/demo_error.png + +If the cashier changed, the new right are applied : + +.. image:: /pos_access_right/static/description/admin_numpad.png + +Installation +============ + +Normal installation. + +Configuration +============= + +Once installed, you have to give correct access right to your cashiers. + +Limits / Roadmap +================ + +The feature are only blocked on the Point of sale Frond End UI. it could be +interesting do the same in the back-end office for some of this blockages. + +Usage +===== + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/184/9.0 + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +`_. In case of trouble, please +check there if your issue has already been reported. If you spotted it first, +help us smashing it by providing a detailed and welcomed `feedback +`_. + +Credits +======= + +Images +------ + +* Odoo Community Association: `Icon `_. + +Contributors +------------ + +* Sylvain LE GAL + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +To contribute to this module, please visit https://odoo-community.org. diff --git a/pos_access_right/__init__.py b/pos_access_right/__init__.py new file mode 100644 index 0000000..a0fdc10 --- /dev/null +++ b/pos_access_right/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +from . import models diff --git a/pos_access_right/__init__.pyc b/pos_access_right/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..34828a12e5c94bdeb735e4717e05e433f0edc560 GIT binary patch literal 188 zcmZSn%*$myr9C2<0ScIav;z16fiGG8zC&4JI7` literal 0 HcmV?d00001 diff --git a/pos_access_right/__openerp__.py b/pos_access_right/__openerp__.py new file mode 100644 index 0000000..ad024ef --- /dev/null +++ b/pos_access_right/__openerp__.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2016-Today: La Louve () +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +{ + 'name': 'Point of Sale - Extra Access Right', + 'version': '9.0.1.0.0', + 'category': 'Point Of Sale', + 'summary': 'Point of Sale - Extra Access Right for certain actions', + 'author': 'La Louve, GRAP, Odoo Community Association (OCA)', + 'website': 'http://www.lalouve.net/', + 'license': 'AGPL-3', + 'depends': [ + 'point_of_sale', + ], + 'data': [ + 'security/res_groups.yml', + 'static/src/xml/templates.xml', + ], + 'demo': [ + 'demo/res_groups.yml', + ], + 'installable': True, +} diff --git a/pos_access_right/demo/res_groups.yml b/pos_access_right/demo/res_groups.yml new file mode 100644 index 0000000..fd74b5e --- /dev/null +++ b/pos_access_right/demo/res_groups.yml @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2016-Today: La Louve () +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + + +- !record {model: res.groups, id: group_negative_qty}: + users: + - base.user_root + +- !record {model: res.groups, id: group_discount}: + users: + - base.user_root + - base.user_demo + +- !record {model: res.groups, id: group_change_unit_price}: + users: + - base.user_root + +- !record {model: res.groups, id: group_multi_order}: + users: + - base.user_root + +- !record {model: res.groups, id: group_delete_order}: + users: + - base.user_root diff --git a/pos_access_right/i18n/fr.po b/pos_access_right/i18n/fr.po new file mode 100644 index 0000000..d718fb7 --- /dev/null +++ b/pos_access_right/i18n/fr.po @@ -0,0 +1,135 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * pos_access_right +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-02 11:49+0000\n" +"PO-Revision-Date: 2016-11-02 11:49+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_access_right +#. openerp-web +#: code:addons/pos_access_right/static/src/js/pos_access_right.js:131 +#, python-format +msgid "Change Unit Price - Unauthorized function" +msgstr "Changer le prix unitaire - Fonctionnalité non autorisée" + +#. module: pos_access_right +#. openerp-web +#: code:addons/pos_access_right/static/src/js/pos_access_right.js:83 +#, python-format +msgid "Delete Order - Unauthorized function" +msgstr "Supprimer une commande de vente - Fonctionnalité non autorisée" + +#. module: pos_access_right +#. openerp-web +#: code:addons/pos_access_right/static/src/js/pos_access_right.js:124 +#, python-format +msgid "Discount - Unauthorized function" +msgstr "Remise - Fonctionnalité non autorisée" + +#. module: pos_access_right +#. openerp-web +#: code:addons/pos_access_right/static/src/js/pos_access_right.js:72 +#, python-format +msgid "Many Orders - Unauthorized function" +msgstr "Plusieurs Commandes simultanées - Fonctionnalité non autorisée" + +#. module: pos_access_right +#. openerp-web +#: code:addons/pos_access_right/static/src/js/pos_access_right.js:110 +#, python-format +msgid "Negative Quantity - Unauthorized function" +msgstr "Quantité négative - Fonctionnalité non autorisée" + +#. module: pos_access_right +#. openerp-web +#: code:addons/pos_access_right/static/src/js/pos_access_right.js:73 +#: code:addons/pos_access_right/static/src/js/pos_access_right.js:84 +#: code:addons/pos_access_right/static/src/js/pos_access_right.js:111 +#: code:addons/pos_access_right/static/src/js/pos_access_right.js:125 +#: code:addons/pos_access_right/static/src/js/pos_access_right.js:132 +#, python-format +msgid "Please ask your manager to do it." +msgstr "Veuillez vous rapprocher d'un responsable" + +#. module: pos_access_right +#: model:ir.model.fields,field_description:pos_access_right.field_pos_config_group_discount_id +msgid "Point of Sale - Allow Discount" +msgstr "Point de vente - Autoriser les remises" + +#. module: pos_access_right +#: model:ir.model.fields,field_description:pos_access_right.field_pos_config_group_negative_qty_id +msgid "Point of Sale - Allow Negative Quantity" +msgstr "Point de vente - Autoriser les quantités négatives" + +#. module: pos_access_right +#: model:ir.model.fields,field_description:pos_access_right.field_pos_config_group_change_unit_price_id +msgid "Point of Sale - Allow Unit Price Change" +msgstr "Point de vente - Autoriser le changement de prix unitaire" + +#. module: pos_access_right +#: model:ir.model.fields,field_description:pos_access_right.field_pos_config_group_delete_order_id +#: model:res.groups,name:pos_access_right.group_delete_order +msgid "Point of Sale - Delete Order" +msgstr "Point de Vente - Supprimer une commande" + +#. module: pos_access_right +#: model:res.groups,name:pos_access_right.group_discount +msgid "Point of Sale - Discount" +msgstr "Point de Vente - Remise" + +#. module: pos_access_right +#: model:ir.model.fields,field_description:pos_access_right.field_pos_config_group_multi_order_id +#: model:res.groups,name:pos_access_right.group_multi_order +msgid "Point of Sale - Many Orders" +msgstr "Point de Vente - Plusieurs commandes simultanées" + +#. module: pos_access_right +#: model:res.groups,name:pos_access_right.group_negative_qty +msgid "Point of Sale - Negative Quantity" +msgstr "Point de Vente - Quantité négative" + +#. module: pos_access_right +#: model:res.groups,name:pos_access_right.group_change_unit_price +msgid "Point of Sale - Unit Price Change" +msgstr "Point de Vente - Changer de prix" + +#. module: pos_access_right +#: model:ir.model.fields,help:pos_access_right.field_pos_config_group_discount_id +msgid "This field is there to pass the id of the 'PoS - Allow Discount' Group to the Point of Sale Frontend." +msgstr "Ce champs existe pour passer l'ID du groupe 'PdV - Autoriser les remises' au sein du point de vente tactile." + +#. module: pos_access_right +#: model:ir.model.fields,help:pos_access_right.field_pos_config_group_negative_qty_id +msgid "This field is there to pass the id of the 'PoS - Allow Negative Quantity' Group to the Point of Sale Frontend." +msgstr "Ce champs existe pour passer l'ID du groupe 'PdV - Autoriser les quantités négatives' au sein du point de vente tactile." + +#. module: pos_access_right +#: model:ir.model.fields,help:pos_access_right.field_pos_config_group_change_unit_price_id +msgid "This field is there to pass the id of the 'PoS - Allow Unit Price Change' Group to the Point of Sale Frontend." +msgstr "Ce champs existe pour passer l'ID du groupe 'PdV - Autoriser les changements de prix unitaires' au sein du point de vente tactile." + +#. module: pos_access_right +#: model:ir.model.fields,help:pos_access_right.field_pos_config_group_delete_order_id +msgid "This field is there to pass the id of the 'PoS - Delete Order' Group to the Point of Sale Frontend." +msgstr "Ce champs existe pour passer l'ID du groupe 'PdV - Supprimer une commande' au sein du point de vente tactile." + +#. module: pos_access_right +#: model:ir.model.fields,help:pos_access_right.field_pos_config_group_multi_order_id +msgid "This field is there to pass the id of the 'PoS - Many Orders Group to the Point of Sale Frontend." +msgstr "Ce champs existe pour passer l'ID du groupe 'PdV - Plusieurs commandes' au sein du point de vente tactile." + +#. module: pos_access_right +#: model:ir.model,name:pos_access_right.model_pos_config +msgid "pos.config" +msgstr "pos.config" + diff --git a/pos_access_right/models/__init__.py b/pos_access_right/models/__init__.py new file mode 100644 index 0000000..e77b601 --- /dev/null +++ b/pos_access_right/models/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +from . import pos_config diff --git a/pos_access_right/models/__init__.pyc b/pos_access_right/models/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f9d5031c395816b74591c481a2dcb5bbabd17052 GIT binary patch literal 199 zcmY+7K?(vf3`NtKjSRT+5M8+zQ4!p`Py~@e7~5I{o#`;C3s2w$yr~y31viHL7m~pL z^=H~F-mkNTUsW=) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import fields, models, api + + +class PosConfig(models.Model): + _inherit = 'pos.config' + + group_negative_qty_id = fields.Many2one( + comodel_name='res.groups', + compute='_compute_group_negative_qty_id', + string='Point of Sale - Allow Negative Quantity', + help="This field is there to pass the id of the 'PoS - Allow Negative" + " Quantity' Group to the Point of Sale Frontend.") + + group_discount_id = fields.Many2one( + comodel_name='res.groups', + compute='_compute_group_discount_id', + string='Point of Sale - Allow Discount', + help="This field is there to pass the id of the 'PoS - Allow Discount'" + " Group to the Point of Sale Frontend.") + + group_change_unit_price_id = fields.Many2one( + comodel_name='res.groups', + compute='_compute_group_change_unit_price_id', + string='Point of Sale - Allow Unit Price Change', + help="This field is there to pass the id of the 'PoS - Allow Unit" + " Price Change' Group to the Point of Sale Frontend.") + + group_multi_order_id = fields.Many2one( + comodel_name='res.groups', + compute='_compute_group_multi_order_id', + string='Point of Sale - Many Orders', + help="This field is there to pass the id of the 'PoS - Many Orders" + " Group to the Point of Sale Frontend.") + + group_delete_order_id = fields.Many2one( + comodel_name='res.groups', + compute='_compute_group_delete_order_id', + string='Point of Sale - Delete Order', + help="This field is there to pass the id of the 'PoS - Delete Order'" + " Group to the Point of Sale Frontend.") + + @api.multi + def _compute_group_negative_qty_id(self): + for config in self: + self.group_negative_qty_id = \ + self.env.ref('pos_access_right.group_negative_qty') + + @api.multi + def _compute_group_discount_id(self): + for config in self: + self.group_discount_id = \ + self.env.ref('pos_access_right.group_discount') + + @api.multi + def _compute_group_change_unit_price_id(self): + for config in self: + self.group_change_unit_price_id = \ + self.env.ref('pos_access_right.group_change_unit_price') + + @api.multi + def _compute_group_multi_order_id(self): + for config in self: + self.group_multi_order_id = \ + self.env.ref('pos_access_right.group_multi_order') + + @api.multi + def _compute_group_delete_order_id(self): + for config in self: + self.group_delete_order_id = \ + self.env.ref('pos_access_right.group_delete_order') diff --git a/pos_access_right/models/pos_config.pyc b/pos_access_right/models/pos_config.pyc new file mode 100644 index 0000000000000000000000000000000000000000..26704684a0f8954140ea653792cf8f589e7746da GIT binary patch literal 3210 zcmcImZEw>s5Wb|NTeo!^;~fS>@L?4aLqbC0O}uS_PmGZ=0aK9`61Vk~Iw5v}N$?3I z{s8}!9{_ikhIQ?R3ao8?wa<_3yT{HGmwr^IZ+`#wDumvrg#Qn)m|JKf{5cQ@bDS|1kkha|1JMcQ z3CWx-JSPiJweXxOJadKTbm5sVJZB2e0{HdXSz>7#O`4dMkXf{|*bEaUTIir7xj&O; zrIjV!)Y!?qKkZs+FJN6Dm>Pong_ftdJs$R zs`oIClMmi{Z;`MIx7<8jb)q=04U|Z#Om#Zf`@G;H`{f z*=Q--z<8+aiK&sl8rYvtwUX}m^!m7l#gLwWTXheKm5VsrU<5r@3aMa5{3-(dIW+bt znw*OQfybJ8@D~U~{fC@Ay$Ek$Iqd8y%mcC?5}!dDNL+IohM;5TgWhy^#=ys=gZb!F zu|Xz||7M~OG*EVmbe=*GNkF@|UDi%PeIMe0s_3rudYu X=RPevhIDub?&kY(kD@U|?NaF%KX@n& literal 0 HcmV?d00001 diff --git a/pos_access_right/security/res_groups.yml b/pos_access_right/security/res_groups.yml new file mode 100644 index 0000000..3813e4e --- /dev/null +++ b/pos_access_right/security/res_groups.yml @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2016-Today: La Louve () +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + + +- !record {model: res.groups, id: group_negative_qty}: + name: Point of Sale - Negative Quantity + category_id: base.module_category_usability + +- !record {model: res.groups, id: group_discount}: + name: Point of Sale - Discount + category_id: base.module_category_usability + +- !record {model: res.groups, id: group_change_unit_price}: + name: Point of Sale - Unit Price Change + category_id: base.module_category_usability + +- !record {model: res.groups, id: group_multi_order}: + name: Point of Sale - Many Orders + category_id: base.module_category_usability + +- !record {model: res.groups, id: group_delete_order}: + name: Point of Sale - Delete Order + category_id: base.module_category_usability diff --git a/pos_access_right/static/description/admin_numpad.png b/pos_access_right/static/description/admin_numpad.png new file mode 100644 index 0000000000000000000000000000000000000000..08c889c2a9f31309c65d43efba942c559f28dc4b GIT binary patch literal 9506 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 literal 0 HcmV?d00001 diff --git a/pos_access_right/static/description/icon.png b/pos_access_right/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2c83d7101b7d63990c85fa50905fc5904048354b GIT binary patch literal 4374 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 DMU_o_ literal 0 HcmV?d00001 diff --git a/pos_access_right/static/description/new_groups.png b/pos_access_right/static/description/new_groups.png new file mode 100644 index 0000000000000000000000000000000000000000..0d610e2e3a9f652eb6ee532e54b55be0fa397c25 GIT binary patch literal 15280 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 literal 0 HcmV?d00001 diff --git a/pos_access_right/static/src/css/pos_access_right.css b/pos_access_right/static/src/css/pos_access_right.css new file mode 100644 index 0000000..e10fe1d --- /dev/null +++ b/pos_access_right/static/src/css/pos_access_right.css @@ -0,0 +1,13 @@ +/* + Copyright (C) 2016-Today: La Louve () + @author: Sylvain LE GAL (https://twitter.com/legalsylvain) + License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +*/ + +.pos-disabled-mode { + color: #bbb !important; + background-color: #d3d3d3 !important; +} +.pos-disabled-mode:hover { + background: #e2e2e2 !important; +} diff --git a/pos_access_right/static/src/js/pos_access_right.js b/pos_access_right/static/src/js/pos_access_right.js new file mode 100644 index 0000000..2781c88 --- /dev/null +++ b/pos_access_right/static/src/js/pos_access_right.js @@ -0,0 +1,140 @@ +/* + Copyright (C) 2016-Today: La Louve () + @author: Sylvain LE GAL (https://twitter.com/legalsylvain) + License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +*/ + + +odoo.define('pos_access_right.pos_access_right', function (require) { + "use strict"; + + var screens = require('point_of_sale.screens'); + var chrome = require('point_of_sale.chrome'); + var models = require('point_of_sale.models'); + var gui = require('point_of_sale.gui'); + var core = require('web.core'); + var _t = core._t; + +/* ******************************************************** +point_of_sale.gui +******************************************************** */ + + // New function 'display_access_right' to display disabled functions + gui.Gui.prototype.display_access_right = function(user){ + if (user.groups_id.indexOf(this.pos.config.group_negative_qty_id[0]) != -1){ + $('.numpad-minus').removeClass('pos-disabled-mode'); + } + else{ + $('.numpad-minus').addClass('pos-disabled-mode'); + } + if (user.groups_id.indexOf(this.pos.config.group_discount_id[0]) != -1){ + $(".mode-button[data-mode='discount']").removeClass('pos-disabled-mode'); + } + else{ + $(".mode-button[data-mode='discount']").addClass('pos-disabled-mode'); + } + if (user.groups_id.indexOf(this.pos.config.group_change_unit_price_id[0]) != -1){ + $(".mode-button[data-mode='price']").removeClass('pos-disabled-mode'); + } + else{ + $(".mode-button[data-mode='price']").addClass('pos-disabled-mode'); + } + }; + + +/* ******************************************************** +point_of_sale.models +******************************************************** */ + + // load extra data from 'pos_config' (ids of new groups) + models.load_fields("pos.config", "group_negative_qty_id"); + models.load_fields("pos.config", "group_discount_id"); + models.load_fields("pos.config", "group_change_unit_price_id"); + models.load_fields("pos.config", "group_multi_order_id"); + models.load_fields("pos.config", "group_delete_order_id"); + + // Overload 'set_cashier' function to display correctly + // unauthorized function after cashier changed + var _set_cashier_ = models.PosModel.prototype.set_cashier; + models.PosModel.prototype.set_cashier = function(user){ + this.gui.display_access_right(user); + _set_cashier_.call(this, user); + }; + +/* ******************************************************** +chrome.OrderSelectorWidget +******************************************************** */ + chrome.OrderSelectorWidget.include({ + + neworder_click_handler: function(event, $el) { + if (this.pos.get_cashier().groups_id.indexOf(this.pos.config.group_multi_order_id[0]) == -1) { + this.gui.show_popup('error',{ + 'title': _t('Many Orders - Unauthorized function'), + 'body': _t('Please ask your manager to do it.'), + }); + } + else { + return this._super(); + } + }, + deleteorder_click_handler: function(event, $el) { + if (this.pos.get_cashier().groups_id.indexOf(this.pos.config.group_delete_order_id[0]) == -1) { + this.gui.show_popup('error',{ + 'title': _t('Delete Order - Unauthorized function'), + 'body': _t('Please ask your manager to do it.'), + }); + } + else { + return this._super(); + } + }, + }); + + +/* ******************************************************** +screens.NumpadWidget +******************************************************** */ + screens.NumpadWidget.include({ + + // Overload 'start' function to display correctly unauthorized function + // at the beginning of the session, based on current user + start: function() { + this._super(); + this.gui.display_access_right(this.pos.get_cashier()); + }, + + // block '+/-' button if user doesn't belong to the correct group + clickSwitchSign: function() { + if (this.pos.get_cashier().groups_id.indexOf(this.pos.config.group_negative_qty_id[0]) == -1) { + this.gui.show_popup('error',{ + 'title': _t('Negative Quantity - Unauthorized function'), + 'body': _t('Please ask your manager to do it.'), + }); + } + else { + return this._super(); + } + }, + + // block 'discount' or 'price' button if user doesn't belong to the correct group + clickChangeMode: function(event) { + if (event.currentTarget.attributes['data-mode'].nodeValue == 'discount' && + this.pos.get_cashier().groups_id.indexOf(this.pos.config.group_discount_id[0]) == -1) { + this.gui.show_popup('error',{ + 'title': _t('Discount - Unauthorized function'), + 'body': _t('Please ask your manager to do it.'), + }); + } + else if (event.currentTarget.attributes['data-mode'].nodeValue == 'price' && + this.pos.get_cashier().groups_id.indexOf(this.pos.config.group_change_unit_price_id[0]) == -1) { + this.gui.show_popup('error',{ + 'title': _t('Change Unit Price - Unauthorized function'), + 'body': _t('Please ask your manager to do it.'), + }); + } + else { + return this._super(event); + } + }, + }); +}); diff --git a/pos_access_right/static/src/xml/templates.xml b/pos_access_right/static/src/xml/templates.xml new file mode 100644 index 0000000..3742269 --- /dev/null +++ b/pos_access_right/static/src/xml/templates.xml @@ -0,0 +1,17 @@ + + + + +