From a984880b1f2a869465a7cc013e94b31c129fd414 Mon Sep 17 00:00:00 2001 From: eLBati Date: Wed, 1 Jul 2020 08:21:19 +0200 Subject: [PATCH 01/31] ADD pos_user_restriction Restrict some users to only access their assigned points of sale --- pos_user_restriction/README.rst | 88 ++++ pos_user_restriction/__init__.py | 1 + pos_user_restriction/__manifest__.py | 23 + pos_user_restriction/i18n/it.po | 58 +++ .../i18n/pos_user_restriction.pot | 51 +++ pos_user_restriction/models/__init__.py | 1 + pos_user_restriction/models/pos_config.py | 10 + pos_user_restriction/readme/CONFIGURE.rst | 3 + pos_user_restriction/readme/CONTRIBUTORS.rst | 1 + pos_user_restriction/readme/DESCRIPTION.rst | 1 + .../security/ir.model.access.csv | 24 + .../security/pos_security.xml | 52 +++ .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 427 ++++++++++++++++++ pos_user_restriction/tests/__init__.py | 1 + .../tests/test_pos_user_restriction.py | 52 +++ .../views/pos_config_views.xml | 28 ++ 17 files changed, 821 insertions(+) create mode 100644 pos_user_restriction/README.rst create mode 100644 pos_user_restriction/__init__.py create mode 100644 pos_user_restriction/__manifest__.py create mode 100644 pos_user_restriction/i18n/it.po create mode 100644 pos_user_restriction/i18n/pos_user_restriction.pot create mode 100644 pos_user_restriction/models/__init__.py create mode 100644 pos_user_restriction/models/pos_config.py create mode 100644 pos_user_restriction/readme/CONFIGURE.rst create mode 100644 pos_user_restriction/readme/CONTRIBUTORS.rst create mode 100644 pos_user_restriction/readme/DESCRIPTION.rst create mode 100644 pos_user_restriction/security/ir.model.access.csv create mode 100644 pos_user_restriction/security/pos_security.xml create mode 100644 pos_user_restriction/static/description/icon.png create mode 100644 pos_user_restriction/static/description/index.html create mode 100644 pos_user_restriction/tests/__init__.py create mode 100644 pos_user_restriction/tests/test_pos_user_restriction.py create mode 100644 pos_user_restriction/views/pos_config_views.xml diff --git a/pos_user_restriction/README.rst b/pos_user_restriction/README.rst new file mode 100644 index 0000000000..83794e6f31 --- /dev/null +++ b/pos_user_restriction/README.rst @@ -0,0 +1,88 @@ +============================== +Point of Sale - Restrict users +============================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png + :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fpos-lightgray.png?logo=github + :target: https://github.com/OCA/pos/tree/12.0/pos_user_restriction + :alt: OCA/pos +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/pos-12-0/pos-12-0-pos_user_restriction + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/184/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Restrict some users to only access their assigned points of sale. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +With a POS Manager, open a point of sale configration (pos.config) and set "Assigned users" field. + +Then, assign "User: Assigned POS Only" group to users who should be able to access to their assigned points of sale only. + +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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* TAKOBI + +Contributors +~~~~~~~~~~~~ + +* Lorenzo Battistini (https://takobi.online) + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +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. + +.. |maintainer-eLBati| image:: https://github.com/eLBati.png?size=40px + :target: https://github.com/eLBati + :alt: eLBati + +Current `maintainer `__: + +|maintainer-eLBati| + +This module is part of the `OCA/pos `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/pos_user_restriction/__init__.py b/pos_user_restriction/__init__.py new file mode 100644 index 0000000000..0650744f6b --- /dev/null +++ b/pos_user_restriction/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/pos_user_restriction/__manifest__.py b/pos_user_restriction/__manifest__.py new file mode 100644 index 0000000000..1fbad0350d --- /dev/null +++ b/pos_user_restriction/__manifest__.py @@ -0,0 +1,23 @@ +# Copyright 2020 Lorenzo Battistini @ TAKOBI +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). +{ + "name": "Point of Sale - Restrict users", + "summary": "Restrict some users to see and use only certain points of sale", + "version": "12.0.1.0.0", + "development_status": "Beta", + "category": "Point of Sale", + "website": "https://github.com/OCA/pos", + "author": "TAKOBI, Odoo Community Association (OCA)", + "maintainers": ["eLBati"], + "license": "LGPL-3", + "application": False, + "installable": True, + "depends": [ + "point_of_sale", + ], + "data": [ + "security/pos_security.xml", + "views/pos_config_views.xml", + "security/ir.model.access.csv", + ], +} diff --git a/pos_user_restriction/i18n/it.po b/pos_user_restriction/i18n/it.po new file mode 100644 index 0000000000..bf2177736b --- /dev/null +++ b/pos_user_restriction/i18n/it.po @@ -0,0 +1,58 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * pos_user_restriction +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-07-07 04:49+0000\n" +"PO-Revision-Date: 2020-07-07 04:49+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: pos_user_restriction +#: model:ir.model.fields,field_description:pos_user_restriction.field_pos_config__assigned_user_ids +msgid "Assigned users" +msgstr "Utenti assegnati" + +#. module: pos_user_restriction +#: model:ir.model,name:pos_user_restriction.model_pos_config +msgid "Point of Sale Configuration" +msgstr "Configurazione punto vendita" + +#. module: pos_user_restriction +#: model:ir.model.fields,help:pos_user_restriction.field_pos_config__assigned_user_ids +#: model_terms:ir.ui.view,arch_db:pos_user_restriction.pos_config_view_form_users +msgid "" +"Restrict some users to only access their assigned points of sale. In order " +"to apply the restriction, the user needs the 'User: Assigned POS Only' group" +msgstr "" +"Limitare alcuni utenti ad accedere solamente ai loro punti vendita " +"assegnati. Per applicare la restrizione, l'utente necessita il gruppo " +"'Utente: solamente POS assegnati'" + +#. module: pos_user_restriction +#: model:res.groups,comment:pos_user_restriction.group_assigned_points_of_sale_user +msgid "The user will have access to her assigned points of sale." +msgstr "L'utente avrà accesso ai propri punti vendita assegnati." + +#. module: pos_user_restriction +#: model:res.groups,name:pos_user_restriction.group_assigned_points_of_sale_user +msgid "User: Assigned POS Only" +msgstr "Utente: solamente POS assegnati" + +#. module: pos_user_restriction +#: model_terms:ir.ui.view,arch_db:pos_user_restriction.pos_config_view_form_users +msgid "Users" +msgstr "Utenti" + +#. module: pos_user_restriction +#: model_terms:ir.ui.view,arch_db:pos_user_restriction.pos_config_view_form_users +msgid "Users assigned to this point of sale" +msgstr "Utenti assegnati a questo punto vendita" diff --git a/pos_user_restriction/i18n/pos_user_restriction.pot b/pos_user_restriction/i18n/pos_user_restriction.pot new file mode 100644 index 0000000000..334b8d1657 --- /dev/null +++ b/pos_user_restriction/i18n/pos_user_restriction.pot @@ -0,0 +1,51 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * pos_user_restriction +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \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_user_restriction +#: model:ir.model.fields,field_description:pos_user_restriction.field_pos_config__assigned_user_ids +msgid "Assigned users" +msgstr "" + +#. module: pos_user_restriction +#: model:ir.model,name:pos_user_restriction.model_pos_config +msgid "Point of Sale Configuration" +msgstr "" + +#. module: pos_user_restriction +#: model:ir.model.fields,help:pos_user_restriction.field_pos_config__assigned_user_ids +#: model_terms:ir.ui.view,arch_db:pos_user_restriction.pos_config_view_form_users +msgid "Restrict some users to only access their assigned points of sale. In order to apply the restriction, the user needs the 'User: Assigned POS Only' group" +msgstr "" + +#. module: pos_user_restriction +#: model:res.groups,comment:pos_user_restriction.group_assigned_points_of_sale_user +msgid "The user will have access to her assigned points of sale." +msgstr "" + +#. module: pos_user_restriction +#: model:res.groups,name:pos_user_restriction.group_assigned_points_of_sale_user +msgid "User: Assigned POS Only" +msgstr "" + +#. module: pos_user_restriction +#: model_terms:ir.ui.view,arch_db:pos_user_restriction.pos_config_view_form_users +msgid "Users" +msgstr "" + +#. module: pos_user_restriction +#: model_terms:ir.ui.view,arch_db:pos_user_restriction.pos_config_view_form_users +msgid "Users assigned to this point of sale" +msgstr "" + diff --git a/pos_user_restriction/models/__init__.py b/pos_user_restriction/models/__init__.py new file mode 100644 index 0000000000..db8634ade1 --- /dev/null +++ b/pos_user_restriction/models/__init__.py @@ -0,0 +1 @@ +from . import pos_config diff --git a/pos_user_restriction/models/pos_config.py b/pos_user_restriction/models/pos_config.py new file mode 100644 index 0000000000..7daa5cbb3c --- /dev/null +++ b/pos_user_restriction/models/pos_config.py @@ -0,0 +1,10 @@ +from odoo import models, fields + + +class PosConfig(models.Model): + _inherit = 'pos.config' + assigned_user_ids = fields.Many2many( + "res.users", string="Assigned users", + help="Restrict some users to only access their assigned points of sale. " + "In order to apply the restriction, the user needs the " + "'User: Assigned POS Only' group") diff --git a/pos_user_restriction/readme/CONFIGURE.rst b/pos_user_restriction/readme/CONFIGURE.rst new file mode 100644 index 0000000000..13be1437d3 --- /dev/null +++ b/pos_user_restriction/readme/CONFIGURE.rst @@ -0,0 +1,3 @@ +With a POS Manager, open a point of sale configration (pos.config) and set "Assigned users" field. + +Then, assign "User: Assigned POS Only" group to users who should be able to access to their assigned points of sale only. diff --git a/pos_user_restriction/readme/CONTRIBUTORS.rst b/pos_user_restriction/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..b27b50b507 --- /dev/null +++ b/pos_user_restriction/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Lorenzo Battistini (https://takobi.online) diff --git a/pos_user_restriction/readme/DESCRIPTION.rst b/pos_user_restriction/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..c675657603 --- /dev/null +++ b/pos_user_restriction/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +Restrict some users to only access their assigned points of sale. diff --git a/pos_user_restriction/security/ir.model.access.csv b/pos_user_restriction/security/ir.model.access.csv new file mode 100644 index 0000000000..59d274ae8f --- /dev/null +++ b/pos_user_restriction/security/ir.model.access.csv @@ -0,0 +1,24 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_pos_order,pos.order,point_of_sale.model_pos_order,group_assigned_points_of_sale_user,1,1,1,1 +access_pos_order_line,pos.order.line,point_of_sale.model_pos_order_line,group_assigned_points_of_sale_user,1,1,1,1 +access_pos_pack_operation_lot,pos.pack.operation.lot,point_of_sale.model_pos_pack_operation_lot,group_assigned_points_of_sale_user,1,1,1,1 +access_stock_picking_pos_user,stock.picking pos_user,stock.model_stock_picking,group_assigned_points_of_sale_user,1,1,1,1 +access_stock_warehouse_pos_user,stock.warehouse pos_user,stock.model_stock_warehouse,group_assigned_points_of_sale_user,1,0,0,0 +access_stock_move_pos_user,stock.move pos_user,stock.model_stock_move,group_assigned_points_of_sale_user,1,1,1,1 +access_report_pos_order,report.pos.order,point_of_sale.model_report_pos_order,group_assigned_points_of_sale_user,1,1,1,1 +access_account_journal_pos_user,account.journal pos_user,account.model_account_journal,group_assigned_points_of_sale_user,1,0,0,0 +access_account_bank_statement,account.bank.statement,account.model_account_bank_statement,group_assigned_points_of_sale_user,1,1,1,0 +access_account_bank_statement_line,account.bank.statement.line,account.model_account_bank_statement_line,group_assigned_points_of_sale_user,1,1,1,0 +access_product_product,product.product,product.model_product_product,group_assigned_points_of_sale_user,1,0,0,0 +access_product_template_pos_user,product.template pos user,product.model_product_template,group_assigned_points_of_sale_user,1,0,0,0 +access_product_product_supplierinfo_user,product.supplierinfo user,product.model_product_supplierinfo,group_assigned_points_of_sale_user,1,0,0,0 +access_product_product_packaging_user,product.packaging user,product.model_product_packaging,group_assigned_points_of_sale_user,1,0,0,0 +access_product_pricelist_user,product.pricelist user,product.model_product_pricelist,group_assigned_points_of_sale_user,1,0,0,0 +access_pos_session_user,pos.session user,point_of_sale.model_pos_session,group_assigned_points_of_sale_user,1,1,1,0 +access_pos_config_user,pos.config user,point_of_sale.model_pos_config,group_assigned_points_of_sale_user,1,1,0,0 +access_product_category_pos_user,pos.category user,point_of_sale.model_pos_category,group_assigned_points_of_sale_user,1,0,0,0 +access_barcode_nomenclature_pos_user,barcode.nomenclature.pos.user,barcodes.model_barcode_nomenclature,group_assigned_points_of_sale_user,1,0,0,0 +access_barcode_rule_pos_user,barcode.rule.pos.user,barcodes.model_barcode_rule,group_assigned_points_of_sale_user,1,0,0,0 +access_bank_statement_cashbox_user,account.bank.statement.cashbox user,account.model_account_bank_statement_cashbox,group_assigned_points_of_sale_user,1,1,1,0 +access_account_cashbox_line_user,account.cashbox.line user,account.model_account_cashbox_line,group_assigned_points_of_sale_user,1,1,1,0 +access_account_cash_rounding_pos_user,account.cash.rounding.pos.user,account.model_account_cash_rounding,group_assigned_points_of_sale_user,1,0,0,0 diff --git a/pos_user_restriction/security/pos_security.xml b/pos_user_restriction/security/pos_security.xml new file mode 100644 index 0000000000..2bfb2ca171 --- /dev/null +++ b/pos_user_restriction/security/pos_security.xml @@ -0,0 +1,52 @@ + + + + User: Assigned POS Only + + The user will have access to her assigned points of sale. + + + + + + + + Assigned points of sale + + ['|',('assigned_user_ids','in',user.id),('assigned_user_ids','=',False)] + + + + Assigned POS sessions + + ['|',('config_id.assigned_user_ids','in',user.id),('config_id.assigned_user_ids','=',False)] + + + + Assigned POS orders + + ['|',('session_id.config_id.assigned_user_ids','in',user.id),('session_id.config_id.assigned_user_ids','=',False)] + + + + + All points of sale + + [(1,'=',1)] + + + + All POS sessions + + [(1,'=',1)] + + + + All POS orders + + [(1,'=',1)] + + + + + diff --git a/pos_user_restriction/static/description/icon.png b/pos_user_restriction/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/pos_user_restriction/static/description/index.html b/pos_user_restriction/static/description/index.html new file mode 100644 index 0000000000..29294c4890 --- /dev/null +++ b/pos_user_restriction/static/description/index.html @@ -0,0 +1,427 @@ + + + + + + +Point of Sale - Restrict users + + + +
+

