Browse Source

May 21: [ADD] Initital Commit 'user_warehouse_restriction'

pull/254/merge
RisvanaCybro 11 months ago
parent
commit
d8b071d917
  1. 48
      user_warehouse_restriction/README.rst
  2. 22
      user_warehouse_restriction/__init__.py
  3. 48
      user_warehouse_restriction/__manifest__.py
  4. 7
      user_warehouse_restriction/doc/RELEASE_NOTES.md
  5. 26
      user_warehouse_restriction/models/__init__.py
  6. 48
      user_warehouse_restriction/models/res_config_settings.py
  7. 60
      user_warehouse_restriction/models/res_users.py
  8. 47
      user_warehouse_restriction/models/stock_location.py
  9. 37
      user_warehouse_restriction/models/stock_picking.py
  10. 65
      user_warehouse_restriction/models/stock_warehouse.py
  11. 8
      user_warehouse_restriction/security/user_warehouse_restriction_groups.xml
  12. 52
      user_warehouse_restriction/security/user_warehouse_restriction_security.xml
  13. BIN
      user_warehouse_restriction/static/description/assets/icons/check.png
  14. BIN
      user_warehouse_restriction/static/description/assets/icons/chevron.png
  15. BIN
      user_warehouse_restriction/static/description/assets/icons/cogs.png
  16. BIN
      user_warehouse_restriction/static/description/assets/icons/consultation.png
  17. BIN
      user_warehouse_restriction/static/description/assets/icons/ecom-black.png
  18. BIN
      user_warehouse_restriction/static/description/assets/icons/education-black.png
  19. BIN
      user_warehouse_restriction/static/description/assets/icons/hotel-black.png
  20. BIN
      user_warehouse_restriction/static/description/assets/icons/license.png
  21. BIN
      user_warehouse_restriction/static/description/assets/icons/lifebuoy.png
  22. BIN
      user_warehouse_restriction/static/description/assets/icons/logo.png
  23. BIN
      user_warehouse_restriction/static/description/assets/icons/manufacturing-black.png
  24. BIN
      user_warehouse_restriction/static/description/assets/icons/pos-black.png
  25. BIN
      user_warehouse_restriction/static/description/assets/icons/puzzle.png
  26. BIN
      user_warehouse_restriction/static/description/assets/icons/restaurant-black.png
  27. BIN
      user_warehouse_restriction/static/description/assets/icons/service-black.png
  28. BIN
      user_warehouse_restriction/static/description/assets/icons/trading-black.png
  29. BIN
      user_warehouse_restriction/static/description/assets/icons/training.png
  30. BIN
      user_warehouse_restriction/static/description/assets/icons/update.png
  31. BIN
      user_warehouse_restriction/static/description/assets/icons/user.png
  32. BIN
      user_warehouse_restriction/static/description/assets/icons/wrench.png
  33. BIN
      user_warehouse_restriction/static/description/assets/modules/1.png
  34. BIN
      user_warehouse_restriction/static/description/assets/modules/barcode_image.png
  35. BIN
      user_warehouse_restriction/static/description/assets/modules/biometric_image.png
  36. BIN
      user_warehouse_restriction/static/description/assets/modules/export_image.png
  37. BIN
      user_warehouse_restriction/static/description/assets/modules/login_image.png
  38. BIN
      user_warehouse_restriction/static/description/assets/modules/payroll_image.png
  39. BIN
      user_warehouse_restriction/static/description/assets/modules/sale_image.png
  40. BIN
      user_warehouse_restriction/static/description/assets/screenshots/1.png
  41. BIN
      user_warehouse_restriction/static/description/assets/screenshots/2.png
  42. BIN
      user_warehouse_restriction/static/description/assets/screenshots/3.png
  43. BIN
      user_warehouse_restriction/static/description/assets/screenshots/4.png
  44. BIN
      user_warehouse_restriction/static/description/assets/screenshots/5.png
  45. BIN
      user_warehouse_restriction/static/description/assets/screenshots/6.png
  46. BIN
      user_warehouse_restriction/static/description/assets/screenshots/hero.gif
  47. BIN
      user_warehouse_restriction/static/description/banner.jpg
  48. BIN
      user_warehouse_restriction/static/description/icon.png
  49. 647
      user_warehouse_restriction/static/description/index.html
  50. 30
      user_warehouse_restriction/views/res_config_settings_views.xml
  51. 40
      user_warehouse_restriction/views/res_users_views.xml
  52. 15
      user_warehouse_restriction/views/stock_location_views.xml
  53. 41
      user_warehouse_restriction/views/stock_warehouse_views.xml

