diff options
| author | Miqdad <ahmadmiqdad27@gmail.com> | 2025-08-28 10:02:36 +0700 |
|---|---|---|
| committer | Miqdad <ahmadmiqdad27@gmail.com> | 2025-08-28 10:02:36 +0700 |
| commit | 3a1c84158be32915ab9a30877e26c6e48733ba2b (patch) | |
| tree | 64a18d5f9e94170296fd7efe0231dc16cc84ff8e | |
| parent | 1ddc20d9d2b72ca68eecd07c9a3d78a008842cc0 (diff) | |
<Miqdad> push
| -rw-r--r-- | indoteknik_api/controllers/api_v1/sale_order.py | 44 |
1 files changed, 26 insertions, 18 deletions
diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index d4038a64..fbbb9479 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -206,40 +206,47 @@ class SaleOrder(controller.Controller): filtered_orders_paginated = filtered_orders[offset: offset + limit] - # === Tambahan: payment summary per SO === + # === Tambahan ringkasan + (opsional) auto-regenerate link Midtrans === CBD_PAYMENT_TERM_ID = 26 - ALLOWED_UNSETTLED = {'', 'expire', 'pending', 'challenge', 'cancel'} # belum settlement + ALLOWED_UNSETTLED = {'', 'expire', 'cancel', 'null', '[null]'} # sesuai syaratmu + def _is_website_order(so): - # Sesuaikan kalau perlu spesifik id - # return bool(so.source_id and so.source_id.id == 59) - name = (so.source_id and so.source_id.name or '').lower() - return 'web' in name or 'site' in name or bool(so.source_id) + # kalau source website fix id=59, ini paling aman + return bool(so.source_id and so.source_id.id == 59) sale_orders_payload = [] for so in filtered_orders_paginated: item = request.env['sale.order'].api_v1_single_response(so) - so_state = so.state or '' - pay_term_id = so.payment_term_id.id if so.payment_term_id else None - pay_status = (getattr(so, 'payment_status', '') or '').strip().lower() - from_web = _is_website_order(so) + # ---- 4 syarat kamu ---- + 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() + payment_ok = (pay_status in ALLOWED_UNSETTLED) - is_quotation = so_state in ('draft', 'sent') - is_cbd = (pay_term_id == CBD_PAYMENT_TERM_ID) - ok_status = (pay_status in ALLOWED_UNSETTLED) + eligible = bool(approval_ok and source_ok and term_ok and payment_ok) - eligible = bool(is_quotation and is_cbd and ok_status and from_web) + # Jika eligible & link kosong, auto-generate SEKARANG (tanpa endpoint baru) + redirect_url = getattr(so, 'payment_link_midtrans', '') or '' + if eligible and not redirect_url: + try: + so.sudo().generate_payment_link_midtrans_sales_order() + redirect_url = getattr(so, 'payment_link_midtrans', '') or '' + except Exception as e: + # jangan gagalkan list; cukup lanjut tanpa link + _logger.warning(f'Autogenerate Midtrans gagal untuk SO {so.id}: {e}') - # tambahkan field baru (camelCase biar enak dipakai di Next) + # sisipkan ke payload (pakai camelCase agar enak di FE) item.update({ 'eligibleContinue': eligible, 'paymentSummary': { 'eligible': eligible, - 'soState': so_state, - 'paymentTermId': pay_term_id, + '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, - 'redirectUrl': getattr(so, 'payment_link_midtrans', '') or '', + 'redirectUrl': redirect_url, } }) sale_orders_payload.append(item) @@ -251,6 +258,7 @@ class SaleOrder(controller.Controller): return self.response(data) + @http.route(PREFIX_PARTNER + 'sale_order/<id>/checkout', auth='public', method=['POST', 'OPTIONS'], csrf=False) @controller.Controller.must_authorized(private=True, private_key='partner_id') def partner_checkout_sale_order_by_id(self, **kw): |
