Browse Source

Jun 9 [ADD] : Initial Commit 'pos_kitchen_screen_odoo'

pull/257/head
AjmalCybro 2 years ago
parent
commit
c1fc1519ca
  1. 44
      pos_kitchen_screen_odoo/README.rst
  2. 22
      pos_kitchen_screen_odoo/__init__.py
  3. 82
      pos_kitchen_screen_odoo/__manifest__.py
  4. 15
      pos_kitchen_screen_odoo/data/kitchen_screen_sequence_data.xml
  5. 6
      pos_kitchen_screen_odoo/doc/RELEASE_NOTES.md
  6. 24
      pos_kitchen_screen_odoo/models/__init__.py
  7. 67
      pos_kitchen_screen_odoo/models/kitchen_screen.py
  8. 197
      pos_kitchen_screen_odoo/models/pos_orders.py
  9. 61
      pos_kitchen_screen_odoo/models/pos_session.py
  10. 2
      pos_kitchen_screen_odoo/security/ir.model.access.csv
  11. 15
      pos_kitchen_screen_odoo/security/pos_kitchen_screen_groups.xml
  12. BIN
      pos_kitchen_screen_odoo/static/description/assets/icons/check.png
  13. BIN
      pos_kitchen_screen_odoo/static/description/assets/icons/chevron.png
  14. BIN
      pos_kitchen_screen_odoo/static/description/assets/icons/cogs.png
  15. BIN
      pos_kitchen_screen_odoo/static/description/assets/icons/consultation.png
  16. BIN
      pos_kitchen_screen_odoo/static/description/assets/icons/ecom-black.png
  17. BIN
      pos_kitchen_screen_odoo/static/description/assets/icons/education-black.png
  18. BIN
      pos_kitchen_screen_odoo/static/description/assets/icons/hotel-black.png
  19. BIN
      pos_kitchen_screen_odoo/static/description/assets/icons/license.png
  20. BIN
      pos_kitchen_screen_odoo/static/description/assets/icons/lifebuoy.png
  21. BIN
      pos_kitchen_screen_odoo/static/description/assets/icons/manufacturing-black.png
  22. BIN
      pos_kitchen_screen_odoo/static/description/assets/icons/pos-black.png
  23. BIN
      pos_kitchen_screen_odoo/static/description/assets/icons/puzzle.png
  24. BIN
      pos_kitchen_screen_odoo/static/description/assets/icons/restaurant-black.png
  25. BIN
      pos_kitchen_screen_odoo/static/description/assets/icons/service-black.png
  26. BIN
      pos_kitchen_screen_odoo/static/description/assets/icons/trading-black.png
  27. BIN
      pos_kitchen_screen_odoo/static/description/assets/icons/training.png
  28. BIN
      pos_kitchen_screen_odoo/static/description/assets/icons/update.png
  29. BIN
      pos_kitchen_screen_odoo/static/description/assets/icons/user.png
  30. BIN
      pos_kitchen_screen_odoo/static/description/assets/icons/wrench.png
  31. BIN
      pos_kitchen_screen_odoo/static/description/assets/misc/categories.png
  32. BIN
      pos_kitchen_screen_odoo/static/description/assets/misc/check-box.png
  33. BIN
      pos_kitchen_screen_odoo/static/description/assets/misc/compass.png
  34. BIN
      pos_kitchen_screen_odoo/static/description/assets/misc/corporate.png
  35. BIN
      pos_kitchen_screen_odoo/static/description/assets/misc/customer-support.png
  36. BIN
      pos_kitchen_screen_odoo/static/description/assets/misc/cybrosys-logo.png
  37. BIN
      pos_kitchen_screen_odoo/static/description/assets/misc/features.png
  38. BIN
      pos_kitchen_screen_odoo/static/description/assets/misc/logo.png
  39. BIN
      pos_kitchen_screen_odoo/static/description/assets/misc/pictures.png
  40. BIN
      pos_kitchen_screen_odoo/static/description/assets/misc/pie-chart.png
  41. BIN
      pos_kitchen_screen_odoo/static/description/assets/misc/right-arrow.png
  42. BIN
      pos_kitchen_screen_odoo/static/description/assets/misc/star.png
  43. BIN
      pos_kitchen_screen_odoo/static/description/assets/misc/support.png
  44. BIN
      pos_kitchen_screen_odoo/static/description/assets/misc/whatsapp.png
  45. BIN
      pos_kitchen_screen_odoo/static/description/assets/modules/1.png
  46. BIN
      pos_kitchen_screen_odoo/static/description/assets/modules/2.png
  47. BIN
      pos_kitchen_screen_odoo/static/description/assets/modules/3.png
  48. BIN
      pos_kitchen_screen_odoo/static/description/assets/modules/4.png
  49. BIN
      pos_kitchen_screen_odoo/static/description/assets/modules/5.gif
  50. BIN
      pos_kitchen_screen_odoo/static/description/assets/modules/6.png
  51. BIN
      pos_kitchen_screen_odoo/static/description/assets/screenshots/Ready.png
  52. BIN
      pos_kitchen_screen_odoo/static/description/assets/screenshots/access.png
  53. BIN
      pos_kitchen_screen_odoo/static/description/assets/screenshots/completed.png
  54. BIN
      pos_kitchen_screen_odoo/static/description/assets/screenshots/cooking.png
  55. BIN
      pos_kitchen_screen_odoo/static/description/assets/screenshots/cooking2.png
  56. BIN
      pos_kitchen_screen_odoo/static/description/assets/screenshots/cybrosys-logo.png
  57. BIN
      pos_kitchen_screen_odoo/static/description/assets/screenshots/kitch.png
  58. BIN
      pos_kitchen_screen_odoo/static/description/assets/screenshots/pos session.png
  59. BIN
      pos_kitchen_screen_odoo/static/description/assets/screenshots/session.png
  60. BIN
      pos_kitchen_screen_odoo/static/description/banner.png
  61. BIN
      pos_kitchen_screen_odoo/static/description/icon.png
  62. 527
      pos_kitchen_screen_odoo/static/description/index.html
  63. 3
      pos_kitchen_screen_odoo/static/src/assets/icons/Vector (2).svg
  64. 3
      pos_kitchen_screen_odoo/static/src/assets/icons/Vector (3).svg
  65. 3
      pos_kitchen_screen_odoo/static/src/assets/icons/Vector-white.svg
  66. 3
      pos_kitchen_screen_odoo/static/src/assets/icons/Vector5.svg
  67. 11
      pos_kitchen_screen_odoo/static/src/assets/icons/confirmation 2.svg
  68. 18
      pos_kitchen_screen_odoo/static/src/assets/icons/cooking 3.svg
  69. 688
      pos_kitchen_screen_odoo/static/src/css/dashboard.css
  70. 21
      pos_kitchen_screen_odoo/static/src/js/Receipt.js
  71. 152
      pos_kitchen_screen_odoo/static/src/js/dashboard_action.js
  72. 15
      pos_kitchen_screen_odoo/static/src/js/fields_load.js
  73. 77
      pos_kitchen_screen_odoo/static/src/js/pos_js.js
  74. 48
      pos_kitchen_screen_odoo/static/src/js/product_screen.js
  75. 16
      pos_kitchen_screen_odoo/static/src/scss/pos.scss
  76. 11
      pos_kitchen_screen_odoo/static/src/xml/SubmitOrderButton.xml
  77. 473
      pos_kitchen_screen_odoo/static/src/xml/dashboard_templates.xml
  78. 96
      pos_kitchen_screen_odoo/views/kitchen_screen_views.xml
  79. 14
      pos_kitchen_screen_odoo/views/pos_kitchen_screen_odoo_menus.xml
  80. 14
      pos_kitchen_screen_odoo/views/pos_order_views.xml

