39 lines
1.6 KiB
Python
39 lines
1.6 KiB
Python
from odoo import models, fields, api
|
|
import logging
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
class PosOrderLine(models.Model):
|
|
_inherit = 'pos.order.line'
|
|
|
|
def action_mark_ready(self):
|
|
"""Override to check if we should request Uber delivery when items are ready"""
|
|
res = super(PosOrderLine, self).action_mark_ready()
|
|
self._check_and_trigger_uber_dispatch()
|
|
return res
|
|
|
|
def action_mark_served(self):
|
|
"""Override to check if we should request Uber delivery when items are served"""
|
|
res = super(PosOrderLine, self).action_mark_served()
|
|
self._check_and_trigger_uber_dispatch()
|
|
return res
|
|
|
|
def write(self, vals):
|
|
res = super(PosOrderLine, self).write(vals)
|
|
if 'preparation_status' in vals and vals['preparation_status'] in ['ready', 'served']:
|
|
self._check_and_trigger_uber_dispatch()
|
|
return res
|
|
|
|
def _check_and_trigger_uber_dispatch(self):
|
|
"""Helper to trigger Uber Direct dispatch if order is eligible and ready"""
|
|
orders = self.mapped('order_id')
|
|
for order in orders:
|
|
is_uber = (order.delivery_type == 'uber') or (getattr(order, 'fulfilment_type', False) == 'delivery' and order.is_uber_order)
|
|
if is_uber and not order.uber_delivery_id:
|
|
if order._check_all_lines_ready():
|
|
try:
|
|
order.action_request_uber_delivery()
|
|
except Exception as e:
|
|
_logger.error("Auto Uber Dispatch failed on KDS Ready for %s: %s", order.name, str(e))
|
|
|