summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indoteknik_api/controllers/api_v1/stock_picking.py48
1 files changed, 30 insertions, 18 deletions
diff --git a/indoteknik_api/controllers/api_v1/stock_picking.py b/indoteknik_api/controllers/api_v1/stock_picking.py
index 7a0579e3..58d181e8 100644
--- a/indoteknik_api/controllers/api_v1/stock_picking.py
+++ b/indoteknik_api/controllers/api_v1/stock_picking.py
@@ -125,29 +125,31 @@ class StockPicking(controller.Controller):
@http.route(prefix + 'stock-picking/<scanid>/documentation', auth='public', methods=['PUT', 'OPTIONS'], csrf=False)
@controller.Controller.must_authorized()
def write_partner_stock_picking_documentation(self, scanid, **kw):
- sj_document = kw.get('sj_document', False)
- paket_document = kw.get('paket_document', False)
+ sj_document = kw.get('sj_document', False)
+ paket_document = kw.get('paket_document', False)
dispatch_document = kw.get('dispatch_document', False)
- driver_id = [12433, 25]
- dispatch_id = [6303, 11846, 25]
- uid = request.env.user.id
- is_dispatch_user = uid in dispatch_id
+ # ===== Role by EMAIL =====
+ driver_emails = {
+ 'driverindoteknik@gmail.com',
+ 'sulistianaridwan8@gmail.com',
+ }
+ dispatch_emails = {
+ 'rahmat.afiudin@gmail.com',
+ }
- if not sj_document or not paket_document:
- return self.response(code=400, description='sj_document dan paket_document wajib')
+ login = (request.env.user.login or '').lower()
+ is_dispatch_user = login in dispatch_emails
+ is_driver_user = (login in driver_emails) and not is_dispatch_user
- if is_dispatch_user and not dispatch_document:
- return self.response(code=400, description='dispatch_document wajib untuk role dispatch')
+ # ===== Validasi minimal =====
+ if not sj_document or not paket_document:
+ return self.response(code=400, description='dispatch_document wajib untuk role dispatch login= %s' % login)
- params = {
- 'sj_documentation': sj_document,
- 'paket_documentation': paket_document,
- 'driver_arrival_date': datetime.utcnow(),
- }
- if dispatch_document and dispatch_id:
- params['dispatch_documentation'] = dispatch_document
+ if is_dispatch_user and not dispatch_document and not is_driver_user:
+ return self.response(code=400, description='dispatch_document wajib untuk role dispatch login= %s' % login)
+ # ===== Cari picking by id / picking_code =====
picking_data = False
if scanid.isdigit() and int(scanid) < 2147483646:
picking_data = request.env['stock.picking'].search([('id', '=', int(scanid))], limit=0)
@@ -158,10 +160,20 @@ class StockPicking(controller.Controller):
if not picking_data:
return self.response(code=403, description='picking not found')
+ # ===== Build params & write =====
+ params = {
+ 'sj_documentation': sj_document,
+ 'paket_documentation': paket_document,
+ 'driver_arrival_date': datetime.utcnow(),
+ }
+ if dispatch_document:
+ params['dispatch_documentation'] = dispatch_document
+
picking_data.write(params)
return self.response({'name': picking_data.name})
@http.route(prefix + 'webhook/biteship', type='json', auth='public', methods=['POST'], csrf=False)
+
def update_status_from_biteship(self, **kw):
_logger.info("Biteship Webhook: Request received at controller start (type='json').")
@@ -169,7 +181,7 @@ class StockPicking(controller.Controller):
# Karena type='json', Odoo secara otomatis akan mem-parsing JSON untuk Anda.
# 'data' akan berisi dictionary Python dari payload JSON Biteship.
data = request.jsonrequest
-
+
# Log ini akan menunjukkan payload yang diterima (sudah dalam bentuk dict)
_logger.info(f"Biteship Webhook: Parsed JSON data from request.jsonrequest: {json.dumps(data)}")