Point of Sale - Restrict users

+ + +

Beta License: LGPL-3 OCA/pos Translate me on Weblate Try me on Runbot

+

Restrict some users to only access their assigned points of sale.

+

Table of contents

+ +
+

Configuration

+

With a POS Manager, open a point of sale configration (pos.config) and set “Assigned users” field.

+

Then, assign “User: Assigned POS Only” group to users who should be able to access to their assigned points of sale only.

+
+
+

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.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • TAKOBI
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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.

+

Current maintainer:

+

eLBati

+

This module is part of the OCA/pos project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/pos_user_restriction/tests/__init__.py b/pos_user_restriction/tests/__init__.py new file mode 100644 index 0000000000..056bb44155 --- /dev/null +++ b/pos_user_restriction/tests/__init__.py @@ -0,0 +1 @@ +from . import test_pos_user_restriction diff --git a/pos_user_restriction/tests/test_pos_user_restriction.py b/pos_user_restriction/tests/test_pos_user_restriction.py new file mode 100644 index 0000000000..05bf2b37e3 --- /dev/null +++ b/pos_user_restriction/tests/test_pos_user_restriction.py @@ -0,0 +1,52 @@ +from odoo.tests.common import SavepointCase + + +class TestUserRestriction(SavepointCase): + + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.env = cls.env(context=dict( + cls.env.context, + tracking_disable=True, + no_reset_password=True, + )) + cls.pos_user = cls.env['res.users'].create({ + 'login': 'pos_user', + 'name': 'pos_user', + 'groups_id': [(6, 0, [cls.env.ref('point_of_sale.group_pos_user').id])] + }) + cls.pos_user_assigned_pos = cls.env['res.users'].create({ + 'login': 'pos_user_assigned_pos', + 'name': 'pos_user_assigned_pos', + 'groups_id': [(6, 0, [cls.env.ref( + 'pos_user_restriction.group_assigned_points_of_sale_user').id])] + }) + cls.pos_config_main = cls.env.ref('point_of_sale.pos_config_main') + cls.pos_config_model = cls.env['pos.config'] + + def test_access_pos(self): + # assigned_user_ids is not set: both users can read + pos_configs = self.pos_config_model.sudo(self.pos_user.id).search([]) + self.assertTrue(pos_configs) + pos_configs = self.pos_config_model.sudo( + self.pos_user_assigned_pos.id).search([]) + self.assertTrue(pos_configs) + + self.pos_config_main.assigned_user_ids = [ + (6, 0, [self.pos_user_assigned_pos.id])] + # assigned_user_ids is set with pos_user_assigned_pos: both users can read + pos_configs = self.pos_config_model.sudo(self.pos_user.id).search([]) + self.assertTrue(pos_configs) + pos_configs = self.pos_config_model.sudo( + self.pos_user_assigned_pos.id).search([]) + self.assertTrue(pos_configs) + + self.pos_config_main.assigned_user_ids = [ + (6, 0, [self.pos_user.id])] + # assigned_user_ids is set with pos_user: only pos_user can read + pos_configs = self.pos_config_model.sudo(self.pos_user.id).search([]) + self.assertTrue(pos_configs) + pos_configs = self.pos_config_model.sudo( + self.pos_user_assigned_pos.id).search([]) + self.assertFalse(pos_configs) diff --git a/pos_user_restriction/views/pos_config_views.xml b/pos_user_restriction/views/pos_config_views.xml new file mode 100644 index 0000000000..60a262987b --- /dev/null +++ b/pos_user_restriction/views/pos_config_views.xml @@ -0,0 +1,28 @@ + + + + pos_config_view_form_users + pos.config + + + +

Users