48
user_warehouse_restriction/README.rst

@ -0,0 +1,48 @@
.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg
:target: https://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
User Warehouse Restriction
==========================
This module helps you to restrict warehouse and stock location for the users.
So that users can only access the allowed warehouse and locations.
Configuration
=============
* Enable 'Restrict stock warehouse to users' from inventory configuration settings
* Restrict warehouse and stock location for the users.
License
-------
Affero General Public License v3.0 (AGPL v3)
(https://www.gnu.org/licenses/agpl-3.0-standalone.html)
Company
-------
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__
Credits
-------
* Developer: (V15) Vishnu P, 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>`__

22
user_warehouse_restriction/__init__.py

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Vishnu P (odoo@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

48
user_warehouse_restriction/__manifest__.py

@ -0,0 +1,48 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Vishnu P (odoo@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': "User Warehouse Restriction",
'version': '15.0.1.0.0',
'category': 'Warehouse',
'summary': """Restrict Warehouses and location for users.""",
'description': """This module helps you to restrict warehouse and stock
location for the specific users. So that users can only access the allowed
warehouse and locations.""",
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
'website': "https://www.cybrosys.com",
'depends': ['stock_sms','stock'],
'data': [
'security/user_warehouse_restriction_groups.xml',
'security/user_warehouse_restriction_security.xml',
'views/stock_location_views.xml',
'views/res_config_settings_views.xml',
'views/stock_warehouse_views.xml',
'views/res_users_views.xml',
],
'images': ['static/description/banner.jpg'],
'license': 'AGPL-3',
'installable': True,
'auto_install': False,
'application': False,
}

7
user_warehouse_restriction/doc/RELEASE_NOTES.md

@ -0,0 +1,7 @@
## Module <user_warehouse_restriction>
#### 29.04.2024
#### Version 15.0.1.0.0
#### ADD
- Initial commit for User Warehouse Restriction

26
user_warehouse_restriction/models/__init__.py

@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Vishnu P (odoo@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_config_settings
from . import res_users
from . import stock_location
from . import stock_picking
from . import stock_warehouse

48
user_warehouse_restriction/models/res_config_settings.py

@ -0,0 +1,48 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Vishnu P (odoo@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
class ResConfigSettings(models.TransientModel):
"""Add new fields to configuration settings to Restrict stock warehouse
for users."""
_inherit = 'res.config.settings'
group_user_warehouse_restriction = fields.Boolean(
string="Restrict Stock Warehouse",
implied_group='user_warehouse_restriction.'
'user_warehouse_restriction_group_user',
help="Check if you want to restrict warehouse for users.")
@api.onchange('group_user_warehouse_restriction')
def _onchange_group_user_warehouse_restriction(self):
"""This method is triggered when the 'group_user_warehouse_restriction'
field is changed. if it's true, assigns the current user as the
allowed user of all existing warehouses."""
warehouses = self.env['stock.warehouse'].search([])
for warehouse in warehouses:
if self.group_user_warehouse_restriction:
# Assign the current user to each warehouse
warehouse.user_ids = [(6, 0, [self.env.user.id])]
else:
# Clear the allowed users for each warehouse
warehouse.user_ids = [(5, 0, 0)]

60
user_warehouse_restriction/models/res_users.py

@ -0,0 +1,60 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Vishnu P (odoo@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
class ResUsers(models.Model):
"""This model adds additional fields to the `res.users` model to restrict
user access to certain locations and warehouses."""
_inherit = 'res.users'
allowed_warehouse_ids = fields.Many2many(
comodel_name='stock.warehouse', string='Allowed Warehouse',
help='Allowed Warehouse for user.')
restrict_location = fields.Boolean(string="Restrict Location",
help='Restrict location for the user.')
location_ids = fields.Many2many(comodel_name='stock.location',
string='Restricted Locations',
help='Restricted locations for users.',
domain="[('location_warehouse_id', 'in', allowed_warehouse_ids)]")
check_user = fields.Boolean(string="Check", compute='_compute_check_user',
help="Indicates whether the user has warehouse"
" location restrictions.")
@api.model
def create(self, vals):
self.clear_caches()
return super(ResUsers, self).create(vals)
def write(self, vals):
self.clear_caches()
return super(ResUsers, self).write(vals)
def _compute_check_user(self):
"""To determine if the user has warehouse location restrictions.
Sets the check_user field accordingly."""
restriction_group_id = self.env.ref(
'user_warehouse_restriction.user_warehouse_restriction_group_user').id
for record in self:
record.check_user = False
if restriction_group_id in record.groups_id.mapped('id'):
record.check_user = True

47
user_warehouse_restriction/models/stock_location.py

@ -0,0 +1,47 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Vishnu P (odoo@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 collections import OrderedDict
from odoo import api, fields, models
class StockLocation(models.Model):
_inherit = 'stock.location'
location_warehouse_id = fields.Many2one('stock.warehouse',
compute='_compute_location_warehouse_id',
store=True)
@api.depends('warehouse_view_ids')
def _compute_location_warehouse_id(self):
"""Computes the warehouse location"""
warehouses = self.env['stock.warehouse'].search(
[('view_location_id', 'parent_of', self.ids)])
view_by_wh = OrderedDict(
(wh.view_location_id.id, wh.id) for wh in warehouses)
self.warehouse_id = False
for loc in self:
path = set(
int(loc_id) for loc_id in loc.parent_path.split('/')[:-1])
for view_location_id in view_by_wh:
if view_location_id in path:
loc.location_warehouse_id = view_by_wh[view_location_id]
break

37
user_warehouse_restriction/models/stock_picking.py

@ -0,0 +1,37 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Vishnu P (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import api, models
class StockPicking(models.Model):
"""Extends stock picking to apply domain restrictions based on user's
assigned warehouses."""
_inherit = 'stock.picking'
@api.onchange('location_id', 'location_dest_id')
def _onchange_location_id(self):
"""Domain for location_id and location_dest_id."""
return {
'domain': {'location_id': [
('warehouse_id.user_ids', 'in', self.env.user.id)],
'location_dest_id': [
('warehouse_id.user_ids', 'in', self.env.user.id)]}}

65
user_warehouse_restriction/models/stock_warehouse.py

@ -0,0 +1,65 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Vishnu P (odoo@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
class StockWarehouse(models.Model):
"""Extends the 'stock.warehouse' model to add functionality for restricting
stock location access to specific users within the system."""
_inherit = "stock.warehouse"
user_ids = fields.Many2many(
comodel_name='res.users', string='Allowed Users',
domain=lambda self: [
('groups_id', 'in', self.env.ref('stock.group_stock_user').id)],
default=lambda self: self.env.user,
help='Allowed users to this Warehouse.')
restrict_location = fields.Boolean(
string='Restrict Stock Location for this Warehouse',
help='Restrict stock location of this warehouse to the selected '
'users.')
@api.onchange('restrict_location', 'user_ids')
def _onchange_restrict_location(self):
"""Triggered when the 'restrict_location' or 'user_ids' fields
are modified. It updates the 'restrict_location' field for selected
users when restricting stock location access."""
for rec in self.user_ids:
if self.restrict_location:
rec._origin.write({'restrict_location': True,
'allowed_warehouse_ids': [
(4, self._origin.id)]})
elif not self.restrict_location:
rec._origin.write({'restrict_location': True,
'location_ids': False
})
def action_open_users_view(self):
"""Return user basic form view to give restricted location for users"""
return {
'type': 'ir.actions.act_window',
'name': 'Users',
'view_mode': 'tree,form',
'res_model': 'res.users',
'domain': [('id', 'in', [user.id for user in self.user_ids]),
('groups_id', 'not in',
[self.env.ref('base.group_system').id])]}

8
user_warehouse_restriction/security/user_warehouse_restriction_groups.xml

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- New user group created for Warehouse restriction -->
<record id="user_warehouse_restriction_group_user" model="res.groups">
<field name="name">Restrict Warehouse for Users</field>
<field name="category_id" ref="base.module_category_hidden"/>
</record>
</odoo>

52
user_warehouse_restriction/security/user_warehouse_restriction_security.xml

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Users should only see operation types that belong to the warehouse they belong to -->
<record id="operation_type_rule_users" model="ir.rule">
<field name="name">Operation Type Restrict on Users</field>
<field name="model_id" ref="stock.model_stock_picking_type"/>
<field name="domain_force">[('warehouse_id.user_ids','in', user.id)]</field>
<field name="groups" eval="[(4, ref('user_warehouse_restriction.user_warehouse_restriction_group_user'))]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_unlink" eval="True"/>
<field name="active" eval="True"/>
</record>
<!-- Users should only see Stock Location that they are not restricted to-->
<record id="stock_location_rule_users" model="ir.rule">
<field name="name">Stock Location Restrict on Users</field>
<field name="model_id" ref="stock.model_stock_location"/>
<field name="domain_force">[('id', 'not in', user.location_ids.ids)]</field>
<field name="groups" eval="[(4, ref('user_warehouse_restriction.user_warehouse_restriction_group_user'))]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_unlink" eval="True"/>
<field name="active" eval="True"/>
</record>
<!-- Users should only see the allowed warehouse-->
<record id="stock_warehouse_rule_users" model="ir.rule">
<field name="name">Warehouse Restrict on Users</field>
<field name="model_id" ref="stock.model_stock_warehouse"/>
<field name="domain_force">[('user_ids','in', user.id)]</field>
<field name="groups" eval="[(4, ref('user_warehouse_restriction.user_warehouse_restriction_group_user'))]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_unlink" eval="True"/>
<field name="active"
eval="True"/>
</record>
<!-- Users should only see transfers of allowed warehouse-->
<record id="stock_picking_rule_users" model="ir.rule">
<field name="name">Warehouse Transfers Restrict on Users</field>
<field name="model_id" ref="stock.model_stock_picking"/>
<field name="domain_force">[('picking_type_id.warehouse_id.user_ids','in', user.id)]</field>
<field name="groups" eval="[(4, ref('user_warehouse_restriction.user_warehouse_restriction_group_user'))]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_unlink" eval="True"/>
<field name="active" eval="True"/>
</record>
</odoo>

BIN
user_warehouse_restriction/static/description/assets/icons/check.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
user_warehouse_restriction/static/description/assets/icons/chevron.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

BIN
user_warehouse_restriction/static/description/assets/icons/cogs.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
user_warehouse_restriction/static/description/assets/icons/consultation.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
user_warehouse_restriction/static/description/assets/icons/ecom-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

BIN
user_warehouse_restriction/static/description/assets/icons/education-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

BIN
user_warehouse_restriction/static/description/assets/icons/hotel-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

BIN
user_warehouse_restriction/static/description/assets/icons/license.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
user_warehouse_restriction/static/description/assets/icons/lifebuoy.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
user_warehouse_restriction/static/description/assets/icons/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
user_warehouse_restriction/static/description/assets/icons/manufacturing-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

BIN
user_warehouse_restriction/static/description/assets/icons/pos-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

BIN
user_warehouse_restriction/static/description/assets/icons/puzzle.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

BIN
user_warehouse_restriction/static/description/assets/icons/restaurant-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

BIN
user_warehouse_restriction/static/description/assets/icons/service-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

BIN
user_warehouse_restriction/static/description/assets/icons/trading-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

BIN
user_warehouse_restriction/static/description/assets/icons/training.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

BIN
user_warehouse_restriction/static/description/assets/icons/update.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
user_warehouse_restriction/static/description/assets/icons/user.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

BIN
user_warehouse_restriction/static/description/assets/icons/wrench.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
user_warehouse_restriction/static/description/assets/modules/1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

BIN
user_warehouse_restriction/static/description/assets/modules/barcode_image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

BIN
user_warehouse_restriction/static/description/assets/modules/biometric_image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

BIN
user_warehouse_restriction/static/description/assets/modules/export_image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
user_warehouse_restriction/static/description/assets/modules/login_image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

BIN
user_warehouse_restriction/static/description/assets/modules/payroll_image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

BIN
user_warehouse_restriction/static/description/assets/modules/sale_image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
user_warehouse_restriction/static/description/assets/screenshots/1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

BIN
user_warehouse_restriction/static/description/assets/screenshots/2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

BIN
user_warehouse_restriction/static/description/assets/screenshots/3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

BIN
user_warehouse_restriction/static/description/assets/screenshots/4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

BIN
user_warehouse_restriction/static/description/assets/screenshots/5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

BIN
user_warehouse_restriction/static/description/assets/screenshots/6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 KiB

BIN
user_warehouse_restriction/static/description/assets/screenshots/hero.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 KiB

BIN
user_warehouse_restriction/static/description/banner.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

BIN
user_warehouse_restriction/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

647
user_warehouse_restriction/static/description/index.html

@ -0,0 +1,647 @@
<div class="container" style="padding: 1rem !important; margin-bottom: 1rem !important;">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-12 d-flex justify-content-between"
style="border-bottom: 1px solid #d5d5d5;">
<div class="my-3">
<img src="./assets/icons/logo.png" style="width: auto !important; height: 40px !important;">
</div>
<div class="my-3 d-flex align-items-center">
<div
style="background-color: #7C7BAD !important; color: #fff !important; font-weight: 600 !important; padding: 5px 15px 8px !important; margin: 0 5px !important;">
<i class="fa fa-check mr-1"></i>Community
</div>
<div
style="background-color: #875A7B !important; color: #fff !important; font-weight: 600 !important; padding: 5px 15px 8px !important; margin: 0 5px !important;">
<i class="fa fa-check mr-1"></i>Enterprise
</div>
</div>
</div>
</div>
</div>
<div class="container" style="padding: 0rem 1.5rem 4rem !important">
<div class="row" style="height: 900px !important;">
<div class="col-sm-12 col-md-12 col-lg-12"
style="padding: 4rem 1rem !important; background-color: #714B67 !important; height: 600px !important; border-radius: 20px !important;">
<h1
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #FFFFFF !important; font-size: 3.5rem !important; text-align: center !important;">
User Warehouse Restriction</h1>
<p
style="font-family: 'Montserrat', sans-serif !important; font-weight: 300 !important; color: #FFFFFF !important; font-size: 1.4rem !important; text-align: center !important;">
This Module Restrict Warehouse And Stock Location For Users.
</p>
<img src="./assets/screenshots/hero.gif" class="img-responsive" width="100%" height="auto" />
</div>
</div>
<div class="row">
<div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin-bottom: 2rem !important">
<h2
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;">
<i class="fa fa-compass mr-2"></i>Explore this module
</h2>
</div>
<div class="col-md-6">
<a href="#overview" style="text-decoration: none !important;">
<div class="row"
style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;">
<div class="col-8">
<h3
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;">
Overview</h3>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;">
Learn more about this module</p>
</div>
<div class="col-4 text-right d-flex justify-content-end align-items-center">
<i class="fa fa-chevron-right" style="color: #714B67 !important;"></i>
</div>
</div>
</a>
</div>
<div class="col-md-6">
<a href="#configuration" style="text-decoration: none !important;">
<div class="row"
style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;">
<div class="col-8">
<h3
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;">
Configuration</h3>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;">
View configurations for this module</p>
</div>
<div class="col-4 text-right d-flex justify-content-end align-items-center">
<i class="fa fa-chevron-right" style="color: #714B67 !important;"></i>
</div>
</div>
</a>
</div>
<div class="col-md-6">
<a href="#features" style="text-decoration: none !important;">
<div class="row"
style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;">
<div class="col-8">
<h3
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;">
Features</h3>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;">
View features of this module</p>
</div>
<div class="col-4 text-right d-flex justify-content-end align-items-center">
<i class="fa fa-chevron-right" style="color: #714B67 !important;"></i>
</div>
</div>
</a>
</div>
<div class="col-md-6">
<a href="#screenshots" style="text-decoration: none !important;">
<div class="row"
style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;">
<div class="col-8">
<h3
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;">
Screenshots</h3>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;">
See key screenshots of this module</p>
</div>
<div class="col-4 text-right d-flex justify-content-end align-items-center">
<i class="fa fa-chevron-right" style="color: #714B67 !important;"></i>
</div>
</div>
</a>
</div>
</div>
<div class="row" id="overview">
<div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important">
<h2
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;">
<i class="fa fa-pie-chart mr-2"></i>Overview
</h2>
</div>
<div class="col-mg-12 pl-3">
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important; line-height: 30px !important;">
This module helps you to Restrict Warehouse And Stock Location For Users.</p>
</div>
</div>
<div class="row" id="configuration">
<div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important">
<h2
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;">
<i class="fa fa-pie-chart mr-2"></i>Configuration
</h2>
</div>
<div class="col-mg-12 pl-3">
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important; line-height: 30px !important;">
No additional configuration required</p>
</div>
</div>
<div class="row" id="features">
<div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important">
<h2
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;">
<i class="fa fa-star mr-2"></i>Features
</h2>
</div>
<div class="col-md-6 pl-3 py-3 d-flex">
<div>
<img src="assets/icons/check.png">
</div>
<div>
<h4
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Odoo 15 Community & Enterprise Edition Support.</h4>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
User Warehouse Restriction in Odoo 15 Community & Enterprise Edition.</p>
</div>
</div>
<div class="col-md-6 pl-3 py-3 d-flex">
<div>
<img src="assets/icons/check.png">
</div>
<div>
<h4
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Restrict Warehouse for Users.
</h4>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
Module allows Users to set Restriction for the warehouse.
</p>
</div>
</div>
<div class="col-md-6 pl-3 py-3 d-flex">
<div>
<img src="assets/icons/check.png">
</div>
<div>
<h4
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Restrict Location for Users.
</h4>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
Users to set Restriction for the Location.
</p>
</div>
</div>
</div>
<div class="row" id="screenshots">
<div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important">
<h2
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;">
<i class="fa fa-image mr-2"></i>Screenshots
</h2>
</div>
<div class="col-lg-12 my-2">
<h4 class="mt-2"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Enable the feature from the settings.</h4>
<h6 class="mt-2" style=" font-weight:300 !important; color:#282F33 !important; font-size:1rem !important">
Go to Inventory settings -> Click the Restrict Stock warehouse button followed by the storage location button.</h6>
<img src="assets/screenshots/1.png" class="img-responsive img-thumbnail border" width="100%"
height="auto" />
</div>
<div class="col-lg-12 my-3">
<h4 class="mt-3"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Add the users.</h4>
<h6 class="mt-2" style=" font-weight:300 !important; color:#282F33 !important; font-size:1rem !important">
Add the Users here.</h6>
<img src="assets/screenshots/2.png" class="img-responsive img-thumbnail border" width="100%"
height="auto" />
</div>
<div class="col-lg-12 my-3">
<h4 class="mt-3"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Restrict From User form page.</h4>
<h6 class="mt-2" style=" font-weight:300 !important; color:#282F33 !important; font-size:1rem !important">
Here we can set the Restricted Warehouse and Location.</h6>
<img src="assets/screenshots/3.png" class="img-responsive img-thumbnail border" width="100%"
height="auto" />
</div>
<div class="col-lg-12 my-3">
<h4 class="mt-3"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Removed the Location and Warehouse</h4>
<h6 class="mt-2" style=" font-weight:300 !important; color:#282F33 !important; font-size:1rem !important">
As per the User Restriction the Locations are Removed from the Selection.</h6>
<img src="assets/screenshots/4.png" class="img-responsive img-thumbnail border" width="100%"
height="auto" />
</div>
<div class="col-lg-12 my-3">
<h4 class="mt-3"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
No Restriction</h4>
<h6 class="mt-2" style=" font-weight:300 !important; color:#282F33 !important; font-size:1rem !important">
For This User There is no Restriction for the Location.</h6>
<img src="assets/screenshots/5.png" class="img-responsive img-thumbnail border" width="100%"
height="auto" />
</div>
<div class="col-lg-12 my-3">
<h4 class="mt-3"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
No filtration in location</h4>
<h6 class="mt-2" style=" font-weight:300 !important; color:#282F33 !important; font-size:1rem !important">
For This User can Access all the Location.</h6>
<img src="assets/screenshots/6.png" class="img-responsive img-thumbnail border" width="100%"
height="auto" />
</div>
</div>
<!-- SUGGESTED PRODUCTS -->
<div class="row">
<div class="col-lg-12 d-flex flex-column justify-content-center"
style="text-align: center; padding: 2.5rem 1rem !important;">
<h2 style="color: #212529 !important;">Suggested Products</h2>
<hr
style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;" />
<div id="demo1" class="row carousel slide" data-ride="carousel">
<!-- The slideshow -->
<div class="carousel-inner">
<div class="carousel-item active" style="min-height:0px">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/invoice_format_editor/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/1.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/product_barcode/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/barcode_image.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/export_stockinfo_xls/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/export_image.png">
</div>
</a>
</div>
</div>
<div class="carousel-item" style="min-height:0px">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/sale_discount_total/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/sale_image.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/login_user_detail/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/login_image.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/hr_zk_attendance/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/biometric_image.png">
</div>
</a>
</div>
</div>
</div>
<!-- Left and right controls -->
<a class="carousel-control-prev" href="#demo1" data-slide="prev"
style="left:-25px;width: 35px;color: #000;"> <span class="carousel-control-prev-icon"><i
class="fa fa-chevron-left" style="font-size:24px"></i></span> </a> <a
class="carousel-control-next" href="#demo1" data-slide="next"
style="right:-25px;width: 35px;color: #000;">
<span class="carousel-control-next-icon"><i class="fa fa-chevron-right"
style="font-size:24px"></i></span>
</a>
</div>
</div>
</div>
<!-- END OF SUGGESTED PRODUCTS -->
<!-- OUR SERVICES -->
<section class="container" style="margin-top: 6rem !important;">
<div class="row">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center">
<h2 style="color: #212529 !important;">Our Services</h2>
<hr
style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;" />
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/cogs.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Customization</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ff6b6b !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/wrench.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6462CD !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/lifebuoy.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Support</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/user.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Hire
Odoo
Developer</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #54a0ff !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/puzzle.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Integration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6d7680 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/update.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Migration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #786fa6 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/consultation.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Consultancy</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #f8a5c2 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/training.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #e6be26 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/license.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Licensing Consultancy</h6>
</div>
</div>
</section>
<!-- END OF OUR SERVICES -->
<!-- OUR INDUSTRIES -->
<section class="container" style="margin-top: 6rem !important;">
<div class="row">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center">
<h2 style="color: #212529 !important;">Our Industries</h2>
<hr
style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;" />
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/trading-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Trading
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Easily procure
and
sell your products</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/pos-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
POS
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Easy
configuration
and convivial experience</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/education-black.png" class="img-responsive mb-3" height="48px"
width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Education
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
A platform for
educational management</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/manufacturing-black.png" class="img-responsive mb-3" height="48px"
width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Manufacturing
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Plan, track and
schedule your operations</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/ecom-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
E-commerce &amp; Website
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Mobile
friendly,
awe-inspiring product pages</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/service-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Service Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Keep track of
services and invoice</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/restaurant-black.png" class="img-responsive mb-3" height="48px"
width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Restaurant
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Run your bar or
restaurant methodically</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/hotel-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Hotel Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
An
all-inclusive
hotel management application</p>
</div>
</div>
</div>
</section>
<!-- END OF OUR INDUSTRIES -->
<!-- FOOTER -->
<!-- Footer Section -->
<section class="container" style="margin: 5rem auto 2rem;">
<div class="row" style="max-width:1540px;">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center">
<h2 style="color: #212529 !important;">Need Help?</h2>
<hr
style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;" />
</div>
</div>
<!-- Contact Cards -->
<div class="row d-flex justify-content-center align-items-center"
style="max-width:1540px; margin: 0 auto 2rem auto;">
<div class="col-lg-12" style="padding: 0rem 3rem 2rem; border-radius: 10px; margin-right: 3rem; ">
<div class="row mt-4">
<div class="col-lg-6">
<a href="mailto:odoo@cybrosys.com" target="_blank" class="btn btn-block mb-2 deep_hover"
style="text-decoration: none; background-color: #4d4d4d; color: #FFF; border-radius: 4px;"><i
class="fa fa-envelope mr-2"></i>odoo@cybrosys.com</a>
</div>
<div class="col-lg-6">
<a href="https://api.whatsapp.com/send?phone=918606827707" target="_blank"
class="btn btn-block mb-2 deep_hover"
style="text-decoration: none; background-color: #25D366; color: #FFF; border-radius: 4px;"><i
class="fa fa-whatsapp mr-2"></i>+91 86068 27707</a>
</div>
</div>
</div>
</div>
<!-- End of Contact Cards -->
</section>
<!-- Footer -->
<section class="oe_container" style="padding: 2rem 3rem 1rem;">
<div class="row" style="max-width:1540px; margin: 0 auto; margin-right: 3rem; ">
<!-- Logo -->
<div class="col-lg-12 d-flex justify-content-center align-items-center" style="margin-top: 3rem;">
<img src="https://www.cybrosys.com/images/logo.png" width="200px" height="auto" />
</div>
<!-- End of Logo -->
<div class="col-lg-12">
<hr
style="margin-top: 3rem;background: linear-gradient(90deg, rgba(2,0,36,0) 0%, rgba(229,229,229,1) 33%, rgba(229,229,229,1) 58%, rgba(0,212,255,0) 100%); height: 2px; border-style: none;">
<!-- End of Footer Section -->
</div>
</div>
</section>
<!-- END OF FOOTER -->
</div>

30
user_warehouse_restriction/views/res_config_settings_views.xml

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<!-- Inventory settings form view inherited -->
<record id="res_config_settings_view_form" model="ir.ui.view">
<field name="name">
res.config.settings.view.form.inherit.user.warehouse.restriction
</field>
<field name="model">res.config.settings</field>
<field name="priority" eval="1"/>
<field name="inherit_id" ref="stock.res_config_settings_view_form"/>
<field name="arch" type="xml">
<xpath expr="//div[@id='use_own_routes']" position="after">
<div class="col-12 col-lg-6 o_setting_box"
id="warehouse_restriction"
title="Enable Warehouse restriction" attrs="{'invisible':[('group_stock_multi_locations','=',False)]}">
<div class="o_setting_left_pane">
<field name="group_user_warehouse_restriction"/>
</div>
<div class="o_setting_right_pane">
<label for="group_user_warehouse_restriction"/>
<div class="text-muted">
Enable Warehouse restriction
</div>
</div>
</div>
</xpath>
</field>
</record>
</odoo>

40
user_warehouse_restriction/views/res_users_views.xml

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Added fields for accessible location -->
<record id="view_users_form" model="ir.ui.view">
<field name="name">res.users.view.form.inherit.user.warehouse.restriction
</field>
<field name="model">res.users</field>
<field name="mode">extension</field>
<field name="inherit_id" ref="base.view_users_form"/>
<field name="arch" type="xml">
<xpath expr="//page[@name='security']" position="after">
<page name="stock_location" string="Restricted Location"
attrs="{'invisible':[('restrict_location','=',False)]}">
<group>
<field name="allowed_warehouse_ids" widget="many2many_tags"/>
<field name="location_ids" widget="many2many_tags"/>
<field name="restrict_location" invisible="1"/>
</group>
</page>
</xpath>
</field>
</record>
<!-- Users simple form view inherited-->
<record id="view_users_simple_form" model="ir.ui.view">
<field name="name">res.users.view.form.user.warehouse.restriction
</field>
<field name="model">res.users</field>
<field name="inherit_id" ref="base.view_users_simple_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='mobile']" position="after">
<group>
<field name="allowed_warehouse_ids" widget="many2many_tags"/>
<field name="location_ids" widget="many2many_tags"/>
<field name="restrict_location" invisible="1"/>
<field name="check_user" invisible="1"/>
</group>
</xpath>
</field>
</record>
</odoo>

15
user_warehouse_restriction/views/stock_location_views.xml

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<!-- Stock location form view inherited-->
<record id="view_location_form" model="ir.ui.view">
<field name="name">stock.location.view.form.inherit.user.warehouse.restriction</field>
<field name="model">stock.location</field>
<field name="priority" eval="1"/>
<field name="inherit_id" ref="stock.view_location_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='next_inventory_date']" position="after">
<field name="location_warehouse_id"/>
</xpath>
</field>
</record>
</odoo>

41
user_warehouse_restriction/views/stock_warehouse_views.xml

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<!-- New page on Stock Warehouse form view-->
<record id="view_warehouse" model="ir.ui.view">
<field name="name">
stock.warehouse.view.form.inherit.user.warehouse.restriction
</field>
<field name="model">stock.warehouse</field>
<field name="priority" eval="1"/>
<field name="inherit_id" ref="stock.view_warehouse"/>
<field name="arch" type="xml">
<xpath expr="//notebook[@colspan='4' and @groups='stock.group_adv_location,stock.group_stock_multi_warehouses']"
position="attributes">
<attribute name="groups">
stock.group_adv_location,stock.group_stock_multi_warehouses,user_warehouse_restriction.user_warehouse_restriction_group_user
</attribute>
</xpath>
<xpath expr="//notebook/page[@name='warehouse_config']"
position="attributes">
<attribute name="groups">
stock.group_adv_location,stock.group_stock_multi_warehouses
</attribute>
</xpath>
<xpath expr="//notebook" position="inside">
<page string="Warehouse Allowed users"
groups="user_warehouse_restriction.user_warehouse_restriction_group_user"
name="allowed_users" colspan="4">
<group colspan="4">
<field name="user_ids" widget="many2many_tags"/>
<field name="restrict_location"/>
</group>
<button string="Restrict location for User"
class="btn btn-link"
attrs="{'invisible':[('restrict_location','=',False)]}"
icon="fa-arrow-right"
type="object" name="action_open_users_view"/>
</page>
</xpath>
</field>
</record>
</odoo>
Loading…
Cancel
Save