diff options
| -rw-r--r-- | indoteknik_api/controllers/api_v1/stock_picking.py | 48 |
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)}") |
