From 7d07a282c134cb5e2a784b73cc477e3f398df57c Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Fri, 12 Sep 2025 10:48:13 +0700 Subject: add rc in journal --- indoteknik_api/controllers/api_v1/user.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'indoteknik_api/controllers/api_v1') diff --git a/indoteknik_api/controllers/api_v1/user.py b/indoteknik_api/controllers/api_v1/user.py index dde30fec..3511bc52 100644 --- a/indoteknik_api/controllers/api_v1/user.py +++ b/indoteknik_api/controllers/api_v1/user.py @@ -89,7 +89,9 @@ class User(controller.Controller): 'name': name, 'login': email, 'oauth_provider_id': request.env.ref('auth_oauth.provider_google').id, - 'sel_groups_1_9_10': 9 + 'sel_groups_1_9_10': 9, + 'active': True, + } user = request.env['res.users'].create(user_data) -- cgit v1.2.3 From 41b9e8084b388dca0b5b18daf0dfe9537db1ed1c Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Tue, 16 Sep 2025 10:08:42 +0700 Subject: push --- indoteknik_api/controllers/api_v1/sale_order.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indoteknik_api/controllers/api_v1') diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index accc7531..1a75c830 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -198,7 +198,7 @@ class SaleOrder(controller.Controller): if status in ['dikemas', 'dikirim', 'selesai', 'partial']: filtered_orders = [] for sale_order in sale_orders: - bu_pickings = [p for p in sale_order.picking_ids if p.picking_type_id and p.picking_type_id.id == 29] + bu_pickings = [p for p in sale_order.picking_ids if p.picking_type_id and p.picking_type_id.id == 29 and p.state != 'cancel'] total = len(bu_pickings) done_pickings = [p for p in bu_pickings if p.state == 'done'] done_with_driver = [p for p in done_pickings if p.sj_return_date] -- cgit v1.2.3 From dc9fd38206e9234319e8088717b39cf0770aaad7 Mon Sep 17 00:00:00 2001 From: Miqdad Date: Fri, 19 Sep 2025 17:43:59 +0700 Subject: add role and field dispatch --- indoteknik_api/controllers/api_v1/stock_picking.py | 31 ++++++++++++++-------- 1 file changed, 20 insertions(+), 11 deletions(-) (limited to 'indoteknik_api/controllers/api_v1') diff --git a/indoteknik_api/controllers/api_v1/stock_picking.py b/indoteknik_api/controllers/api_v1/stock_picking.py index 762e17c5..7a0579e3 100644 --- a/indoteknik_api/controllers/api_v1/stock_picking.py +++ b/indoteknik_api/controllers/api_v1/stock_picking.py @@ -124,33 +124,42 @@ class StockPicking(controller.Controller): @http.route(prefix + 'stock-picking//documentation', auth='public', methods=['PUT', 'OPTIONS'], csrf=False) @controller.Controller.must_authorized() - def write_partner_stock_picking_documentation(self, **kw): - scanid = kw.get('scanid', '').strip() + def write_partner_stock_picking_documentation(self, scanid, **kw): 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 + + if not sj_document or not paket_document: + return self.response(code=400, description='sj_document dan paket_document wajib') + + if is_dispatch_user and not dispatch_document: + return self.response(code=400, description='dispatch_document wajib untuk role dispatch') 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 picking_data = False - if scanid.isdigit() and int(scanid) < 2147483647: - picking_data = request.env['stock.picking'].search([('id', '=', int(scanid))], limit=1) + 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=1) + picking_data = request.env['stock.picking'].search([('picking_code', '=', scanid)], limit=0) if not picking_data: - return self.response(code=404, description='picking not found') + return self.response(code=403, description='picking not found') picking_data.write(params) - - return self.response({ - 'name': picking_data.name - }) - + 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): -- cgit v1.2.3 From e65c7a9f3f942e0a1ba9bc47f2c49c4278981aa2 Mon Sep 17 00:00:00 2001 From: Miqdad Date: Sat, 20 Sep 2025 10:35:02 +0700 Subject: dispatch image API --- indoteknik_api/controllers/api_v1/stock_picking.py | 48 ++++++++++++++-------- 1 file changed, 30 insertions(+), 18 deletions(-) (limited to 'indoteknik_api/controllers/api_v1') 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//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)}") -- cgit v1.2.3 From 0668b3f990111d25c4ed18465a77495cb59c07f2 Mon Sep 17 00:00:00 2001 From: Miqdad Date: Sat, 20 Sep 2025 13:20:30 +0700 Subject: fix api --- indoteknik_api/controllers/api_v1/stock_picking.py | 1 - 1 file changed, 1 deletion(-) (limited to 'indoteknik_api/controllers/api_v1') diff --git a/indoteknik_api/controllers/api_v1/stock_picking.py b/indoteknik_api/controllers/api_v1/stock_picking.py index 58d181e8..3cf42232 100644 --- a/indoteknik_api/controllers/api_v1/stock_picking.py +++ b/indoteknik_api/controllers/api_v1/stock_picking.py @@ -173,7 +173,6 @@ class StockPicking(controller.Controller): 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 327835caeb892b66813383456d83156c37b666e1 Mon Sep 17 00:00:00 2001 From: FIN-IT_AndriFP Date: Mon, 22 Sep 2025 15:39:32 +0700 Subject: (andri) add previous pt --- indoteknik_api/controllers/api_v1/partner.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'indoteknik_api/controllers/api_v1') diff --git a/indoteknik_api/controllers/api_v1/partner.py b/indoteknik_api/controllers/api_v1/partner.py index b1d8d5f3..8d67800c 100644 --- a/indoteknik_api/controllers/api_v1/partner.py +++ b/indoteknik_api/controllers/api_v1/partner.py @@ -295,7 +295,14 @@ class Partner(controller.Controller): partner = partner.parent_id or partner - if any(line.days == 0 for line in partner.property_payment_term_id.line_ids): + payment_term = ( + partner.previous_payment_term_id + if partner.is_cbd_locked + else partner.property_payment_term_id + ) + + # if any(line.days == 0 for line in partner.property_payment_term_id.line_ids): + if any(line.days == 0 for line in payment_term.line_ids): return self.response(code=402, description='Partner not tempo') domain_result_tempo = [('partner_id', '=', partner.id), ('payment_state', '=', 'not_paid'), ('state', '=', 'posted')] @@ -315,7 +322,7 @@ class Partner(controller.Controller): data = { 'name': partner.name, - 'payment_term': partner.property_payment_term_id.name, + 'payment_term': payment_term.name, 'amount_due': result_tempo, 'amount_due_total': result_tempo_total, 'amount_jatuh_tempo_total': result_jatuh_tempo_total, -- cgit v1.2.3 From 382e11297d9f3f05b654c5ebd30983b981b960e1 Mon Sep 17 00:00:00 2001 From: Miqdad Date: Thu, 25 Sep 2025 09:01:25 +0700 Subject: dispatch it email --- indoteknik_api/controllers/api_v1/stock_picking.py | 1 + 1 file changed, 1 insertion(+) (limited to 'indoteknik_api/controllers/api_v1') diff --git a/indoteknik_api/controllers/api_v1/stock_picking.py b/indoteknik_api/controllers/api_v1/stock_picking.py index 3cf42232..691d9fb7 100644 --- a/indoteknik_api/controllers/api_v1/stock_picking.py +++ b/indoteknik_api/controllers/api_v1/stock_picking.py @@ -136,6 +136,7 @@ class StockPicking(controller.Controller): } dispatch_emails = { 'rahmat.afiudin@gmail.com', + 'it@fixcomart.co.id' } login = (request.env.user.login or '').lower() -- cgit v1.2.3 From d2f24e79d7655e3592e2084f4ead3d36206f610d Mon Sep 17 00:00:00 2001 From: Miqdad Date: Fri, 26 Sep 2025 11:18:10 +0700 Subject: fix eror deliv --- indoteknik_api/controllers/api_v1/stock_picking.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'indoteknik_api/controllers/api_v1') diff --git a/indoteknik_api/controllers/api_v1/stock_picking.py b/indoteknik_api/controllers/api_v1/stock_picking.py index 691d9fb7..a4a9cf80 100644 --- a/indoteknik_api/controllers/api_v1/stock_picking.py +++ b/indoteknik_api/controllers/api_v1/stock_picking.py @@ -147,8 +147,8 @@ class StockPicking(controller.Controller): if not sj_document or not paket_document: return self.response(code=400, description='dispatch_document wajib untuk role dispatch login= %s' % login) - 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) + # 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 @@ -161,7 +161,6 @@ 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, -- cgit v1.2.3