forked from alaguraj/odoo-testing-addons
role based access feature enabled
This commit is contained in:
parent
8aac33c4ff
commit
e7e35d7ad2
2
addons/restaurant_management/__init__.py
Normal file
2
addons/restaurant_management/__init__.py
Normal file
@ -0,0 +1,2 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from . import models
|
||||
28
addons/restaurant_management/__manifest__.py
Normal file
28
addons/restaurant_management/__manifest__.py
Normal file
@ -0,0 +1,28 @@
|
||||
{
|
||||
'name': 'Restaurant Management System',
|
||||
'version': '1.0',
|
||||
'category': 'Sales/Point of Sale',
|
||||
'summary': 'Advanced Role-Based Access for Restaurants',
|
||||
'description': """
|
||||
Complete Role-Based Access Control for Restaurant:
|
||||
- Admin/Owner
|
||||
- Manager
|
||||
- Cashier
|
||||
- Waiter/Captain
|
||||
- Kitchen (KDS)
|
||||
- Store Keeper
|
||||
""",
|
||||
'author': 'Antigravity',
|
||||
'depends': ['point_of_sale', 'purchase', 'stock', 'website_sale'],
|
||||
'data': [
|
||||
'security/restaurant_security.xml',
|
||||
'security/ir.model.access.csv',
|
||||
'security/restaurant_rules.xml',
|
||||
'views/restaurant_menus.xml',
|
||||
'views/pos_order_views.xml',
|
||||
'views/res_users_views.xml',
|
||||
],
|
||||
'installable': True,
|
||||
'application': True,
|
||||
'license': 'LGPL-3',
|
||||
}
|
||||
Binary file not shown.
1
addons/restaurant_management/models/__init__.py
Normal file
1
addons/restaurant_management/models/__init__.py
Normal file
@ -0,0 +1 @@
|
||||
from . import res_users
|
||||
Binary file not shown.
Binary file not shown.
42
addons/restaurant_management/models/res_users.py
Normal file
42
addons/restaurant_management/models/res_users.py
Normal file
@ -0,0 +1,42 @@
|
||||
from odoo import models, fields, api
|
||||
|
||||
class ResUsers(models.Model):
|
||||
_inherit = 'res.users'
|
||||
|
||||
restaurant_role = fields.Selection([
|
||||
('waiter', 'Waiter / Captain'),
|
||||
('chef', 'Chef / Kitchen Staff'),
|
||||
('cashier', 'Cashier'),
|
||||
('manager', 'Manager'),
|
||||
('admin', 'Admin / Owner'),
|
||||
('store', 'Store Keeper'),
|
||||
], string='Restaurant Role', help="Select the staff member's primary role.")
|
||||
|
||||
@api.onchange('restaurant_role')
|
||||
def _onchange_restaurant_role(self):
|
||||
if not self.restaurant_role:
|
||||
return
|
||||
|
||||
# Map roles to their XML IDs
|
||||
role_mapping = {
|
||||
'waiter': 'restaurant_management.group_restaurant_waiter',
|
||||
'chef': 'restaurant_management.group_restaurant_kitchen',
|
||||
'cashier': 'restaurant_management.group_restaurant_cashier',
|
||||
'manager': 'restaurant_management.group_restaurant_manager',
|
||||
'admin': 'restaurant_management.group_restaurant_admin',
|
||||
'store': 'restaurant_management.group_restaurant_store_keeper',
|
||||
}
|
||||
|
||||
# Clear existing restaurant groups first (optional, but cleaner)
|
||||
# We can find them by category
|
||||
category = self.env.ref('restaurant_management.module_category_restaurant_staff', raise_if_not_found=False)
|
||||
if category:
|
||||
restaurant_groups = self.env['res.groups'].search([('category_id', '=', category.id)])
|
||||
self.groups_id = [(3, g.id) for g in restaurant_groups]
|
||||
|
||||
# Add the selected group
|
||||
group_xml_id = role_mapping.get(self.restaurant_role)
|
||||
if group_xml_id:
|
||||
group = self.env.ref(group_xml_id)
|
||||
if group:
|
||||
self.groups_id = [(4, group.id)]
|
||||
@ -0,0 +1,6 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_pos_order_manager,pos.order.manager,point_of_sale.model_pos_order,group_restaurant_manager,1,1,1,1
|
||||
access_pos_order_waiter,pos.order.waiter,point_of_sale.model_pos_order,group_restaurant_waiter,1,1,1,0
|
||||
access_pos_order_cashier,pos.order.cashier,point_of_sale.model_pos_order,group_restaurant_cashier,1,1,1,1
|
||||
access_stock_picking_store,stock.picking.store,stock.model_stock_picking,group_restaurant_store_keeper,1,1,1,0
|
||||
access_kds_order_kitchen,pos.order.kitchen,point_of_sale.model_pos_order,group_restaurant_kitchen,1,1,0,0
|
||||
|
20
addons/restaurant_management/security/restaurant_rules.xml
Normal file
20
addons/restaurant_management/security/restaurant_rules.xml
Normal file
@ -0,0 +1,20 @@
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
<!-- Waiter can only see their own orders -->
|
||||
<record id="rule_waiter_own_orders" model="ir.rule">
|
||||
<field name="name">Waiter Own Orders</field>
|
||||
<field name="model_id" ref="point_of_sale.model_pos_order"/>
|
||||
<field name="domain_force">[('user_id', '=', user.id)]</field>
|
||||
<field name="groups" eval="[(4, ref('group_restaurant_waiter'))]"/>
|
||||
</record>
|
||||
|
||||
<!-- Kitchen staff can see all orders in 'draft' or 'paid' (depending on how KDS is implemented) -->
|
||||
<!-- Usually KDS filters by 'pos_order_line' preparation status -->
|
||||
<record id="rule_kitchen_all_orders" model="ir.rule">
|
||||
<field name="name">Kitchen View Orders</field>
|
||||
<field name="model_id" ref="point_of_sale.model_pos_order"/>
|
||||
<field name="domain_force">[(1, '=', 1)]</field>
|
||||
<field name="groups" eval="[(4, ref('group_restaurant_kitchen'))]"/>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
@ -0,0 +1,52 @@
|
||||
<odoo>
|
||||
<data>
|
||||
<!-- 1. Category for Staff Roles (Dropdown selection) -->
|
||||
<record id="module_category_restaurant_staff" model="ir.module.category">
|
||||
<field name="name">Restaurant Staff Role</field>
|
||||
<field name="description">Select the staff member's primary role.</field>
|
||||
<field name="sequence">500</field>
|
||||
</record>
|
||||
|
||||
<!-- Kitchen / Chef Role -->
|
||||
<record id="group_restaurant_kitchen" model="res.groups">
|
||||
<field name="name">Chef / Kitchen Staff</field>
|
||||
<field name="category_id" ref="module_category_restaurant_staff"/>
|
||||
</record>
|
||||
|
||||
<!-- Waiter Role -->
|
||||
<record id="group_restaurant_waiter" model="res.groups">
|
||||
<field name="name">Waiter / Captain</field>
|
||||
<field name="category_id" ref="module_category_restaurant_staff"/>
|
||||
<field name="implied_ids" eval="[(4, ref('point_of_sale.group_pos_user'))]"/>
|
||||
</record>
|
||||
|
||||
<!-- Store Role -->
|
||||
<record id="group_restaurant_store_keeper" model="res.groups">
|
||||
<field name="name">Store Keeper</field>
|
||||
<field name="category_id" ref="module_category_restaurant_staff"/>
|
||||
<field name="implied_ids" eval="[(4, ref('stock.group_stock_user'))]"/>
|
||||
</record>
|
||||
|
||||
<!-- Cashier Role (Inherits Waiter) -->
|
||||
<record id="group_restaurant_cashier" model="res.groups">
|
||||
<field name="name">Cashier</field>
|
||||
<field name="category_id" ref="module_category_restaurant_staff"/>
|
||||
<field name="implied_ids" eval="[(4, ref('group_restaurant_waiter'))]"/>
|
||||
</record>
|
||||
|
||||
<!-- Manager Role -->
|
||||
<record id="group_restaurant_manager" model="res.groups">
|
||||
<field name="name">Manager</field>
|
||||
<field name="category_id" ref="module_category_restaurant_staff"/>
|
||||
<field name="implied_ids" eval="[(4, ref('group_restaurant_cashier')), (4, ref('point_of_sale.group_pos_manager')), (4, ref('stock.group_stock_user'))]"/>
|
||||
</record>
|
||||
|
||||
<!-- Admin / Owner -->
|
||||
<record id="group_restaurant_admin" model="res.groups">
|
||||
<field name="name">Admin / Owner</field>
|
||||
<field name="category_id" ref="module_category_restaurant_staff"/>
|
||||
<field name="implied_ids" eval="[(4, ref('group_restaurant_manager')), (4, ref('group_restaurant_kitchen'))]"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
34
addons/restaurant_management/views/pos_order_views.xml
Normal file
34
addons/restaurant_management/views/pos_order_views.xml
Normal file
@ -0,0 +1,34 @@
|
||||
<odoo>
|
||||
<!-- Simplified Kitchen View for POS Order Lines -->
|
||||
<record id="view_pos_order_line_kitchen_tree" model="ir.ui.view">
|
||||
<field name="name">pos.order.line.kitchen.tree</field>
|
||||
<field name="model">pos.order.line</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Kitchen Orders" create="false" edit="false">
|
||||
<field name="order_id"/>
|
||||
<field name="product_id"/>
|
||||
<field name="qty"/>
|
||||
<field name="customer_note" string="Special Instructions"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_restaurant_kitchen_orders" model="ir.actions.act_window">
|
||||
<field name="name">Kitchen Display</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">pos.order.line</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="view_pos_order_line_kitchen_tree"/>
|
||||
<field name="domain">[('order_id.state', 'in', ['paid', 'done'])]</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
No orders for the kitchen yet!
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Update the menu item to use this action -->
|
||||
<record id="menu_restaurant_kds_orders" model="ir.ui.menu">
|
||||
<field name="action" ref="action_restaurant_kitchen_orders"/>
|
||||
</record>
|
||||
</odoo>
|
||||
14
addons/restaurant_management/views/res_users_views.xml
Normal file
14
addons/restaurant_management/views/res_users_views.xml
Normal file
@ -0,0 +1,14 @@
|
||||
<odoo>
|
||||
<record id="view_users_form_restaurant_roles_final" model="ir.ui.view">
|
||||
<field name="name">res.users.form.restaurant.roles.final</field>
|
||||
<field name="model">res.users</field>
|
||||
<field name="inherit_id" ref="base.view_users_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//page[@name='access_rights']" position="inside">
|
||||
<group string="Restaurant Management" name="restaurant_staff_roles_group">
|
||||
<field name="restaurant_role"/>
|
||||
</group>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
23
addons/restaurant_management/views/restaurant_menus.xml
Normal file
23
addons/restaurant_management/views/restaurant_menus.xml
Normal file
@ -0,0 +1,23 @@
|
||||
<odoo>
|
||||
<!-- Hide certain menus for specific roles -->
|
||||
<record id="stock.menu_stock_root" model="ir.ui.menu">
|
||||
<field name="groups_id" eval="[(4, ref('group_restaurant_manager')), (4, ref('group_restaurant_store_keeper'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="point_of_sale.menu_point_root" model="ir.ui.menu">
|
||||
<field name="groups_id" eval="[(4, ref('group_restaurant_manager')), (4, ref('group_restaurant_waiter')), (4, ref('group_restaurant_cashier'))]"/>
|
||||
</record>
|
||||
|
||||
<!-- Custom Kitchen Dashboard Menu -->
|
||||
<menuitem id="menu_restaurant_kds_root"
|
||||
name="Kitchen (KDS)"
|
||||
web_icon="point_of_sale,static/description/icon.png"
|
||||
groups="group_restaurant_kitchen,group_restaurant_manager"
|
||||
sequence="20"/>
|
||||
|
||||
<menuitem id="menu_restaurant_kds_orders"
|
||||
name="Preparation Orders"
|
||||
parent="menu_restaurant_kds_root"
|
||||
action="point_of_sale.action_pos_order_line_form"
|
||||
sequence="10"/>
|
||||
</odoo>
|
||||
Loading…
x
Reference in New Issue
Block a user