forked from alaguraj/odoo-testing-addons
33 lines
1.2 KiB
Python
33 lines
1.2 KiB
Python
from odoo import http
|
|
from odoo.http import request
|
|
import json
|
|
import logging
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
class UberWebhookController(http.Controller):
|
|
|
|
@http.route('/uber/webhook/delivery', type='json', auth='none', methods=['POST'], csrf=False)
|
|
def uber_delivery_webhook(self, **post):
|
|
"""Handle status updates from Uber Direct"""
|
|
data = json.loads(request.httprequest.data)
|
|
_logger.info("Uber Webhook Received: %s", json.dumps(data, indent=2))
|
|
|
|
uber_delivery_id = data.get('delivery_id')
|
|
status = data.get('status') # e.g., 'picked_up', 'delivered'
|
|
|
|
if uber_delivery_id:
|
|
order = request.env['pos.order'].sudo().search([('uber_delivery_id', '=', uber_delivery_id)], limit=1)
|
|
if order:
|
|
# Map Uber status to Odoo status
|
|
status_map = {
|
|
'pickup': 'pickup',
|
|
'pickup_completed': 'delivering',
|
|
'dropoff_completed': 'delivered',
|
|
'cancelled': 'cancelled'
|
|
}
|
|
order.uber_status = status_map.get(status, order.uber_status)
|
|
return {'status': 'success'}
|
|
|
|
return {'status': 'ignored'}
|