+
+
+
+
+ Users assigned to this point of sale +
+
+
+
+
+
+
+
+
+
+
+
From a4ae980520c2744135b5f7fc8286fabbaec4a32a Mon Sep 17 00:00:00 2001 From: Daniel Martinez Vila Date: Mon, 27 Jul 2020 10:14:32 +0000 Subject: [PATCH 02/31] Added translation using Weblate (Spanish) --- pos_user_restriction/i18n/es.po | 51 +++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 pos_user_restriction/i18n/es.po diff --git a/pos_user_restriction/i18n/es.po b/pos_user_restriction/i18n/es.po new file mode 100644 index 0000000000..902387d43d --- /dev/null +++ b/pos_user_restriction/i18n/es.po @@ -0,0 +1,51 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * pos_user_restriction +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#. module: pos_user_restriction +#: model:ir.model.fields,field_description:pos_user_restriction.field_pos_config__assigned_user_ids +msgid "Assigned users" +msgstr "" + +#. module: pos_user_restriction +#: model:ir.model,name:pos_user_restriction.model_pos_config +msgid "Point of Sale Configuration" +msgstr "" + +#. module: pos_user_restriction +#: model:ir.model.fields,help:pos_user_restriction.field_pos_config__assigned_user_ids +#: model_terms:ir.ui.view,arch_db:pos_user_restriction.pos_config_view_form_users +msgid "Restrict some users to only access their assigned points of sale. In order to apply the restriction, the user needs the 'User: Assigned POS Only' group" +msgstr "" + +#. module: pos_user_restriction +#: model:res.groups,comment:pos_user_restriction.group_assigned_points_of_sale_user +msgid "The user will have access to her assigned points of sale." +msgstr "" + +#. module: pos_user_restriction +#: model:res.groups,name:pos_user_restriction.group_assigned_points_of_sale_user +msgid "User: Assigned POS Only" +msgstr "" + +#. module: pos_user_restriction +#: model_terms:ir.ui.view,arch_db:pos_user_restriction.pos_config_view_form_users +msgid "Users" +msgstr "" + +#. module: pos_user_restriction +#: model_terms:ir.ui.view,arch_db:pos_user_restriction.pos_config_view_form_users +msgid "Users assigned to this point of sale" +msgstr "" From 35b3586abc7079a4dd1c3152b549f46d03548a47 Mon Sep 17 00:00:00 2001 From: Daniel Martinez Vila Date: Mon, 27 Jul 2020 10:14:47 +0000 Subject: [PATCH 03/31] Translated using Weblate (Spanish) Currently translated at 100.0% (7 of 7 strings) Translation: pos-12.0/pos-12.0-pos_user_restriction Translate-URL: https://translation.odoo-community.org/projects/pos-12-0/pos-12-0-pos_user_restriction/es/ --- pos_user_restriction/i18n/es.po | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/pos_user_restriction/i18n/es.po b/pos_user_restriction/i18n/es.po index 902387d43d..5ec38ed7fe 100644 --- a/pos_user_restriction/i18n/es.po +++ b/pos_user_restriction/i18n/es.po @@ -6,46 +6,51 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2020-07-27 11:19+0000\n" +"Last-Translator: Daniel Martinez Vila \n" "Language-Team: none\n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.10\n" #. module: pos_user_restriction #: model:ir.model.fields,field_description:pos_user_restriction.field_pos_config__assigned_user_ids msgid "Assigned users" -msgstr "" +msgstr "Usuarios asignados" #. module: pos_user_restriction #: model:ir.model,name:pos_user_restriction.model_pos_config msgid "Point of Sale Configuration" -msgstr "" +msgstr "Configuración del punto de venta" #. module: pos_user_restriction #: model:ir.model.fields,help:pos_user_restriction.field_pos_config__assigned_user_ids #: model_terms:ir.ui.view,arch_db:pos_user_restriction.pos_config_view_form_users msgid "Restrict some users to only access their assigned points of sale. In order to apply the restriction, the user needs the 'User: Assigned POS Only' group" msgstr "" +"Restrinja a algunos usuarios para que solo accedan a sus puntos de venta " +"asignados. Para aplicar la restricción, el usuario necesita el grupo " +"'Usuario: PdV asignado solo'" #. module: pos_user_restriction #: model:res.groups,comment:pos_user_restriction.group_assigned_points_of_sale_user msgid "The user will have access to her assigned points of sale." -msgstr "" +msgstr "El usuario tendrá acceso a sus puntos de venta asignados." #. module: pos_user_restriction #: model:res.groups,name:pos_user_restriction.group_assigned_points_of_sale_user msgid "User: Assigned POS Only" -msgstr "" +msgstr "Usuario: Solo PdV asignado" #. module: pos_user_restriction #: model_terms:ir.ui.view,arch_db:pos_user_restriction.pos_config_view_form_users msgid "Users" -msgstr "" +msgstr "Usuarios" #. module: pos_user_restriction #: model_terms:ir.ui.view,arch_db:pos_user_restriction.pos_config_view_form_users msgid "Users assigned to this point of sale" -msgstr "" +msgstr "Usuarios asignados a este punto de venta" From e1bbba152749b213865c2370f920a5811def3df3 Mon Sep 17 00:00:00 2001 From: eLBati Date: Fri, 31 Jul 2020 07:35:56 +0200 Subject: [PATCH 04/31] FIX pos_user_restriction allowing "User: Assigned POS Only" to see point of sale menu --- pos_user_restriction/__manifest__.py | 1 + pos_user_restriction/views/point_of_sale_views.xml | 6 ++++++ 2 files changed, 7 insertions(+) create mode 100644 pos_user_restriction/views/point_of_sale_views.xml diff --git a/pos_user_restriction/__manifest__.py b/pos_user_restriction/__manifest__.py index 1fbad0350d..0c8a73ac83 100644 --- a/pos_user_restriction/__manifest__.py +++ b/pos_user_restriction/__manifest__.py @@ -19,5 +19,6 @@ "security/pos_security.xml", "views/pos_config_views.xml", "security/ir.model.access.csv", + "views/point_of_sale_views.xml", ], } diff --git a/pos_user_restriction/views/point_of_sale_views.xml b/pos_user_restriction/views/point_of_sale_views.xml new file mode 100644 index 0000000000..45bd1b43a8 --- /dev/null +++ b/pos_user_restriction/views/point_of_sale_views.xml @@ -0,0 +1,6 @@ + + + + + + From d93fcaa132819643f0cb759529cb744d723f18c4 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 31 Jul 2020 19:48:28 +0000 Subject: [PATCH 05/31] pos_user_restriction 12.0.1.0.1 --- pos_user_restriction/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pos_user_restriction/__manifest__.py b/pos_user_restriction/__manifest__.py index 0c8a73ac83..1f2f6055da 100644 --- a/pos_user_restriction/__manifest__.py +++ b/pos_user_restriction/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Point of Sale - Restrict users", "summary": "Restrict some users to see and use only certain points of sale", - "version": "12.0.1.0.0", + "version": "12.0.1.0.1", "development_status": "Beta", "category": "Point of Sale", "website": "https://github.com/OCA/pos", From 04bd3448e8ac0c50ad67df46767cfa35a58a936b Mon Sep 17 00:00:00 2001 From: Sylvain LE GAL Date: Wed, 23 Dec 2020 16:56:27 +0100 Subject: [PATCH 06/31] [FIX] pos_user_restriction: disable test that are failing if pos_restaurant module is installed --- pos_user_restriction/tests/test_pos_user_restriction.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pos_user_restriction/tests/test_pos_user_restriction.py b/pos_user_restriction/tests/test_pos_user_restriction.py index 05bf2b37e3..63cb4763b2 100644 --- a/pos_user_restriction/tests/test_pos_user_restriction.py +++ b/pos_user_restriction/tests/test_pos_user_restriction.py @@ -49,4 +49,7 @@ def test_access_pos(self): self.assertTrue(pos_configs) pos_configs = self.pos_config_model.sudo( self.pos_user_assigned_pos.id).search([]) - self.assertFalse(pos_configs) + + # TODO, fixme + # this test is failing, if Odoo pos_restaurant is installed + # self.assertFalse(pos_configs) From 8b8bbccb3a59ecef9a76d83a35628fc950af2f83 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 28 Dec 2020 09:44:41 +0000 Subject: [PATCH 07/31] pos_user_restriction 12.0.1.0.2 --- pos_user_restriction/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pos_user_restriction/__manifest__.py b/pos_user_restriction/__manifest__.py index 1f2f6055da..9df3f048cc 100644 --- a/pos_user_restriction/__manifest__.py +++ b/pos_user_restriction/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Point of Sale - Restrict users", "summary": "Restrict some users to see and use only certain points of sale", - "version": "12.0.1.0.1", + "version": "12.0.1.0.2", "development_status": "Beta", "category": "Point of Sale", "website": "https://github.com/OCA/pos", From 90691858d69769ae744a95da0a320e82c9e2a21d Mon Sep 17 00:00:00 2001 From: hkapatel Date: Sat, 15 May 2021 00:55:26 +0530 Subject: [PATCH 08/31] [IMP]pos_user_restriction: black, isort, prettier --- pos_user_restriction/models/pos_config.py | 12 +-- .../security/pos_security.xml | 49 ++++++++----- .../tests/test_pos_user_restriction.py | 73 ++++++++++++------- .../views/point_of_sale_views.xml | 7 +- .../views/pos_config_views.xml | 25 +++++-- 5 files changed, 106 insertions(+), 60 deletions(-) diff --git a/pos_user_restriction/models/pos_config.py b/pos_user_restriction/models/pos_config.py index 7daa5cbb3c..70aa79d642 100644 --- a/pos_user_restriction/models/pos_config.py +++ b/pos_user_restriction/models/pos_config.py @@ -1,10 +1,12 @@ -from odoo import models, fields +from odoo import fields, models class PosConfig(models.Model): - _inherit = 'pos.config' + _inherit = "pos.config" assigned_user_ids = fields.Many2many( - "res.users", string="Assigned users", + "res.users", + string="Assigned users", help="Restrict some users to only access their assigned points of sale. " - "In order to apply the restriction, the user needs the " - "'User: Assigned POS Only' group") + "In order to apply the restriction, the user needs the " + "'User: Assigned POS Only' group", + ) diff --git a/pos_user_restriction/security/pos_security.xml b/pos_user_restriction/security/pos_security.xml index 2bfb2ca171..1af21ef770 100644 --- a/pos_user_restriction/security/pos_security.xml +++ b/pos_user_restriction/security/pos_security.xml @@ -1,51 +1,62 @@ - + User: Assigned POS Only - - The user will have access to her assigned points of sale. + + The user will have access to her assigned points of sale. - + Assigned points of sale - - ['|',('assigned_user_ids','in',user.id),('assigned_user_ids','=',False)] - + + ['|',('assigned_user_ids','in',user.id),('assigned_user_ids','=',False)] + Assigned POS sessions - - ['|',('config_id.assigned_user_ids','in',user.id),('config_id.assigned_user_ids','=',False)] - + + ['|',('config_id.assigned_user_ids','in',user.id),('config_id.assigned_user_ids','=',False)] + Assigned POS orders - - ['|',('session_id.config_id.assigned_user_ids','in',user.id),('session_id.config_id.assigned_user_ids','=',False)] - + + ['|',('session_id.config_id.assigned_user_ids','in',user.id),('session_id.config_id.assigned_user_ids','=',False)] + All points of sale - + [(1,'=',1)] - + All POS sessions - + [(1,'=',1)] - + All POS orders - + [(1,'=',1)] - + diff --git a/pos_user_restriction/tests/test_pos_user_restriction.py b/pos_user_restriction/tests/test_pos_user_restriction.py index 63cb4763b2..0f1e1719b8 100644 --- a/pos_user_restriction/tests/test_pos_user_restriction.py +++ b/pos_user_restriction/tests/test_pos_user_restriction.py @@ -2,53 +2,70 @@ class TestUserRestriction(SavepointCase): - @classmethod def setUpClass(cls): super().setUpClass() - cls.env = cls.env(context=dict( - cls.env.context, - tracking_disable=True, - no_reset_password=True, - )) - cls.pos_user = cls.env['res.users'].create({ - 'login': 'pos_user', - 'name': 'pos_user', - 'groups_id': [(6, 0, [cls.env.ref('point_of_sale.group_pos_user').id])] - }) - cls.pos_user_assigned_pos = cls.env['res.users'].create({ - 'login': 'pos_user_assigned_pos', - 'name': 'pos_user_assigned_pos', - 'groups_id': [(6, 0, [cls.env.ref( - 'pos_user_restriction.group_assigned_points_of_sale_user').id])] - }) - cls.pos_config_main = cls.env.ref('point_of_sale.pos_config_main') - cls.pos_config_model = cls.env['pos.config'] + cls.env = cls.env( + context=dict( + cls.env.context, + tracking_disable=True, + no_reset_password=True, + ) + ) + cls.pos_user = cls.env["res.users"].create( + { + "login": "pos_user", + "name": "pos_user", + "groups_id": [(6, 0, [cls.env.ref("point_of_sale.group_pos_user").id])], + } + ) + cls.pos_user_assigned_pos = cls.env["res.users"].create( + { + "login": "pos_user_assigned_pos", + "name": "pos_user_assigned_pos", + "groups_id": [ + ( + 6, + 0, + [ + cls.env.ref( + "pos_user_restriction.group_assigned_points_of_sale_user" + ).id + ], + ) + ], + } + ) + cls.pos_config_main = cls.env.ref("point_of_sale.pos_config_main") + cls.pos_config_model = cls.env["pos.config"] def test_access_pos(self): # assigned_user_ids is not set: both users can read pos_configs = self.pos_config_model.sudo(self.pos_user.id).search([]) self.assertTrue(pos_configs) - pos_configs = self.pos_config_model.sudo( - self.pos_user_assigned_pos.id).search([]) + pos_configs = self.pos_config_model.sudo(self.pos_user_assigned_pos.id).search( + [] + ) self.assertTrue(pos_configs) self.pos_config_main.assigned_user_ids = [ - (6, 0, [self.pos_user_assigned_pos.id])] + (6, 0, [self.pos_user_assigned_pos.id]) + ] # assigned_user_ids is set with pos_user_assigned_pos: both users can read pos_configs = self.pos_config_model.sudo(self.pos_user.id).search([]) self.assertTrue(pos_configs) - pos_configs = self.pos_config_model.sudo( - self.pos_user_assigned_pos.id).search([]) + pos_configs = self.pos_config_model.sudo(self.pos_user_assigned_pos.id).search( + [] + ) self.assertTrue(pos_configs) - self.pos_config_main.assigned_user_ids = [ - (6, 0, [self.pos_user.id])] + self.pos_config_main.assigned_user_ids = [(6, 0, [self.pos_user.id])] # assigned_user_ids is set with pos_user: only pos_user can read pos_configs = self.pos_config_model.sudo(self.pos_user.id).search([]) self.assertTrue(pos_configs) - pos_configs = self.pos_config_model.sudo( - self.pos_user_assigned_pos.id).search([]) + pos_configs = self.pos_config_model.sudo(self.pos_user_assigned_pos.id).search( + [] + ) # TODO, fixme # this test is failing, if Odoo pos_restaurant is installed diff --git a/pos_user_restriction/views/point_of_sale_views.xml b/pos_user_restriction/views/point_of_sale_views.xml index 45bd1b43a8..dbc6001cc3 100644 --- a/pos_user_restriction/views/point_of_sale_views.xml +++ b/pos_user_restriction/views/point_of_sale_views.xml @@ -1,6 +1,9 @@ - + - + diff --git a/pos_user_restriction/views/pos_config_views.xml b/pos_user_restriction/views/pos_config_views.xml index 60a262987b..5aa6077efb 100644 --- a/pos_user_restriction/views/pos_config_views.xml +++ b/pos_user_restriction/views/pos_config_views.xml @@ -1,22 +1,35 @@ - + pos_config_view_form_users pos.config - +

