From 800b527bc0661255d1f9ec07d4bb365b23dab610 Mon Sep 17 00:00:00 2001 From: Miqdad Date: Sat, 6 Sep 2025 21:09:05 +0700 Subject: Fix detail transaction and no open new tab --- src/lib/transaction/components/Transaction.jsx | 25 +++---- src/lib/transaction/components/Transactions.jsx | 88 ++++--------------------- 2 files changed, 27 insertions(+), 86 deletions(-) diff --git a/src/lib/transaction/components/Transaction.jsx b/src/lib/transaction/components/Transaction.jsx index 30ba74d2..cbe725c7 100644 --- a/src/lib/transaction/components/Transaction.jsx +++ b/src/lib/transaction/components/Transaction.jsx @@ -221,7 +221,7 @@ const Transaction = ({ id }) => { const token = auth?.token; const partnerId = auth?.partnerId; - // 1) Minta Odoo ensure (hanya generate jika kosong / expire / cancel) + // 1) Minta Odoo ensure payment link const { data: resp } = await axios.get( `${base}/api/v1/partner/${partnerId}/sale_order/${transaction.data.id}`, { @@ -230,37 +230,40 @@ const Transaction = ({ id }) => { } ); - const payload = resp?.data || resp; + console.log('API Response:', resp); // Debug - // 2) Ambil URL dari berbagai kemungkinan field (snake_case dan camelCase) + // 2) Akses semua kemungkinan path let url = - payload?.payment_summary?.redirect_url || - payload?.paymentSummary?.redirectUrl || - payload?.paymentLinkMidtrans || - payload?.payment_link_midtrans || + resp?.result?.payment_summary?.redirect_url || + resp?.data?.result?.payment_summary?.redirect_url || + resp?.payment_summary?.redirect_url || + resp?.paymentSummary?.redirectUrl || ''; + console.log('Extracted URL:', url); // Debug + if (url) { window.location.href = url; return; } - // 3) Fallback: refetch detail dari hook lalu cek lagi + // 3) Fallback await transaction.refetch(); + console.log('Transaction data:', transaction.data); // Debug url = + transaction?.data?.result?.payment_summary?.redirect_url || transaction?.data?.paymentSummary?.redirectUrl || transaction?.data?.payment_summary?.redirect_url || - transaction?.data?.paymentLinkMidtrans || - transaction?.data?.payment_link_midtrans || ''; + console.log('Fallback URL:', url); // Debug + if (url) { window.location.href = url; return; } - // 4) Masih kosong → error throw new Error('Link pembayaran belum tersedia.'); } catch (e) { toast.error( diff --git a/src/lib/transaction/components/Transactions.jsx b/src/lib/transaction/components/Transactions.jsx index cdac4036..2e3eaaa2 100644 --- a/src/lib/transaction/components/Transactions.jsx +++ b/src/lib/transaction/components/Transactions.jsx @@ -388,7 +388,6 @@ const Transactions = ({ context = '' }) => { const handleContinuePayment = async (saleOrder) => { try { setContLoadingId(saleOrder.id); - console.log('🚀 START PAYMENT PROCESS'); const base = (process.env.NEXT_PUBLIC_ODOO_API_HOST || '').replace( /\/$/, @@ -397,88 +396,33 @@ const Transactions = ({ context = '' }) => { const token = auth?.token; const partnerId = auth?.partnerId; - // 1. TRIGGER GENERATE + GET URL SEKALIGUS - console.log('🔹 Step 1: Trigger generate + get URL'); + // 1. TRIGGER GENERATE + GET URL const { data: response } = await axios.get( `${base}/api/v1/partner/${partnerId}/sale_order/${saleOrder.id}`, { - params: { - ensure_payment_link: 1, - ts: Date.now(), - }, - headers: { - Token: token, - 'Cache-Control': 'no-cache', - }, - timeout: 10000, // 10 second timeout + params: { ensure_payment_link: 1, ts: Date.now() }, + headers: { Token: token, 'Cache-Control': 'no-cache' }, + timeout: 10000, } ); - console.log('📦 Full API Response:', response); - - // 2. EKSTRAK URL DENGAN CARA YANG BENAR - let paymentUrl = ''; - - // Cara 1: Langsung dari response.result - if (response?.result?.payment_summary?.redirect_url) { - paymentUrl = response.result.payment_summary.redirect_url; - console.log('✅ URL found in response.result'); - } - // Cara 2: Mungkin nested di data.result - else if (response?.data?.result?.payment_summary?.redirect_url) { - paymentUrl = response.data.result.payment_summary.redirect_url; - console.log('✅ URL found in response.data.result'); - } - // Cara 3: Coba variasi lain - else { - console.log( - '❌ URL not found in usual places, checking all possibilities...' - ); - - // Debug: Log semua keys yang ada - console.log('🔍 Response keys:', Object.keys(response)); - if (response.result) - console.log('🔍 Result keys:', Object.keys(response.result)); - - // Manual search untuk redirect_url - const searchForUrl = (obj) => { - for (const key in obj) { - if ( - key.toLowerCase().includes('redirect') && - typeof obj[key] === 'string' && - obj[key].includes('http') - ) { - return obj[key]; - } - if (typeof obj[key] === 'object' && obj[key] !== null) { - const found = searchForUrl(obj[key]); - if (found) return found; - } - } - return null; - }; - - paymentUrl = searchForUrl(response); - console.log('🔍 Manual search result:', paymentUrl); - } + // 2. EKSTRAK URL + let paymentUrl = + response?.result?.payment_summary?.redirect_url || + response?.data?.result?.payment_summary?.redirect_url; // 3. JIKA DAPAT URL, BUKA if (paymentUrl) { - console.log('🎯 Opening URL:', paymentUrl); - window.open(paymentUrl, '_blank', 'noopener,noreferrer'); + window.location.href = paymentUrl; toast.success('Membuka halaman pembayaran…'); return; } - // 4. FALLBACK: COBA LAGI TANPA ensure_payment_link - console.log('🔹 Step 2: Fallback - try without ensure'); + // 4. FALLBACK: COBA TANPA ensure_payment_link try { const { data: fallbackResponse } = await axios.get( `${base}/api/v1/partner/${partnerId}/sale_order/${saleOrder.id}`, - { - headers: { Token: token }, - timeout: 5000, - } + { headers: { Token: token }, timeout: 5000 } ); const fallbackUrl = @@ -486,36 +430,30 @@ const Transactions = ({ context = '' }) => { fallbackResponse?.data?.result?.payment_summary?.redirect_url; if (fallbackUrl) { - console.log('✅ Fallback URL found:', fallbackUrl); - window.open(fallbackUrl, '_blank', 'noopener,noreferrer'); + window.location.href = fallbackUrl; toast.success('Membuka halaman pembayaran…'); return; } } catch (fallbackError) { - console.error('Fallback error:', fallbackError); + // Continue to next fallback } // 5. ULTIMATE FALLBACK: PAKAI URL DARI DATA LAMA - console.log('🔹 Step 3: Ultimate fallback - use existing data'); const existingUrl = saleOrder?.paymentSummary?.redirectUrl || saleOrder?.payment_summary?.redirect_url; if (existingUrl) { - console.log('✅ Using existing URL:', existingUrl); window.open(existingUrl, '_blank', 'noopener,noreferrer'); toast.success('Membuka halaman pembayaran…'); } else { - console.error('❌ No URL found in any method'); toast.error('Link pembayaran tidak ditemukan. Silakan coba lagi.'); } } catch (error) { - console.error('💥 Payment error:', error); toast.error( error.response?.data?.description || 'Gagal memproses pembayaran' ); } finally { - console.log('🏁 END PAYMENT PROCESS'); setContLoadingId(null); } }; -- cgit v1.2.3