117 lines
3.6 KiB
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.');
|
|
}
|
|
}
|