diff --git a/pos_kitchen_screen_odoo/README.rst b/pos_kitchen_screen_odoo/README.rst new file mode 100644 index 000000000..86b1cc539 --- /dev/null +++ b/pos_kitchen_screen_odoo/README.rst @@ -0,0 +1,44 @@ +.. image:: https://img.shields.io/badge/license-LGPL--3-green.svg + :target: https://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 + +Pos Kitchen Screen +================== +* POS Kitchen Screen facilitates sending certain orders automatically to the kitchen + +Company +------- +* `Cybrosys Techno Solutions `__ + +License +------- +General Public License, Version 3 (LGPL v3). +(https://www.gnu.org/licenses/lgpl-3.0-standalone.html) + + +Credits +------- +Developers: (V15) Gayathri V +Contacts: 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 `__ + +Further information +=================== +HTML Description: `` diff --git a/pos_kitchen_screen_odoo/__init__.py b/pos_kitchen_screen_odoo/__init__.py new file mode 100644 index 000000000..1e53a93a8 --- /dev/null +++ b/pos_kitchen_screen_odoo/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Gayathri v (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 . +# +############################################################################# +from .import models diff --git a/pos_kitchen_screen_odoo/__manifest__.py b/pos_kitchen_screen_odoo/__manifest__.py new file mode 100644 index 000000000..f15895404 --- /dev/null +++ b/pos_kitchen_screen_odoo/__manifest__.py @@ -0,0 +1,84 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Gayathri v(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 . +# +############################################################################# +{ + 'name': 'POS Kitchen Screen', + 'version': '15.0.1.0.0', + 'category': 'Point Of Sale', + 'summary': 'POS Kitchen Screen facilitates sending certain orders ' + 'automatically to the kitchen.The POS Kitchen Screen in ' + 'Odoo 15 also allows for the customization of order views, ' + 'so that staff can see the information that is most ' + 'important to them.', + 'description': 'The POS Kitchen Screen in Odoo 15 is a feature that ' + 'allows restaurant staff to view and manage orders in ' + 'real-time from the kitchen. This screen provides a clear ' + 'and organized display of all active orders, enabling ' + 'kitchen staff to prioritize and manage their tasks ' + 'efficiently. The POS Kitchen Screen in Odoo 15 also ' + 'allows for the customization of order views, so that ' + 'staff can see the information that is most important to ' + 'them. Additionally, this feature facilitates ' + 'communication between front-end and back-end staff, ' + 'enabling them to work together seamlessly and provide a ' + 'better dining experience for customers.', + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'maintainer': 'Cybrosys Techno Solutions', + 'website': "https://www.cybrosys.com", + 'depends': ['point_of_sale'], + 'data': [ + 'security/pos_kitchen_screen_odoo_groups.xml', + "security/ir.model.access.csv", + 'data/kitchen_screen_sequence_data.xml', + "views/kitchen_screen_views.xml", + "views/pos_kitchen_screen_odoo_menus.xml", + "views/pos_order_views.xml", + ], + 'assets': { + 'point_of_sale.assets': [ + 'pos_kitchen_screen_odoo/static/src/scss/pos.scss', + 'pos_kitchen_screen_odoo/static/src/js/product_screen.js', + 'pos_kitchen_screen_odoo/static/src/js/pos_js.js', + 'pos_kitchen_screen_odoo/static/src/js/Receipt.js', + ], + 'web.assets_backend': [ + 'pos_kitchen_screen_odoo/static/src/js/dashboard_action.js', + 'pos_kitchen_screen_odoo/static/src/css/dashboard.css', + 'https://unpkg.com/scrollreveal@4.0.0/dist/scrollreveal.min.js', + 'https://fonts.googleapis.com', + 'https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js', + 'https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js' + ], + 'web.assets_qweb': [ + 'pos_kitchen_screen_odoo/static/src/xml/SubmitOrderButton.xml', + 'pos_kitchen_screen_odoo/static/src/xml/dashboard_templates.xml', + ], + }, + 'images': [ + 'static/description/banner.jpg', + ], + 'license': 'LGPL-3', + 'installable': True, + 'application': False, + 'auto_install': False, +} + diff --git a/pos_kitchen_screen_odoo/data/kitchen_screen_sequence_data.xml b/pos_kitchen_screen_odoo/data/kitchen_screen_sequence_data.xml new file mode 100644 index 000000000..578d9f172 --- /dev/null +++ b/pos_kitchen_screen_odoo/data/kitchen_screen_sequence_data.xml @@ -0,0 +1,16 @@ + + + + + + Kitchen Screen + kitchen.screen + True + KITCHEN + 4 + 1 + 1 + + + + diff --git a/pos_kitchen_screen_odoo/doc/RELEASE_NOTES.md b/pos_kitchen_screen_odoo/doc/RELEASE_NOTES.md new file mode 100644 index 000000000..f810a16ee --- /dev/null +++ b/pos_kitchen_screen_odoo/doc/RELEASE_NOTES.md @@ -0,0 +1,6 @@ +## Module + +#### 03.11.2023 +#### Version 15.0.1.0.0 +#### ADD +- Initial commit for POS Kitchen Screen diff --git a/pos_kitchen_screen_odoo/models/__init__.py b/pos_kitchen_screen_odoo/models/__init__.py new file mode 100644 index 000000000..2c4cf646a --- /dev/null +++ b/pos_kitchen_screen_odoo/models/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Gayathri v (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 . +# +############################################################################# +from . import kitchen_screen +from . import pos_orders diff --git a/pos_kitchen_screen_odoo/models/kitchen_screen.py b/pos_kitchen_screen_odoo/models/kitchen_screen.py new file mode 100644 index 000000000..ee7c4714d --- /dev/null +++ b/pos_kitchen_screen_odoo/models/kitchen_screen.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Gaythri v (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 . +# +############################################################################# +from odoo import api, fields, models + + +class KitchenScreen(models.Model): + """Kitchen Screen model for the cook""" + _name = 'kitchen.screen' + _description = 'Pos Kitchen Screen' + _rec_name = 'sequence' + + def _pos_shop_id(self): + """Domain for the Pos Shop""" + kitchen = self.search([]) + if kitchen: + return [('module_pos_restaurant', '=', True), + ('id', 'not in', [rec.id for rec in kitchen.pos_config_id])] + else: + return [('module_pos_restaurant', '=', True)] + + sequence = fields.Char(readonly=True, default='New', + copy=False, tracking=True, help="Sequence of items") + pos_config_id = fields.Many2one('pos.config', string='Allowed POS', + domain=_pos_shop_id, + help="Allowed POS for kitchen") + pos_categ_ids = fields.Many2many('pos.category', required=True, + string='Allowed POS Category', + help="Allowed POS Category" + "for the corresponding Pos ") + shop_number = fields.Integer(related='pos_config_id.id', string='Customer', + help="Id of the POS") + + @api.model + def create(self, vals): + """Used to create sequence""" + if vals.get('sequence', 'New') == 'New': + vals['sequence'] = self.env['ir.sequence'].next_by_code( + 'kitchen.screen') + result = super(KitchenScreen, self).create(vals) + return result diff --git a/pos_kitchen_screen_odoo/models/pos_orders.py b/pos_kitchen_screen_odoo/models/pos_orders.py new file mode 100644 index 000000000..749b5a460 --- /dev/null +++ b/pos_kitchen_screen_odoo/models/pos_orders.py @@ -0,0 +1,197 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Gaythri v (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 . +# +############################################################################# +from odoo import api, fields, models +from odoo.exceptions import ValidationError + + +class PosOrder(models.Model): + """This is used to inheriting pos order to add new fields""" + _inherit = "pos.order" + + order_status = fields.Selection(string="Order Status", + selection=[("draft", "Draft"), + ("waiting", "Cooking"), + ("ready", "Ready"), + ("cancel", "Cancel")], + help='To know the status of order') + order_ref = fields.Char(string="Order Reference", + help='Reference of the order') + is_cooking = fields.Boolean(string="Is Cooking", + help='To identify the order is kitchen orders') + order_time = fields.Char(string="Order Time", readonly=True, + help='To set the time of each order') + + def write(self, vals): + """Super the write function for adding order status in vals""" + for order in self: + if order.order_status == "waiting" and vals.get( + "order_status") != "ready": + vals["order_status"] = order.order_status + if vals.get("state") and vals[ + "state"] == "paid" and order.name == "/": + vals["name"] = self._compute_order_name() + return super(PosOrder, self).write(vals) + + @api.model_create_multi + def create(self, vals_list): + """Override create function for the validation of the order""" + for vals in vals_list: + pos_orders = self.search( + [("pos_reference", "=", vals["pos_reference"])]) + if pos_orders: + for rec in pos_orders.lines: + for lin in vals_list[0]["lines"]: + if lin[2]["product_id"] == rec.product_id.id: + lin[2]["order_status"] = rec.order_status + vals_list[0]["order_status"] = pos_orders.order_status + if pos_orders.order_status != "ready": + for rec in pos_orders: + rec.sudo().unlink() + pos_orders.create(vals_list[0]) + else: + raise ValidationError( + 'There Order is Completed please create a new Order') + else: + session = self.env["pos.session"].browse(vals["session_id"]) + self._complete_values_from_session(session, vals) + return super().create(vals_list) + + def get_details(self, shop_id, order=None): + """For getting the kitchen orders for the cook""" + dic = order + if order: + orders = self.search([("pos_reference", "=", order)]) + if not orders: + self.create(dic) + kitchen_screen = self.env["kitchen.screen"].sudo().search( + [("pos_config_id", "=", shop_id)]) + pos_orders = self.env["pos.order.line"].search( + ["&", ("is_cooking", "=", True), + ("product_id.pos_categ_id", "in", + [rec.id for rec in kitchen_screen.pos_categ_ids])]) + pos = self.env["pos.order"].search( + [("lines", "in", [rec.id for rec in pos_orders])], + order="date_order") + pos_lines = pos.lines.search( + [("product_id.pos_categ_id", "in", + [rec.id for rec in kitchen_screen.pos_categ_ids])]) + values = {"orders": pos.read(), "order_lines": pos_lines.read()} + return values + + def action_pos_order_paid(self): + """Supering the action_pos_order_paid function for setting its kitchen + order and setting the order reference""" + res = super().action_pos_order_paid() + kitchen_screen = self.env["kitchen.screen"].search( + [("pos_config_id", "=", self.config_id.id)] + ) + for order_line in self.lines: + order_line.is_cooking = True + if kitchen_screen: + for line in self.lines: + line.is_cooking = True + self.is_cooking = True + self.order_ref = self.name + return res + + @api.onchange("order_status") + def onchange_order_status(self): + """To set is_cooking false""" + if self.order_status == "ready": + self.is_cooking = False + + def order_progress_draft(self, id): + """Calling function from js to change the order status""" + order = self.browse(int(id)) + order.order_status = "waiting" + for line in order.lines: + if line.order_status != "ready": + line.order_status = "waiting" + + def order_progress_cancel(self, id): + """Calling function from js to change the order status""" + order = self.browse(int(id)) + order.order_status = "cancel" + for line in order.lines: + if line.order_status != "ready": + line.order_status = "cancel" + + def order_progress_change(self, id): + """Calling function from js to change the order status""" + order = self.browse(int(id)) + kitchen_screen = self.env["kitchen.screen"].search( + [("pos_config_id", "=", order.config_id.id)]) + stage = [] + for line in order.lines: + if line.product_id.pos_categ_id.id in \ + [rec.id for rec in kitchen_screen.pos_categ_ids]: + stage.append(line.order_status) + if "waiting" in stage or "draft" in stage: + order.order_status = "ready" + else: + order.order_status = "ready" + + def check_order(self, order_name): + """Calling function from js to know status of the order""" + pos_order = self.sudo().search([('pos_reference', '=', order_name)]) + kitchen_order = self.env['kitchen.screen'].sudo().search( + [('pos_config_id', '=', pos_order.config_id.id)]) + if kitchen_order: + if pos_order.order_status != 'ready': + return True + else: + return False + + +class PosOrderLine(models.Model): + """ This is used to Inheriting the pos order line""" + _inherit = "pos.order.line" + + order_status = fields.Selection( + selection=[('draft', 'Draft'), ('waiting', 'Cooking'), + ('ready', 'Ready'), ('cancel', 'Cancel')], default='draft', + help='The status of orderliness') + order_ref = fields.Char(related='order_id.order_ref', + string='Order Reference', + help='Order reference of order') + is_cooking = fields.Boolean(string="Cooking", default=False, + help='To identify the order is kitchen orders') + customer_id = fields.Many2one('res.partner', string="Customer", + related='order_id.partner_id', + help='Id of the customer') + + def get_product_details(self, ids): + """To get the product details""" + lines = self.env['pos.order'].browse(ids) + res = [] + for rec in lines: + res.append({ + 'product_id': rec.product_id.id, + 'name': rec.product_id.name, + 'qty': rec.qty + }) + return res + + def order_progress_change(self, id): + """Calling function from js to change the order_line status""" + order_line = self.browse(int(id)) + order_line.order_status = 'ready' diff --git a/pos_kitchen_screen_odoo/security/ir.model.access.csv b/pos_kitchen_screen_odoo/security/ir.model.access.csv new file mode 100644 index 000000000..7b8cd6954 --- /dev/null +++ b/pos_kitchen_screen_odoo/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access.kitchen.screen_user,access.kitchen.screen.user,model_kitchen_screen,pos_kitchen_screen_odoo.kitchen_cook,1,1,1,1 diff --git a/pos_kitchen_screen_odoo/security/pos_kitchen_screen_odoo_groups.xml b/pos_kitchen_screen_odoo/security/pos_kitchen_screen_odoo_groups.xml new file mode 100644 index 000000000..97d42c585 --- /dev/null +++ b/pos_kitchen_screen_odoo/security/pos_kitchen_screen_odoo_groups.xml @@ -0,0 +1,16 @@ + + + + + Pos Kitchen Screen + Kitchen Access Groups + 20 + + + + Kitchen Cook + + + diff --git a/pos_kitchen_screen_odoo/static/description/assets/icons/check.png b/pos_kitchen_screen_odoo/static/description/assets/icons/check.png new file mode 100644 index 000000000..c8e85f51d Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/icons/check.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/icons/chevron.png b/pos_kitchen_screen_odoo/static/description/assets/icons/chevron.png new file mode 100644 index 000000000..2089293d6 Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/icons/chevron.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/icons/cogs.png b/pos_kitchen_screen_odoo/static/description/assets/icons/cogs.png new file mode 100644 index 000000000..95d0bad62 Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/icons/cogs.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/icons/consultation.png b/pos_kitchen_screen_odoo/static/description/assets/icons/consultation.png new file mode 100644 index 000000000..8319d4baa Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/icons/consultation.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/icons/ecom-black.png b/pos_kitchen_screen_odoo/static/description/assets/icons/ecom-black.png new file mode 100644 index 000000000..a9385ff13 Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/icons/ecom-black.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/icons/education-black.png b/pos_kitchen_screen_odoo/static/description/assets/icons/education-black.png new file mode 100644 index 000000000..3eb09b27b Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/icons/education-black.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/icons/hotel-black.png b/pos_kitchen_screen_odoo/static/description/assets/icons/hotel-black.png new file mode 100644 index 000000000..130f613be Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/icons/hotel-black.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/icons/license.png b/pos_kitchen_screen_odoo/static/description/assets/icons/license.png new file mode 100644 index 000000000..a5869797e Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/icons/license.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/icons/lifebuoy.png b/pos_kitchen_screen_odoo/static/description/assets/icons/lifebuoy.png new file mode 100644 index 000000000..658d56ccc Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/icons/lifebuoy.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/icons/logo.png b/pos_kitchen_screen_odoo/static/description/assets/icons/logo.png new file mode 100755 index 000000000..478462d3e Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/icons/logo.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/icons/manufacturing-black.png b/pos_kitchen_screen_odoo/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 000000000..697eb0e9f Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/icons/manufacturing-black.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/icons/pos-black.png b/pos_kitchen_screen_odoo/static/description/assets/icons/pos-black.png new file mode 100644 index 000000000..97c0f90c1 Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/icons/pos-black.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/icons/puzzle.png b/pos_kitchen_screen_odoo/static/description/assets/icons/puzzle.png new file mode 100644 index 000000000..65cf854e7 Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/icons/puzzle.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/icons/restaurant-black.png b/pos_kitchen_screen_odoo/static/description/assets/icons/restaurant-black.png new file mode 100644 index 000000000..4a35eb939 Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/icons/restaurant-black.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/icons/service-black.png b/pos_kitchen_screen_odoo/static/description/assets/icons/service-black.png new file mode 100644 index 000000000..301ab51cb Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/icons/service-black.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/icons/trading-black.png b/pos_kitchen_screen_odoo/static/description/assets/icons/trading-black.png new file mode 100644 index 000000000..9398ba2f1 Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/icons/trading-black.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/icons/training.png b/pos_kitchen_screen_odoo/static/description/assets/icons/training.png new file mode 100644 index 000000000..884ca024d Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/icons/training.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/icons/update.png b/pos_kitchen_screen_odoo/static/description/assets/icons/update.png new file mode 100644 index 000000000..ecbc5a01a Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/icons/update.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/icons/user.png b/pos_kitchen_screen_odoo/static/description/assets/icons/user.png new file mode 100644 index 000000000..6ffb23d9f Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/icons/user.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/icons/wrench.png b/pos_kitchen_screen_odoo/static/description/assets/icons/wrench.png new file mode 100644 index 000000000..6c04dea0f Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/icons/wrench.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/misc/categories.png b/pos_kitchen_screen_odoo/static/description/assets/misc/categories.png new file mode 100644 index 000000000..bedf1e0b1 Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/misc/categories.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/misc/check-box.png b/pos_kitchen_screen_odoo/static/description/assets/misc/check-box.png new file mode 100644 index 000000000..42caf24b9 Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/misc/check-box.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/misc/compass.png b/pos_kitchen_screen_odoo/static/description/assets/misc/compass.png new file mode 100644 index 000000000..d5fed8faa Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/misc/compass.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/misc/corporate.png b/pos_kitchen_screen_odoo/static/description/assets/misc/corporate.png new file mode 100644 index 000000000..2eb13edbf Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/misc/corporate.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/misc/customer-support.png b/pos_kitchen_screen_odoo/static/description/assets/misc/customer-support.png new file mode 100644 index 000000000..79efc72ed Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/misc/customer-support.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/misc/cybrosys-logo.png b/pos_kitchen_screen_odoo/static/description/assets/misc/cybrosys-logo.png new file mode 100644 index 000000000..cc3cc0ccf Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/misc/cybrosys-logo.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/misc/features.png b/pos_kitchen_screen_odoo/static/description/assets/misc/features.png new file mode 100644 index 000000000..b41769f77 Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/misc/features.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/misc/logo.png b/pos_kitchen_screen_odoo/static/description/assets/misc/logo.png new file mode 100644 index 000000000..478462d3e Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/misc/logo.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/misc/pictures.png b/pos_kitchen_screen_odoo/static/description/assets/misc/pictures.png new file mode 100644 index 000000000..56d255fe9 Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/misc/pictures.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/misc/pie-chart.png b/pos_kitchen_screen_odoo/static/description/assets/misc/pie-chart.png new file mode 100644 index 000000000..426e05244 Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/misc/pie-chart.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/misc/right-arrow.png b/pos_kitchen_screen_odoo/static/description/assets/misc/right-arrow.png new file mode 100644 index 000000000..730984a06 Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/misc/right-arrow.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/misc/star.png b/pos_kitchen_screen_odoo/static/description/assets/misc/star.png new file mode 100644 index 000000000..2eb9ab29f Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/misc/star.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/misc/support.png b/pos_kitchen_screen_odoo/static/description/assets/misc/support.png new file mode 100644 index 000000000..4f18b8b82 Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/misc/support.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/misc/whatsapp.png b/pos_kitchen_screen_odoo/static/description/assets/misc/whatsapp.png new file mode 100644 index 000000000..d513a5356 Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/misc/whatsapp.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/modules/1.jpg b/pos_kitchen_screen_odoo/static/description/assets/modules/1.jpg new file mode 100644 index 000000000..e7985dc61 Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/modules/1.jpg differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/modules/2.png b/pos_kitchen_screen_odoo/static/description/assets/modules/2.png new file mode 100644 index 000000000..5c8646fae Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/modules/2.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/modules/3.png b/pos_kitchen_screen_odoo/static/description/assets/modules/3.png new file mode 100644 index 000000000..6a0795416 Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/modules/3.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/modules/4.png b/pos_kitchen_screen_odoo/static/description/assets/modules/4.png new file mode 100644 index 000000000..f640cfa3a Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/modules/4.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/modules/5.gif b/pos_kitchen_screen_odoo/static/description/assets/modules/5.gif new file mode 100644 index 000000000..8f40aab85 Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/modules/5.gif differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/modules/5.png b/pos_kitchen_screen_odoo/static/description/assets/modules/5.png new file mode 100755 index 000000000..ebbbfb663 Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/modules/5.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/modules/6.png b/pos_kitchen_screen_odoo/static/description/assets/modules/6.png new file mode 100644 index 000000000..f7be9edcf Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/modules/6.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/screenshots/Ready.png b/pos_kitchen_screen_odoo/static/description/assets/screenshots/Ready.png new file mode 100644 index 000000000..df8e34337 Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/screenshots/Ready.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/screenshots/access.png b/pos_kitchen_screen_odoo/static/description/assets/screenshots/access.png new file mode 100644 index 000000000..eb6312944 Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/screenshots/access.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/screenshots/completed.png b/pos_kitchen_screen_odoo/static/description/assets/screenshots/completed.png new file mode 100644 index 000000000..514b28fa7 Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/screenshots/completed.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/screenshots/cooking.png b/pos_kitchen_screen_odoo/static/description/assets/screenshots/cooking.png new file mode 100644 index 000000000..87f6eea2e Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/screenshots/cooking.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/screenshots/cooking2.png b/pos_kitchen_screen_odoo/static/description/assets/screenshots/cooking2.png new file mode 100644 index 000000000..d1662ae72 Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/screenshots/cooking2.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/screenshots/cybrosys-logo.png b/pos_kitchen_screen_odoo/static/description/assets/screenshots/cybrosys-logo.png new file mode 100644 index 000000000..cc3cc0ccf Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/screenshots/cybrosys-logo.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/screenshots/hero.gif b/pos_kitchen_screen_odoo/static/description/assets/screenshots/hero.gif new file mode 100644 index 000000000..06a51ec7a Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/screenshots/hero.gif differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/screenshots/kitch.png b/pos_kitchen_screen_odoo/static/description/assets/screenshots/kitch.png new file mode 100644 index 000000000..61771cdf9 Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/screenshots/kitch.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/screenshots/pos session.png b/pos_kitchen_screen_odoo/static/description/assets/screenshots/pos session.png new file mode 100644 index 000000000..6864e0a6e Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/screenshots/pos session.png differ diff --git a/pos_kitchen_screen_odoo/static/description/assets/screenshots/session.png b/pos_kitchen_screen_odoo/static/description/assets/screenshots/session.png new file mode 100644 index 000000000..fa47c4c58 Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/assets/screenshots/session.png differ diff --git a/pos_kitchen_screen_odoo/static/description/banner.jpg b/pos_kitchen_screen_odoo/static/description/banner.jpg new file mode 100644 index 000000000..dfc49054d Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/banner.jpg differ diff --git a/pos_kitchen_screen_odoo/static/description/icon.png b/pos_kitchen_screen_odoo/static/description/icon.png new file mode 100644 index 000000000..c4aaeb7a4 Binary files /dev/null and b/pos_kitchen_screen_odoo/static/description/icon.png differ diff --git a/pos_kitchen_screen_odoo/static/description/index.html b/pos_kitchen_screen_odoo/static/description/index.html new file mode 100755 index 000000000..5478358c0 --- /dev/null +++ b/pos_kitchen_screen_odoo/static/description/index.html @@ -0,0 +1,704 @@ +
+
+
+
+ +
+
+
+ Community +
+
+ Enterprise +
+
+ Odoo.sh +
+ +
+
+
+
+ +
+
+
+

