diff --git a/addons/restaurant_management/__init__.py b/addons/restaurant_management/__init__.py new file mode 100644 index 0000000..a0fdc10 --- /dev/null +++ b/addons/restaurant_management/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +from . import models diff --git a/addons/restaurant_management/__manifest__.py b/addons/restaurant_management/__manifest__.py new file mode 100644 index 0000000..8e06072 --- /dev/null +++ b/addons/restaurant_management/__manifest__.py @@ -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', +} diff --git a/addons/restaurant_management/__pycache__/__init__.cpython-310.pyc b/addons/restaurant_management/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000..5a4cadb Binary files /dev/null and b/addons/restaurant_management/__pycache__/__init__.cpython-310.pyc differ diff --git a/addons/restaurant_management/models/__init__.py b/addons/restaurant_management/models/__init__.py new file mode 100644 index 0000000..8835165 --- /dev/null +++ b/addons/restaurant_management/models/__init__.py @@ -0,0 +1 @@ +from . import res_users diff --git a/addons/restaurant_management/models/__pycache__/__init__.cpython-310.pyc b/addons/restaurant_management/models/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000..d04d1f2 Binary files /dev/null and b/addons/restaurant_management/models/__pycache__/__init__.cpython-310.pyc differ diff --git a/addons/restaurant_management/models/__pycache__/res_users.cpython-310.pyc b/addons/restaurant_management/models/__pycache__/res_users.cpython-310.pyc new file mode 100644 index 0000000..0e6c43a Binary files /dev/null and b/addons/restaurant_management/models/__pycache__/res_users.cpython-310.pyc differ diff --git a/addons/restaurant_management/models/res_users.py b/addons/restaurant_management/models/res_users.py new file mode 100644 index 0000000..d554580 --- /dev/null +++ b/addons/restaurant_management/models/res_users.py @@ -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)] diff --git a/addons/restaurant_management/security/ir.model.access.csv b/addons/restaurant_management/security/ir.model.access.csv new file mode 100644 index 0000000..2455140 --- /dev/null +++ b/addons/restaurant_management/security/ir.model.access.csv @@ -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 diff --git a/addons/restaurant_management/security/restaurant_rules.xml b/addons/restaurant_management/security/restaurant_rules.xml new file mode 100644 index 0000000..a99894d --- /dev/null +++ b/addons/restaurant_management/security/restaurant_rules.xml @@ -0,0 +1,20 @@ + + + + + Waiter Own Orders + + [('user_id', '=', user.id)] + + + + + + + Kitchen View Orders + + [(1, '=', 1)] + + + + diff --git a/addons/restaurant_management/security/restaurant_security.xml b/addons/restaurant_management/security/restaurant_security.xml new file mode 100644 index 0000000..b20f8c6 --- /dev/null +++ b/addons/restaurant_management/security/restaurant_security.xml @@ -0,0 +1,52 @@ + + + + + Restaurant Staff Role + Select the staff member's primary role. + 500 + + + + + Chef / Kitchen Staff + + + + + + Waiter / Captain + + + + + + + Store Keeper + + + + + + + Cashier + + + + + + + Manager + + + + + + + Admin / Owner + + + + + + diff --git a/addons/restaurant_management/views/pos_order_views.xml b/addons/restaurant_management/views/pos_order_views.xml new file mode 100644 index 0000000..9804ae3 --- /dev/null +++ b/addons/restaurant_management/views/pos_order_views.xml @@ -0,0 +1,34 @@ + + + + pos.order.line.kitchen.tree + pos.order.line + + + + + + + + + + + + Kitchen Display + ir.actions.act_window + pos.order.line + tree,form + + [('order_id.state', 'in', ['paid', 'done'])] + + + No orders for the kitchen yet! + + + + + + + + + diff --git a/addons/restaurant_management/views/res_users_views.xml b/addons/restaurant_management/views/res_users_views.xml new file mode 100644 index 0000000..42d0527 --- /dev/null +++ b/addons/restaurant_management/views/res_users_views.xml @@ -0,0 +1,14 @@ + + + res.users.form.restaurant.roles.final + res.users + + + + + + + + + + diff --git a/addons/restaurant_management/views/restaurant_menus.xml b/addons/restaurant_management/views/restaurant_menus.xml new file mode 100644 index 0000000..dd2467f --- /dev/null +++ b/addons/restaurant_management/views/restaurant_menus.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + +
+ No orders for the kitchen yet! +