diff options
| author | Mqdd <ahmadmiqdad27@gmail.com> | 2025-12-15 09:24:15 +0700 |
|---|---|---|
| committer | Mqdd <ahmadmiqdad27@gmail.com> | 2025-12-15 09:24:15 +0700 |
| commit | cfc91866946654d3bfa1627b2cbb19f2d4350bfe (patch) | |
| tree | 06b374f978a014c7efd8d964c6e6241320727058 | |
| parent | 28bbc495e76b6492935f7270888872135ae4d944 (diff) | |
<Miqdad> fix delivery submit slow
| -rw-r--r-- | indoteknik_api/controllers/api_v1/stock_picking.py | 119 |
1 files changed, 96 insertions, 23 deletions
diff --git a/indoteknik_api/controllers/api_v1/stock_picking.py b/indoteknik_api/controllers/api_v1/stock_picking.py index def55435..e33d01c1 100644 --- a/indoteknik_api/controllers/api_v1/stock_picking.py +++ b/indoteknik_api/controllers/api_v1/stock_picking.py @@ -121,68 +121,141 @@ class StockPicking(controller.Controller): return self.response(picking.get_tracking_detail()) - @http.route(prefix + 'stock-picking/<scanid>/documentation', auth='public', methods=['PUT', 'OPTIONS'], csrf=False) + @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): - 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 = False - # if scanid.isdigit() and int(scanid) < 2147483646: - # picking = request.env['stock.picking'].search([('id', '=', int(scanid))], limit=1) - # if not picking: - # picking = request.env['stock.picking'].search([('picking_code', '=', scanid)], limit=1) + env = request.env + Picking = env['stock.picking'].sudo() + SjDoc = env['stock.picking.sj.document'].sudo() + + paket_document = kw.get('paket_document') + dispatch_document = kw.get('dispatch_document') + self_pu = kw.get('self_pu') + # ===== Cari picking (FAST PATH) ===== + picking = False if scanid.isdigit(): - picking = request.env['stock.picking'].browse(int(scanid)) + picking = Picking.browse(int(scanid)) if not picking.exists(): picking = False if not picking: - picking = request.env['stock.picking'].search( - [('picking_code', '=', scanid)], - limit=1 - ) + picking = Picking.search([('picking_code', '=', scanid)], limit=1) if not picking: return self.response(code=403, description='picking not found') - # ===== Ambil MULTIPLE SJ dari form: sj_documentations=...&sj_documentations=... ===== + # ===== Ambil SJ list ===== form = request.httprequest.form or {} - sj_list = form.getlist('sj_documentations') # list of base64 strings + sj_list = form.getlist('sj_documentations') - # 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'): + if not sj_list and kw.get('sj_documentations'): sj_list = [kw.get('sj_documentations')] + # ===== Prepare write params ===== params = {} + now = fields.Datetime.now() + if paket_document: params['paket_documentation'] = paket_document - params['driver_arrival_date'] = datetime.utcnow() + params['driver_arrival_date'] = now + if dispatch_document: params['dispatch_documentation'] = dispatch_document + if sj_list and self_pu: - params['driver_arrival_date'] = datetime.utcnow() + params['driver_arrival_date'] = now if params: picking.write(params) + # ===== BULK CREATE SJ (BIG WIN) ===== if sj_list: - Child = request.env['stock.picking.sj.document'].sudo() seq = (picking.sj_documentations[:1].sequence or 10) if picking.sj_documentations else 10 + vals_list = [] + for b64 in sj_list: if not b64: continue - Child.create({ + vals_list.append({ 'picking_id': picking.id, 'sequence': seq, 'image': b64, }) seq += 10 + if vals_list: + SjDoc.create(vals_list) + return self.response({'name': picking.name}) + + # @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): + # 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 = False + # # if scanid.isdigit() and int(scanid) < 2147483646: + # # picking = request.env['stock.picking'].search([('id', '=', int(scanid))], limit=1) + # # if not picking: + # # picking = request.env['stock.picking'].search([('picking_code', '=', scanid)], limit=1) + + # if scanid.isdigit(): + # picking = request.env['stock.picking'].browse(int(scanid)) + # if not picking.exists(): + # picking = False + + # if not picking: + # picking = request.env['stock.picking'].search( + # [('picking_code', '=', scanid)], + # limit=1 + # ) + # if not picking: + # return self.response(code=403, description='picking not found') + + # # ===== Ambil MULTIPLE SJ dari form: sj_documentations=...&sj_documentations=... ===== + # form = request.httprequest.form or {} + # sj_list = form.getlist('sj_documentations') # list of base64 strings + + # # 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')] + + # params = {} + # 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() + + # if params: + # picking.write(params) + + + # vals_list = [] + # for b64 in sj_list: + # if not b64: + # continue + # vals_list.append({ + # 'picking_id': picking.id, + # 'sequence': seq, + # 'image': b64, + # }) + # seq += 10 + + # if vals_list: + # Child.create(vals_list) + + + # return self.response({'name': picking.name}) + # @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): |
