@ -0,0 +1,49 @@ | 
				
			|||
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg | 
				
			|||
    :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html | 
				
			|||
    :alt: License: AGPL-3 | 
				
			|||
 | 
				
			|||
Menu Lock in Odoo | 
				
			|||
================ | 
				
			|||
This module helps to lock menu items in odoo. | 
				
			|||
 | 
				
			|||
Configuration | 
				
			|||
============= | 
				
			|||
* No additional configurations needed | 
				
			|||
 | 
				
			|||
Company | 
				
			|||
------- | 
				
			|||
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__ | 
				
			|||
 | 
				
			|||
License | 
				
			|||
------- | 
				
			|||
Affero General Public License, Version 3 (AGPL v3). | 
				
			|||
(https://www.gnu.org/licenses/agpl-3.0-standalone.html) | 
				
			|||
 | 
				
			|||
Credits | 
				
			|||
------- | 
				
			|||
* Developer: (V16) Jumana@cybrosys | 
				
			|||
             (V17) Gayathri V | 
				
			|||
             (V18) Anzil K A | 
				
			|||
Contact : odoo@cybrosys.com | 
				
			|||
 | 
				
			|||
Contacts | 
				
			|||
-------- | 
				
			|||
* Mail Contact : odoo@cybrosys.com | 
				
			|||
* Website : https://cybrosys.com | 
				
			|||
 | 
				
			|||
Bug Tracker | 
				
			|||
----------- | 
				
			|||
Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. | 
				
			|||
 | 
				
			|||
Maintainer | 
				
			|||
========== | 
				
			|||
.. image:: https://cybrosys.com/images/logo.png | 
				
			|||
   :target: https://cybrosys.com | 
				
			|||
 | 
				
			|||
This module is maintained by Cybrosys Technologies. | 
				
			|||
 | 
				
			|||
For support and more information, please visit `Our Website <https://cybrosys.com/>`__ | 
				
			|||
 | 
				
			|||
Further information | 
				
			|||
=================== | 
				
			|||
HTML Description: `<static/description/index.html>`__ | 
				
			|||
@ -0,0 +1,22 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
############################################################################# | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
# | 
				
			|||
#    Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | 
				
			|||
#    Author: Anzil K A(<https://www.cybrosys.com>) | 
				
			|||
# | 
				
			|||
#    You can modify it under the terms of the GNU AFFERO | 
				
			|||
#    GENERAL PUBLIC LICENSE (AGPL v3), Version 3. | 
				
			|||
# | 
				
			|||
#    This program is distributed in the hope that it will be useful, | 
				
			|||
#    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
				
			|||
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
				
			|||
#    GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | 
				
			|||
# | 
				
			|||
#    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | 
				
			|||
#    (AGPL v3) along with this program. | 
				
			|||
#    If not, see <http://www.gnu.org/licenses/>. | 
				
			|||
# | 
				
			|||
############################################################################# | 
				
			|||
from . import models | 
				
			|||
@ -0,0 +1,51 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
############################################################################# | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
# | 
				
			|||
#    Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | 
				
			|||
#    Author: Anzil K A(<https://www.cybrosys.com>) | 
				
			|||
# | 
				
			|||
#    You can modify it under the terms of the GNU AFFERO | 
				
			|||
#    GENERAL PUBLIC LICENSE (AGPL v3), Version 3. | 
				
			|||
# | 
				
			|||
#    This program is distributed in the hope that it will be useful, | 
				
			|||
#    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
				
			|||
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
				
			|||
#    GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | 
				
			|||
# | 
				
			|||
#    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | 
				
			|||
#    (AGPL v3) along with this program. | 
				
			|||
#    If not, see <http://www.gnu.org/licenses/>. | 
				
			|||
# | 
				
			|||
############################################################################# | 
				
			|||
{ | 
				
			|||
    'name': 'Menu Lock in Odoo', | 
				
			|||
    'version': '18.0.1.0.0', | 
				
			|||
    'summary': """This Module will help to lock all the menu items""", | 
				
			|||
    'description': """User can choose the menus and set the password for lock  | 
				
			|||
    them""", | 
				
			|||
    'category': 'Extra Tools', | 
				
			|||
    'author': 'Cybrosys Techno Solutions', | 
				
			|||
    'company': 'Cybrosys Techno Solutions', | 
				
			|||
    'maintainer': 'Cybrosys Techno Solutions', | 
				
			|||
    'images': ['static/description/banner.png'], | 
				
			|||
    'website': 'https://www.cybrosys.com', | 
				
			|||
    'depends': ['web', 'contacts'], | 
				
			|||
    'data': [ | 
				
			|||
            'security/ir.model.access.csv', | 
				
			|||
            'views/res_users_views.xml', | 
				
			|||
        ], | 
				
			|||
    'assets': { | 
				
			|||
        'web.assets_backend': [ | 
				
			|||
            'menu_lock/static/src/js/lock_action.js', | 
				
			|||
            'menu_lock/static/src/xml/menu_lock.xml', | 
				
			|||
            'menu_lock/static/src/xml/navbar.xml', | 
				
			|||
            'menu_lock/static/src/css/menu_lock.css', | 
				
			|||
        ], | 
				
			|||
    }, | 
				
			|||
    'license': 'AGPL-3', | 
				
			|||
    'installable': True, | 
				
			|||
    'application': False, | 
				
			|||
    'auto_install': False, | 
				
			|||
} | 
				
			|||
@ -0,0 +1,6 @@ | 
				
			|||
## Module <menu_lock> | 
				
			|||
 | 
				
			|||
#### 11.10.2024 | 
				
			|||
#### Version 18.0.1.0.0 | 
				
			|||
#### ADD | 
				
			|||
- Initial commit for Menu Lock in Odoo | 
				
			|||
@ -0,0 +1,23 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
############################################################################# | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
# | 
				
			|||
#    Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | 
				
			|||
#    Author: Gayathri V(<https://www.cybrosys.com>) | 
				
			|||
# | 
				
			|||
#    You can modify it under the terms of the GNU AFFERO | 
				
			|||
#    GENERAL PUBLIC LICENSE (AGPL v3), Version 3. | 
				
			|||
# | 
				
			|||
#    This program is distributed in the hope that it will be useful, | 
				
			|||
#    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
				
			|||
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
				
			|||
#    GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | 
				
			|||
# | 
				
			|||
#    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | 
				
			|||
#    (AGPL v3) along with this program. | 
				
			|||
#    If not, see <http://www.gnu.org/licenses/>. | 
				
			|||
# | 
				
			|||
############################################################################# | 
				
			|||
from . import res_users | 
				
			|||
from . import menu_password | 
				
			|||
@ -0,0 +1,37 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
############################################################################# | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
# | 
				
			|||
#    Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | 
				
			|||
#    Author: Gayathri V(<https://www.cybrosys.com>) | 
				
			|||
# | 
				
			|||
#    You can modify it under the terms of the GNU AFFERO | 
				
			|||
#    GENERAL PUBLIC LICENSE (AGPL v3), Version 3. | 
				
			|||
# | 
				
			|||
#    This program is distributed in the hope that it will be useful, | 
				
			|||
#    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
				
			|||
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
				
			|||
#    GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | 
				
			|||
# | 
				
			|||
#    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | 
				
			|||
#    (AGPL v3) along with this program. | 
				
			|||
#    If not, see <http://www.gnu.org/licenses/>. | 
				
			|||
# | 
				
			|||
############################################################################# | 
				
			|||
from odoo import fields, models | 
				
			|||
 | 
				
			|||
 | 
				
			|||
class MenuPassword(models.Model): | 
				
			|||
    """Inverse model for one to many field of the model res users""" | 
				
			|||
    _name = 'menu.password' | 
				
			|||
    _description = 'Menus and Corresponding Locks for multiple password lock ' \ | 
				
			|||
                   'conditions' | 
				
			|||
 | 
				
			|||
    menus_id = fields.Many2one('ir.ui.menu', string="Menus", | 
				
			|||
                               help='Select the menus to lock', | 
				
			|||
                               domain="[('parent_id','=',False)]") | 
				
			|||
    password = fields.Char(string='Login Password', | 
				
			|||
                           help='Lock Password') | 
				
			|||
    password_id = fields.Many2one('res.users', string='Password', | 
				
			|||
                                  help='Inverse field to res user model') | 
				
			|||
@ -0,0 +1,85 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
############################################################################# | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
# | 
				
			|||
#    Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | 
				
			|||
#    Author: Gayathri V(<https://www.cybrosys.com>) | 
				
			|||
# | 
				
			|||
#    You can modify it under the terms of the GNU AFFERO | 
				
			|||
#    GENERAL PUBLIC LICENSE (AGPL v3), Version 3. | 
				
			|||
# | 
				
			|||
#    This program is distributed in the hope that it will be useful, | 
				
			|||
#    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
				
			|||
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
				
			|||
#    GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | 
				
			|||
# | 
				
			|||
#    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | 
				
			|||
#    (AGPL v3) along with this program. | 
				
			|||
#    If not, see <http://www.gnu.org/licenses/>. | 
				
			|||
# | 
				
			|||
############################################################################# | 
				
			|||
from odoo import api, fields, models, SUPERUSER_ID | 
				
			|||
 | 
				
			|||
 | 
				
			|||
class ResUsers(models.Model): | 
				
			|||
    """Inherited the res_users model for adding the fields for menu lock | 
				
			|||
    setup.""" | 
				
			|||
    _inherit = 'res.users' | 
				
			|||
 | 
				
			|||
    password_lock = fields.Selection( | 
				
			|||
        [('single_password', 'Single Password Lock'), | 
				
			|||
         ('multi_password', 'Multi Password Lock')], | 
				
			|||
        string='Menu Lock Password Type', | 
				
			|||
        help='Type of Menu Lock Password') | 
				
			|||
    login_password = fields.Char(string='Login Password', help='Login Password') | 
				
			|||
    menus_to_lock_ids = fields.Many2many('ir.ui.menu', string="Menus to lock", | 
				
			|||
                                         domain="[('parent_id','=',False)]", | 
				
			|||
                                         help='Select the menus to lock') | 
				
			|||
    multi_lock_ids = fields.One2many('menu.password', 'password_id', | 
				
			|||
                                     string='Multi menus to lock', | 
				
			|||
                                     help='Multi lock menus and password') | 
				
			|||
    models_to_lock_ids = fields.Many2many('ir.model', string='Models to lock') | 
				
			|||
 | 
				
			|||
    @api.model | 
				
			|||
    def menu_lock_search(self, args, action=False, action_type=False): | 
				
			|||
        """Method to returning values though args""" | 
				
			|||
        user = self.env['res.users'].browse(args) | 
				
			|||
        locked_models = False | 
				
			|||
        if action_type == 'ir.actions.act_window': | 
				
			|||
            action = self.env['ir.actions.act_window'].with_user( | 
				
			|||
                SUPERUSER_ID).browse(int(action)) | 
				
			|||
            if action.res_model in user.models_to_lock_ids.mapped('model'): | 
				
			|||
                locked_models = True | 
				
			|||
            else: | 
				
			|||
                locked_models = False | 
				
			|||
        return { | 
				
			|||
            'multi_lock_ids': [{ | 
				
			|||
                'id': menu.menus_id.id, | 
				
			|||
                'password': menu.password | 
				
			|||
            } for menu in user.multi_lock_ids], | 
				
			|||
            'locked_menu_ids': user.menus_to_lock_ids.ids, | 
				
			|||
            'lock_type': user.password_lock, | 
				
			|||
            'locked_models': locked_models, | 
				
			|||
            'login_password': user.login_password | 
				
			|||
        } | 
				
			|||
 | 
				
			|||
    @api.onchange('menus_to_lock_ids') | 
				
			|||
    def _onchange_menus_to_lock_ids(self): | 
				
			|||
        """Method to add fields from single password option to one-to-many of | 
				
			|||
         multi password with same password in onchange of the field""" | 
				
			|||
        if self.password_lock == 'single_password': | 
				
			|||
            new_lines = [(5, 0, 0)] | 
				
			|||
            for rec in self.menus_to_lock_ids: | 
				
			|||
                new_lines.append( | 
				
			|||
                    (0, 0, {'menus_id': rec._origin.id, | 
				
			|||
                            'password': self.login_password, | 
				
			|||
                            })) | 
				
			|||
            self.write({'multi_lock_ids': new_lines}) | 
				
			|||
 | 
				
			|||
    @api.onchange('multi_lock_ids') | 
				
			|||
    def _onchange_multi_lock_ids(self): | 
				
			|||
        """To update 'menus_to_lock_ids' while changing the One2many menus list | 
				
			|||
        """ | 
				
			|||
        self.menus_to_lock_ids = [fields.Command.set(( | 
				
			|||
            self.multi_lock_ids.mapped('menus_id').ids))] | 
				
			|||
		
		
			
  | 
| 
		 After Width: | Height: | Size: 1.1 KiB  | 
| 
		 After Width: | Height: | Size: 210 KiB  | 
| 
		 After Width: | Height: | Size: 209 KiB  | 
| 
		 After Width: | Height: | Size: 109 KiB  | 
| 
		 After Width: | Height: | Size: 495 B  | 
| 
		 After Width: | Height: | Size: 1.0 KiB  | 
| 
		 After Width: | Height: | Size: 624 B  | 
| 
		 After Width: | Height: | Size: 136 KiB  | 
| 
		 After Width: | Height: | Size: 214 KiB  | 
| 
		 After Width: | Height: | Size: 36 KiB  | 
| 
		 After Width: | Height: | Size: 3.6 KiB  | 
| 
		 After Width: | Height: | Size: 310 B  | 
| 
		 After Width: | Height: | Size: 929 B  | 
| 
		 After Width: | Height: | Size: 1.3 KiB  | 
| 
		 After Width: | Height: | Size: 3.3 KiB  | 
| 
		 After Width: | Height: | Size: 1.4 KiB  | 
| 
		 After Width: | Height: | Size: 17 KiB  | 
| 
		 After Width: | Height: | Size: 542 B  | 
| 
		 After Width: | Height: | Size: 576 B  | 
| 
		 After Width: | Height: | Size: 733 B  | 
| 
		 After Width: | Height: | Size: 4.3 KiB  | 
| 
		 After Width: | Height: | Size: 1.2 KiB  | 
| 
		 After Width: | Height: | Size: 4.0 KiB  | 
| 
		 After Width: | Height: | Size: 1.7 KiB  | 
| 
		 After Width: | Height: | Size: 2.2 KiB  | 
| 
		 After Width: | Height: | Size: 911 B  | 
| 
		 After Width: | Height: | Size: 1.1 KiB  | 
| 
		 After Width: | Height: | Size: 1.2 KiB  | 
| 
		 After Width: | Height: | Size: 1.2 KiB  | 
| 
		 After Width: | Height: | Size: 600 B  | 
| 
		 After Width: | Height: | Size: 673 B  | 
| 
		 After Width: | Height: | Size: 2.0 KiB  | 
| 
		 After Width: | Height: | Size: 462 B  | 
| 
		 After Width: | Height: | Size: 2.1 KiB  | 
| 
		 After Width: | Height: | Size: 926 B  | 
| 
		 After Width: | Height: | Size: 9.0 KiB  | 
| 
		 After Width: | Height: | Size: 23 KiB  | 
| 
		 After Width: | Height: | Size: 7.0 KiB  | 
| 
		 After Width: | Height: | Size: 878 B  | 
| 
		 After Width: | Height: | Size: 1.2 KiB  | 
| 
		 After Width: | Height: | Size: 653 B  | 
| 
		 After Width: | Height: | Size: 800 B  | 
| 
		 After Width: | Height: | Size: 905 B  | 
| 
		 After Width: | Height: | Size: 189 KiB  | 
| 
		 After Width: | Height: | Size: 4.3 KiB  | 
| 
		 After Width: | Height: | Size: 839 B  | 
| 
		 After Width: | Height: | Size: 1.7 KiB  | 
| 
		 After Width: | Height: | Size: 5.9 KiB  | 
| 
		 After Width: | Height: | Size: 1.6 KiB  | 
| 
		 After Width: | Height: | Size: 34 KiB  | 
| 
		 After Width: | Height: | Size: 26 KiB  | 
| 
		 After Width: | Height: | Size: 3.8 KiB  | 
| 
		 After Width: | Height: | Size: 23 KiB  | 
| 
		 After Width: | Height: | Size: 1.9 KiB  | 
| 
		 After Width: | Height: | Size: 2.3 KiB  | 
| 
		 After Width: | Height: | Size: 427 B  | 
| 
		 After Width: | Height: | Size: 627 B  | 
| 
		 After Width: | Height: | Size: 1.1 KiB  | 
| 
		 After Width: | Height: | Size: 1.2 KiB  | 
| 
		 After Width: | Height: | Size: 988 B  | 
| 
		 After Width: | Height: | Size: 3.7 KiB  | 
| 
		 After Width: | Height: | Size: 5.0 KiB  | 
| 
		 After Width: | Height: | Size: 875 B  | 
| 
		 After Width: | Height: | Size: 1.2 KiB  | 
| 
		 After Width: | Height: | Size: 80 KiB  | 
| 
		 After Width: | Height: | Size: 1.5 KiB  | 
| 
		 After Width: | Height: | Size: 1.1 KiB  | 
| 
		 After Width: | Height: | Size: 1.9 KiB  | 
| 
		 After Width: | Height: | Size: 1.1 KiB  | 
| 
		 After Width: | Height: | Size: 2.1 KiB  | 
| 
		 After Width: | Height: | Size: 4.4 KiB  | 
| 
		 After Width: | Height: | Size: 3.2 KiB  | 
| 
		 After Width: | Height: | Size: 589 B  | 
| 
		 After Width: | Height: | Size: 3.4 KiB  | 
| 
		 After Width: | Height: | Size: 565 B  | 
| 
		 After Width: | Height: | Size: 1.7 KiB  | 
| 
		 After Width: | Height: | Size: 2.3 KiB  | 
| 
		 After Width: | Height: | Size: 967 B  | 
| 
		 After Width: | Height: | Size: 26 KiB  | 
| 
		 After Width: | Height: | Size: 1.6 KiB  | 
| 
		 After Width: | Height: | Size: 43 KiB  | 
| 
		 After Width: | Height: | Size: 1.4 KiB  | 
| 
		 After Width: | Height: | Size: 3.8 KiB  | 
| 
		 After Width: | Height: | Size: 4.0 KiB  | 
| 
		 After Width: | Height: | Size: 38 KiB  | 
| 
		 After Width: | Height: | Size: 5.0 KiB  | 
| 
		 After Width: | Height: | Size: 4.3 KiB  | 
| 
		 After Width: | Height: | Size: 85 KiB  | 
| 
		 After Width: | Height: | Size: 105 KiB  | 
| 
		 After Width: | Height: | Size: 112 KiB  | 
| 
		 After Width: | Height: | Size: 258 KiB  | 
| 
		 After Width: | Height: | Size: 690 KiB  |