115 lines
3.4 KiB
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
|
|
]);
|
|
}
|
|
}
|