Users

-
+
Users assigned to this point of sale
-
-
From 80cd5eec6b480e20d5564cbb631201bcbdd673f0 Mon Sep 17 00:00:00 2001 From: hkapatel Date: Sat, 15 May 2021 01:01:25 +0530 Subject: [PATCH 09/31] [MIG] pos_user_restriction: Migration to 14.0 --- pos_user_restriction/README.rst | 14 ++++-- pos_user_restriction/__manifest__.py | 8 ++-- .../i18n/pos_user_restriction.pot | 46 ++++++++++++++++--- pos_user_restriction/models/pos_config.py | 21 ++++++++- pos_user_restriction/readme/CONFIGURE.rst | 3 ++ pos_user_restriction/readme/CONTRIBUTORS.rst | 1 + .../security/ir.model.access.csv | 5 ++ .../security/pos_security.xml | 9 ++-- .../static/description/index.html | 9 ++-- .../tests/test_pos_user_restriction.py | 28 ++++++----- 10 files changed, 108 insertions(+), 36 deletions(-) diff --git a/pos_user_restriction/README.rst b/pos_user_restriction/README.rst index 83794e6f31..40786c06ca 100644 --- a/pos_user_restriction/README.rst +++ b/pos_user_restriction/README.rst @@ -14,13 +14,13 @@ Point of Sale - Restrict users :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html :alt: License: LGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fpos-lightgray.png?logo=github - :target: https://github.com/OCA/pos/tree/12.0/pos_user_restriction + :target: https://github.com/OCA/pos/tree/14.0/pos_user_restriction :alt: OCA/pos .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/pos-12-0/pos-12-0-pos_user_restriction + :target: https://translation.odoo-community.org/projects/pos-14-0/pos-14-0-pos_user_restriction :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/184/12.0 + :target: https://runbot.odoo-community.org/runbot/184/14.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -39,13 +39,16 @@ With a POS Manager, open a point of sale configration (pos.config) and set "Assi Then, assign "User: Assigned POS Only" group to users who should be able to access to their assigned points of sale only. +Allowed Employees +Then assign "Authorized Employees" employee the same user "Assigned POS Only" Use employee credentials to log in to the PoS session and switch cashier. + 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 `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -61,6 +64,7 @@ Contributors ~~~~~~~~~~~~ * Lorenzo Battistini (https://takobi.online) +* Helly kapatel Maintainers ~~~~~~~~~~~ @@ -83,6 +87,6 @@ Current `maintainer `__: |maintainer-eLBati| -This module is part of the `OCA/pos `_ project on GitHub. +This module is part of the `OCA/pos `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/pos_user_restriction/__manifest__.py b/pos_user_restriction/__manifest__.py index 9df3f048cc..02f164974f 100644 --- a/pos_user_restriction/__manifest__.py +++ b/pos_user_restriction/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Point of Sale - Restrict users", "summary": "Restrict some users to see and use only certain points of sale", - "version": "12.0.1.0.2", + "version": "14.0.1.0.0", "development_status": "Beta", "category": "Point of Sale", "website": "https://github.com/OCA/pos", @@ -12,13 +12,11 @@ "license": "LGPL-3", "application": False, "installable": True, - "depends": [ - "point_of_sale", - ], + "depends": ["point_of_sale"], "data": [ "security/pos_security.xml", - "views/pos_config_views.xml", "security/ir.model.access.csv", + "views/pos_config_views.xml", "views/point_of_sale_views.xml", ], } diff --git a/pos_user_restriction/i18n/pos_user_restriction.pot b/pos_user_restriction/i18n/pos_user_restriction.pot index 334b8d1657..1bd9ea9a20 100644 --- a/pos_user_restriction/i18n/pos_user_restriction.pot +++ b/pos_user_restriction/i18n/pos_user_restriction.pot @@ -1,12 +1,12 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * pos_user_restriction +# * pos_user_restriction # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: <>\n" +"Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,15 +18,43 @@ msgstr "" msgid "Assigned users" msgstr "" +#. module: pos_user_restriction +#: model:ir.model.fields,field_description:pos_user_restriction.field_pos_config__display_name +msgid "Display Name" +msgstr "" + +#. module: pos_user_restriction +#: model:ir.model.fields,field_description:pos_user_restriction.field_pos_config__id +msgid "ID" +msgstr "" + +#. module: pos_user_restriction +#: model:ir.model.fields,field_description:pos_user_restriction.field_pos_config____last_update +msgid "Last Modified on" +msgstr "" + #. module: pos_user_restriction #: model:ir.model,name:pos_user_restriction.model_pos_config msgid "Point of Sale Configuration" msgstr "" #. module: pos_user_restriction -#: model:ir.model.fields,help:pos_user_restriction.field_pos_config__assigned_user_ids +#: model:ir.model.fields,field_description:pos_user_restriction.field_pos_config__group_pos_user_id +msgid "Point of Sale User Group" +msgstr "" + +#. module: pos_user_restriction #: model_terms:ir.ui.view,arch_db:pos_user_restriction.pos_config_view_form_users -msgid "Restrict some users to only access their assigned points of sale. In order to apply the restriction, the user needs the 'User: Assigned POS Only' group" +msgid "" +"Restrict some users to only access their assigned points of sale. In order " +"to apply the restriction, the user needs the 'User: Assigned POS Only' group" +msgstr "" + +#. module: pos_user_restriction +#: model:ir.model.fields,help:pos_user_restriction.field_pos_config__assigned_user_ids +msgid "" +"Restrict some users to only access their assigned points of sale.In order to" +" apply the restriction, the user needs the 'User: Assigned POS Only' group" msgstr "" #. module: pos_user_restriction @@ -34,6 +62,13 @@ msgstr "" msgid "The user will have access to her assigned points of sale." msgstr "" +#. module: pos_user_restriction +#: model:ir.model.fields,help:pos_user_restriction.field_pos_config__group_pos_user_id +msgid "" +"This field is there to passthe id of the pos user group to the point of sale" +" client." +msgstr "" + #. module: pos_user_restriction #: model:res.groups,name:pos_user_restriction.group_assigned_points_of_sale_user msgid "User: Assigned POS Only" @@ -48,4 +83,3 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:pos_user_restriction.pos_config_view_form_users msgid "Users assigned to this point of sale" msgstr "" - diff --git a/pos_user_restriction/models/pos_config.py b/pos_user_restriction/models/pos_config.py index 70aa79d642..cbc86a36a9 100644 --- a/pos_user_restriction/models/pos_config.py +++ b/pos_user_restriction/models/pos_config.py @@ -1,12 +1,29 @@ -from odoo import fields, models +from odoo import api, fields, models class PosConfig(models.Model): _inherit = "pos.config" + assigned_user_ids = fields.Many2many( "res.users", string="Assigned users", - help="Restrict some users to only access their assigned points of sale. " + help="Restrict some users to only access their assigned points of sale." "In order to apply the restriction, the user needs the " "'User: Assigned POS Only' group", ) + group_pos_user_id = fields.Many2one( + "res.groups", + compute="_compute_group_pos_user_id", + string="Point of Sale User Group", + help="This field is there to pass" + "the id of the pos user group to the point of sale client.", + store=True, + ) + + @api.depends("assigned_user_ids") + def _compute_group_pos_user_id(self): + for config in self: + config.group_pos_user_id = self.env.ref( + "pos_user_restriction.group_assigned_points_of_sale_user", + "point_of_sale.group_pos_user", + ) diff --git a/pos_user_restriction/readme/CONFIGURE.rst b/pos_user_restriction/readme/CONFIGURE.rst index 13be1437d3..2ae001c996 100644 --- a/pos_user_restriction/readme/CONFIGURE.rst +++ b/pos_user_restriction/readme/CONFIGURE.rst @@ -1,3 +1,6 @@ With a POS Manager, open a point of sale configration (pos.config) and set "Assigned users" field. Then, assign "User: Assigned POS Only" group to users who should be able to access to their assigned points of sale only. + +Allowed Employees +Then assign "Authorized Employees" employee the same user "Assigned POS Only" Use employee credentials to log in to the PoS session and switch cashier. diff --git a/pos_user_restriction/readme/CONTRIBUTORS.rst b/pos_user_restriction/readme/CONTRIBUTORS.rst index b27b50b507..a5f6360d95 100644 --- a/pos_user_restriction/readme/CONTRIBUTORS.rst +++ b/pos_user_restriction/readme/CONTRIBUTORS.rst @@ -1 +1,2 @@ * Lorenzo Battistini (https://takobi.online) +* Helly kapatel diff --git a/pos_user_restriction/security/ir.model.access.csv b/pos_user_restriction/security/ir.model.access.csv index 59d274ae8f..dc6a6f7072 100644 --- a/pos_user_restriction/security/ir.model.access.csv +++ b/pos_user_restriction/security/ir.model.access.csv @@ -7,6 +7,7 @@ access_stock_warehouse_pos_user,stock.warehouse pos_user,stock.model_stock_wareh access_stock_move_pos_user,stock.move pos_user,stock.model_stock_move,group_assigned_points_of_sale_user,1,1,1,1 access_report_pos_order,report.pos.order,point_of_sale.model_report_pos_order,group_assigned_points_of_sale_user,1,1,1,1 access_account_journal_pos_user,account.journal pos_user,account.model_account_journal,group_assigned_points_of_sale_user,1,0,0,0 +access_account_payment_method_pos_user,account.payment.method pos_user,account.model_account_payment_method,group_assigned_points_of_sale_user,1,0,0,0 access_account_bank_statement,account.bank.statement,account.model_account_bank_statement,group_assigned_points_of_sale_user,1,1,1,0 access_account_bank_statement_line,account.bank.statement.line,account.model_account_bank_statement_line,group_assigned_points_of_sale_user,1,1,1,0 access_product_product,product.product,product.model_product_product,group_assigned_points_of_sale_user,1,0,0,0 @@ -22,3 +23,7 @@ access_barcode_rule_pos_user,barcode.rule.pos.user,barcodes.model_barcode_rule,g access_bank_statement_cashbox_user,account.bank.statement.cashbox user,account.model_account_bank_statement_cashbox,group_assigned_points_of_sale_user,1,1,1,0 access_account_cashbox_line_user,account.cashbox.line user,account.model_account_cashbox_line,group_assigned_points_of_sale_user,1,1,1,0 access_account_cash_rounding_pos_user,account.cash.rounding.pos.user,account.model_account_cash_rounding,group_assigned_points_of_sale_user,1,0,0,0 +access_pos_payment_method_user,pos.payment.method user,point_of_sale.model_pos_payment_method,group_assigned_points_of_sale_user,1,0,0,0 +access_decimal_precision_user,decimal.precision,base.model_decimal_precision,group_assigned_points_of_sale_user,1,0,0,0 +access_money_in_out_wizard,access.money.in.out.wizard,point_of_sale.model_cash_box_out,group_assigned_points_of_sale_user,1,1,1,0 +access_pos_payment_user,pos.payment user,point_of_sale.model_pos_payment,group_assigned_points_of_sale_user,1,1,1,1 diff --git a/pos_user_restriction/security/pos_security.xml b/pos_user_restriction/security/pos_security.xml index 1af21ef770..52386d2ec0 100644 --- a/pos_user_restriction/security/pos_security.xml +++ b/pos_user_restriction/security/pos_security.xml @@ -2,10 +2,11 @@ User: Assigned POS Only - + The user will have access to her assigned points of sale. + ['|',('assigned_user_ids','in',user.id),('assigned_user_ids','=',False)] + >['|',('assigned_user_ids','in',user.id),('assigned_user_ids','=',False),('company_id', 'in', company_ids)] @@ -28,7 +29,7 @@ ['|',('config_id.assigned_user_ids','in',user.id),('config_id.assigned_user_ids','=',False)] + >['|',('config_id.assigned_user_ids','in',user.id),('config_id.assigned_user_ids','=',False),('company_id', 'in', company_ids)] @@ -36,7 +37,7 @@ ['|',('session_id.config_id.assigned_user_ids','in',user.id),('session_id.config_id.assigned_user_ids','=',False)] + >['|',('session_id.config_id.assigned_user_ids','in',user.id),('session_id.config_id.assigned_user_ids','=',False),('company_id', 'in', company_ids)] diff --git a/pos_user_restriction/static/description/index.html b/pos_user_restriction/static/description/index.html index 29294c4890..f13c10117b 100644 --- a/pos_user_restriction/static/description/index.html +++ b/pos_user_restriction/static/description/index.html @@ -367,7 +367,7 @@

