From 1f58d7d4973edf04d6a3f3092115492585c1545b Mon Sep 17 00:00:00 2001 From: Miqdad Date: Tue, 30 Sep 2025 08:09:02 +0700 Subject: Need approval logistic when IU from BU/Stock --- indoteknik_api/controllers/api_v1/stock_picking.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'indoteknik_api') diff --git a/indoteknik_api/controllers/api_v1/stock_picking.py b/indoteknik_api/controllers/api_v1/stock_picking.py index a4a9cf80..7f878ad2 100644 --- a/indoteknik_api/controllers/api_v1/stock_picking.py +++ b/indoteknik_api/controllers/api_v1/stock_picking.py @@ -136,16 +136,15 @@ class StockPicking(controller.Controller): } dispatch_emails = { 'rahmat.afiudin@gmail.com', - 'it@fixcomart.co.id' + 'indraprtama60@gmail.com' } 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 - # ===== 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) + # 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) -- cgit v1.2.3 From eb8a67a33b4b8abd574f737bc5727ffdb5b18b99 Mon Sep 17 00:00:00 2001 From: Miqdad Date: Wed, 1 Oct 2025 17:12:48 +0700 Subject: remove email mapping --- indoteknik_api/controllers/api_v1/stock_picking.py | 14 -------------- 1 file changed, 14 deletions(-) (limited to 'indoteknik_api') diff --git a/indoteknik_api/controllers/api_v1/stock_picking.py b/indoteknik_api/controllers/api_v1/stock_picking.py index 7f878ad2..deb92a50 100644 --- a/indoteknik_api/controllers/api_v1/stock_picking.py +++ b/indoteknik_api/controllers/api_v1/stock_picking.py @@ -129,20 +129,6 @@ class StockPicking(controller.Controller): paket_document = kw.get('paket_document', False) dispatch_document = kw.get('dispatch_document', False) - # ===== Role by EMAIL ===== - driver_emails = { - 'driverindoteknik@gmail.com', - 'sulistianaridwan8@gmail.com', - } - dispatch_emails = { - 'rahmat.afiudin@gmail.com', - 'indraprtama60@gmail.com' - } - - 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 not sj_document or not paket_document: # return self.response(code=400, description='dispatch_document wajib untuk role dispatch login= %s' % login) -- cgit v1.2.3 From 50d5643a2c4a7b245b37f8ca0dd4fc5383e61d4e Mon Sep 17 00:00:00 2001 From: Miqdad Date: Thu, 2 Oct 2025 08:22:30 +0700 Subject: vals SP doc --- indoteknik_api/controllers/api_v1/stock_picking.py | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) (limited to 'indoteknik_api') diff --git a/indoteknik_api/controllers/api_v1/stock_picking.py b/indoteknik_api/controllers/api_v1/stock_picking.py index deb92a50..2ec1ec2a 100644 --- a/indoteknik_api/controllers/api_v1/stock_picking.py +++ b/indoteknik_api/controllers/api_v1/stock_picking.py @@ -125,15 +125,9 @@ 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) - dispatch_document = kw.get('dispatch_document', False) - - # 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) + 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 # ===== Cari picking by id / picking_code ===== picking_data = False @@ -147,10 +141,12 @@ class StockPicking(controller.Controller): return self.response(code=403, description='picking not found') params = { - 'sj_documentation': sj_document, - 'paket_documentation': paket_document, 'driver_arrival_date': datetime.utcnow(), } + if sj_document: + params['sj_documentation'] = sj_document + if paket_document: + params['paket_documentation'] = paket_document if dispatch_document: params['dispatch_documentation'] = dispatch_document -- cgit v1.2.3 From 35d01765f9b925467b6ac20d2ff83c81f49e4d3e Mon Sep 17 00:00:00 2001 From: Miqdad Date: Thu, 2 Oct 2025 16:03:44 +0700 Subject: fix cannot apply voucher when cart has promotion item --- indoteknik_api/controllers/api_v1/sale_order.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'indoteknik_api') diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index 1a75c830..25268856 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -808,6 +808,14 @@ class SaleOrder(controller.Controller): sale_order.apply_promotion_program() sale_order.add_free_product(promotions) + # Pastikan baris hasil promo/bonus ditandai supaya bisa di-skip voucher + promo_lines = sale_order.order_line.filtered( + lambda l: getattr(l, 'order_promotion_id', False) or (l.price_unit or 0.0) == 0.0 + ) + if promo_lines: + promo_lines.write({'is_has_disc': True}) + _logger.info(f"[PROMO_MARK] Marked {len(promo_lines)} promo/free lines as is_has_disc=True") + voucher_code = params['value']['voucher'] if voucher_code: _logger.info(f"Processing voucher: {voucher_code}") @@ -816,7 +824,7 @@ class SaleOrder(controller.Controller): voucher_shipping = request.env['voucher'].search( [('code', '=', voucher_code), ('apply_type', 'in', ['shipping'])], limit=1) - if voucher and len(promotions) == 0: + if voucher: _logger.info("Applying regular voucher") sale_order.voucher_id = voucher.id sale_order.apply_voucher() -- cgit v1.2.3 From 37685c6a3a5b21ee83da1081435525de135f4913 Mon Sep 17 00:00:00 2001 From: Miqdad Date: Mon, 6 Oct 2025 17:04:59 +0700 Subject: set null approval status when from website --- indoteknik_api/controllers/api_v1/sale_order.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'indoteknik_api') diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index 25268856..1c87400f 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -727,8 +727,9 @@ class SaleOrder(controller.Controller): _logger.info(f"Updated user_id from partner: {parameters['user_id']}") if params['value']['type'] == 'sale_order': - parameters['approval_status'] = 'pengajuan1' - _logger.info("Setting approval_status to 'pengajuan1'") + # parameters['approval_status'] = 'pengajuan1' + parameters['approval_status'] = False + _logger.info("Setting approval_status to 'false'") sale_order = request.env['sale.order'].with_context(from_website_checkout=True).create([parameters]) sale_order.onchange_partner_contact() -- cgit v1.2.3 From 17cd1c4b3a5e685498d16e6d1af1bb990ec543e8 Mon Sep 17 00:00:00 2001 From: Miqdad Date: Wed, 8 Oct 2025 14:48:49 +0700 Subject: remove approval status validation for bayar sekarang --- indoteknik_api/controllers/api_v1/sale_order.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'indoteknik_api') diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index 1c87400f..5d6a4117 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -231,11 +231,10 @@ class SaleOrder(controller.Controller): for so in filtered_orders_paginated: item = request.env['sale.order'].api_v1_single_response(so) - approval_ok = (so.approval_status in ('pengajuan1', 'pengajuan2')) source_ok = _is_website_order(so) term_ok = bool(so.payment_term_id and so.payment_term_id.id == CBD_PAYMENT_TERM_ID) pay_status = (getattr(so, 'payment_status', '') or '').strip().lower() - eligible = bool(approval_ok and source_ok and term_ok and pay_status in ALLOWED_CONTINUE) + eligible = bool(source_ok and term_ok and pay_status in ALLOWED_CONTINUE) redirect_url = getattr(so, 'payment_link_midtrans', '') or '' @@ -285,7 +284,6 @@ class SaleOrder(controller.Controller): pay_status = (getattr(sale_order, 'payment_status', '') or '').strip().lower() eligible = ( - sale_order.approval_status in ('pengajuan1', 'pengajuan2') and _is_website_order(sale_order) and sale_order.payment_term_id and sale_order.payment_term_id.id == CBD_PAYMENT_TERM_ID and pay_status in ALLOWED_CONTINUE -- cgit v1.2.3 From 7b17ded8576c86470c56e5ccf961d0378b3a820f Mon Sep 17 00:00:00 2001 From: Miqdad Date: Wed, 8 Oct 2025 15:24:43 +0700 Subject: remove approval status api SO --- indoteknik_api/controllers/api_v1/sale_order.py | 2 -- 1 file changed, 2 deletions(-) (limited to 'indoteknik_api') diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index 5d6a4117..56b49f9a 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -242,7 +242,6 @@ class SaleOrder(controller.Controller): 'eligibleContinue': eligible, 'paymentSummary': { 'eligible': eligible, - 'approvalStatus': so.approval_status or '', 'paymentStatus': pay_status, 'paymentTermId': so.payment_term_id.id if so.payment_term_id else None, 'sourceId': so.source_id.id if so.source_id else None, @@ -315,7 +314,6 @@ class SaleOrder(controller.Controller): 'eligible_continue': eligible, 'payment_summary': { 'eligible': eligible, - 'approval_status': sale_order.approval_status or '', 'payment_status': pay_status, 'payment_term_id': sale_order.payment_term_id.id if sale_order.payment_term_id else None, 'source_id': sale_order.source_id.id if sale_order.source_id else None, -- cgit v1.2.3 From 40c66acf47f900ecd776358758ac053347c078c7 Mon Sep 17 00:00:00 2001 From: Miqdad Date: Mon, 13 Oct 2025 11:21:04 +0700 Subject: set back to pengajuan1 when CO from website and change SO line behavior onchange vendor_id --- indoteknik_api/controllers/api_v1/sale_order.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'indoteknik_api') diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index 56b49f9a..741dc0b1 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -231,10 +231,11 @@ class SaleOrder(controller.Controller): for so in filtered_orders_paginated: item = request.env['sale.order'].api_v1_single_response(so) + approval_ok = (so.approval_status in ('pengajuan1', 'pengajuan2')) source_ok = _is_website_order(so) term_ok = bool(so.payment_term_id and so.payment_term_id.id == CBD_PAYMENT_TERM_ID) pay_status = (getattr(so, 'payment_status', '') or '').strip().lower() - eligible = bool(source_ok and term_ok and pay_status in ALLOWED_CONTINUE) + eligible = bool(approval_ok and source_ok and term_ok and pay_status in ALLOWED_CONTINUE) redirect_url = getattr(so, 'payment_link_midtrans', '') or '' @@ -242,6 +243,7 @@ class SaleOrder(controller.Controller): 'eligibleContinue': eligible, 'paymentSummary': { 'eligible': eligible, + 'approvalStatus': so.approval_status or '', 'paymentStatus': pay_status, 'paymentTermId': so.payment_term_id.id if so.payment_term_id else None, 'sourceId': so.source_id.id if so.source_id else None, @@ -283,6 +285,7 @@ class SaleOrder(controller.Controller): pay_status = (getattr(sale_order, 'payment_status', '') or '').strip().lower() eligible = ( + sale_order.approval_status in ('pengajuan1', 'pengajuan2') and _is_website_order(sale_order) and sale_order.payment_term_id and sale_order.payment_term_id.id == CBD_PAYMENT_TERM_ID and pay_status in ALLOWED_CONTINUE @@ -314,6 +317,7 @@ class SaleOrder(controller.Controller): 'eligible_continue': eligible, 'payment_summary': { 'eligible': eligible, + 'approval_status': sale_order.approval_status or '', 'payment_status': pay_status, 'payment_term_id': sale_order.payment_term_id.id if sale_order.payment_term_id else None, 'source_id': sale_order.source_id.id if sale_order.source_id else None, @@ -723,9 +727,9 @@ class SaleOrder(controller.Controller): _logger.info(f"Updated user_id from partner: {parameters['user_id']}") if params['value']['type'] == 'sale_order': - # parameters['approval_status'] = 'pengajuan1' - parameters['approval_status'] = False - _logger.info("Setting approval_status to 'false'") + parameters['approval_status'] = 'pengajuan1' + # parameters['approval_status'] = False + _logger.info("Setting approval_status to 'pengajuan1'") sale_order = request.env['sale.order'].with_context(from_website_checkout=True).create([parameters]) sale_order.onchange_partner_contact() -- cgit v1.2.3 From efaeb9e53727f6ccfa0c42bbf8a7c7cc0f25da4b Mon Sep 17 00:00:00 2001 From: Miqdad Date: Thu, 16 Oct 2025 08:50:57 +0700 Subject: fix api --- indoteknik_api/controllers/api_v1/sale_order.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indoteknik_api') diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index 741dc0b1..cff1921d 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -789,7 +789,7 @@ class SaleOrder(controller.Controller): order_line.product_id_change() order_line.weight = order_line.product_id.weight - order_line.onchange_vendor_id() + order_line._onchange_vendor_id_custom() _logger.info(f"After onchanges - Price: {order_line.price_unit}, Disc: {order_line.discount}") elif cart['cart_type'] == 'promotion': -- cgit v1.2.3 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') 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') 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') 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') 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') 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