jamboljack

Kirim Data per Invoice

Jan 7th, 2026
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.26 KB | None | 0 0
  1. private function send_invoice_simple($invoice, $customer_jurnal_id)
  2.     {
  3.         try {
  4.             // Ambil detail invoice
  5.             $details = $this->db->get_where('sid_invoice_detail', ['invoice_id' => $invoice->invoice_id])->result();
  6.             if (empty($details)) {
  7.                 return ['success' => false, 'message' => 'Detail invoice kosong'];
  8.             }
  9.  
  10.             // Siapkan transaction lines
  11.             $transactionLines = [];
  12.             foreach ($details as $detail) {
  13.                 $product_name       = in_array($detail->invoice_detail_desc, ['Biaya Instalasi', 'Sewa Alat']) ? $detail->invoice_detail_desc : 'Tagihan Bulanan';
  14.                 $transactionLines[] = [
  15.                     'product_name'  => $product_name,
  16.                     'quantity'      => (int)($detail->invoice_detail_qty ?? 1),
  17.                     'rate'          => (int)($detail->invoice_detail_tarif ?? 0),
  18.                     'discount'      => (int)($detail->invoice_detail_disc ?? 0)
  19.                 ];
  20.             }
  21.            
  22.             // Siapkan payload
  23.             $payload = [
  24.                 'sales_invoice' => [
  25.                     'transaction_date'              => date('Y-m-d', strtotime($invoice->invoice_tanggal)),
  26.                     'due_date'                      => date('Y-m-d', strtotime($invoice->invoice_tanggal_tempo)),
  27.                     'transaction_no'                => $invoice->invoice_nomor,
  28.                     'person_id'                     => $customer_jurnal_id, // Gunakan person_id bukan person_name
  29.                     'email'                         => $invoice->pelanggan_email ?? '[email protected]',
  30.                     'address'                       => $invoice->pelanggan_alamat ?? '',
  31.                     'term_name'                     => $invoice->jenis_bayar_nama ?? 'Custom',
  32.                     'transaction_lines_attributes'  => $transactionLines,
  33.                     'is_shipped'                    => false,
  34.                     'shipping_price'                => 0,
  35.                     // 'discount_unit'                 => (int)($invoice->invoice_diskon ?? 0),
  36.                     'discount_unit'                 => 0,
  37.                     'discount_type_name'            => 'value',
  38.                     'deposit_to_name'               => 'KAS KECIL KANTOR',
  39.                     'deposit'                       => (int) $invoice->invoice_dibayar ?? 0,
  40.                     'source'                        => 'ISKNet.id',
  41.                     'memo'                          => 'Invoice dari ISKNet.id'
  42.                 ]
  43.             ];
  44.            
  45.             // Kirim ke Mekari
  46.             $response = $this->mekari_jurnal->request(
  47.                 'POST',
  48.                 '/public/jurnal/api/v1/sales_invoices',
  49.                 $payload
  50.             );
  51.             $httpCode = $response['http_code'] ?? 0;
  52.             if ($httpCode === 201 && isset($response['response']['sales_invoice']['id'])) {
  53.                 $jurnal_id = $response['response']['sales_invoice']['id'];
  54.                 $jurnal_no = $response['response']['sales_invoice']['transaction_no'];
  55.                 // Update database
  56.                 $this->db->where('invoice_id', $invoice->invoice_id)->update('sid_invoice', [
  57.                     'invoice_jurnal_id'         => $jurnal_id,
  58.                     'invoice_jurnal_no'         => $jurnal_no,
  59.                     'invoice_jurnal_status'     => $response['response']['sales_invoice']['status'] ?? 'open',
  60.                     'invoice_jurnal_response'   => json_encode($response['response']['sales_invoice']),
  61.                     'invoice_jurnal_sync_at'    => date('Y-m-d H:i:s'),
  62.                     'invoice_update'            => date('Y-m-d H:i:s')
  63.                 ]);
  64.                    
  65.                 // PAID INVOICE
  66.                 $paid = $this->create_receive_payment_paid($invoice, $jurnal_id, $customer_jurnal_id);
  67.  
  68.                 if (!$paid['success']) {
  69.                     return [
  70.                         'success'   => false,
  71.                         'message'   => 'Invoice terkirim, Gagal set Paid : ' . $paid['message'],
  72.                         'jurnal_id' => $jurnal_id
  73.                     ];
  74.                 }
  75.  
  76.                 return [
  77.                     'success'   => true,
  78.                     'message'   => 'Invoice Berhasil dikirim & dibayar',
  79.                     'jurnal_id' => $jurnal_id
  80.                 ];
  81.             } else {
  82.                 $error = $this->extract_error_simple($response);
  83.                 // Update dengan status failed
  84.                 $this->db->where('invoice_id', $invoice->invoice_id)->update('sid_invoice', [
  85.                     'invoice_jurnal_status'     => 'failed',
  86.                     'invoice_jurnal_error'      => $error,
  87.                     'invoice_jurnal_response'   => json_encode($response['response'] ?? []),
  88.                     'invoice_jurnal_sync_at'    => date('Y-m-d H:i:s'),
  89.                     'invoice_update'            => date('Y-m-d H:i:s')
  90.                 ]);
  91.                
  92.                 return ['success' => false, 'message' => 'Gagal: ' . $error];
  93.             }
  94.            
  95.         } catch (Exception $e) {
  96.             return ['success' => false, 'message' => 'API Error: ' . $e->getMessage()];
  97.         }
  98.     }
Advertisement
Add Comment
Please, Sign In to add comment