Point of Sale - Restrict users

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: LGPL-3 OCA/pos Translate me on Weblate Try me on Runbot

+

Beta License: LGPL-3 OCA/pos Translate me on Weblate Try me on Runbot

Restrict some users to only access their assigned points of sale.

Table of contents

@@ -386,13 +386,15 @@

Point of Sale - Restrict users

Configuration

With a POS Manager, open a point of sale configration (pos.config) and set “Assigned users” field.

Then, assign “User: Assigned POS Only” group to users who should be able to access to their assigned points of sale only.

+

Allowed Employees +Then assign “Authorized Employees” employee the same user “Assigned POS Only” Use employee credentials to log in to the PoS session and switch cashier.

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.

+feedback.

Do not contact contributors directly about support or help with technical issues.

@@ -407,6 +409,7 @@

Authors

Contributors

@@ -418,7 +421,7 @@

Maintainers

promote its widespread use.

Current maintainer:

eLBati

-

This module is part of the OCA/pos project on GitHub.

+

This module is part of the OCA/pos project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

diff --git a/pos_user_restriction/tests/test_pos_user_restriction.py b/pos_user_restriction/tests/test_pos_user_restriction.py index 0f1e1719b8..154ef7c3a6 100644 --- a/pos_user_restriction/tests/test_pos_user_restriction.py +++ b/pos_user_restriction/tests/test_pos_user_restriction.py @@ -41,31 +41,37 @@ def setUpClass(cls): def test_access_pos(self): # assigned_user_ids is not set: both users can read - pos_configs = self.pos_config_model.sudo(self.pos_user.id).search([]) + pos_configs = self.pos_config_model.with_user(self.pos_user.id).search([]) self.assertTrue(pos_configs) - pos_configs = self.pos_config_model.sudo(self.pos_user_assigned_pos.id).search( - [] - ) + pos_configs = self.pos_config_model.with_user( + self.pos_user_assigned_pos.id + ).search([]) self.assertTrue(pos_configs) self.pos_config_main.assigned_user_ids = [ (6, 0, [self.pos_user_assigned_pos.id]) ] # assigned_user_ids is set with pos_user_assigned_pos: both users can read - pos_configs = self.pos_config_model.sudo(self.pos_user.id).search([]) + pos_configs = self.pos_config_model.with_user(self.pos_user.id).search([]) self.assertTrue(pos_configs) - pos_configs = self.pos_config_model.sudo(self.pos_user_assigned_pos.id).search( - [] - ) + pos_configs = self.pos_config_model.with_user( + self.pos_user_assigned_pos.id + ).search([]) self.assertTrue(pos_configs) self.pos_config_main.assigned_user_ids = [(6, 0, [self.pos_user.id])] # assigned_user_ids is set with pos_user: only pos_user can read - pos_configs = self.pos_config_model.sudo(self.pos_user.id).search([]) + pos_configs = self.pos_config_model.with_user(self.pos_user.id).search([]) self.assertTrue(pos_configs) - pos_configs = self.pos_config_model.sudo(self.pos_user_assigned_pos.id).search( - [] + pos_configs = self.pos_config_model.with_user( + self.pos_user_assigned_pos.id + ).search([]) + self.assertFalse(pos_configs) + + self.assingned_group = self.env.ref( + "pos_user_restriction.group_assigned_points_of_sale_user" ) + self.assertEqual(self.assingned_group, self.pos_config_main.group_pos_user_id) # TODO, fixme # this test is failing, if Odoo pos_restaurant is installed From 7c0a9885036a4e9c1e91b194c170615807dde495 Mon Sep 17 00:00:00 2001 From: Ashish Hirpara Date: Tue, 11 Oct 2022 18:04:16 +0530 Subject: [PATCH 10/31] [IMP][14.0] pos_user_restriction Updated roadmap description --- pos_user_restriction/README.rst | 5 ++++ pos_user_restriction/readme/ROADMAP.rst | 1 + .../static/description/index.html | 25 +++++++++++-------- 3 files changed, 21 insertions(+), 10 deletions(-) create mode 100644 pos_user_restriction/readme/ROADMAP.rst diff --git a/pos_user_restriction/README.rst b/pos_user_restriction/README.rst index 40786c06ca..19aeef8874 100644 --- a/pos_user_restriction/README.rst +++ b/pos_user_restriction/README.rst @@ -42,6 +42,11 @@ Then, assign "User: Assigned POS Only" group to users who should be able to acce Allowed Employees Then assign "Authorized Employees" employee the same user "Assigned POS Only" Use employee credentials to log in to the PoS session and switch cashier. +Known issues / Roadmap +====================== + +This module alone is not compatible with pos_cache; you need to install a bridge module like https://github.com/OCA/pos/tree/12.0/pos_cache_user_restriction for it to work. + Bug Tracker =========== diff --git a/pos_user_restriction/readme/ROADMAP.rst b/pos_user_restriction/readme/ROADMAP.rst new file mode 100644 index 0000000000..80bdaafa36 --- /dev/null +++ b/pos_user_restriction/readme/ROADMAP.rst @@ -0,0 +1 @@ +This module alone is not compatible with pos_cache; you need to install a bridge module like https://github.com/OCA/pos/tree/12.0/pos_cache_user_restriction for it to work. diff --git a/pos_user_restriction/static/description/index.html b/pos_user_restriction/static/description/index.html index f13c10117b..9309252f25 100644 --- a/pos_user_restriction/static/description/index.html +++ b/pos_user_restriction/static/description/index.html @@ -373,11 +373,12 @@

