From 7956d96bcc1e342c09cb5fa2a64fede282d525a6 Mon Sep 17 00:00:00 2001 From: Alaguraj0361 Date: Sat, 14 Feb 2026 18:18:10 +0530 Subject: [PATCH] add Kitchen Display System (KDS) functionality with order line preparation status, time tracking, and real-time POS integration. --- .../static/src/css/home_menu.css | 2 +- addons/dine360_kds/models/pos_order_line.py | 33 +++++++++++++++++-- addons/dine360_kds/static/src/js/pos_kds.js | 8 +++-- 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/addons/dine360_dashboard/static/src/css/home_menu.css b/addons/dine360_dashboard/static/src/css/home_menu.css index ea4e56c..9593da0 100644 --- a/addons/dine360_dashboard/static/src/css/home_menu.css +++ b/addons/dine360_dashboard/static/src/css/home_menu.css @@ -2,7 +2,7 @@ body.o_home_dashboard, #wrapwrap.o_home_dashboard, .o_home_menu_background { - background: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), + background: linear-gradient(rgb(0 0 0 / 83%), rgb(0 0 0 / 83%)), url('/dine360_dashboard/static/src/img/dashboard_bg.png') no-repeat center center !important; background-size: cover !important; background-attachment: fixed !important; diff --git a/addons/dine360_kds/models/pos_order_line.py b/addons/dine360_kds/models/pos_order_line.py index 768f859..1dc6d94 100644 --- a/addons/dine360_kds/models/pos_order_line.py +++ b/addons/dine360_kds/models/pos_order_line.py @@ -82,10 +82,29 @@ class PosOrderLine(models.Model): def create(self, vals_list): """Override create to send notifications to KDS when new orders are added""" lines = super(PosOrderLine, self).create(vals_list) - # Send notification to KDS backend for real-time updates - lines._notify_kds() + # Send notification to KDS backend only for new items (waiting status) + waiting_lines = lines.filtered(lambda l: l.preparation_status == 'waiting') + if waiting_lines: + waiting_lines._notify_kds() return lines + def write(self, vals): + """Prevent resetting 'served' or 'ready' status back to 'waiting' during POS sync""" + if 'preparation_status' in vals and vals['preparation_status'] == 'waiting': + for line in self: + if line.preparation_status in ['served', 'ready', 'preparing']: + # Keep the current status if it's already being processed or served + actual_vals = vals.copy() + actual_vals['preparation_status'] = line.preparation_status + super(PosOrderLine, line).write(actual_vals) + + # Handle lines that are actually allowed to be updated to waiting + remaining_lines = self.filtered(lambda l: l.preparation_status not in ['served', 'ready', 'preparing']) + if remaining_lines: + return super(PosOrderLine, remaining_lines).write(vals) + return True + return super(PosOrderLine, self).write(vals) + def action_start_preparing(self): self.write({ 'preparation_status': 'preparing', @@ -105,3 +124,13 @@ class PosOrderLine(models.Model): 'preparation_status': 'served' }) self._notify_pos() + +class PosOrder(models.Model): + _inherit = 'pos.order' + + @api.model + def _prepare_order_line_vals(self, line, session_id=None): + res = super()._prepare_order_line_vals(line, session_id) + if 'preparation_status' in line: + res['preparation_status'] = line['preparation_status'] + return res diff --git a/addons/dine360_kds/static/src/js/pos_kds.js b/addons/dine360_kds/static/src/js/pos_kds.js index 1721fe0..cb103ca 100644 --- a/addons/dine360_kds/static/src/js/pos_kds.js +++ b/addons/dine360_kds/static/src/js/pos_kds.js @@ -13,9 +13,13 @@ console.log("[KDS] Imports successful"); // Patch Orderline model patch(Orderline.prototype, { - setup() { + setup(attr) { super.setup(...arguments); - this.preparation_status = this.preparation_status || 'waiting'; + if (attr && attr.preparation_status) { + this.preparation_status = attr.preparation_status; + } else if (!this.preparation_status) { + this.preparation_status = 'waiting'; + } }, init_from_JSON(json) {