MIF_E31220412/app/Http/Controllers/RiwayatController.php

117 lines
3.6 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Sewa;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class RiwayatController extends Controller
{
/**
* Menampilkan daftar riwayat pemesanan
*/
public function index()
{
// Ambil data sewa yang terkait dengan user yang sedang login dan bukan draft
$sewas = Sewa::with(['paket', 'kota'])
->where('user_id', Auth::id())
->where('status', '!=', 'draft')
->orderBy('created_at', 'desc')
->get();
return view('riwayat', compact('sewas'));
}
/**
* Menampilkan detail riwayat pemesanan
*/
public function show($id)
{
$sewa = Sewa::with('paket')->findOrFail($id);
// Pastikan yang melihat adalah pemilik pesanan
if ($sewa->user_id != Auth::id() && !Auth::user()->tipe_pengguna == 'admin') {
return redirect()->route('riwayat')
->with('error', 'Anda tidak memiliki akses untuk melihat pesanan ini.');
}
return view('detail-riwayat', compact('sewa'));
}
/**
* Membatalkan pemesanan
*/
public function cancel($id)
{
$sewa = Sewa::findOrFail($id);
// Pastikan yang membatalkan adalah pemilik pesanan
if ($sewa->user_id != Auth::id()) {
return redirect()->route('riwayat')
->with('error', 'Anda tidak memiliki akses untuk membatalkan pesanan ini.');
}
// Izinkan pembatalan untuk status yang belum selesai atau dibatalkan
if (in_array($sewa->status, ['completed', 'dibatalkan', 'ongoing'])) {
return redirect()->route('riwayat')
->with('error', 'Pesanan ini tidak dapat dibatalkan karena status sudah ' . $sewa->status);
}
// Tambahkan catatan jika pembatalan setelah disetujui
if ($sewa->status === 'confirmed') {
$sewa->catatan = ($sewa->catatan ? $sewa->catatan . "\n" : '') .
"[DIBATALKAN OLEH PENYEWA SETELAH DISETUJUI] - " . now();
}
$sewa->status = 'dibatalkan';
$sewa->save();
$message = 'Pesanan berhasil dibatalkan.';
if ($sewa->status === 'confirmed') {
$message .= ' Mohon hubungi admin untuk informasi biaya pembatalan.';
}
return redirect()->route('riwayat')
->with('success', $message);
}
/**
* Halaman untuk admin melihat semua riwayat pesanan
*/
public function adminIndex()
{
// Hanya admin yang bisa akses
if (!Auth::user()->tipe_pengguna == 'admin') {
return redirect()->route('dashboard');
}
$sewas = Sewa::with(['paket', 'user'])
->orderBy('created_at', 'desc')
->get();
return view('admin.riwayat', compact('sewas'));
}
/**
* Mengubah status pemesanan (khusus admin)
*/
public function updateStatus(Request $request, $id)
{
// Hanya admin yang bisa akses
if (!Auth::user()->tipe_pengguna == 'admin') {
return redirect()->route('dashboard');
}
$request->validate([
'status' => 'required|in:pending,confirmed,ongoing,completed,dibatalkan',
]);
$sewa = Sewa::findOrFail($id);
$sewa->status = $request->status;
$sewa->save();
return redirect()->route('admin.riwayat')
->with('success', 'Status pesanan berhasil diperbarui.');
}
}