diff --git a/pos_kitchen_screen_odoo/__manifest__.py b/pos_kitchen_screen_odoo/__manifest__.py index c2016ede4..35909274d 100644 --- a/pos_kitchen_screen_odoo/__manifest__.py +++ b/pos_kitchen_screen_odoo/__manifest__.py @@ -23,7 +23,10 @@ 'name': 'POS Kitchen Screen', 'version': '17.0.1.0.0', 'category': 'Point Of Sale', - 'summary': 'Kitchen Screen, POS Kitchen, Odoo Kitchen Screen, POS Screen, Customer Screen, Odoo Apps, Odoo17, POS Dashboard, Kitchen', + 'summary': 'POS Kitchen Screen facilitates sending certain orders ' + 'automatically to the kitchen.The POS Kitchen Screen 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 17 is a feature that ' 'allows restaurant staff to view and manage orders in ' 'real-time from the kitchen. This screen provides a clear ' @@ -51,9 +54,8 @@ ], 'assets': { 'point_of_sale._assets_pos': [ - 'pos_kitchen_screen_odoo/static/src/js/fields_load.js', - 'pos_kitchen_screen_odoo/static/src/js/order_payment.js', 'pos_kitchen_screen_odoo/static/src/js/order_button.js', + 'pos_kitchen_screen_odoo/static/src/js/order_payment.js', ], 'web.assets_backend': [ 'pos_kitchen_screen_odoo/static/src/css/kitchen_screen.css', diff --git a/pos_kitchen_screen_odoo/models/pos_orders.py b/pos_kitchen_screen_odoo/models/pos_orders.py index 6d1c27a10..b11633420 100644 --- a/pos_kitchen_screen_odoo/models/pos_orders.py +++ b/pos_kitchen_screen_odoo/models/pos_orders.py @@ -31,6 +31,7 @@ class PosOrder(models.Model): ("waiting", "Cooking"), ("ready", "Ready"), ("cancel", "Cancel")], + default='draft', help='To know the status of order') order_ref = fields.Char(string="Order Reference", help='Reference of the order') @@ -59,6 +60,27 @@ class PosOrder(models.Model): vals["name"] = self._compute_order_name() return super(PosOrder, self).write(vals) + # @api.model_create_multi + # def create(self, vals_list): + # """Override create function with notification (replace 'your_model.name' with your actual model name)""" + # + # # 1. Notification on creation + # message = { + # 'res_model': self._name, + # 'message': 'pos_order_created' + # } + # self.env["bus.bus"]._sendone('pos_order_created', "notification", + # message) + # + # for vals in vals_list: + # for order in self: + # if order.name == '/': + # vals['name'] = self._compute_order_name() + # session = self.env['pos.session'].browse(vals['session_id']) + # vals = self._complete_values_from_session(session, vals) + # + # return super().create(vals_list) + @api.model_create_multi def create(self, vals_list): """Override create function for the validation of the order""" @@ -66,6 +88,7 @@ class PosOrder(models.Model): 'res_model': self._name, 'message': 'pos_order_created' } + self.env["bus.bus"]._sendone('pos_order_created', "notification", message) @@ -107,7 +130,7 @@ class PosOrder(models.Model): kitchen_screen = self.env["kitchen.screen"].sudo().search( [("pos_config_id", "=", shop_id)]) pos_orders = self.env["pos.order.line"].search( - ["&", ("is_cooking", "=", True), + [("is_cooking", "=", True), ("product_id.pos_categ_ids", "in", [rec.id for rec in kitchen_screen.pos_categ_ids])]) pos = self.env["pos.order"].search( @@ -245,3 +268,37 @@ class PosOrderLine(models.Model): self.order_status = 'waiting' else: self.order_status = 'ready' + + @api.model_create_multi + def create(self, vals_list): + """Override create function for the validation of the order""" + message = { + 'res_model': self._name, + 'message': 'pos_order_created' + } + self.env["bus.bus"]._sendone('pos_order_created', + "notification", + message) + for vals in vals_list: + pos_orders = self.search( + [("order_id", "=", vals["order_id"])]) + 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 + return super().create(vals_list) + + else: + if vals.get('order_id') and not vals.get('name'): + # set name based on the sequence specified on the config + config = self.env['pos.order'].browse( + vals['order_id']).session_id.config_id + if config.sequence_line_id: + vals['name'] = config.sequence_line_id._next() + if not vals.get('name'): + # fallback on any pos.order sequence + vals['name'] = self.env['ir.sequence'].next_by_code( + 'pos.order.line') + return super().create(vals_list) diff --git a/pos_kitchen_screen_odoo/static/src/js/fields_load.js b/pos_kitchen_screen_odoo/static/src/js/fields_load.js deleted file mode 100644 index 812fa06f9..000000000 --- a/pos_kitchen_screen_odoo/static/src/js/fields_load.js +++ /dev/null @@ -1,20 +0,0 @@ -/** @odoo-module */ - -import { patch } from "@web/core/utils/patch"; -import { PosStore } from "@point_of_sale/app/store/pos_store"; - -patch(PosStore.prototype, { - /** - * Processes loaded data for the Point of Sale store. - * - * @param {Object} loadedData - The data loaded for the Point of Sale. - * @returns {Promise} A promise that resolves when the data is processed. - */ - async _processData(loadedData) { - await super._processData(...arguments); - this.pos_orders = loadedData['pos.order']; - this.pos_order_lines = loadedData['pos.order.line']; - }, -}); - - diff --git a/pos_kitchen_screen_odoo/static/src/js/kitchen_screen.js b/pos_kitchen_screen_odoo/static/src/js/kitchen_screen.js index 22162cfb2..7a17aebe9 100644 --- a/pos_kitchen_screen_odoo/static/src/js/kitchen_screen.js +++ b/pos_kitchen_screen_odoo/static/src/js/kitchen_screen.js @@ -1,17 +1,18 @@ /** @odoo-module */ import { registry } from "@web/core/registry"; -const { Component, useState } = owl; +const { Component, onWillStart, onWillUnmount, useState, onMounted } = owl; import { useService } from "@web/core/utils/hooks"; class kitchen_screen_dashboard extends Component { setup() { + super.setup(); this.busService = this.env.services.bus_service; this.busService.addChannel("pos_order_created"); - this.busService.addEventListener('notification', this.onPosOrderCreation.bind(this)); - + onWillStart(() => { + this.busService.addEventListener('notification', this.onPosOrderCreation.bind(this));}) this.action = useService("action"); this.rpc = this.env.services.rpc; this.action = useService("action"); @@ -45,6 +46,7 @@ class kitchen_screen_dashboard extends Component { self.state.waiting_count=self.state.order_details.filter((order) => order.order_status=='waiting' && order.config_id[0]==self.state.shop_id).length self.state.ready_count=self.state.order_details.filter((order) => order.order_status=='ready' && order.config_id[0]==self.state.shop_id).length }); + } //Calling the onPosOrderCreation when an order is created or edited on the backend and return the notification diff --git a/pos_kitchen_screen_odoo/static/src/js/order_button.js b/pos_kitchen_screen_odoo/static/src/js/order_button.js index f01a3d3c7..93f403a07 100644 --- a/pos_kitchen_screen_odoo/static/src/js/order_button.js +++ b/pos_kitchen_screen_odoo/static/src/js/order_button.js @@ -33,18 +33,16 @@ setup() { async submitOrder() { var line = [] var self = this; - - if (!this.clicked) { this.clicked = true; try { - var order_name=this.pos.selectedOrder.uid + var order_name=this.currentOrder.name await this.orm.call("pos.order", "check_order_status", ["", order_name]).then(function(result){ if (result==false){ self.kitchen_order_status=false self.popup.add(ErrorPopup, { title: _t("Order is Completed"), - body: _t("There Order is Completed please create a new Order"), + body: _t("This Order is Completed please create a new Order"), }); } else{ @@ -74,7 +72,7 @@ setup() { }]) } var orders = [{ - 'pos_reference': this.pos.get_order().uid, + 'pos_reference': this.pos.get_order().name, 'session_id':1, 'amount_total': 0, 'amount_paid': 0, diff --git a/pos_kitchen_screen_odoo/static/src/js/order_payment.js b/pos_kitchen_screen_odoo/static/src/js/order_payment.js index bd8063857..5f39179d9 100644 --- a/pos_kitchen_screen_odoo/static/src/js/order_payment.js +++ b/pos_kitchen_screen_odoo/static/src/js/order_payment.js @@ -22,7 +22,7 @@ patch(Order.prototype, { * Override of the pay method to handle payment logic. */ async pay() { - var order_name = this.pos.selectedOrder.uid; + var order_name = this.pos.selectedOrder.name; var self = this; await this.orm.call("pos.order", "check_order", ["", order_name]).then(function (result) { if (result.category) {