Point of Sale - Restrict users

+
+

Known issues / Roadmap

+

This module alone is not compatible with pos_cache; you need to install a bridge module like https://github.com/OCA/pos/tree/12.0/pos_cache_user_restriction for it to work.

+
-

Bug Tracker

+

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 @@ -398,22 +403,22 @@

Bug Tracker

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

  • TAKOBI
-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association

OCA, or the Odoo Community Association, is a nonprofit organization whose From b7f423c946378d0316867db47773cdfed3b7b5f0 Mon Sep 17 00:00:00 2001 From: Juliette BLANC Date: Thu, 8 Jun 2023 10:50:36 +0200 Subject: [PATCH 11/31] [MIG] pos_user_restriction: Migration to 15.0 --- pos_user_restriction/__manifest__.py | 6 ++- pos_user_restriction/models/__init__.py | 2 + pos_user_restriction/models/pos_session.py | 19 ++++++++++ pos_user_restriction/models/res_users.py | 24 ++++++++++++ .../security/ir.model.access.csv | 2 + .../tests/test_pos_user_restriction.py | 37 ++++++++++++------- 6 files changed, 74 insertions(+), 16 deletions(-) create mode 100644 pos_user_restriction/models/pos_session.py create mode 100644 pos_user_restriction/models/res_users.py diff --git a/pos_user_restriction/__manifest__.py b/pos_user_restriction/__manifest__.py index 02f164974f..6ac3109b8a 100644 --- a/pos_user_restriction/__manifest__.py +++ b/pos_user_restriction/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Point of Sale - Restrict users", "summary": "Restrict some users to see and use only certain points of sale", - "version": "14.0.1.0.0", + "version": "15.0.1.0.0", "development_status": "Beta", "category": "Point of Sale", "website": "https://github.com/OCA/pos", @@ -12,7 +12,9 @@ "license": "LGPL-3", "application": False, "installable": True, - "depends": ["point_of_sale"], + "depends": [ + "point_of_sale", + ], "data": [ "security/pos_security.xml", "security/ir.model.access.csv", diff --git a/pos_user_restriction/models/__init__.py b/pos_user_restriction/models/__init__.py index db8634ade1..3a04de7fa4 100644 --- a/pos_user_restriction/models/__init__.py +++ b/pos_user_restriction/models/__init__.py @@ -1 +1,3 @@ from . import pos_config +from . import pos_session +from . import res_users diff --git a/pos_user_restriction/models/pos_session.py b/pos_user_restriction/models/pos_session.py new file mode 100644 index 0000000000..dae6656bd5 --- /dev/null +++ b/pos_user_restriction/models/pos_session.py @@ -0,0 +1,19 @@ +from odoo import models + + +class PosSession(models.Model): + _inherit = "pos.session" + + def set_cashbox_pos(self, cashbox_value, notes): + if self.env.user.has_group( + "pos_user_restriction.group_assigned_points_of_sale_user" + ): + self = self.with_context(bypass_pos_user=True) + return super().set_cashbox_pos(cashbox_value, notes) + + def get_closing_control_data(self): + if self.env.user.has_group( + "pos_user_restriction.group_assigned_points_of_sale_user" + ): + self = self.with_context(bypass_pos_user=True) + return super().get_closing_control_data() diff --git a/pos_user_restriction/models/res_users.py b/pos_user_restriction/models/res_users.py new file mode 100644 index 0000000000..426e2c261d --- /dev/null +++ b/pos_user_restriction/models/res_users.py @@ -0,0 +1,24 @@ +from odoo import api, models +from odoo.tools import ormcache + + +class ResUsers(models.Model): + _inherit = "res.users" + + @api.model + def has_group(self, group_ext_id): + if group_ext_id == "point_of_sale.group_pos_user" and self.env.context.get( + "bypass_pos_user" + ): + return True + else: + res = super().has_group(group_ext_id) + return res + + # HACK: To clear cache called from res.users write method + @api.model + @ormcache("self._uid", "group_ext_id") + def _has_group(self, group_ext_id): + return super()._has_group(group_ext_id) + + has_group.clear_cache = _has_group.clear_cache diff --git a/pos_user_restriction/security/ir.model.access.csv b/pos_user_restriction/security/ir.model.access.csv index dc6a6f7072..bc0af2cb8d 100644 --- a/pos_user_restriction/security/ir.model.access.csv +++ b/pos_user_restriction/security/ir.model.access.csv @@ -27,3 +27,5 @@ access_pos_payment_method_user,pos.payment.method user,point_of_sale.model_pos_p access_decimal_precision_user,decimal.precision,base.model_decimal_precision,group_assigned_points_of_sale_user,1,0,0,0 access_money_in_out_wizard,access.money.in.out.wizard,point_of_sale.model_cash_box_out,group_assigned_points_of_sale_user,1,1,1,0 access_pos_payment_user,pos.payment user,point_of_sale.model_pos_payment,group_assigned_points_of_sale_user,1,1,1,1 +access_pos_bill_user,pos.bill,point_of_sale.model_pos_bill,group_assigned_points_of_sale_user,1,1,1,1 +access_pos_close_session_wizard,access.pos.close.session.wizard,point_of_sale.model_pos_close_session_wizard,group_assigned_points_of_sale_user,1,1,1,0 diff --git a/pos_user_restriction/tests/test_pos_user_restriction.py b/pos_user_restriction/tests/test_pos_user_restriction.py index 154ef7c3a6..2d7764de51 100644 --- a/pos_user_restriction/tests/test_pos_user_restriction.py +++ b/pos_user_restriction/tests/test_pos_user_restriction.py @@ -1,7 +1,7 @@ -from odoo.tests.common import SavepointCase +from odoo.tests.common import TransactionCase -class TestUserRestriction(SavepointCase): +class TestUserRestriction(TransactionCase): @classmethod def setUpClass(cls): super().setUpClass() @@ -41,38 +41,47 @@ def setUpClass(cls): def test_access_pos(self): # assigned_user_ids is not set: both users can read - pos_configs = self.pos_config_model.with_user(self.pos_user.id).search([]) + pos_configs = self.pos_config_model.with_user(self.pos_user.id).search( + [ + ( + "id", + "=", + self.pos_config_main.id, + ) # for tests to pass if pos_restaurant is installed + ] + ) self.assertTrue(pos_configs) pos_configs = self.pos_config_model.with_user( self.pos_user_assigned_pos.id - ).search([]) + ).search([("id", "=", self.pos_config_main.id)]) self.assertTrue(pos_configs) self.pos_config_main.assigned_user_ids = [ (6, 0, [self.pos_user_assigned_pos.id]) ] # assigned_user_ids is set with pos_user_assigned_pos: both users can read - pos_configs = self.pos_config_model.with_user(self.pos_user.id).search([]) + pos_configs = self.pos_config_model.with_user(self.pos_user.id).search( + [("id", "=", self.pos_config_main.id)] + ) self.assertTrue(pos_configs) pos_configs = self.pos_config_model.with_user( self.pos_user_assigned_pos.id - ).search([]) + ).search([("id", "=", self.pos_config_main.id)]) self.assertTrue(pos_configs) - self.pos_config_main.assigned_user_ids = [(6, 0, [self.pos_user.id])] # assigned_user_ids is set with pos_user: only pos_user can read - pos_configs = self.pos_config_model.with_user(self.pos_user.id).search([]) + pos_configs = self.pos_config_model.with_user(self.pos_user.id).search( + [("id", "=", self.pos_config_main.id)] + ) self.assertTrue(pos_configs) pos_configs = self.pos_config_model.with_user( self.pos_user_assigned_pos.id - ).search([]) + ).search([("id", "=", self.pos_config_main.id)]) self.assertFalse(pos_configs) - self.assingned_group = self.env.ref( + self.assigned_group = self.env.ref( "pos_user_restriction.group_assigned_points_of_sale_user" ) - self.assertEqual(self.assingned_group, self.pos_config_main.group_pos_user_id) + self.assertEqual(self.assigned_group, self.pos_config_main.group_pos_user_id) - # TODO, fixme - # this test is failing, if Odoo pos_restaurant is installed - # self.assertFalse(pos_configs) + self.assertFalse(pos_configs) From 90d773eb62ceda963b4a5d17cba074701c6dccbc Mon Sep 17 00:00:00 2001 From: oca-ci Date: Tue, 4 Jul 2023 15:38:10 +0000 Subject: [PATCH 12/31] [UPD] Update pos_user_restriction.pot --- .../i18n/pos_user_restriction.pot | 21 ++++++------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/pos_user_restriction/i18n/pos_user_restriction.pot b/pos_user_restriction/i18n/pos_user_restriction.pot index 1bd9ea9a20..e0816e0cc3 100644 --- a/pos_user_restriction/i18n/pos_user_restriction.pot +++ b/pos_user_restriction/i18n/pos_user_restriction.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 14.0\n" +"Project-Id-Version: Odoo Server 15.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -19,23 +19,13 @@ msgid "Assigned users" msgstr "" #. module: pos_user_restriction -#: model:ir.model.fields,field_description:pos_user_restriction.field_pos_config__display_name -msgid "Display Name" -msgstr "" - -#. module: pos_user_restriction -#: model:ir.model.fields,field_description:pos_user_restriction.field_pos_config__id -msgid "ID" -msgstr "" - -#. module: pos_user_restriction -#: model:ir.model.fields,field_description:pos_user_restriction.field_pos_config____last_update -msgid "Last Modified on" +#: model:ir.model,name:pos_user_restriction.model_pos_config +msgid "Point of Sale Configuration" msgstr "" #. module: pos_user_restriction -#: model:ir.model,name:pos_user_restriction.model_pos_config -msgid "Point of Sale Configuration" +#: model:ir.model,name:pos_user_restriction.model_pos_session +msgid "Point of Sale Session" msgstr "" #. module: pos_user_restriction @@ -75,6 +65,7 @@ msgid "User: Assigned POS Only" msgstr "" #. module: pos_user_restriction +#: model:ir.model,name:pos_user_restriction.model_res_users #: model_terms:ir.ui.view,arch_db:pos_user_restriction.pos_config_view_form_users msgid "Users" msgstr "" From 50ecb6bdd8b445e43e19a27dbe78306865679692 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 4 Jul 2023 15:42:54 +0000 Subject: [PATCH 13/31] [UPD] README.rst --- pos_user_restriction/README.rst | 10 +++++----- pos_user_restriction/static/description/index.html | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/pos_user_restriction/README.rst b/pos_user_restriction/README.rst index 19aeef8874..b75df94675 100644 --- a/pos_user_restriction/README.rst +++ b/pos_user_restriction/README.rst @@ -14,13 +14,13 @@ Point of Sale - Restrict users :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html :alt: License: LGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fpos-lightgray.png?logo=github - :target: https://github.com/OCA/pos/tree/14.0/pos_user_restriction + :target: https://github.com/OCA/pos/tree/15.0/pos_user_restriction :alt: OCA/pos .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/pos-14-0/pos-14-0-pos_user_restriction + :target: https://translation.odoo-community.org/projects/pos-15-0/pos-15-0-pos_user_restriction :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/184/14.0 + :target: https://runbot.odoo-community.org/runbot/184/15.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -53,7 +53,7 @@ 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 `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -92,6 +92,6 @@ Current `maintainer `__: |maintainer-eLBati| -This module is part of the `OCA/pos `_ project on GitHub. +This module is part of the `OCA/pos `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/pos_user_restriction/static/description/index.html b/pos_user_restriction/static/description/index.html index 9309252f25..3bfba1484d 100644 --- a/pos_user_restriction/static/description/index.html +++ b/pos_user_restriction/static/description/index.html @@ -367,7 +367,7 @@