+ Pos Kitchen Screen

+

+ Pos Kitchen Screen Is A Module Designed For Restaurants And Other Food-related + Businesses . +

+ +
+
+ + + +
+
+

+ Overview +

+
+ +
+

+ The POS Kitchen Screen is a feature in Odoo 15 that is + specifically designed for restaurants and other food-related + businesses. With this feature, restaurant staff can easily view + and manage orders in real-time, directly from the kitchen. This + allows kitchen staff to efficiently prioritize and fulfill + orders, reducing wait times for customers and improving overall + service. + One of the main advantages of the POS Kitchen Screen is that it + provides a clear and organized display of all active orders, + making it easy for kitchen staff to see what needs to be done + next. This can be particularly helpful during busy periods when + orders are coming in quickly. Additionally, the POS Kitchen + Screen can be customized to display the information that is most + important to each individual staff member, further improving + efficiency and reducing the likelihood of errors. + The POS Kitchen Screen is a valuable tool for any restaurant or + food-related business that wants to streamline their operations + and improve their customer service. +

+
+
+ + +
+
+

+ Features +

+
+ +
+
+ +
+
+

+ POS Kitchen Screen facilitates sending certain orders + automatically to the kitchen.

+
+
+ +
+
+ +
+
+

+ The POS Kitchen Screen in Odoo 15 is a feature that + allows restaurant staff to view and manage orders in + real-time from the kitchen.