44
pos_kitchen_screen_odoo/README.rst

@ -0,0 +1,44 @@
.. image:: https://img.shields.io/badge/licence-LGPL--3-blue.svg
:target: http://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 <https://cybrosys.com/>`__
License
-------
General Public License, Version 3 (LGPL v3).
(https://www.odoo.com/documentation/user/16.0/legal/licenses/licenses.html)
Credits
-------
Developer: Gokul P I @cybrosys, 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
pos_kitchen_screen_odoo/__init__.py

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Gokul P I (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from .import models

82
pos_kitchen_screen_odoo/__manifest__.py

@ -0,0 +1,82 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Gokul P I (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
{
'name': 'POS Kitchen Screen',
'description': 'The POS Kitchen Screen in Odoo 16 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 16 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.',
'summary': 'POS Kitchen Screen facilitates sending certain orders '
'automatically to the kitchen.The POS Kitchen Screen in '
'Odoo 16 also allows for the customization of order views, '
'so that staff can see the information that is most '
'important to them.',
'category': 'Point Of Sale',
'version': '16.0.1.0.0',
'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_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',
'pos_kitchen_screen_odoo/static/src/xml/SubmitOrderButton.xml',
],
'web.assets_backend': [
'pos_kitchen_screen_odoo/static/src/css/dashboard.css',
'pos_kitchen_screen_odoo/static/src/js/dashboard_action.js',
'pos_kitchen_screen_odoo/static/src/xml/dashboard_templates.xml',
'pos_kitchen_screen_odoo/static/src/js/fields_load.js',
'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'
],
},
'images': [
'static/description/banner.png',
],
'license': 'LGPL-3',
'installable': True,
'application': False,
'auto_install': False,
}

15
pos_kitchen_screen_odoo/data/kitchen_screen_sequence_data.xml

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<data noupdate="1">
<record id="kitchen_screen_sequence" model="ir.sequence">
<field name="name">Kitchen Screen</field>
<field name="code">kitchen.screen</field>
<field name="active">True</field>
<field name="prefix">KITCHEN</field>
<field name="padding">4</field>
<field name="number_next">1</field>
<field name="number_increment">1</field>
<field name="company_id" eval="False"/>
</record>
</data>
</odoo>

6
pos_kitchen_screen_odoo/doc/RELEASE_NOTES.md

@ -0,0 +1,6 @@
## Module <pos_kitchen_screen_odoo>
#### 02.05.2023
#### Version 16.0.1.0.0
#### ADD
- Initial commit for Pos Kitchen Screen

24
pos_kitchen_screen_odoo/models/__init__.py

@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Gokul P I (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from . import kitchen_screen
from . import pos_orders
from . import pos_session

67
pos_kitchen_screen_odoo/models/kitchen_screen.py

@ -0,0 +1,67 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Gokul P I (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import api, 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',
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")
def kitchen_screen(self):
"""Redirect to corresponding kitchen screen for the cook"""
return {
'type': 'ir.actions.act_url',
'target': 'new',
'url': '/pos/kitchen?pos_config_id= %s' % self.pos_config_id.id,
}
@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

197
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(<https://www.cybrosys.com>)
# Author: Gokul P I (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import api, fields, models
from odoo.exceptions import ValidationError
class PosOrder(models.Model):
"""Inheriting the pos order model """
_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')
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
else:
return False
class PosOrderLine(models.Model):
"""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'

61
pos_kitchen_screen_odoo/models/pos_session.py

@ -0,0 +1,61 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Gokul P I (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import models
class PosSession(models.Model):
"""Inheriting the pos session"""
_inherit = 'pos.session'
def _pos_ui_models_to_load(self):
"""Pos ui models to load"""
result = super()._pos_ui_models_to_load()
result += {
'pos.order', 'pos.order.line'
}
return result
def _loader_params_pos_order(self):
"""Load the fields to pos order"""
return {'search_params': {
'domain': [],
'fields': ['name', 'date_order', 'pos_reference',
'partner_id', 'lines', 'order_status', 'order_ref',
'is_cooking']}}
def _get_pos_ui_pos_order(self, params):
"""Get pos ui pos order"""
return self.env['pos.order'].search_read(
**params['search_params'])
def _loader_params_pos_order_line(self):
"""Load the fields to pos order line"""
return {'search_params': {'domain': [],
'fields': ['product_id', 'qty',
'order_status', 'order_ref',
'customer_id',
'price_subtotal', 'total_cost']}}
def _get_pos_ui_pos_order_line(self, params):
"""Get pos ui pos order line"""
return self.env['pos.order.line'].search_read(
**params['search_params'])

2
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,access.kitchen.screen,model_kitchen_screen,pos_kitchen_screen_odoo.kitchen_cook,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access.kitchen.screen access.kitchen.screen model_kitchen_screen pos_kitchen_screen_odoo.kitchen_cook 1 1 1 1

15
pos_kitchen_screen_odoo/security/pos_kitchen_screen_groups.xml

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Kitchen screen group for cook-->
<record model="ir.module.category" id="module_category_pos_kitchen_screen_odoo">
<field name="name">Pos Kitchen Screen</field>
<field name="description">Kitchen Access Groups</field>
<field name="sequence">20</field>
</record>
<record id="kitchen_cook" model="res.groups">
<field name="name">Kitchen Cook</field>
<field name="category_id"
ref="pos_kitchen_screen_odoo.module_category_pos_kitchen_screen_odoo"/>
</record>
</odoo>

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
pos_kitchen_screen_odoo/static/description/assets/misc/categories.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 967 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

BIN
pos_kitchen_screen_odoo/static/description/assets/modules/4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
pos_kitchen_screen_odoo/static/description/assets/modules/5.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

BIN
pos_kitchen_screen_odoo/static/description/assets/screenshots/Ready.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

BIN
pos_kitchen_screen_odoo/static/description/assets/screenshots/access.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

BIN
pos_kitchen_screen_odoo/static/description/assets/screenshots/completed.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

BIN
pos_kitchen_screen_odoo/static/description/assets/screenshots/cooking.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

BIN
pos_kitchen_screen_odoo/static/description/assets/screenshots/cooking2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

BIN
pos_kitchen_screen_odoo/static/description/assets/screenshots/cybrosys-logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

BIN
pos_kitchen_screen_odoo/static/description/assets/screenshots/kitch.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

BIN
pos_kitchen_screen_odoo/static/description/assets/screenshots/pos session.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 918 KiB

BIN
pos_kitchen_screen_odoo/static/description/assets/screenshots/session.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

BIN
pos_kitchen_screen_odoo/static/description/banner.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

BIN
pos_kitchen_screen_odoo/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

527
pos_kitchen_screen_odoo/static/description/index.html

@ -0,0 +1,527 @@
<div
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>
<!-- HERO -->
<div class="container">
<div class="row" style="padding: 4rem 2.5rem 0 !important; background-color: #fff !important;">
<div class="col-lg-12 d-flex flex-column align-items-center">
<h1 class="text-center text-uppercase"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bolder !important; font-size: 2.5rem !important; color: #212121;">
Pos Kitchen Screen
</h1>
<p class="my-1 text-center text-uppercase"
style="letter-spacing: 4px !important; color: #74788D !important;">Pos Kitchen Screen for Odoo 16</p>
</div>
<div class="col-lg-12 text-center mt-5">
</div>
<div class="container">
<p class="my-1 text-center"
style="font-family: Montserrat, 'sans-serif' !important; color: #212121 !important;">
First set the access right here
</p>
<div class="col-lg-12 d-flex justify-content-center align-items-center" style="margin: 2rem 0;">
<img src="./assets/screenshots/access.png" width="100%" height="auto" class="img-responsive">
</div>
<br/>
<br/>
<p class="my-1 text-center"
style="font-family: Montserrat, 'sans-serif' !important; color: #212121 !important;">
Create a kitchen screen
</p>
<div class="col-lg-12 d-flex justify-content-center align-items-center" style="margin: 2rem 0;">
<img src="./assets/screenshots/kitch.png" width="100%" height="auto" class="img-responsive">
</div>
<p class="my-1 text-center"
style="font-family: Montserrat, 'sans-serif' !important; color: #212121 !important;">
set the pos session and corresponding category for the kitchen order
</p>
<div class="col-lg-12 d-flex justify-content-center align-items-center" style="margin: 2rem 0;">
<img src="./assets/screenshots/session.png" width="100%" height="auto" class="img-responsive">
</div>
<br/>
<br/>
<br/>
<div class="col-lg-12 d-flex justify-content-center align-items-center" style="margin: 2rem 0;">
<img src="./assets/screenshots/pos session.png" width="100%" height="auto" class="img-responsive">
</div>
<p class="my-1 text-center"
style="font-family: Montserrat, 'sans-serif' !important; color: #212121 !important;">
We can just create the orders clicking the order button shown in the above image
</p>
<div class="col-lg-12 d-flex justify-content-center align-items-center" style="margin: 2rem 0;">
<img src="./assets/screenshots/Ready.png" width="100%" height="auto" class="img-responsive">
</div>
</div>
</div>
</div>
<!-- END OF HERO -->
<!-- OVERVIEW -->
<div class="container">
<div class="row" style="padding: 0rem 2.5rem !important; background-color: #fff !important;">
<div class="col-lg-12 d-flex flex-column justify-content-center">
<p class="my-1 text-center"
style="font-family: Montserrat, 'sans-serif' !important; color: #212121 !important;">
The POS Kitchen Screen is a feature in Odoo 16 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.
</p>
</div>
</div>
</div>
<!-- END OF OVERVIEW-->
<!-- FEATURE -->
<div class="container" style="margin-top: 3rem;">
<div class="row">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center">
<h2
style="font-weight: 300 !important; background-color: #fff !important; z-index: 1 !important; padding: 0 1rem !important;">
Features</h2>
</div>
</div>
<!-- END OF RESPONSIVE -->
<!-- FEATURE -->
<div class="container" style="margin-top: 3rem;">
<div class="row shadow"
style="margin: 2rem; padding: 0rem !important; background-color: #fff !important; border-top: 3px solid #556EE6 !important; min-width: 100% !important;">
<div class="col-lg-12" style="padding: 2.5rem 1.5rem!important;">
<h3 style="font-weight: 700 !important;">Cooking Stage</h3>
<h6
style="font-style: Montserrat, 'sans-serif' !important; color: #2A3042 !important; font-weight: 300 !important;">
After Creating the order in the pos session it will come under the cooking stage
</h6>
</div>
<div class="col-lg-12" style="padding-left: 0 !important; padding-right: 0!important;">
<img src="assets/screenshots/cooking.png" width="100%" height="auto" class="img-responsive">
</div>
</div>
</div>
<!-- END OF FEATURE -->
<!-- FEATURE -->
<div class="container" style="margin-top: 3rem;">
<div class="row shadow"
style="margin: 2rem; padding: 0rem !important; background-color: #fff !important; border-top: 3px solid #556EE6 !important; min-width: 100% !important;">
<div class="col-lg-12" style="padding: 2.5rem 1.5rem!important;">
<h3 style="font-weight: 700 !important;">Ready Stage</h3>
<h6
style="font-style: Montserrat, 'sans-serif' !important; color: #2A3042 !important; font-weight: 300 !important;">
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
</h6>
</div>
<div class="col-lg-12" style="padding-left: 0 !important; padding-right: 0!important;">
<img src="assets/screenshots/cooking2.png" width="100%" height="auto" class="img-responsive">
</div>
</div>
</div>
<!-- END OF FEATURE -->
<!-- FEATURE -->
<div class="container" style="margin-top: 3rem;">
<div class="row shadow"
style="margin: 2rem; padding: 0rem !important; background-color: #fff !important; border-top: 3px solid #556EE6 !important; min-width: 100% !important;">
<div class="col-lg-12" style="padding: 2.5rem 1.5rem!important;">
<h3 style="font-weight: 700 !important;">Completed Stage</h3>
<h6
style="font-style: Montserrat, 'sans-serif' !important; color: #2A3042 !important; font-weight: 300 !important;">
All the Completed foods are shown here
</h6>
</div>
<div class="col-lg-12" style="padding-left: 0 !important; padding-right: 0!important;">
<img src="assets/screenshots/completed.png" width="100%" height="auto" class="img-responsive">
</div>
</div>
</div>
<!-- END OF FEATURE -->
<!-- TWO COLUMN BLOCK -->
<div class="container" style="margin-top: 3rem;">
<div class="row" style="margin: 2rem; ; min-width: 100% !important;">
<div class="col-lg-8" style="padding: 1rem 1rem 1rem 0rem !important;">
</div>
<!-- SCREENSHOTS -->
</div>
<!-- END OF SCREENSHOTS -->
<!-- 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-sm-12">
<div id="demo1" class="row carousel slide" data-ride="carousel">
<!-- The slideshow -->
<div class="carousel-inner" style="padding: 30px;">
<div class="carousel-item" style="min-height: 198.656px;">
<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/dynamic_accounts_report/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;" 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/product_brand_purchase/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;" 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/sale_product_image/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;" src="assets/modules/3.png">
</div>
</a>
</div>
</div>
<div class="carousel-item active" style="min-height: 198.656px;">
<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/odoo_sale_order_line_views/#" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;" src="assets/modules/4.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/base_accounting_kit/#" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;" src="assets/modules/5.gif">
</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/hr_payroll_community/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;" src="assets/modules/6.png">
</div>
</a>
</div>
</div>
</div>
</div>
</div>
<!-- Left and right controls -->
<a class="carousel-control-prev" href="#demo1" data-slide="prev" style="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="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 -->
<section class="container" style="margin-top: 6rem !important;">
<div class="row">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mb-4">
<h2
style="font-weight: 300 !important; background-color: #fff !important; z-index: 1 !important; padding: 0 1rem !important;">
Our Services</h2>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/cogs.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Customization</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ff6b6b !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/wrench.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6462CD !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/lifebuoy.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Support</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/user.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Hire
Odoo
Developer</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #54a0ff !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/puzzle.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Integration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6d7680 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/update.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Migration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #786fa6 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/consultation.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Consultancy</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #f8a5c2 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/training.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #e6be26 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/license.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Licensing Consultancy</h6>
</div>
</div>
</section>
<!-- END OF END OF OUR SERVICES -->
<!-- OUR INDUSTRIES -->
<section class="container" style="margin-top: 6rem !important; background-color: #fff !important;">
<div class="row">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mb-4">
<h2
style="font-weight: 300 !important; background-color: #fff !important; z-index: 1 !important; padding: 0 1rem !important;">
Our Industries</h2>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/trading-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Trading
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">Easily
procure
and
sell your products</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/pos-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
POS
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">Easy
configuration
and convivial experience</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/education-black.png" class="img-responsive mb-3" height="48px"
width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Education
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">A
platform for
educational management</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/manufacturing-black.png" class="img-responsive mb-3" height="48px"
width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Manufacturing
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">Plan,
track and
schedule your operations</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/ecom-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
E-commerce &amp; Website
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">Mobile
friendly,
awe-inspiring product pages</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/service-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Service Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">Keep
track of
services and invoice</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/restaurant-black.png" class="img-responsive mb-3" height="48px"
width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Restaurant
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">Run
your bar or
restaurant methodically</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/hotel-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Hotel Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">An
all-inclusive
hotel management application</p>
</div>
</div>
</div>
</section>
<!-- END OF OUR INDUSTRIES -->
<!-- FOOTER -->
<!-- Footer Section -->
<section class="container" style="margin: 5rem auto 2rem; background-color: #fff !important;">
<div class="row" style="max-width:1540px;">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mb-4">
<h2
style="font-weight: 300 !important; background-color: #fff !important; z-index: 1 !important; padding: 0 1rem !important;">
Need Help?</h2>
</div>
</div>
<!-- Contact Cards -->
<div class="row d-flex justify-content-center align-items-center"
style="max-width:1540px; margin: 0 auto 2rem auto;">
<div class="col-lg-12" style="padding: 0rem 3rem 2rem; border-radius: 10px; margin-right: 3rem; ">
<div class="row mt-4">
<div class="col-lg-4">
<a href="mailto:odoo@cybrosys.com" target="_blank" class="btn btn-block mb-2 deep_hover"
style="text-decoration: none; background-color: #4d4d4d; color: #FFF; border-radius: 4px;"><i
class="fa fa-envelope mr-2"></i>odoo@cybrosys.com</a>
</div>
<div class="col-lg-4">
<a href="https://api.whatsapp.com/send?phone=918606827707" target="_blank"
class="btn btn-block mb-2 deep_hover"
style="text-decoration: none; background-color: #25D366; color: #FFF; border-radius: 4px;">
<i class="fa fa-whatsapp mr-2"></i>WhatsApp</a>
</div>
<div class="col-lg-4">
<a href="mailto:info@cybrosys.com" target="_blank" class="btn btn-block deep_hover"
style="text-decoration: none; background-color: #4d4d4d; color: #FFF; border-radius: 4px;">
<i class="fa fa-envelope mr-2"></i>info@cybrosys.com</a>
</div>
</div>
</div>
</div>
<!-- End of Contact Cards -->
</section>
<!-- Footer -->
<section class="oe_container" style="padding: 2rem 3rem 1rem; background-color: #fff !important;">
<div class="row" style="max-width:1540px; margin: 0 auto; margin-right: 3rem; ">
<!-- Logo -->
<div class="col-lg-12 d-flex justify-content-center align-items-center" style="margin-top: 3rem;">
<img src="https://www.cybrosys.com/images/logo.png" width="200px" height="auto" />
</div>
<!-- End of Logo -->
</div>
</section>
<!-- END OF FOOTER -->
</div>
</div>

3
pos_kitchen_screen_odoo/static/src/assets/icons/Vector (2).svg

@ -0,0 +1,3 @@
<svg width="10" height="12" viewBox="0 0 10 12" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M9.18821 3.16036L6.73523 0.648239C6.43604 0.349181 6.01726 0.169742 5.53864 0.169742H2.00871C1.11127 0.109927 0.333496 0.887493 0.333496 1.78468V10.1584C0.333496 11.0556 1.05145 11.8332 2.00871 11.8332H7.99161C8.88907 11.8332 9.66683 11.1154 9.66683 10.1584V4.2968C9.66683 3.87811 9.48734 3.45943 9.18821 3.16036ZM3.20529 4.89494H5.00016C5.2395 4.89494 5.47879 5.07437 5.47879 5.37345C5.47879 5.67246 5.2993 5.8519 5.00016 5.8519H3.20529C2.96597 5.8519 2.72666 5.67246 2.72666 5.37345C2.72666 5.07437 2.96597 4.89494 3.20529 4.89494ZM6.79502 8.24444H3.20529C2.96597 8.24444 2.72666 8.06501 2.72666 7.76593C2.72666 7.46686 2.90615 7.28742 3.20529 7.28742H6.79502C7.03436 7.28742 7.27365 7.46686 7.27365 7.76593C7.27365 8.06501 7.03436 8.24444 6.79502 8.24444Z" fill="#545454"/>
</svg>

After

Width:  |  Height:  |  Size: 889 B

3
pos_kitchen_screen_odoo/static/src/assets/icons/Vector (3).svg

@ -0,0 +1,3 @@
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M9 0.000732422C4.02996 0.000732422 0 4.0299 0 9.00034C0 13.9708 4.02956 17.9999 9 17.9999C13.9708 17.9999 18 13.9708 18 9.00034C18 4.0299 13.9708 0.000732422 9 0.000732422ZM9 2.69172C10.6446 2.69172 11.9772 4.02476 11.9772 5.66853C11.9772 7.31269 10.6446 8.64533 9 8.64533C7.35623 8.64533 6.02359 7.31269 6.02359 5.66853C6.02359 4.02476 7.35623 2.69172 9 2.69172ZM8.99802 15.647C7.35781 15.647 5.85557 15.0496 4.69687 14.0609C4.41461 13.8202 4.25173 13.4671 4.25173 13.0967C4.25173 11.4296 5.60098 10.0954 7.26847 10.0954H10.7323C12.4002 10.0954 13.7443 11.4296 13.7443 13.0967C13.7443 13.4675 13.5822 13.8198 13.2996 14.0605C12.1413 15.0496 10.6386 15.647 8.99802 15.647Z" fill="#1D89AB"/>
</svg>

After

Width:  |  Height:  |  Size: 803 B

3
pos_kitchen_screen_odoo/static/src/assets/icons/Vector-white.svg

@ -0,0 +1,3 @@
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M9 0.000732422C4.02996 0.000732422 0 4.0299 0 9.00034C0 13.9708 4.02956 17.9999 9 17.9999C13.9708 17.9999 18 13.9708 18 9.00034C18 4.0299 13.9708 0.000732422 9 0.000732422ZM9 2.69172C10.6446 2.69172 11.9772 4.02476 11.9772 5.66853C11.9772 7.31269 10.6446 8.64533 9 8.64533C7.35623 8.64533 6.02359 7.31269 6.02359 5.66853C6.02359 4.02476 7.35623 2.69172 9 2.69172ZM8.99802 15.647C7.35781 15.647 5.85557 15.0496 4.69687 14.0609C4.41461 13.8202 4.25173 13.4671 4.25173 13.0967C4.25173 11.4296 5.60098 10.0954 7.26847 10.0954H10.7323C12.4002 10.0954 13.7443 11.4296 13.7443 13.0967C13.7443 13.4675 13.5822 13.8198 13.2996 14.0605C12.1413 15.0496 10.6386 15.647 8.99802 15.647Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 801 B

3
pos_kitchen_screen_odoo/static/src/assets/icons/Vector5.svg

@ -0,0 +1,3 @@
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M9 0.000732422C4.02996 0.000732422 0 4.0299 0 9.00034C0 13.9708 4.02956 17.9999 9 17.9999C13.9708 17.9999 18 13.9708 18 9.00034C18 4.0299 13.9708 0.000732422 9 0.000732422ZM9 2.69172C10.6446 2.69172 11.9772 4.02476 11.9772 5.66853C11.9772 7.31269 10.6446 8.64533 9 8.64533C7.35623 8.64533 6.02359 7.31269 6.02359 5.66853C6.02359 4.02476 7.35623 2.69172 9 2.69172ZM8.99802 15.647C7.35781 15.647 5.85557 15.0496 4.69687 14.0609C4.41461 13.8202 4.25173 13.4671 4.25173 13.0967C4.25173 11.4296 5.60098 10.0954 7.26847 10.0954H10.7323C12.4002 10.0954 13.7443 11.4296 13.7443 13.0967C13.7443 13.4675 13.5822 13.8198 13.2996 14.0605C12.1413 15.0496 10.6386 15.647 8.99802 15.647Z" fill="#545454"/>
</svg>

After

Width:  |  Height:  |  Size: 803 B

11
pos_kitchen_screen_odoo/static/src/assets/icons/confirmation 2.svg

@ -0,0 +1,11 @@
<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_50_195)">
<path d="M8.60344 4.39644C8.40844 4.20119 8.09144 4.20119 7.89644 4.39644L5.74994 6.54269L4.85344 5.64644C4.65844 5.45119 4.34144 5.45119 4.14644 5.64644C3.95119 5.84169 3.95119 6.15819 4.14644 6.35344L5.39644 7.60344C5.49394 7.70119 5.62194 7.74994 5.74994 7.74994C5.87794 7.74994 6.00594 7.70119 6.10344 7.60344L8.60344 5.10344C8.79869 4.90819 8.79869 4.59169 8.60344 4.39644Z" fill="#008E06"/>
<path d="M11.5 5.5C11.224 5.5 11 5.724 11 6C11 8.757 8.757 11 6 11C3.243 11 1 8.757 1 6C1 3.243 3.243 1 6 1C7.34225 1 8.60225 1.5245 9.54825 2.477C9.7425 2.67325 10.0592 2.67425 10.2552 2.4795C10.4513 2.285 10.4522 1.9685 10.2577 1.7725C9.12275 0.6295 7.6105 0 6 0C2.6915 0 0 2.6915 0 6C0 9.3085 2.6915 12 6 12C9.3085 12 12 9.3085 12 6C12 5.724 11.776 5.5 11.5 5.5Z" fill="#008E06"/>
</g>
<defs>
<clipPath id="clip0_50_195">
<rect width="12" height="12" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

18
pos_kitchen_screen_odoo/static/src/assets/icons/cooking 3.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.9 KiB

688
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;
}

21
pos_kitchen_screen_odoo/static/src/js/Receipt.js

@ -0,0 +1,21 @@
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.env.pos.removeOrder(this.currentOrder);
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;
});

152
pos_kitchen_screen_odoo/static/src/js/dashboard_action.js

@ -0,0 +1,152 @@
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"));
const {
loadBundle
} = require("@web/core/assets");
var QWeb = core.qweb;
var rpc = require('web.rpc');
//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;
this._super(parent, context);
setInterval(function() {
self.fetch_data();
}, 1000);
this.dashboards_templates = ['KitchenOrder'];
this.shop_id = context.context.default_lead_id;
},
//returning the fetched data
willStart: function() {
var self = this;
return Promise.all([loadBundle(this), this._super()]).then(function() {
return self.fetch_data();
});
},
//rendering the dashboard every 2 seconds
start: function() {
var self = this;
this.set("title", 'Dashboard');
return this._super().then(function() {
self.render_dashboards();
setInterval(function() {
self.render_dashboards();
}, 1000);
});
},
//Used to render the dashboard
render_dashboards: function() {
var self = this;
console.log('render_dashboards',self)
_.each(this.dashboards_templates, function(template) {
self.$('.o_pj_dashboard').html(QWeb.render(template, {
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;
});

15
pos_kitchen_screen_odoo/static/src/js/fields_load.js

@ -0,0 +1,15 @@
odoo.define('pos_kitchen_screen_odoo.models', function (require) {
"use strict";
var { PosGlobalState, Order} = require('point_of_sale.models');
const Registries = require('point_of_sale.Registries');
const PosSessionOrdersPosGlobalState = (PosGlobalState) => class PosSessionOrdersPosGlobalState extends PosGlobalState {
//load the PosOrders and pos order lines
async _processData(loadedData) {
await super._processData(...arguments);
this.pos_orders = loadedData['pos.order'];
this.pos_order_lines = loadedData['pos.order.line'];
}
}
Registries.Model.extend(PosGlobalState, PosSessionOrdersPosGlobalState);
});

77
pos_kitchen_screen_odoo/static/src/js/pos_js.js

@ -0,0 +1,77 @@
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.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,
'price_extra': orders.price_extra,
'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
}]
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;
});

48
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.env.pos.selectedOrder.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);

16
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;
}

11
pos_kitchen_screen_odoo/static/src/xml/SubmitOrderButton.xml

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--Template for the order button in the pos session-->
<templates id="template" xml:space="preserve">
<t t-name="SubmitOrderButtons" owl="1">
<span class="control-button" t-att-class="addedClasses"
t-on-click="_onClick">
<i class="fa fa-cutlery"/>
<span style="color:green">Kitchen Order</span>
</span>
</t>
</templates>

473
pos_kitchen_screen_odoo/static/src/xml/dashboard_templates.xml

File diff suppressed because one or more lines are too long

96
pos_kitchen_screen_odoo/views/kitchen_screen_views.xml

@ -0,0 +1,96 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!--Kitchen screen dashboard for cook -->
<record id="kitchen_custom_dashboard_action" model="ir.actions.client">
<field name="name">Dashboard</field>
<field name="tag">kitchen_custom_dashboard_tags</field>
<field name="target">fullscreen</field>
</record>
<!--Kitchen screen action-->
<record id="kitchen_screen_action" model="ir.actions.act_window">
<field name="name">Kitchen screen Main Action</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">kitchen.screen</field>
<field name="view_mode">tree,form</field>
</record>
<!-- Kitchen screen Form & Tree view -->
<record id="kitchen_screen_view_form" model="ir.ui.view">
<field name="name">kitchen.screen.view.form</field>
<field name="model">kitchen.screen</field>
<field name="arch" type="xml">
<form class="kitchen_form_view">
<sheet>
<div class="row mt16 o_settings_container"
name="auto_approval">
<div class="col-12 col-lg-6 o_setting_box"
id="pos_config_id">
<div class="o_setting_left_pane">
</div>
<div class="o_setting_right_pane">
<label for="pos_config_id"/>
<div class="text-muted">
<div>
<field name="pos_config_id"/>
</div>
This will be the Allowed POS for this pos
Kitchen
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box"
id="pos_categ_ids">
<div class="o_setting_left_pane">
</div>
<div class="o_setting_right_pane">
<label for="pos_categ_ids"/>
<div class="text-muted">
<div>
<field name="pos_categ_ids"
widget="many2many_tags"/>
</div>
This will be the Allowed POS category for
this pos Kitchen
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box"
id="kitchen_screen">
<div class="o_setting_left_pane">
</div>
<div class="o_setting_right_pane">
<div class="text-muted">
<div>
<field name="shop_number" invisible="1"/>
<button name="%(kitchen_custom_dashboard_action)d"
type="action"
context="{'default_lead_id': shop_number}"
string="Kitchen Screen"
target="new"
class="btn-primary kitchen_screen1"
help="Got To the Kitchen Screen"/>
<br/>
<br/>
</div>
Click Here to See the kitchen Orders
</div>
</div>
</div>
</div>
</sheet>
</form>
</field>
</record>
<record id="kitchen_screen_view_tree" model="ir.ui.view">
<field name="name">kitchen.screen.view.tree</field>
<field name="model">kitchen.screen</field>
<field name="arch" type="xml">
<tree>
<field name="sequence"/>
<field name="pos_config_id"/>
<field name="pos_categ_ids"/>
</tree>
</field>
</record>
</odoo>

14
pos_kitchen_screen_odoo/views/pos_kitchen_screen_odoo_menus.xml

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!--Kitchen screen menu item -->
<menuitem id="pos_kitchen_screen_menu_root"
name="Pos kitchen screen"
parent="point_of_sale.menu_point_root"
sequence="10"/>
<menuitem id="pos_kitchen_screen_menu_action"
name="Pos kitchen screen"
parent="pos_kitchen_screen_menu_root"
action="kitchen_screen_action"
sequence="10"/>
</odoo>

14
pos_kitchen_screen_odoo/views/pos_order_views.xml

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<!-- Pos order Form view inheriting and xpath a field -->
<record id="pos_order_view_form" model="ir.ui.view">
<field name="name">pos.order.view.form.inherit.pos.kitchen.screen.odoo</field>
<field name="model">pos.order</field>
<field name="inherit_id" ref="point_of_sale.view_pos_pos_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='partner_id']" position="after">
<field name="is_cooking" invisible="1"/>
</xpath>
</field>
</record>
</odoo>
Loading…
Cancel
Save