Point of Sale - Restrict users

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: LGPL-3 OCA/pos Translate me on Weblate Try me on Runbot

+

Beta License: LGPL-3 OCA/pos Translate me on Weblate Try me on Runbot

Restrict some users to only access their assigned points of sale.

Table of contents

@@ -399,7 +399,7 @@

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.

+feedback.

Do not contact contributors directly about support or help with technical issues.

@@ -426,7 +426,7 @@

Maintainers

promote its widespread use.

Current maintainer:

eLBati

-

This module is part of the OCA/pos project on GitHub.

+

This module is part of the OCA/pos project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

From 9bc186a858ba146cce11f326704a6c576847b85f Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sun, 3 Sep 2023 15:14:42 +0000 Subject: [PATCH 14/31] [UPD] README.rst --- pos_user_restriction/README.rst | 15 ++++--- .../static/description/index.html | 44 ++++++++++--------- 2 files changed, 32 insertions(+), 27 deletions(-) diff --git a/pos_user_restriction/README.rst b/pos_user_restriction/README.rst index b75df94675..a302656619 100644 --- a/pos_user_restriction/README.rst +++ b/pos_user_restriction/README.rst @@ -2,10 +2,13 @@ Point of Sale - Restrict users ============================== -.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:a649088e7d710b708f47d708db73c717872871b9fbc7087a4031803b91f046c8 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status @@ -19,11 +22,11 @@ Point of Sale - Restrict users .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png :target: https://translation.odoo-community.org/projects/pos-15-0/pos-15-0-pos_user_restriction :alt: Translate me on Weblate -.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/184/15.0 - :alt: Try me on Runbot +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/pos&target_branch=15.0 + :alt: Try me on Runboat -|badge1| |badge2| |badge3| |badge4| |badge5| +|badge1| |badge2| |badge3| |badge4| |badge5| Restrict some users to only access their assigned points of sale. @@ -52,7 +55,7 @@ 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 +If you spotted it first, help us to smash it by providing a detailed and welcomed `feedback `_. Do not contact contributors directly about support or help with technical issues. diff --git a/pos_user_restriction/static/description/index.html b/pos_user_restriction/static/description/index.html index 3bfba1484d..b482eb433f 100644 --- a/pos_user_restriction/static/description/index.html +++ b/pos_user_restriction/static/description/index.html @@ -1,20 +1,20 @@ - + - + Point of Sale - Restrict users -
-

Point of Sale - Restrict users

+
+ + +Odoo Community Association + +
+

Point of Sale - Restrict users

-

Beta License: LGPL-3 OCA/pos Translate me on Weblate Try me on Runboat

+

Beta License: LGPL-3 OCA/pos Translate me on Weblate Try me on Runboat

Restrict some users to only access their assigned points of sale.

Table of contents

@@ -386,7 +391,7 @@

Point of Sale - Restrict users

-

Configuration

+

Configuration

With a POS Manager, open a point of sale configration (pos.config) and set “Assigned users” field.

Then, assign “User: Assigned POS Only” group to users who should be able @@ -396,14 +401,14 @@

Configuration

session and switch cashier.

-

Known issues / Roadmap

+

Known issues / Roadmap

This module alone is not compatible with pos_cache; you need to install a bridge module like https://github.com/OCA/pos/tree/12.0/pos_cache_user_restriction for it to work.

-

Bug Tracker

+

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 to smash it by providing a detailed and welcomed @@ -411,15 +416,15 @@

Bug Tracker

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

  • TAKOBI
-

Contributors

+

Contributors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -445,5 +450,6 @@

Maintainers

+
From 15e348a8dbd690cf28f623f5809ac099fb081b09 Mon Sep 17 00:00:00 2001 From: Antoni Marroig Campomar Date: Mon, 24 Mar 2025 12:09:45 +0100 Subject: [PATCH 28/31] [17.0][FIX] pos_user_restriction: Fix can't close session with POS Assigned User role --- pos_user_restriction/models/pos_session.py | 14 ++++++ pos_user_restriction/tests/test_hacks.py | 54 ++++++++++++++++++++++ 2 files changed, 68 insertions(+) diff --git a/pos_user_restriction/models/pos_session.py b/pos_user_restriction/models/pos_session.py index c07e262efe..205a3f5ec1 100644 --- a/pos_user_restriction/models/pos_session.py +++ b/pos_user_restriction/models/pos_session.py @@ -10,3 +10,17 @@ def get_closing_control_data(self): ): self = self.with_context(bypass_pos_user=True) return super().get_closing_control_data() + + def _validate_session( + self, + balancing_account=False, + amount_to_balance=0, + bank_payment_method_diffs=None, + ): + if self.env.user.has_group( + "pos_user_restriction.group_assigned_points_of_sale_user" + ): + self = self.with_context(bypass_pos_user=True) + return super()._validate_session( + balancing_account, amount_to_balance, bank_payment_method_diffs + ) diff --git a/pos_user_restriction/tests/test_hacks.py b/pos_user_restriction/tests/test_hacks.py index ee387083db..e031041457 100644 --- a/pos_user_restriction/tests/test_hacks.py +++ b/pos_user_restriction/tests/test_hacks.py @@ -42,3 +42,57 @@ def test_get_closing_control_data(self): # make sure it does raise AccessError session.with_user(restricted_user).get_closing_control_data() + + def test_validate_session(self): + restricted_user = self.pos_user_assigned_pos + + self.config.assigned_user_ids = [(6, 0, [restricted_user.id])] + self.product_id = self.env["product.product"].create( + {"name": "Test POS", "available_in_pos": True, "list_price": 200} + ) + + session = self.open_new_session() + self.pos_order_pos1 = self.env["pos.order"].create( + { + "company_id": self.env.company.id, + "session_id": session.id, + "partner_id": self.env.user.id, + "lines": [ + ( + 0, + 0, + { + "name": "Test/0001", + "product_id": self.product_id.id, + "price_unit": 200, + "qty": 1.0, + "price_subtotal": 200, + "price_subtotal_incl": 200, + }, + ) + ], + "amount_tax": 0.0, + "amount_total": 200, + "amount_paid": 0.0, + "amount_return": 0.0, + "last_order_preparation_change": "{}", + } + ) + context_make_payment = { + "active_ids": [self.pos_order_pos1.id], + "active_id": self.pos_order_pos1.id, + } + self.pos_make_payment = ( + self.env["pos.make.payment"] + .with_context(**context_make_payment) + .create( + { + "amount": 200, + } + ) + ) + context_payment = {"active_id": self.pos_order_pos1.id} + self.pos_make_payment.with_context(**context_payment).check() + + # make sure it doesn't raise AccessError + session.with_user(restricted_user).action_pos_session_closing_control() From 4dfc48feb7f0263a61086d01c66633e19cfc5697 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 11 Nov 2025 12:58:22 +0000 Subject: [PATCH 29/31] [BOT] post-merge updates --- pos_user_restriction/README.rst | 2 +- pos_user_restriction/__manifest__.py | 2 +- pos_user_restriction/static/description/index.html | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pos_user_restriction/README.rst b/pos_user_restriction/README.rst index 7f1a0c22d8..a4b7d42e80 100644 --- a/pos_user_restriction/README.rst +++ b/pos_user_restriction/README.rst @@ -11,7 +11,7 @@ Point of Sale - Restrict users !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:ca7d0f384b2bed7264e8b2e276a9f53b6f1c4de3cdaa96422a794b9cb8952adc + !! source digest: sha256:14c113ae43cdb58649f9a57b0af2db06dad9125ea6c9a4c7507c22c366e08b9b !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/pos_user_restriction/__manifest__.py b/pos_user_restriction/__manifest__.py index 101f537223..3cc3d91d69 100644 --- a/pos_user_restriction/__manifest__.py +++ b/pos_user_restriction/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Point of Sale - Restrict users", "summary": "Restrict some users to see and use only certain points of sale", - "version": "17.0.1.0.0", + "version": "17.0.1.0.1", "development_status": "Beta", "category": "Point of Sale", "website": "https://github.com/OCA/pos", diff --git a/pos_user_restriction/static/description/index.html b/pos_user_restriction/static/description/index.html index 9479f30243..d77b7367ff 100644 --- a/pos_user_restriction/static/description/index.html +++ b/pos_user_restriction/static/description/index.html @@ -372,7 +372,7 @@

