MIF_E31220412/app/Http/Controllers/Admin/VerifikasiController.php

115 lines
3.4 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Sewa;
use Illuminate\Http\Request;
class VerifikasiController extends Controller
{
// Konstanta untuk opsi alasan penolakan
const ALASAN_PENOLAKAN = [
'Bukti pembayaran tidak valid',
'Jaminan tidak sesuai',
'Data tidak lengkap',
'Lainnya'
];
/**
* Menampilkan daftar pembayaran yang perlu diverifikasi
*/
public function index()
{
// Ambil semua sewa yang perlu diverifikasi (status pending dan sudah upload bukti)
$sewas = Sewa::where('status', 'pending')
->whereNotNull('bukti_pembayaran')
->whereNotNull('foto_jaminan')
->with(['user', 'paket', 'kota'])
->latest()
->get();
return view('admin.verifikasi-pembayaran', compact('sewas'));
}
/**
* Menyetujui pembayaran
*/
public function approve($id)
{
try {
$sewa = Sewa::findOrFail($id);
// Pastikan status masih pending
if ($sewa->status !== 'pending') {
return back()->with('error', 'Status sewa tidak valid untuk diverifikasi.');
}
// Update status menjadi confirmed
$sewa->update([
'status' => 'confirmed'
]);
return back()->with('success', 'Pembayaran berhasil diverifikasi dan disetujui.');
} catch (\Exception $e) {
return back()->with('error', 'Terjadi kesalahan: ' . $e->getMessage());
}
}
/**
* Menolak pembayaran
*/
public function reject(Request $request, $id)
{
try {
$sewa = Sewa::findOrFail($id);
// Pastikan status masih pending
if ($sewa->status !== 'pending') {
return back()->with('error', 'Status sewa tidak valid untuk ditolak.');
}
// Validasi alasan penolakan
$request->validate([
'alasan_penolakan' => 'required|string|max:255',
'alasan_lainnya' => 'nullable|string|max:255'
]);
// Ambil alasan penolakan
$alasan = trim($request->alasan_penolakan);
if ($alasan === 'Lainnya') {
$alasanLainnya = trim($request->alasan_lainnya ?? '');
if (empty($alasanLainnya)) {
return back()->with('error', 'Silakan isi alasan lainnya.');
}
$alasan = $alasanLainnya;
}
// Pastikan alasan tidak kosong
if (empty($alasan)) {
return back()->with('error', 'Alasan penolakan tidak boleh kosong.');
}
// Update status menjadi ditolak dan simpan alasan ke detail_status
$sewa->update([
'status' => 'ditolak',
'detail_status' => $alasan,
'catatan' => 'Pembayaran ditolak: ' . $alasan
]);
return back()->with('success', 'Pembayaran telah ditolak.');
} catch (\Exception $e) {
return back()->with('error', 'Terjadi kesalahan: ' . $e->getMessage());
}
}
/**
* Mendapatkan daftar alasan penolakan
*/
public function getAlasanPenolakan()
{
return response()->json([
'alasan_penolakan' => self::ALASAN_PENOLAKAN
]);
}
}