Browse Source

Mar 19 [ADD] : Initial Commit 'user_warehouse_restriction'

pull/278/merge
AjmalCybro 1 year ago
parent
commit
d8b6f1abef
  1. 48
      user_warehouse_restriction/README.rst
  2. 22
      user_warehouse_restriction/__init__.py
  3. 47
      user_warehouse_restriction/__manifest__.py
  4. 6
      user_warehouse_restriction/doc/RELEASE_NOTES.md
  5. 25
      user_warehouse_restriction/models/__init__.py
  6. 48
      user_warehouse_restriction/models/res_config_settings.py
  7. 59
      user_warehouse_restriction/models/res_users.py
  8. 38
      user_warehouse_restriction/models/stock_picking.py
  9. 65
      user_warehouse_restriction/models/stock_warehouse.py
  10. 8
      user_warehouse_restriction/security/user_warehouse_restriction_groups.xml
  11. 52
      user_warehouse_restriction/security/user_warehouse_security.xml
  12. BIN
      user_warehouse_restriction/static/description/assets/icons/check.png
  13. BIN
      user_warehouse_restriction/static/description/assets/icons/chevron.png
  14. BIN
      user_warehouse_restriction/static/description/assets/icons/cogs.png
  15. BIN
      user_warehouse_restriction/static/description/assets/icons/consultation.png
  16. BIN
      user_warehouse_restriction/static/description/assets/icons/ecom-black.png
  17. BIN
      user_warehouse_restriction/static/description/assets/icons/education-black.png
  18. BIN
      user_warehouse_restriction/static/description/assets/icons/hotel-black.png
  19. BIN
      user_warehouse_restriction/static/description/assets/icons/license.png
  20. BIN
      user_warehouse_restriction/static/description/assets/icons/lifebuoy.png
  21. BIN
      user_warehouse_restriction/static/description/assets/icons/manufacturing-black.png
  22. BIN
      user_warehouse_restriction/static/description/assets/icons/pos-black.png
  23. BIN
      user_warehouse_restriction/static/description/assets/icons/puzzle.png
  24. BIN
      user_warehouse_restriction/static/description/assets/icons/restaurant-black.png
  25. BIN
      user_warehouse_restriction/static/description/assets/icons/service-black.png
  26. BIN
      user_warehouse_restriction/static/description/assets/icons/trading-black.png
  27. BIN
      user_warehouse_restriction/static/description/assets/icons/training.png
  28. BIN
      user_warehouse_restriction/static/description/assets/icons/update.png
  29. BIN
      user_warehouse_restriction/static/description/assets/icons/user.png
  30. BIN
      user_warehouse_restriction/static/description/assets/icons/wrench.png
  31. BIN
      user_warehouse_restriction/static/description/assets/misc/categories.png
  32. BIN
      user_warehouse_restriction/static/description/assets/misc/check-box.png
  33. BIN
      user_warehouse_restriction/static/description/assets/misc/compass.png
  34. BIN
      user_warehouse_restriction/static/description/assets/misc/corporate.png
  35. BIN
      user_warehouse_restriction/static/description/assets/misc/customer-support.png
  36. BIN
      user_warehouse_restriction/static/description/assets/misc/cybrosys-logo.png
  37. BIN
      user_warehouse_restriction/static/description/assets/misc/features.png
  38. BIN
      user_warehouse_restriction/static/description/assets/misc/logo.png
  39. BIN
      user_warehouse_restriction/static/description/assets/misc/pictures.png
  40. BIN
      user_warehouse_restriction/static/description/assets/misc/pie-chart.png
  41. BIN
      user_warehouse_restriction/static/description/assets/misc/right-arrow.png
  42. BIN
      user_warehouse_restriction/static/description/assets/misc/star.png
  43. BIN
      user_warehouse_restriction/static/description/assets/misc/support.png
  44. BIN
      user_warehouse_restriction/static/description/assets/misc/whatsapp.png
  45. BIN
      user_warehouse_restriction/static/description/assets/modules/1.png
  46. BIN
      user_warehouse_restriction/static/description/assets/modules/2.png
  47. BIN
      user_warehouse_restriction/static/description/assets/modules/3.png
  48. BIN
      user_warehouse_restriction/static/description/assets/modules/4.jpg
  49. BIN
      user_warehouse_restriction/static/description/assets/modules/5.png
  50. BIN
      user_warehouse_restriction/static/description/assets/modules/6.png
  51. BIN
      user_warehouse_restriction/static/description/assets/screenshots/Screenshot01.png
  52. BIN
      user_warehouse_restriction/static/description/assets/screenshots/Screenshot1.png
  53. BIN
      user_warehouse_restriction/static/description/assets/screenshots/Screenshot2.png
  54. BIN
      user_warehouse_restriction/static/description/assets/screenshots/Screenshot3.png
  55. BIN
      user_warehouse_restriction/static/description/assets/screenshots/Screenshot4.png
  56. BIN
      user_warehouse_restriction/static/description/assets/screenshots/Screenshot5.png
  57. BIN
      user_warehouse_restriction/static/description/assets/screenshots/hero.gif
  58. BIN
      user_warehouse_restriction/static/description/banner.jpg
  59. BIN
      user_warehouse_restriction/static/description/icon.png
  60. 615
      user_warehouse_restriction/static/description/index.html
  61. 29
      user_warehouse_restriction/views/res_config_settings_views.xml
  62. 42
      user_warehouse_restriction/views/res_users_views.xml
  63. 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: (V16) Anagha S, 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: Anagha S (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

47
user_warehouse_restriction/__manifest__.py

@ -0,0 +1,47 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Anagha S (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': '16.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', 'stock_sms'],
'data': [
'security/user_warehouse_restriction_groups.xml',
'security/user_warehouse_security.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,
}

6
user_warehouse_restriction/doc/RELEASE_NOTES.md

@ -0,0 +1,6 @@
## Module <user_warehouse_restriction>
#### 08.03.2024
#### Version 16.0.1.0.0
#### ADD
- Initial commit for User Warehouse Restriction

25
user_warehouse_restriction/models/__init__.py

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

59
user_warehouse_restriction/models/res_users.py

@ -0,0 +1,59 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Anagha S (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'
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.')
allowed_warehouse_ids = fields.Many2many(
comodel_name='stock.warehouse', string='Allowed Warehouse',
help='Allowed Warehouse for user.')
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

38
user_warehouse_restriction/models/stock_picking.py

@ -0,0 +1,38 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.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: Anagha S (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_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/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/misc/categories.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
user_warehouse_restriction/static/description/assets/misc/check-box.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
user_warehouse_restriction/static/description/assets/misc/compass.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
user_warehouse_restriction/static/description/assets/misc/corporate.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
user_warehouse_restriction/static/description/assets/misc/customer-support.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
user_warehouse_restriction/static/description/assets/misc/cybrosys-logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

BIN
user_warehouse_restriction/static/description/assets/misc/features.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
user_warehouse_restriction/static/description/assets/misc/pictures.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
user_warehouse_restriction/static/description/assets/misc/pie-chart.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
user_warehouse_restriction/static/description/assets/misc/right-arrow.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 967 B

BIN
user_warehouse_restriction/static/description/assets/misc/star.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
user_warehouse_restriction/static/description/assets/misc/support.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
user_warehouse_restriction/static/description/assets/misc/whatsapp.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

BIN
user_warehouse_restriction/static/description/assets/modules/4.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 225 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

BIN
user_warehouse_restriction/static/description/banner.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

BIN
user_warehouse_restriction/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

615
user_warehouse_restriction/static/description/index.html

@ -0,0 +1,615 @@
<div style="background-color: #714B67; height: 810px; width: 100%; padding: 15px; position: relative;">
<!-- TITLE BAR -->
<div class="d-flex align-items-center justify-content-between"
style="border-bottom: 1px solid #875A7B; padding: 15px; display: flex; justify-content: space-between; align-items: center;">
<img src="assets/misc/cybrosys-logo.png" width="42" height="42"
style="width: 42px; height: 42px;"/>
<div>
<div style="color: #7C7BAD; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Community
</div>
<div style="color: #875A7B; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Enterprise
</div>
<div style="color: #017E84; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Odoo.sh
</div>
</div>
</div>
<!-- END OF TITLE BAR -->
<div class="container">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-12">
<!-- APP HERO -->
<h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;">
User Warehouse Restriction</h1>
<p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;">
This Module Restrict Warehouse And Stock Location For Users.
</p>
<!-- END OF APP HERO -->
<img src="assets/screenshots/hero.gif" class="img-responsive"
style="width: 100%; margin-left: auto; margin-right: auto;"/>
</div>
</div>
</div>
</div>
<!-- NAVIGATION SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px; margin-top: 300px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/compass.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Explore This Module</h2>
</div>
<div class="row my-4" style="font-family: 'Montserrat', sans-serif;">
<div class="col-sm-12 col-md-6 my-3">
<a href="#overview">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Overview</span>
<span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">Learn more about this module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
<div class="col-sm-12 col-md-6 my-3">
<a href="#features">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Features</span>
<span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View features of this module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
<div class="col-sm-12 col-md-6 my-3">
<a href="#screenshots">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Screenshots</span>
<span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View
screenshots for this
module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
</div>
<!-- END OF NAVIGATION SECTION -->
<!-- OVERVIEW SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="overview">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/pie-chart.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Overview
</h2>
</div>
<div class="row"
style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;">
<div class="col-sm-12 py-4">
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.
</div>
</div>
<!-- END OF OVERVIEW SECTION -->
<!-- FEATURES SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="features">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/features.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Features
</h2>
</div>
<div class="row"
style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;">
<div class="col-sm-12 col-md-6">
<div class="d-flex align-items-center"
style="margin-top: 40px; margin-bottom: 40px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Available in Odoo 16.0 Community, Enterprise and Odoo.sh.</span>
</div>
<div class="d-flex align-items-center"
style="margin-top: 40px; margin-bottom: 40px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Restrict Warehouse for Users.</span>
</div>
<div class="d-flex align-items-center"
style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Restrict Location for Users.</span>
</div>
</div>
</div>
<!-- END OF FEATURES SECTION -->
<!-- SCREENSHOTS SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;"
id="screenshots">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/pictures.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Screenshots
</h2>
</div>
<div class="row">
<div class="col-sm-12">
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Go to Inventory-> Configuration-> Settings-> Warehouse. Enable
the field 'Storage Locations', then enable 'Restrict Stock
Warehouse'.
</h3>
<img src="assets/screenshots/Screenshot01.png"
class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Go to Inventory-> Configuration-> Warehouse .<br/>Can see new
page Warehouse Allowed Users, where you can select Users who have
access to that warehouse. Enable 'Restrict Stock Location for
this Warehouse' to restrict the Stock Location inside that
Warehouse to those Users. Then Click 'Restrict Location for User'.
</h3>
<img src="assets/screenshots/Screenshot2.png"
class="img-thumbnail">
</div>
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
You can select Restricted Locations.
</h3>
<div style="display: block; margin: 30px auto;">
<img src="assets/screenshots/Screenshot3.png"
class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Log in with the user and go to Inventory -> Operations ->Transfers.
Then select Operation Type of Allowed Warehouse.
</h3>
<img src="assets/screenshots/Screenshot4.png"
class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
We already restricted WH2/Stock/Shelf1 and WH2/Stock/Freezer locations
for user. So the Location is hidden on Transfer creation.
</h3>
<img src="assets/screenshots/Screenshot5.png"
class="img-thumbnail">
</div>
</div>
</div>
<!-- END OF SCREENSHOTS SECTION -->
<!-- RELATED PRODUCTS -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/categories.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Related
Products
</h2>
</div>
<div class="row">
<div class="col-lg-12 d-flex flex-column justify-content-center"
style="text-align: center; padding: 2.5rem 1rem !important;">
<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/16.0/stock_intercompany_transfer/"
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/16.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/2.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/16.0/quick_stock_movement/#"
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/3.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/16.0/inventory_turnover_report_analysis/"
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/4.jpg">
</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/16.0/inventory_stock_dashboard_odoo/#"
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/5.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/16.0/product_brand_inventory/#"
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/6.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 RELATED PRODUCTS -->
<!-- OUR SERVICES -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/star.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Our Services
</h2>
</div>
<div class="container my-5">
<div class="row">
<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>
</div>
<!-- END OF OUR SERVICES -->
<!-- OUR INDUSTRIES -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/corporate.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Our
Industries
</h2>
</div>
<div class="container my-5">
<div class="row">
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; 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: 0px; 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: 0px; 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: 0px; 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: 0px; 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: 0px; 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: 0px; 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: 0px; 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>
</div>
<!-- END OF OUR INDUSTRIES -->
<!-- SUPPORT -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/customer-support.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Support
</h2>
</div>
<div class="container mt-5">
<div class="row">
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4 d-flex justify-content-center align-items-center"
style="background-color: #714B67; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="assets/misc/support.png" height="48" width="48"
style="width: 42px; height: 42px;"/>
</div>
<div>
<h4>Need Help?</h4>
<p style="line-height: 100%;">Got questions or need help?
Get in touch.</p>
<a href="mailto:odoo@cybrosys.com">
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">
odoo@cybrosys.com</p>
</a>
</div>
</div>
</div>
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4 d-flex justify-content-center align-items-center"
style="background-color: #2AC44D; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="assets/misc/whatsapp.png" height="52" width="52"
style="width: 52px; height: 52px;"/>
</div>
<div>
<h4>WhatsApp</h4>
<p style="line-height: 100%;">Say hi to us on WhatsApp!</p>
<a href="https://api.whatsapp.com/send?phone=918606827707">
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">
+91 86068 27707</p>
</a>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12 my-5 d-flex justify-content-center align-items-center">
<img src="assets/misc/logo.png" width="144" height="31"
style="width:144px; height: 31px; margin-top: 40px;"/>
</div>
</div>
</div>
<!-- END OF SUPPORT -->

29
user_warehouse_restriction/views/res_config_settings_views.xml

@ -0,0 +1,29 @@
<?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[@name='warehouse_setting_container']" position="inside">
<div class="col-12 col-lg-6 o_setting_box" id="categorize_locations"
attrs="{'invisible': [('group_stock_multi_locations', '=', False)]}">
<div class="col-12 col-lg-6 o_setting_box" id="track_product_location"
title="Check if you want to restrict warehouse for users.">
<div class="o_setting_left_pane">
<field name="group_user_warehouse_restriction" on_change="1"/>
</div>
<div class="o_setting_right_pane">
<label for="group_user_warehouse_restriction"/>
<div class="text-muted">
Restrict stock warehouse to users
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
</odoo>

42
user_warehouse_restriction/views/res_users_views.xml

@ -0,0 +1,42 @@
<?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"
domain="[('warehouse_id', 'in', allowed_warehouse_ids)]"/>
<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" readonly="True"/>
<field name="location_ids" widget="many2many_tags"
domain="[('warehouse_id', 'in', allowed_warehouse_ids)]"/>
<field name="restrict_location" invisible="1"/>
<field name="check_user" invisible="1"/>
</group>
</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