Point of Sale - Restrict users

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:ca7d0f384b2bed7264e8b2e276a9f53b6f1c4de3cdaa96422a794b9cb8952adc +!! source digest: sha256:14c113ae43cdb58649f9a57b0af2db06dad9125ea6c9a4c7507c22c366e08b9b !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: LGPL-3 OCA/pos Translate me on Weblate Try me on Runboat

Restrict some users to only access their assigned points of sale.

From 8d91f6e0298c0ad8ba52db9ac3189cfa16671349 Mon Sep 17 00:00:00 2001 From: christian-ramos-tecnativa Date: Tue, 11 Nov 2025 16:59:53 +0000 Subject: [PATCH 30/31] [IMP] pos_user_restriction: pre-commit auto fixes --- .../security/pos_security.xml | 113 ++++++++++-------- 1 file changed, 62 insertions(+), 51 deletions(-) diff --git a/pos_user_restriction/security/pos_security.xml b/pos_user_restriction/security/pos_security.xml index 63b24b9d1f..991743c0bf 100644 --- a/pos_user_restriction/security/pos_security.xml +++ b/pos_user_restriction/security/pos_security.xml @@ -15,65 +15,76 @@ /> - - - Assigned points of sale - - + + Assigned points of sale + + ['|',('assigned_user_ids','in',user.id),('assigned_user_ids','=',False),('company_id', 'in', company_ids)] - - - - Assigned POS sessions - - + + + Assigned POS sessions + + ['|',('config_id.assigned_user_ids','in',user.id),('config_id.assigned_user_ids','=',False),('company_id', 'in', company_ids)] - - - - Assigned POS orders - - + + + Assigned POS orders + + ['|',('session_id.config_id.assigned_user_ids','in',user.id),('session_id.config_id.assigned_user_ids','=',False),('company_id', 'in', company_ids)] - - + + - - Assigned POS report orders - - + Assigned POS report orders + + ['|',('config_id.assigned_user_ids','in',user.id),('config_id.assigned_user_ids','=',False),('config_id.company_id', 'in', company_ids)] - - - - - All points of sale - - [(1,'=',1)] - - - - All POS sessions - - [(1,'=',1)] - - - - All POS orders - - [(1,'=',1)] - - - - All POS report orders - - [(1,'=',1)] - - - + + + + All points of sale + + [(1,'=',1)] + + + + All POS sessions + + [(1,'=',1)] + + + + All POS orders + + [(1,'=',1)] + + + + All POS report orders + + [(1,'=',1)] + + + From 744c93da2332ca713b11e4f83cd527acefbbec4c Mon Sep 17 00:00:00 2001 From: christian-ramos-tecnativa Date: Tue, 11 Nov 2025 17:11:50 +0000 Subject: [PATCH 31/31] [MIG] pos_user_restriction: Migration to version 18.0 --- pos_user_restriction/README.rst | 16 +++----- pos_user_restriction/__manifest__.py | 2 +- pos_user_restriction/models/res_users.py | 7 ++-- .../security/ir.model.access.csv | 4 +- .../static/description/index.html | 32 ++++++--------- .../views/pos_config_views.xml | 41 ++++++------------- 6 files changed, 37 insertions(+), 65 deletions(-) diff --git a/pos_user_restriction/README.rst b/pos_user_restriction/README.rst index a4b7d42e80..a772a5a9d3 100644 --- a/pos_user_restriction/README.rst +++ b/pos_user_restriction/README.rst @@ -1,7 +1,3 @@ -.. image:: https://odoo-community.org/readme-banner-image - :target: https://odoo-community.org/get-involved?utm_source=readme - :alt: Odoo Community Association - ============================== Point of Sale - Restrict users ============================== @@ -17,17 +13,17 @@ Point of Sale - Restrict users .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status :alt: Beta -.. |badge2| image:: https://img.shields.io/badge/license-LGPL--3-blue.png +.. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html :alt: License: LGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fpos-lightgray.png?logo=github - :target: https://github.com/OCA/pos/tree/17.0/pos_user_restriction + :target: https://github.com/OCA/pos/tree/18.0/pos_user_restriction :alt: OCA/pos .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/pos-17-0/pos-17-0-pos_user_restriction + :target: https://translation.odoo-community.org/projects/pos-18-0/pos-18-0-pos_user_restriction :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/pos&target_branch=17.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/pos&target_branch=18.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -66,7 +62,7 @@ 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 to smash it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -108,6 +104,6 @@ Current `maintainer `__: |maintainer-eLBati| -This module is part of the `OCA/pos `_ project on GitHub. +This module is part of the `OCA/pos `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/pos_user_restriction/__manifest__.py b/pos_user_restriction/__manifest__.py index 3cc3d91d69..046616e02e 100644 --- a/pos_user_restriction/__manifest__.py +++ b/pos_user_restriction/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Point of Sale - Restrict users", "summary": "Restrict some users to see and use only certain points of sale", - "version": "17.0.1.0.1", + "version": "18.0.1.0.0", "development_status": "Beta", "category": "Point of Sale", "website": "https://github.com/OCA/pos", diff --git a/pos_user_restriction/models/res_users.py b/pos_user_restriction/models/res_users.py index c99cba43b9..dde6caa2e6 100644 --- a/pos_user_restriction/models/res_users.py +++ b/pos_user_restriction/models/res_users.py @@ -4,12 +4,11 @@ class ResUsers(models.Model): _inherit = "res.users" - @api.model - def has_group(self, group_ext_id): + @api.readonly + def has_group(self, group_ext_id: str) -> bool: if group_ext_id == "point_of_sale.group_pos_user" and self.env.context.get( "bypass_pos_user" ): return True else: - res = super().has_group(group_ext_id) - return res + return super().has_group(group_ext_id) diff --git a/pos_user_restriction/security/ir.model.access.csv b/pos_user_restriction/security/ir.model.access.csv index 8c26159c7d..44baa8a7f0 100644 --- a/pos_user_restriction/security/ir.model.access.csv +++ b/pos_user_restriction/security/ir.model.access.csv @@ -27,5 +27,5 @@ access_pos_payment_user,pos.payment user,point_of_sale.model_pos_payment,group_a access_pos_bill_user,pos.bill,point_of_sale.model_pos_bill,group_assigned_points_of_sale_user,1,1,1,1 access_pos_close_session_wizard,access.pos.close.session.wizard,point_of_sale.model_pos_close_session_wizard,group_assigned_points_of_sale_user,1,1,1,0 access_pos_printer,pos.printer.user,point_of_sale.model_pos_printer,group_assigned_points_of_sale_user,1,0,0,0 -access_pos_combo_user,pos.combo user,point_of_sale.model_pos_combo,group_assigned_points_of_sale_user,1,0,0,0 -access_pos_combo_line_user,pos.combo.line user,point_of_sale.model_pos_combo_line,group_assigned_points_of_sale_user,1,0,0,0 +access_product_combo_user,product.combo user,point_of_sale.model_product_combo,group_assigned_points_of_sale_user,1,0,0,0 +access_pos_combo_item_user,product.combo.item user,point_of_sale.model_product_combo_item,group_assigned_points_of_sale_user,1,0,0,0 diff --git a/pos_user_restriction/static/description/index.html b/pos_user_restriction/static/description/index.html index d77b7367ff..b4cc3604b2 100644 --- a/pos_user_restriction/static/description/index.html +++ b/pos_user_restriction/static/description/index.html @@ -3,7 +3,7 @@ -README.rst +Point of Sale - Restrict users -
+
+

Point of Sale - Restrict users

- - -Odoo Community Association - -
-

Point of Sale - Restrict users

-

Beta License: LGPL-3 OCA/pos Translate me on Weblate Try me on Runboat

+

Beta License: LGPL-3 OCA/pos Translate me on Weblate Try me on Runboat

Restrict some users to only access their assigned points of sale.

Table of contents

@@ -391,7 +386,7 @@

Point of Sale - Restrict users

-

Configuration

+

Configuration

With a POS Manager, open a point of sale configration (pos.config) and set “Assigned users” field.

Then, assign “User: Assigned POS Only” group to users who should be able @@ -401,30 +396,30 @@

Configuration

session and switch cashier.

-

Known issues / Roadmap

+

Known issues / Roadmap

This module alone is not compatible with pos_cache; you need to install a bridge module like https://github.com/OCA/pos/tree/12.0/pos_cache_user_restriction for it to work.

-

Bug Tracker

+

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 to smash it by providing a detailed and welcomed -feedback.

+feedback.

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

  • TAKOBI
-

Contributors

+

Contributors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -445,11 +440,10 @@

Maintainers

promote its widespread use.

Current maintainer:

eLBati

-

This module is part of the OCA/pos project on GitHub.

+

This module is part of the OCA/pos project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

-
diff --git a/pos_user_restriction/views/pos_config_views.xml b/pos_user_restriction/views/pos_config_views.xml index 5aa6077efb..6a197507d7 100644 --- a/pos_user_restriction/views/pos_config_views.xml +++ b/pos_user_restriction/views/pos_config_views.xml @@ -6,35 +6,18 @@ -

Users

-
-
-
-
- Users assigned to this point of sale -
-
-
-
-
-
-
-
+ + + + +