From e19f7637f648fb37fc9049ce7898dfc22568bf63 Mon Sep 17 00:00:00 2001 From: Miqdad Date: Wed, 22 Oct 2025 09:42:13 +0700 Subject: fix driver arrival date api for indoteknik delivery --- indoteknik_api/controllers/api_v1/stock_picking.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'indoteknik_api/controllers/api_v1/stock_picking.py') diff --git a/indoteknik_api/controllers/api_v1/stock_picking.py b/indoteknik_api/controllers/api_v1/stock_picking.py index 2ec1ec2a..9affb492 100644 --- a/indoteknik_api/controllers/api_v1/stock_picking.py +++ b/indoteknik_api/controllers/api_v1/stock_picking.py @@ -1,5 +1,7 @@ +from adodbapi.apibase import DateTime + from .. import controller -from odoo import http +from odoo import http, fields from odoo.http import request, Response from pytz import timezone from datetime import datetime @@ -140,19 +142,19 @@ class StockPicking(controller.Controller): if not picking_data: return self.response(code=403, description='picking not found') - params = { - 'driver_arrival_date': datetime.utcnow(), - } + params = {} if sj_document: params['sj_documentation'] = sj_document if paket_document: params['paket_documentation'] = paket_document + params['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').") -- cgit v1.2.3 From 6e746afb7fcd7a3762dc7beb27ac3f77a21c7a98 Mon Sep 17 00:00:00 2001 From: Miqdad Date: Wed, 22 Oct 2025 13:51:30 +0700 Subject: fix --- indoteknik_api/controllers/api_v1/stock_picking.py | 2 -- 1 file changed, 2 deletions(-) (limited to 'indoteknik_api/controllers/api_v1/stock_picking.py') diff --git a/indoteknik_api/controllers/api_v1/stock_picking.py b/indoteknik_api/controllers/api_v1/stock_picking.py index 9affb492..310554c2 100644 --- a/indoteknik_api/controllers/api_v1/stock_picking.py +++ b/indoteknik_api/controllers/api_v1/stock_picking.py @@ -1,5 +1,3 @@ -from adodbapi.apibase import DateTime - from .. import controller from odoo import http, fields from odoo.http import request, Response -- cgit v1.2.3 From e65db92c25f8e54773cd1113736005f20799ea2b Mon Sep 17 00:00:00 2001 From: Miqdad Date: Wed, 22 Oct 2025 13:51:45 +0700 Subject: fix --- indoteknik_api/controllers/api_v1/stock_picking.py | 1 - 1 file changed, 1 deletion(-) (limited to 'indoteknik_api/controllers/api_v1/stock_picking.py') diff --git a/indoteknik_api/controllers/api_v1/stock_picking.py b/indoteknik_api/controllers/api_v1/stock_picking.py index 310554c2..20a48886 100644 --- a/indoteknik_api/controllers/api_v1/stock_picking.py +++ b/indoteknik_api/controllers/api_v1/stock_picking.py @@ -8,7 +8,6 @@ import logging _logger = logging.getLogger(__name__) -_logger = logging.getLogger(__name__) class StockPicking(controller.Controller): prefix = '/api/v1/' -- cgit v1.2.3 From 7c7519d2031a474901702fdd1c7921389eb44a15 Mon Sep 17 00:00:00 2001 From: Miqdad Date: Wed, 22 Oct 2025 16:10:38 +0700 Subject: get self pickup params from website --- indoteknik_api/controllers/api_v1/stock_picking.py | 3 +++ 1 file changed, 3 insertions(+) (limited to 'indoteknik_api/controllers/api_v1/stock_picking.py') diff --git a/indoteknik_api/controllers/api_v1/stock_picking.py b/indoteknik_api/controllers/api_v1/stock_picking.py index 20a48886..b7ff5690 100644 --- a/indoteknik_api/controllers/api_v1/stock_picking.py +++ b/indoteknik_api/controllers/api_v1/stock_picking.py @@ -127,6 +127,7 @@ class StockPicking(controller.Controller): sj_document = kw.get('sj_document') if 'sj_document' in kw else None paket_document = kw.get('paket_document') if 'paket_document' in kw else None dispatch_document = kw.get('dispatch_document') if 'dispatch_document' in kw else None + self_pu= kw.get('self_pu') if 'self_pu' in kw else None # ===== Cari picking by id / picking_code ===== picking_data = False @@ -142,6 +143,8 @@ class StockPicking(controller.Controller): params = {} if sj_document: params['sj_documentation'] = sj_document + if params['self_pu']: + params['driver_arrival_date'] = datetime.utcnow() if paket_document: params['paket_documentation'] = paket_document params['driver_arrival_date'] = datetime.utcnow() -- cgit v1.2.3 From 8d649f97dade329859b5770d1f3972cdd7233f97 Mon Sep 17 00:00:00 2001 From: Miqdad Date: Wed, 22 Oct 2025 16:22:17 +0700 Subject: get self pickup params from website --- indoteknik_api/controllers/api_v1/stock_picking.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indoteknik_api/controllers/api_v1/stock_picking.py') diff --git a/indoteknik_api/controllers/api_v1/stock_picking.py b/indoteknik_api/controllers/api_v1/stock_picking.py index b7ff5690..fe82e665 100644 --- a/indoteknik_api/controllers/api_v1/stock_picking.py +++ b/indoteknik_api/controllers/api_v1/stock_picking.py @@ -143,7 +143,7 @@ class StockPicking(controller.Controller): params = {} if sj_document: params['sj_documentation'] = sj_document - if params['self_pu']: + if self_pu: params['driver_arrival_date'] = datetime.utcnow() if paket_document: params['paket_documentation'] = paket_document -- cgit v1.2.3 From aad9e13e0a1908dc8d14d86dfc67bdf9f8e006e7 Mon Sep 17 00:00:00 2001 From: Miqdad Date: Thu, 6 Nov 2025 14:49:02 +0700 Subject: api --- indoteknik_api/controllers/api_v1/stock_picking.py | 86 ++++++++++++++++++---- 1 file changed, 72 insertions(+), 14 deletions(-) (limited to 'indoteknik_api/controllers/api_v1/stock_picking.py') diff --git a/indoteknik_api/controllers/api_v1/stock_picking.py b/indoteknik_api/controllers/api_v1/stock_picking.py index fe82e665..a03016c5 100644 --- a/indoteknik_api/controllers/api_v1/stock_picking.py +++ b/indoteknik_api/controllers/api_v1/stock_picking.py @@ -121,38 +121,96 @@ class StockPicking(controller.Controller): return self.response(picking.get_tracking_detail()) + from datetime import datetime + from odoo import http + from odoo.http import request + @http.route(prefix + 'stock-picking//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') if 'sj_document' in kw else None paket_document = kw.get('paket_document') if 'paket_document' in kw else None dispatch_document = kw.get('dispatch_document') if 'dispatch_document' in kw else None - self_pu= kw.get('self_pu') if 'self_pu' in kw else None + self_pu = kw.get('self_pu') if 'self_pu' in kw else None # ===== Cari picking by id / picking_code ===== - picking_data = False + picking = False if scanid.isdigit() and int(scanid) < 2147483646: - picking_data = request.env['stock.picking'].search([('id', '=', int(scanid))], limit=0) + picking = request.env['stock.picking'].search([('id', '=', int(scanid))], limit=0) + if not picking: + picking = request.env['stock.picking'].search([('picking_code', '=', scanid)], limit=0) + if not picking: + return self.response(code=403, description='picking not found') - if not picking_data: - picking_data = request.env['stock.picking'].search([('picking_code', '=', scanid)], limit=0) + # ===== Ambil MULTIPLE SJ dari form: sj_documentations=...&sj_documentations=... ===== + form = request.httprequest.form or {} + sj_list = form.getlist('sj_documentations') # list of base64 strings - if not picking_data: - return self.response(code=403, description='picking not found') + # fallback: kalau FE kirim single dengan nama yang sama (bukan list) + if not sj_list and 'sj_documentations' in kw and kw.get('sj_documentations'): + sj_list = [kw.get('sj_documentations')] + # ===== Tulis field lain yang dikirim (merge, bukan replace) ===== params = {} - if sj_document: - params['sj_documentation'] = sj_document - if self_pu: - params['driver_arrival_date'] = datetime.utcnow() if paket_document: params['paket_documentation'] = paket_document params['driver_arrival_date'] = datetime.utcnow() if dispatch_document: params['dispatch_documentation'] = dispatch_document + if sj_list and self_pu: + params['driver_arrival_date'] = datetime.utcnow() - picking_data.write(params) - return self.response({'name': picking_data.name}) + if params: + picking.write(params) + + # ===== Buat child rows utk SEMUA foto SJ ke One2many ===== + if sj_list: + Child = request.env['stock.picking.sj.document'].sudo() + # kasih urutan lanjut 10-10 + seq = (picking.sj_documentations[:1].sequence or 10) if picking.sj_documentations else 10 + for b64 in sj_list: + if not b64: + continue + Child.create({ + 'picking_id': picking.id, + 'sequence': seq, + 'image': b64, # base64 tanpa prefix + }) + seq += 10 + + return self.response({'name': picking.name}) + + # @http.route(prefix + 'stock-picking//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') if 'sj_document' in kw else None + # paket_document = kw.get('paket_document') if 'paket_document' in kw else None + # dispatch_document = kw.get('dispatch_document') if 'dispatch_document' in kw else None + # self_pu= kw.get('self_pu') if 'self_pu' in kw else None + # + # # ===== 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) + # + # if not picking_data: + # picking_data = request.env['stock.picking'].search([('picking_code', '=', scanid)], limit=0) + # + # if not picking_data: + # return self.response(code=403, description='picking not found') + # + # params = {} + # if sj_document: + # params['sj_documentation'] = sj_document + # if self_pu: + # params['driver_arrival_date'] = datetime.utcnow() + # if paket_document: + # params['paket_documentation'] = paket_document + # params['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) -- cgit v1.2.3 From 062c606f4c31ee0966a6c08f4f3de52d719df883 Mon Sep 17 00:00:00 2001 From: Miqdad Date: Thu, 6 Nov 2025 15:35:54 +0700 Subject: update --- indoteknik_api/controllers/api_v1/stock_picking.py | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) (limited to 'indoteknik_api/controllers/api_v1/stock_picking.py') diff --git a/indoteknik_api/controllers/api_v1/stock_picking.py b/indoteknik_api/controllers/api_v1/stock_picking.py index a03016c5..c19812f5 100644 --- a/indoteknik_api/controllers/api_v1/stock_picking.py +++ b/indoteknik_api/controllers/api_v1/stock_picking.py @@ -121,10 +121,6 @@ class StockPicking(controller.Controller): return self.response(picking.get_tracking_detail()) - from datetime import datetime - from odoo import http - from odoo.http import request - @http.route(prefix + 'stock-picking//documentation', auth='public', methods=['PUT', 'OPTIONS'], csrf=False) @controller.Controller.must_authorized() def write_partner_stock_picking_documentation(self, scanid, **kw): @@ -149,7 +145,6 @@ class StockPicking(controller.Controller): if not sj_list and 'sj_documentations' in kw and kw.get('sj_documentations'): sj_list = [kw.get('sj_documentations')] - # ===== Tulis field lain yang dikirim (merge, bukan replace) ===== params = {} if paket_document: params['paket_documentation'] = paket_document @@ -162,10 +157,8 @@ class StockPicking(controller.Controller): if params: picking.write(params) - # ===== Buat child rows utk SEMUA foto SJ ke One2many ===== if sj_list: Child = request.env['stock.picking.sj.document'].sudo() - # kasih urutan lanjut 10-10 seq = (picking.sj_documentations[:1].sequence or 10) if picking.sj_documentations else 10 for b64 in sj_list: if not b64: @@ -173,7 +166,7 @@ class StockPicking(controller.Controller): Child.create({ 'picking_id': picking.id, 'sequence': seq, - 'image': b64, # base64 tanpa prefix + 'image': b64, }) seq += 10 -- cgit v1.2.3