diff options
| author | trisusilo48 <tri.susilo@altama.co.id> | 2025-02-24 11:26:24 +0700 |
|---|---|---|
| committer | trisusilo48 <tri.susilo@altama.co.id> | 2025-02-24 11:26:24 +0700 |
| commit | a9c4cd0c5ac694074f0e3a4359182a97f27f542e (patch) | |
| tree | 485d95a239ad63a219821e1bf3393f392288ec68 | |
| parent | f0d995cc220cefffe65ce308ee234528ddc0d6ed (diff) | |
webhook biteship
| -rw-r--r-- | indoteknik_api/controllers/api_v1/stock_picking.py | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/indoteknik_api/controllers/api_v1/stock_picking.py b/indoteknik_api/controllers/api_v1/stock_picking.py index 3e58417f..01269724 100644 --- a/indoteknik_api/controllers/api_v1/stock_picking.py +++ b/indoteknik_api/controllers/api_v1/stock_picking.py @@ -138,7 +138,40 @@ class StockPicking(controller.Controller): 'name': picking_data.name }) - @http.route(prefix + 'n', auth='public', methods=['PUT', 'OPTIONS'], csrf=False) + @http.route(prefix + 'webhook/biteship', type='json', auth='public', methods=['POST'], csrf=False) def udpate_status_from_bitehsip(self, **kw): - picking_code = int(kw.get('picking_code', 0)) + try: + data = request.jsonrequest # Ambil data JSON dari request + event = data.get('event') + + # Log Webhook ke Model Odoo + request.env['webhook.logs'].sudo().create({ + 'event': event, + 'order_id': data.get('order_id'), + 'courier_tracking_id': data.get('courier_tracking_id'), + 'courier_waybill_id': data.get('courier_waybill_id'), + 'status': data.get('status'), + 'order_price': data.get('price'), + 'cash_on_delivery_fee': data.get('cash_on_delivery_fee'), + 'proof_of_delivery_fee': data.get('proof_of_delivery_fee'), + 'shippment_fee': data.get('shippment_fee'), + }) + + # Handle Event Berdasarkan Jenisnya + if event == "order.status": + self.process_order_status(data) + elif event == "order.price": + self.process_order_price(data) + elif event == "order.waybill_id": + self.process_order_waybill(data) + + return {'success': True, 'message': f'Webhook {event} received'} + except Exception as e: + return {'success': False, 'message': str(e)} + + def process_order_status(self, data): + """Update status order di Odoo""" + order = request.env['sale.order'].sudo().search([('id', '=', data.get('order_id'))], limit=1) + if order: + order.write({'state': data.get('status')})
\ No newline at end of file |