+
+
+
+
+ +
+
+

+ Communication between front-end and back-end staff, + enabling them to work together seamlessly and provide a + better dining experience for customers.

+
+
+ +
+
+

+ Screenshots +

+
+
+

+ First set the access right here.

+

+

+ +
+ +
+

+ Create a kitchen screen.

+

+

+ +
+
+

+ Set the pos session and corresponding category for the + kitchen orders.

+ +
+ +
+

+ Cooking Stage.

+

+ After Creating the order in the pos session it will come + under the cooking stage. +

+ +
+ +
+

+ Ready Stage.

+

+ After Accepting the Order in the cooking stage it will come + under this stage. when the food was ready we can simply + click the done button and it will automatically goto the + Completed stage. +

+ +
+ +
+

+ Completed Stage.

+

+ All the Completed foods are shown here. +

+ +
+ +
+ +
+
+

Suggested Products

+
+ + +
+
+ + + +
+
+
+

Our Services

+
+
+ +
+
+ +
+
+ Odoo + Customization
+
+ +
+
+ +
+
+ Odoo + Implementation
+
+ +
+
+ +
+
+ Odoo + Support
+
+ + +
+
+ +
+
+ Hire + Odoo + Developer
+
+ +
+
+ +
+
+ Odoo + Integration
+
+ +
+
+ +
+
+ Odoo + Migration
+
+ + +
+
+ +
+
+ Odoo + Consultancy
+
+ +
+
+ +
+
+ Odoo + Implementation
+
+ +
+
+ +
+
+ Odoo + Licensing Consultancy
+
+
+
+ + + +
+
+
+

