summaryrefslogtreecommitdiff
path: root/indoteknik_api
diff options
context:
space:
mode:
authorMiqdad <ahmadmiqdad27@gmail.com>2025-08-28 10:02:36 +0700
committerMiqdad <ahmadmiqdad27@gmail.com>2025-08-28 10:02:36 +0700
commit3a1c84158be32915ab9a30877e26c6e48733ba2b (patch)
tree64a18d5f9e94170296fd7efe0231dc16cc84ff8e /indoteknik_api
parent1ddc20d9d2b72ca68eecd07c9a3d78a008842cc0 (diff)
<Miqdad> push
Diffstat (limited to 'indoteknik_api')
-rw-r--r--indoteknik_api/controllers/api_v1/sale_order.py44
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):