169 lines
5.7 KiB
PHP
169 lines
5.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Sewa;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\Storage;
|
|
|
|
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', 'kota', 'user'])
|
|
->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.');
|
|
}
|
|
|
|
// Jika request adalah AJAX, kembalikan response JSON
|
|
if (request()->ajax()) {
|
|
return response()->json([
|
|
'id' => $sewa->id,
|
|
'tanggal_pembayaran' => $sewa->tanggal_pembayaran ? $sewa->tanggal_pembayaran->format('d/m/Y H:i') : null,
|
|
'status_pembayaran' => $sewa->nominal_pembayaran
|
|
? ($sewa->nominal_pembayaran >= $sewa->total_harga ? 'Lunas' : 'DP ' . number_format(($sewa->nominal_pembayaran / $sewa->total_harga) * 100, 0) . '%')
|
|
: 'Belum Bayar',
|
|
'lokasi' => $sewa->lokasi,
|
|
'kota' => $sewa->kota,
|
|
'ongkir' => $sewa->ongkir,
|
|
'bukti_pembayaran' => $sewa->bukti_pembayaran,
|
|
'jenis_jaminan' => $sewa->jenis_jaminan,
|
|
'foto_jaminan' => $sewa->foto_jaminan
|
|
]);
|
|
}
|
|
|
|
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.');
|
|
}
|
|
|
|
/**
|
|
* Menghapus riwayat pemesanan
|
|
*/
|
|
public function hapus($id)
|
|
{
|
|
$sewa = Sewa::findOrFail($id);
|
|
|
|
// Pastikan yang menghapus adalah pemilik pesanan
|
|
if ($sewa->user_id != Auth::id()) {
|
|
return redirect()->route('riwayat')
|
|
->with('error', 'Anda tidak memiliki akses untuk menghapus pesanan ini.');
|
|
}
|
|
|
|
// Hanya bisa menghapus pesanan yang sudah selesai atau dibatalkan
|
|
if (!in_array($sewa->status, ['completed', 'dibatalkan'])) {
|
|
return redirect()->route('riwayat')
|
|
->with('error', 'Hanya pesanan yang sudah selesai atau dibatalkan yang dapat dihapus.');
|
|
}
|
|
|
|
// Hapus file bukti pembayaran dan jaminan jika ada
|
|
if ($sewa->bukti_pembayaran) {
|
|
Storage::disk('public')->delete($sewa->bukti_pembayaran);
|
|
}
|
|
if ($sewa->foto_jaminan) {
|
|
Storage::disk('public')->delete($sewa->foto_jaminan);
|
|
}
|
|
|
|
$sewa->delete();
|
|
|
|
return redirect()->route('riwayat')
|
|
->with('success', 'Riwayat pesanan berhasil dihapus.');
|
|
}
|
|
}
|