86 lines
2.8 KiB
PHP
86 lines
2.8 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Transaction;
|
|
use Illuminate\Http\Request;
|
|
use Symfony\Component\HttpFoundation\StreamedResponse;
|
|
|
|
class TransactionController extends Controller
|
|
{
|
|
public function index(Request $request)
|
|
{ #untuk menampilkan data transaksi di dashboard admin
|
|
Transaction::cancelOverduePendingPickup();
|
|
|
|
$query = Transaction::with('user', 'details.product');
|
|
|
|
if ($request->filled('status')) {
|
|
$query->where('status', $request->status);
|
|
}
|
|
if ($request->filled('from')) {
|
|
$query->whereDate('created_at', '>=', $request->from);
|
|
}
|
|
if ($request->filled('to')) {
|
|
$query->whereDate('created_at', '<=', $request->to);
|
|
}
|
|
|
|
$transactions = $query->latest()->paginate(15)->withQueryString();
|
|
|
|
return view('admin.transactions.index', compact('transactions'));
|
|
}
|
|
|
|
public function show(Transaction $transaction)
|
|
{
|
|
Transaction::cancelOverduePendingPickup();
|
|
|
|
$transaction->load('user', 'details.product');
|
|
|
|
return view('admin.transactions.show', compact('transaction'));
|
|
}
|
|
|
|
public function updateStatus(Request $request, Transaction $transaction)
|
|
{
|
|
$request->validate(['status' => ['required', 'in:pending,paid,cancelled']]);
|
|
$transaction->load('details');
|
|
$transaction->setStatus($request->status);
|
|
return back()->with('success', 'Status transaksi diperbarui.');
|
|
}
|
|
|
|
public function export(Request $request): StreamedResponse
|
|
{
|
|
Transaction::cancelOverduePendingPickup();
|
|
|
|
$query = Transaction::with('user', 'details.product');
|
|
if ($request->filled('from')) {
|
|
$query->whereDate('created_at', '>=', $request->from);
|
|
}
|
|
if ($request->filled('to')) {
|
|
$query->whereDate('created_at', '<=', $request->to);
|
|
}
|
|
$transactions = $query->latest()->get();
|
|
|
|
$filename = 'laporan-transaksi-' . now()->format('Y-m-d') . '.csv';
|
|
$headers = [
|
|
'Content-Type' => 'text/csv; charset=UTF-8',
|
|
'Content-Disposition' => "attachment; filename=\"{$filename}\"",
|
|
];
|
|
|
|
return response()->stream(function () use ($transactions) {
|
|
$out = fopen('php://output', 'w');
|
|
fprintf($out, chr(0xEF) . chr(0xBB) . chr(0xBF));
|
|
fputcsv($out, ['Kode', 'Customer', 'Tanggal', 'Total', 'Status']);
|
|
foreach ($transactions as $t) {
|
|
fputcsv($out, [
|
|
$t->code,
|
|
$t->user->name ?? '-',
|
|
$t->created_at->format('d/m/Y H:i'),
|
|
$t->total,
|
|
$t->status,
|
|
]);
|
|
}
|
|
fclose($out);
|
|
}, 200, $headers);
|
|
}
|
|
}
|