diff --git a/addons/dine360_online_orders/__manifest__.py b/addons/dine360_online_orders/__manifest__.py index d8ab0ca..c26da6e 100644 --- a/addons/dine360_online_orders/__manifest__.py +++ b/addons/dine360_online_orders/__manifest__.py @@ -21,12 +21,6 @@ 'views/backend_online_orders.xml', ], 'assets': { - 'point_of_sale._assets_pos': [ - 'dine360_online_orders/static/src/css/online_orders.css', - 'dine360_online_orders/static/src/js/online_orders_screen.js', - 'dine360_online_orders/static/src/js/online_orders_navbar.js', - 'dine360_online_orders/static/src/xml/online_orders_screen.xml', - ], 'web.assets_frontend': [ 'dine360_online_orders/static/src/css/service_mode.css', 'dine360_online_orders/static/src/js/service_mode.js', diff --git a/addons/dine360_online_orders/models/pos_order.py b/addons/dine360_online_orders/models/pos_order.py index 1fffd6f..b539d25 100644 --- a/addons/dine360_online_orders/models/pos_order.py +++ b/addons/dine360_online_orders/models/pos_order.py @@ -13,7 +13,7 @@ class PosOrder(models.Model): help='Indicates this order came from the website shop' ) online_order_status = fields.Selection([ - ('pending', 'Pending'), + ('pending', 'Pending Kitchen'), ('confirmed', 'Confirmed'), ('rejected', 'Rejected'), ], string='Online Order Status', default='pending') diff --git a/addons/dine360_online_orders/models/sale_order.py b/addons/dine360_online_orders/models/sale_order.py index bc63b11..96c9be3 100644 --- a/addons/dine360_online_orders/models/sale_order.py +++ b/addons/dine360_online_orders/models/sale_order.py @@ -39,6 +39,60 @@ class SaleOrderOnline(models.Model): return False return res + online_order_status = fields.Selection([ + ('pending', 'Pending Kitchen'), + ('confirmed', 'Confirmed'), + ('rejected', 'Rejected'), + ], string='Online Order Status', compute='_compute_online_order_status', store=True) + + is_online_order_accepted_manually = fields.Boolean(string='Manually Accepted', default=False) + + @api.depends('pos_order_id.online_order_status', 'state', 'order_source', 'is_online_order_accepted_manually') + def _compute_online_order_status(self): + for order in self: + if order.pos_order_id: + order.online_order_status = order.pos_order_id.online_order_status + elif order.state == 'cancel': + order.online_order_status = 'rejected' + elif order.order_source == 'online' and order.state in ['draft', 'sent', 'sale']: + if order.is_online_order_accepted_manually: + order.online_order_status = 'confirmed' + else: + order.online_order_status = 'pending' + else: + order.online_order_status = False + + def action_accept_online_order(self): + for order in self: + if order.state in ['draft', 'sent']: + order.action_confirm() + + if not order.pos_order_id and order.state == 'sale': + try: + if hasattr(order, '_create_pos_order_for_kds'): + order._create_pos_order_for_kds(order) + except Exception as e: + _logger.error("Failed to create POS order during accept: %s", str(e)) + + if order.pos_order_id: + order.pos_order_id.action_confirm_online_order() + else: + order.is_online_order_accepted_manually = True + + order._compute_online_order_status() + return {'type': 'ir.actions.client', 'tag': 'reload'} + + def action_reject_online_order(self): + for order in self: + if order.state in ['draft', 'sent', 'sale']: + order._action_cancel() + + if order.pos_order_id: + order.pos_order_id.action_reject_online_order() + + order._compute_online_order_status() + return {'type': 'ir.actions.client', 'tag': 'reload'} + def _check_cart_is_ready_to_be_paid(self): try: return super(SaleOrderOnline, self)._check_cart_is_ready_to_be_paid() diff --git a/addons/dine360_online_orders/views/backend_online_orders.xml b/addons/dine360_online_orders/views/backend_online_orders.xml index 1a279b6..ce98e19 100644 --- a/addons/dine360_online_orders/views/backend_online_orders.xml +++ b/addons/dine360_online_orders/views/backend_online_orders.xml @@ -2,11 +2,47 @@ + + + sale.order.online.tree + sale.order + + + + + + + +