Our Industries

+
+
+ +
+
+ +
+ Trading +
+

+ Easily procure + and + sell your products

+
+
+ +
+
+ +
+ POS +
+

+ Easy + configuration + and convivial experience

+
+
+ +
+
+ +
+ Education +
+

+ A platform for + educational management

+
+
+ +
+
+ +
+ Manufacturing +
+

+ Plan, track and + schedule your operations

+
+
+ +
+
+ +
+ E-commerce & Website +
+

+ Mobile + friendly, + awe-inspiring product pages

+
+
+ +
+
+ +
+ Service Management +
+

+ Keep track of + services and invoice

+
+
+ +
+
+ +
+ Restaurant +
+

+ Run your bar or + restaurant methodically

+
+
+ +
+
+ +
+ Hotel Management +
+

+ An + all-inclusive + hotel management application

+
+
+ +
+
+ + + + + +
+
+
+

Need Help?

+
+
+
+ + +
+ +
+ + +
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+
+
+ + +
+
\ No newline at end of file diff --git a/pos_kitchen_screen_odoo/static/src/assets/icons/Vector (2).svg b/pos_kitchen_screen_odoo/static/src/assets/icons/Vector (2).svg new file mode 100644 index 000000000..fadeb1e60 --- /dev/null +++ b/pos_kitchen_screen_odoo/static/src/assets/icons/Vector (2).svg @@ -0,0 +1,3 @@ + + + diff --git a/pos_kitchen_screen_odoo/static/src/assets/icons/Vector (3).svg b/pos_kitchen_screen_odoo/static/src/assets/icons/Vector (3).svg new file mode 100644 index 000000000..51c9f895e --- /dev/null +++ b/pos_kitchen_screen_odoo/static/src/assets/icons/Vector (3).svg @@ -0,0 +1,3 @@ + + + diff --git a/pos_kitchen_screen_odoo/static/src/assets/icons/Vector-white.svg b/pos_kitchen_screen_odoo/static/src/assets/icons/Vector-white.svg new file mode 100644 index 000000000..7d019b6f8 --- /dev/null +++ b/pos_kitchen_screen_odoo/static/src/assets/icons/Vector-white.svg @@ -0,0 +1,3 @@ + + + diff --git a/pos_kitchen_screen_odoo/static/src/assets/icons/Vector5.svg b/pos_kitchen_screen_odoo/static/src/assets/icons/Vector5.svg new file mode 100644 index 000000000..35e4d22ac --- /dev/null +++ b/pos_kitchen_screen_odoo/static/src/assets/icons/Vector5.svg @@ -0,0 +1,3 @@ + + + diff --git a/pos_kitchen_screen_odoo/static/src/assets/icons/confirmation 2.svg b/pos_kitchen_screen_odoo/static/src/assets/icons/confirmation 2.svg new file mode 100644 index 000000000..3c45c67cf --- /dev/null +++ b/pos_kitchen_screen_odoo/static/src/assets/icons/confirmation 2.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/pos_kitchen_screen_odoo/static/src/assets/icons/cooking 3.svg b/pos_kitchen_screen_odoo/static/src/assets/icons/cooking 3.svg new file mode 100644 index 000000000..cea321902 --- /dev/null +++ b/pos_kitchen_screen_odoo/static/src/assets/icons/cooking 3.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/pos_kitchen_screen_odoo/static/src/css/dashboard.css b/pos_kitchen_screen_odoo/static/src/css/dashboard.css new file mode 100644 index 000000000..8ce4de1bc --- /dev/null +++ b/pos_kitchen_screen_odoo/static/src/css/dashboard.css @@ -0,0 +1,688 @@ +.kitchen{ + height: 100vh; + overflow: hidden; + } +.kitchen .body_wrapper { + --white-color: #ffff; + --black-color: #000000; + --body-bg:#F9F9F9; + --draft:#545454; + --cooking: #1D89AB; + --completed:#0d7411a3; + --bg-grey:#DEDEDE; + --bg-blue: #DAE7EB; +} +.kitchen .body_wrapper{ +position: relative; + font-family: "Inter", sans-serif !important; + color: var(--text-color); + background-color: var(--body-bg); + padding: 50px 100px; + overflow: scroll; + height: 100%; +} + +@media screen and (max-width: 768px) { + .kitchen .body_wrapper { + padding: 30px 15px; + } +} +.kitchen .accept_cancel,.card-bottom{ + padding: 15px 15px; + text-align: center; + display: flex; + justify-content: space-evenly; +} +.kitchen *:focus { + outline: 0 !important; +} + +.kitchen *:hover { + transition: 0.2s; +} + +.kitchen *:focus { + outline: 0 !important; + box-shadow: none !important; +} + +.kitchen *button:focus { + border: none; + outline: none; + box-shadow: none; +} + +.kitchen * { + list-style-type: none; + font-family: "Inter", sans-serif !important; + font-size: 18px; +} + +.kitchen *:focus, *:active { + outline: none !important; +} + +.kitchen.sr .load-hidden { + visibility: hidden; +} + +.kitchen *::selection { + color: #f3ebee; + background-color: black; +} + +.kitchen *a, +.kitchen a:visited { + color: #990000; + text-decoration: none; +} + + +.kitchen .affix { + top: 0; + width: 100%; + z-index: 9999 !important; +} + +.kitchen { + scroll-behavior: smooth !important; +} + + +.kitchen .custom_padding_top { + padding-top: 80px; +} + +.kitchen .custom_padding_bottom { + padding-bottom: 80px; +} + +.kitchen .main_heading { + font-size: 36px; + font-weight: 500; + color: var(--white-color); + padding-bottom: 20px; + text-align: center; + margin-bottom: 20px; +} + +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ +/* Document + ========================================================================== */ +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ +.kitchen { + line-height: 1.15; + /* 1 */ + -webkit-text-size-adjust: 100%; + /* 2 */ +} + +/* Sections + ========================================================================== */ +/** + * Remove the margin in all browsers. + */ + +/** + * Render the `main` element consistently in IE. + */ +.kitchen main { + display: block; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ +.kitchen h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ +.kitchen hr { + box-sizing: content-box; + /* 1 */ + height: 0; + /* 1 */ + overflow: visible; + /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ +.kitchen pre { + font-family: monospace, monospace; + /* 1 */ + font-size: 1em; + /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ +/** + * Remove the gray background on active links in IE 10. + */ +.kitchen a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ +.kitchen abbr[title] { + border-bottom: none; + /* 1 */ + text-decoration: underline; + /* 2 */ + text-decoration: underline dotted; + /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ +.kitchen b, +.kitchen strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ +.kitchen code, +.kitchen kbd, +.kitchen samp { + font-family: monospace, monospace; + /* 1 */ + font-size: 1em; + /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ +.kitchen small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ +.kitchen sub, +.kitchen sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +.kitchen sub { + bottom: -0.25em; +} + +.kitchen sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ +/** + * Remove the border on images inside links in IE 10. + */ +.kitchen img { + border-style: none; +} + +/* Forms + ========================================================================== */ +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ +.kitchen button, +input, +.kitchen optgroup, +.kitchen select, +.kitchen textarea { + font-family: inherit; + /* 1 */ + font-size: 100%; + /* 1 */ + line-height: 1.15; + /* 1 */ + margin: 0; + /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ +.kitchen button, +.kitchen input { + /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ +.kitchen button, +select { + /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ +.kitchen button, +.kitchen [type="button"], +.kitchen [type="reset"], +.kitchen [type="submit"] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ +.kitchen button::-moz-focus-inner, +.kitchen [type="button"]::-moz-focus-inner, +.kitchen [type="reset"]::-moz-focus-inner, +.kitchen [type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ +.kitchen button:-moz-focusring, +.kitchen [type="button"]:-moz-focusring, +.kitchen [type="reset"]:-moz-focusring, +.kitchen [type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ +.kitchen fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ +.kitchen legend { + box-sizing: border-box; + /* 1 */ + color: inherit; + /* 2 */ + display: table; + /* 1 */ + max-width: 100%; + /* 1 */ + padding: 0; + /* 3 */ + white-space: normal; + /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ +.kitchen progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ +.kitchen textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ +.kitchen [type="checkbox"], +.kitchen [type="radio"] { + box-sizing: border-box; + /* 1 */ + padding: 0; + /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ +.kitchen [type="number"]::-webkit-inner-spin-button, +.kitchen [type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ +.kitchen [type="search"] { + -webkit-appearance: textfield; + /* 1 */ + outline-offset: -2px; + /* 2 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ +.kitchen [type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ +.kitchen ::-webkit-file-upload-button { + -webkit-appearance: button; + /* 1 */ + font: inherit; + /* 2 */ +} + +/* Interactive + ========================================================================== */ +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ +.kitchen details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ +.kitchen summary { + display: list-item; +} + +/* Misc + ========================================================================== */ +/** + * Add the correct display in IE 10+. + */ +.kitchen template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ +.kitchen [hidden] { + display: none; +} + +.kitchen .btn { + border: none !important; + outline: 0 !important; + transition: 0.5s; +} + +.kitchen .btn-primary { + border-radius: 4px; + font-size: 14px; + + letter-spacing: normal; + text-decoration: none; + padding: 12px 25px; + position: relative; + font-weight:700; + color: var(--white-color) !important; + transition: all 0.3s; + background-color: var(--cooking) !important; + text-transform: uppercase; + border:1px solid !important; + border-color:var(--cooking) !important; +} + +.kitchen .btn-primary:hover { + color: var(--cooking) !important; + transition: all 0.3s; + background-color: transparent !important; + +} + + +.kitchen .btn-secondary { + border-radius: 4px; + font-size: 14px; + text-transform: uppercase; + border:1px solid !important; + border-color:var(--draft) !important; + letter-spacing: normal; + text-decoration: none; + padding: 12px 25px; + position: relative; + font-weight:700; + color: var(--white-color) !important; + transition: all 0.3s; + background-color: var(--draft) !important; + +} + +.kitchen .btn-secondary:hover { + color: var(--draft) !important; + transition: all 0.3s; + background-color: transparent !important; + +} + +.kitchen .btn-transparent { + padding: 0; + font-size: 12px; +} + +.kitchen .infiniarc_banner { + padding-top: 50px; + margin-bottom: 100px; +} + +.kitchen .infiniarc_banner .banner_bg { + background-image: url(./../assets/banner/banne_1.jpg); + background-repeat: no-repeat; + background-position: center; + background-size: cover; + height: 50vh; + position: relative; + border-radius: 10px; +} + +.kitchen .infiniarc_banner .banner_bg_1 { + background-image: url(./../assets/banner/banne_1.jpg); +} + +.kitchen .infiniarc_banner .banner_bg_2 { + background-image: url(./../assets/banner/banner_2.jpg); +} + +.kitchen .infiniarc_banner .banner_bg_3 { + background-image: url(./../assets/banner/banner_3.jpg); +} + +.kitchen .top_bar { + background-color: var(--white-color); + padding: 20px 15px 10px 25px; + box-shadow: 0px 2px 4px 1px rgba(0, 0, 0, 0.25); + border-radius: 5px; + margin-top: 20px; +} +.kitchen .fixed-top { + position: fixed; + top: 20px; + right: 0; + left: 0; + z-index: 1030; + margin: auto; + width: 69%; +} + +.kitchen .top_bar ul { + padding-left: 0; + display: flex; + flex-wrap: wrap; + width : 100%; + justify-content: space-evenly; +} + +.kitchen .top_bar ul li { + padding-right: 25px; +} + +.kitchen .top_bar ul li a { + display: flex; + align-items: center; + text-decoration: none; +} + +.kitchen .top_bar ul li a .icon { + background-color: var(--white-color); + padding: 6px 8px; + box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); +} + +.kitchen .top_bar ul li a .icon svg { + height: 30px !important; + display: block; +} + +.kitchen .top_bar ul li a span { + margin-left: 15px; + color: var(--draft); + font-size: 30px; + font-weight: 700; + padding-top: 5px; +} + +.kitchen .top_bar ul li a .cooking { + color: var(--cooking) !important; +} + +.kitchen .top_bar ul li a .completed { + color: var(--completed); +} + +.kitchen .screen_info .wrapper .card { + box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); + transition: box-shadow 0.3s ease-out, transform 0.3s ease-out, opacity 0.2s ease-out; + transform: translate(0px, 0px); + -webkit-transform: translate(0px, 0px); + -moz-transform: translate(0px, 0px); + transition: 0.5s; + margin-bottom: 40px; +} + +.kitchen .screen_info .wrapper .card:hover { + transform: translate(0, -4px); + -webkit-transform: translate(0, -4px); + -moz-transform: translate(0, -4px); + transition: 0.5s; + box-shadow: rgba(45, 45, 45, 0.05) 0px 2px 2px, rgba(49, 49, 49, 0.05) 0px 4px 4px, rgba(42, 42, 42, 0.05) 0px 8px 8px, rgba(32, 32, 32, 0.05) 0px 16px 16px, rgba(49, 49, 49, 0.05) 0px 32px 32px, rgba(35, 35, 35, 0.05) 0px 64px 64px; +} + +.kitchen .screen_info .wrapper .card .card-header { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + border: none; +} + +.kitchen .screen_info .wrapper .card .card-header .left { + display: flex; +} + +.kitchen .screen_info .wrapper .card .card-header .left .icon { + background-color: var(--white-color); + padding: 6px 8px; + box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); + height: 55px; + width: 45px; + border-radius: 5px; + margin-right: 10px; +} + +.kitchen .screen_info .wrapper .card .card-header .left .status h4 { + font-size: 26px; + color: var(--draft); + text-transform: capitalize; + font-weight: 700; + margin-bottom: 0; +} + +.kitchen .screen_info .wrapper .card .card-header .left .status .mt { + margin-top: -10px; + color: var(--draft); +} + +.kitchen .screen_info .wrapper .card .card-header .left .status .c_blue { + color: var(--cooking); +} + +.kitchen .screen_info .wrapper .card .card-header .left .status .c_white { + color: var(--white-color); +} +.kitchen .screen_info .wrapper .card .card-header .right { +padding-top:8px; +} +.kitchen .screen_info .wrapper .card .card-header .right span { + font-size: 18px; + font-weight: 700; +} + +.kitchen .screen_info .wrapper .card .bg_grey { + background-color: var(--bg-grey); +} + +.kitchen .screen_info .wrapper .card .bg_blue { + background-color: var(--bg-blue); + color: var(--cooking) !important; +} + +.kitchen .screen_info .wrapper .card .bg_green { + background-color: var(--completed); + color: var(--white-color); +} + +.kitchen .screen_info .wrapper .card .list-group .list-group-item { + font-size: 20px; + font-weight: 500; + color: var(--draft); + padding: 20px 30px; + text-align: start; + line-height: 30px; +} + +.kitchen .screen_info .wrapper .card .list-group .list-group-item span { + font-size: 20px; + font-weight: 700; + margin-right: 5px; +} diff --git a/pos_kitchen_screen_odoo/static/src/js/Receipt.js b/pos_kitchen_screen_odoo/static/src/js/Receipt.js new file mode 100644 index 000000000..ab7e3b2ee --- /dev/null +++ b/pos_kitchen_screen_odoo/static/src/js/Receipt.js @@ -0,0 +1,19 @@ +odoo.define('pos_kitchen_screen_odoo.ReceiptScreen', function(require) { + 'use strict'; + const ReceiptScreen = require('point_of_sale.ReceiptScreen'); + const Registries = require('point_of_sale.Registries'); + const KitchenReceipt = ReceiptScreen => + class extends ReceiptScreen { + //@Override the method to set the order count in the pos session + orderDone() { + this.currentOrder.finalize(); + const { name, props } = this.nextScreen; + this.showScreen(name, props); + if (this.env.pos.config.iface_customer_facing_display) { + this.env.pos.send_current_order_to_customer_facing_display(); + } + } + }; + Registries.Component.extend(ReceiptScreen, KitchenReceipt); + return ReceiptScreen; +}); diff --git a/pos_kitchen_screen_odoo/static/src/js/dashboard_action.js b/pos_kitchen_screen_odoo/static/src/js/dashboard_action.js new file mode 100644 index 000000000..52adccb7b --- /dev/null +++ b/pos_kitchen_screen_odoo/static/src/js/dashboard_action.js @@ -0,0 +1,146 @@ +odoo.define('pos_kitchen_screen_odoo.dashboard_action', function(require) { + "use strict"; + var AbstractAction = require('web.AbstractAction'); + var core = require('web.core'); + document.write( + unescape("%3Cscript src='https://cdn.jsdelivr.net/npm/chart.js' type='text/javascript'%3E%3C/script%3E")); + var QWeb = core.qweb; + var rpc = require('web.rpc'); + var ajax = require('web.ajax'); + //Extending abstract actions for the dashboard + var KitchenCustomDashBoard = AbstractAction.extend({ + template: 'KitchenCustomDashBoard', + events: { + 'click .cancel_order': 'cancel_order', + 'click .accept_order': 'accept_order', + 'click .accept_order_line': 'accept_order_line', + 'click .done_order': 'done_order', + 'click .ready_stage': 'ready_stage', + 'click .waiting_stage': 'waiting_stage', + 'click .draft_stage': 'draft_stage', + }, + //Set up the dashboard template and fetch the data every 2 seconds from the backend for the dashboard + init: function(parent, context) { + var self = this; + self._super(parent, context); + setInterval(function() { + self.fetch_data(); + }, 1000); + self.dashboards_templates = ['KitchenOrder']; + self.shop_id = context.context.default_lead_id; + }, + //Returning the fetched data + willStart: function() { + var self = this; + return $.when(ajax.loadLibs(this), this._super()).then(function() { + return self.fetch_data(); + }); }, + //Rendering the dashboard every 2 seconds + start: function() { + var self = this; + self.set("title", 'Dashboard'); + return self._super().then(function() { + self.render_dashboards(); + setInterval(function() { + self.render_dashboards(); + }, 1000); + }); + }, + //Used to render the dashboard + render_dashboards: function() { + var self = this; + _.each(self.dashboards_templates, function(template) { + self.$('.o_pj_dashboard').html(QWeb.render(self.dashboards_templates, { + widget: self + })); + }); + }, + // Fetch pos order details + fetch_data: function() { + var self = this; + var def1 = self._rpc({ + model: 'pos.order', + method: 'get_details', + args: [ + [], self.shop_id, [] + ], + }).then(function(result) { + self.total_room = result['orders']; + self.lines = result['order_lines']; + }); + return $.when(def1); + }, + // Cancel the order from the kitchen + cancel_order: function(e) { + var input_id = this.$("#" + e.target.id).val(); + rpc.query({ + model: 'pos.order', + method: 'order_progress_cancel', + args: [ + [], input_id + ] + }) + }, + // Accept the order from the kitchen + accept_order: function(e) { + var input_id = this.$("#" + e.target.id).val(); + ScrollReveal().reveal("#" + e.target.id, { + delay: 1000, + duration: 2000, + opacity: 0, + distance: "50%", + origin: "top", + reset: true, + interval: 600, + }); + rpc.query({ + model: 'pos.order', + method: 'order_progress_draft', + args: [ + [], input_id + ] + }) + }, + //Set the stage is ready to see the completed stage orders + ready_stage: function(e) { + var self = this; + self.stages = 'ready'; + }, + //Set the stage is waiting to see the ready stage orders + waiting_stage: function(e) { + var self = this; + self.stages = 'waiting'; + }, + //Set the stage is draft to see the cooking stage orders + draft_stage: function(e) { + var self = this; + self.stages = 'draft'; + }, + // Change the status of the order from the kitchen + done_order: function(e) { + var input_id = this.$("#" + e.target.id).val(); + rpc.query({ + model: 'pos.order', + method: 'order_progress_change', + args: [ + [], input_id + ] + }); + }, + + // Change the status of the product from the kitchen + accept_order_line: function(e) { + var input_id = this.$("#" + e.target.id).val(); + rpc.query({ + model: 'pos.order.line', + method: 'order_progress_change', + args: [ + [], input_id + ] + }) + }, + + }); + core.action_registry.add('kitchen_custom_dashboard_tags', KitchenCustomDashBoard); + return KitchenCustomDashBoard; +}); diff --git a/pos_kitchen_screen_odoo/static/src/js/pos_js.js b/pos_kitchen_screen_odoo/static/src/js/pos_js.js new file mode 100644 index 000000000..4b253e310 --- /dev/null +++ b/pos_kitchen_screen_odoo/static/src/js/pos_js.js @@ -0,0 +1,76 @@ +odoo.define('pos_kitchen_screen_odoo.SubmitOrderButtons', function(require) { + "use strict"; + var SubmitOrderButton = require('pos_restaurant.SubmitOrderButton'); + const ProductScreen = require('point_of_sale.ProductScreen'); + const Registries = require('point_of_sale.Registries'); + //Extending the SubmitOrderButton to change the condition of seeing the order button in the pos session and create orders + class SubmitOrderButtonButton extends SubmitOrderButton { + async _onClick() { + if (!this.clicked) { + try { + this.clicked = true; + const order = this.env.pos.get_order(); + var self = this; + var line = [] + for (const orders of this.currentOrder.get_orderlines()) { + line.push([0, 0, { + 'qty': orders.quantity, + 'price_unit': orders.price, + 'price_subtotal': orders.quantity * orders.price, + 'price_subtotal_incl': orders.quantity * orders.price, + 'discount': orders.discount, + 'product_id': orders.product.id, + 'tax_ids': [ + [6, false, []] + ], + 'id': 29, + 'pack_lot_ids': [], + 'full_product_name': orders.product.display_name, + 'note': orders.note, + 'name': 'newsx/0031', + 'is_cooking': true + }]) + } + var orders = [{ + 'pos_reference': this.currentOrder.name, + 'session_id': this.currentOrder.pos_session_id, + 'amount_total': 0, + 'amount_paid': 0, + 'amount_return': '0', + 'amount_tax': 2.18, + 'lines': line, + 'is_cooking': true, + 'order_status': 'draft', + 'company_id': this.env.pos.company.id, + 'pricelist_id': this.env.pos.pricelists[0].id, + 'order_time': new Date().toLocaleString() + }] + self.rpc({ + model: 'pos.order', + method: 'get_details', + args: [ + [], self.env.pos.config.id, orders + ], + }) + } finally { + this.clicked = false; + } + } + } + get currentOrder() { + return this.env.pos.get_order(); + } + get addedClasses() { + return {}; + } + } + SubmitOrderButtonButton.template = 'SubmitOrderButtons'; + ProductScreen.addControlButton({ + component: SubmitOrderButtonButton, + condition: function() { + return this.env.pos.config.module_pos_restaurant; + }, + }); + Registries.Component.add(SubmitOrderButtonButton); + return SubmitOrderButtonButton; +}); diff --git a/pos_kitchen_screen_odoo/static/src/js/product_screen.js b/pos_kitchen_screen_odoo/static/src/js/product_screen.js new file mode 100644 index 000000000..42439afbe --- /dev/null +++ b/pos_kitchen_screen_odoo/static/src/js/product_screen.js @@ -0,0 +1,48 @@ +/** @odoo-module **/ + +import ProductScreen from 'point_of_sale.ProductScreen'; +import Registries from 'point_of_sale.Registries'; +const rpc = require('web.rpc'); +const { Gui } = require('point_of_sale.Gui'); +var core = require('web.core'); +var _t = core._t; +//Extending the ProductScreen for adding validation for kitchen orders +export const KitchenProductScreen = (ProductScreen) => + class extends ProductScreen { + setup() { + super.setup(); + } + async _onClickPay() { + if (this.env.pos.get_order().orderlines.some(line => line.get_product().tracking !== 'none' && !line.has_valid_product_lot()) && (this.env.pos.picking_type.use_create_lots || this.env.pos.picking_type.use_existing_lots)) { + const { confirmed } = await this.showPopup('ConfirmPopup', { + title: this.env._t('Some Serial/Lot Numbers are missing'), + body: this.env._t('You are trying to sell products with serial/lot numbers, but some of them are not set.\nWould you like to proceed anyway?'), + confirmText: this.env._t('Yes'), + cancelText: this.env._t('No') + }); + if (confirmed) { + this.showScreen('PaymentScreen'); + } + } else { + var order_name=this.currentOrder.name + var self=this + rpc.query({ + model: 'pos.order', + method: 'check_order', + args: [[],order_name] + }).then(function(result){ + if (result==true){ + Gui.showPopup('ErrorPopup',{ + 'title': _t('Food is not ready'), + 'body': _t('Please Complete all the food first.'), + }); + } + else{ + self.showScreen('PaymentScreen'); + } + }); + + } + } + }; +Registries.Component.extend(ProductScreen, KitchenProductScreen); diff --git a/pos_kitchen_screen_odoo/static/src/scss/pos.scss b/pos_kitchen_screen_odoo/static/src/scss/pos.scss new file mode 100644 index 000000000..9a833e60e --- /dev/null +++ b/pos_kitchen_screen_odoo/static/src/scss/pos.scss @@ -0,0 +1,16 @@ +.order-list{ + font-size: 16px; + width: 100%; +} +.order-list th, +.order-list td { + padding: 12px; +} +exchange-list{ + font-size: 16px; + width: 100%; +} +.exchange-list th, +.exchange-list td { + padding: 10px; +} diff --git a/pos_kitchen_screen_odoo/static/src/xml/SubmitOrderButton.xml b/pos_kitchen_screen_odoo/static/src/xml/SubmitOrderButton.xml new file mode 100644 index 000000000..4e0e98b78 --- /dev/null +++ b/pos_kitchen_screen_odoo/static/src/xml/SubmitOrderButton.xml @@ -0,0 +1,11 @@ + + + + + + + Kitchen Order + + + diff --git a/pos_kitchen_screen_odoo/static/src/xml/dashboard_templates.xml b/pos_kitchen_screen_odoo/static/src/xml/dashboard_templates.xml new file mode 100644 index 000000000..9cd19c1cb --- /dev/null +++ b/pos_kitchen_screen_odoo/static/src/xml/dashboard_templates.xml @@ -0,0 +1,494 @@ + + + + +
+
+
+ + +
+
+
+
+ + + + + +
+
+
+
+
+ + + + + + + + + + + +
+
+

+ Completed +

+ + + + +
+
+
+ + + + +
+
+ + + + +
    + +
+
+ +
+ +
+
+
+
+
+
+
+
+
+ + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + +
+
+

+ Ready +

+ + + + +
+
+
+ + + + +
+
+ + + + + + + + +
    + + + + + + +
+
+
+
+
+
+ +
+
+
+
+
+ + +
+
+
+
+
+ + + +
+
+

+ Cooking +

+ + + + +
+
+
+ + + + +
+
+
    + + + + + + + +
+ +
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+ + + +
+
+

+ Cooking +

+ + + + +
+
+
+ + + + +
+
+
    + + + + + + + +
+ +
+ + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pos_kitchen_screen_odoo/views/kitchen_screen_views.xml b/pos_kitchen_screen_odoo/views/kitchen_screen_views.xml new file mode 100644 index 000000000..fc4d8be7a --- /dev/null +++ b/pos_kitchen_screen_odoo/views/kitchen_screen_views.xml @@ -0,0 +1,97 @@ + + + + + Dashboard + kitchen_custom_dashboard_tags + fullscreen + + + + Kitchen screen Main Action + ir.actions.act_window + kitchen.screen + tree,form + + + + kitchen.screen.view.form + kitchen.screen + +
+ +
+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+ Click Here to See the kitchen Orders +
+
+
+
+
+
+
+
+ + kitchen.screen.view.tree + kitchen.screen + + + + + + + + +
diff --git a/pos_kitchen_screen_odoo/views/pos_kitchen_screen_odoo_menus.xml b/pos_kitchen_screen_odoo/views/pos_kitchen_screen_odoo_menus.xml new file mode 100644 index 000000000..2fe4d0e43 --- /dev/null +++ b/pos_kitchen_screen_odoo/views/pos_kitchen_screen_odoo_menus.xml @@ -0,0 +1,14 @@ + + + + + + + diff --git a/pos_kitchen_screen_odoo/views/pos_order_views.xml b/pos_kitchen_screen_odoo/views/pos_order_views.xml new file mode 100644 index 000000000..87179dcb6 --- /dev/null +++ b/pos_kitchen_screen_odoo/views/pos_order_views.xml @@ -0,0 +1,14 @@ + + + + + pos.order.view.form.inherit.pos.kitchen.screen.odoo + pos.order + + + + + + + +