from odoo import models, fields, api, _ import logging _logger = logging.getLogger(__name__) class SaleOrderOnline(models.Model): _inherit = 'sale.order' pos_order_id = fields.Many2one( 'pos.order', string='POS Order', help='The POS order created from this website sale order' ) def _create_pos_order_for_kds(self, sale_order): """ Override from dine360_kds to also mark the POS order as an online order. This method is called by dine360_kds.website_sale_integration when a website sale order is confirmed. """ # Let the parent create the POS order super(SaleOrderOnline, self)._create_pos_order_for_kds(sale_order) # Now find the POS order that was just created and mark it # We look for the most recent POS order linked to this sale order's partner # with the note containing the sale order name PosOrder = self.env['pos.order'] pos_order = PosOrder.search([ ('note', 'like', sale_order.name), ], order='id desc', limit=1) if pos_order: pos_order.write({ 'is_online_order': True, 'online_order_status': 'pending', 'sale_order_id': sale_order.id, 'online_order_date': fields.Datetime.now(), }) # Link back to sale order sale_order.write({'pos_order_id': pos_order.id}) # Set all lines to a "hold" state - they will go to KDS only when cashier confirms for line in pos_order.lines: if line.product_id.is_kitchen_item: line.write({'preparation_status': 'waiting'}) # Send bus notification to POS if pos_order.config_id: channel = "online_orders_%s" % pos_order.config_id.id self.env['bus.bus']._sendone(channel, 'new_online_order', { 'order_id': pos_order.id, 'order_name': pos_order.pos_reference or pos_order.name, 'customer_name': sale_order.partner_id.name or 'Guest', 'amount_total': pos_order.amount_total, 'items_count': len(pos_order.lines), }) _logger.info( "Marked POS Order %s as online order from Sale Order %s", pos_order.name, sale_order.name )