PAMSIMAS_Gumuksari/PAMSIMAS_User/app/Http/Controllers/InvoiceController.php

98 lines
2.7 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Models\Invoice;
use Midtrans\Config;
use Midtrans\Snap;
class InvoiceController extends Controller
{
public function __construct()
{
// Set konfigurasi Midtrans saat controller diinisialisasi
Config::$serverKey = config('midtrans.server_key');
Config::$isProduction = config('midtrans.is_production');
Config::$isSanitized = config('midtrans.is_sanitized');
Config::$is3ds = config('midtrans.is_3ds');
}
/**
* Menampilkan daftar tagihan (saat ini dan riwayat).
*/
public function index()
{
$user = Auth::user();
$currentInvoice = Invoice::where('user_id', $user->id)
->where('status', 'unpaid')
->whereNotNull('published_at')
->first();
$invoiceHistory = Invoice::where('user_id', $user->id)
->where('status', 'paid')
->whereNotNull('published_at')
->orderBy('created_at', 'desc')
->paginate(10);
return view('invoices.index', [
'currentInvoice' => $currentInvoice,
'invoiceHistory' => $invoiceHistory
]);
}
/**
* Menampilkan detail satu tagihan & tombol bayar.
*/
// app/Http/Controllers/InvoiceController.php
public function show(Invoice $invoice, Request $request)
{
if ($invoice->user_id !== Auth::id()) {
abort(403, 'AKSES DITOLAK');
}
// ✅ Ambil meter_value dari MeterReading
$meterReading = \App\Models\MeterReading::find($invoice->meter_reading_id);
$meterValue = $meterReading ? $meterReading->meter_value : 0;
if ($invoice->status == 'paid') {
return view('invoices.show', [
'invoice' => $invoice,
'snapToken' => null,
'meterValue' => $meterValue, // ✅ Kirim ke view
]);
}
if ($invoice->status == 'unpaid') {
$orderId = 'PAMSIMAS-' . $invoice->id . '-' . time();
$params = [
'transaction_details' => [
'order_id' => $orderId,
'gross_amount' => $invoice->total_amount,
],
'customer_details' => [
'first_name' => $invoice->user->name,
'email' => $invoice->user->email,
'phone' => $invoice->user->profile->phone_number,
],
];
$snapToken = Snap::getSnapToken($params);
$invoice->midtrans_order_id = $orderId;
$invoice->snap_token = $snapToken;
$invoice->save();
}
return view('invoices.show', [
'invoice' => $invoice,
'snapToken' => $invoice->snap_token,
'meterValue' => $meterValue ?? 0,
]);
}
}