MIF_E31231070/app/Http/Controllers/MonitoringController.php

385 lines
10 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Pemesanan;
use App\Models\Notifikasi;
use App\Models\LogAktivitas;
use App\Models\Transaksi;
class MonitoringController extends Controller
{
// =========================================================
// HALAMAN MONITORING ADMIN
// =========================================================
public function index(Request $request)
{
$query = Pemesanan::with([
'user',
'properti'
]);
// SEARCH
if ($request->search) {
$query->whereHas('user', function ($q) use ($request) {
$q->where(
'nama_user',
'like',
'%' . $request->search . '%'
);
})->orWhereHas('properti', function ($q) use ($request) {
$q->where(
'nama_properti',
'like',
'%' . $request->search . '%'
);
});
}
// FILTER STATUS
if ($request->status) {
$query->where(
'status',
$request->status
);
}
// FILTER METODE
if ($request->metode) {
$query->where(
'metode_pembayaran',
$request->metode
);
}
// SORTING
if ($request->sort == 'oldest') {
$query->oldest();
} elseif ($request->sort == 'name_asc') {
$query->join(
'users',
'pemesanan.id_user',
'=',
'users.id_user'
)->orderBy(
'users.nama_user',
'asc'
);
} elseif ($request->sort == 'name_desc') {
$query->join(
'users',
'pemesanan.id_user',
'=',
'users.id_user'
)->orderBy(
'users.nama_user',
'desc'
);
} else {
$query->latest();
}
$pemesanan = $query
->latest()
->paginate(6)
->withQueryString();
return view(
'admin.monitoring-pemesanan',
compact('pemesanan')
);
}
// =========================================================
// DETAIL MONITORING ADMIN
// =========================================================
public function show($id)
{
$pemesanan = Pemesanan::with([
'user',
'properti',
'dokumen'
])->findOrFail($id);
// AMBIL RIWAYAT AKTIVITAS
$aktivitas = LogAktivitas::where(
'ref_id',
$pemesanan->id_pemesanan
)
->latest()
->get();
return view(
'admin.detail-monitoring',
compact(
'pemesanan',
'aktivitas'
)
);
}
// =========================================================
// UPDATE MONITORING
// =========================================================
public function update(Request $request, $id)
{
$pemesanan = Pemesanan::findOrFail($id);
/*
|------------------------------------------------------------------
| TENTUKAN STATUS TRANSAKSI
|------------------------------------------------------------------
*/
$statusTransaksi = 'menunggu_pembayaran';
if (strtolower($request->status) == 'selesai') {
$statusTransaksi = 'berhasil';
}
elseif (strtolower($request->status) == 'ditolak') {
$statusTransaksi = 'ditolak';
}
elseif (
strtolower($request->tahap_saat_ini) == 'pelunasan pembayaran'
) {
$statusTransaksi = 'menunggu_pembayaran';
}
elseif (
strtolower($request->tahap_saat_ini) == 'serah terima rumah'
) {
$statusTransaksi = 'berhasil';
}
/*
|------------------------------------------------------------------
| UPDATE DATA PEMESANAN
|------------------------------------------------------------------
*/
$pemesanan->update([
'tahap_saat_ini' =>
$request->tahap_saat_ini,
'status' =>
$request->status,
'estimasi_proses' =>
$request->estimasi_proses,
'catatan_admin' =>
$request->catatan_admin,
]);
/*
|------------------------------------------------------------------
| UPDATE STATUS TRANSAKSI
|------------------------------------------------------------------
*/
$transaksi = Transaksi::where(
'id_user',
$pemesanan->id_user
)
->where(
'id_properti',
$pemesanan->id_properti
)
->orderBy('id_transaksi', 'desc')
->first();
if ($transaksi) {
$transaksi->update([
'status_transaksi' => $statusTransaksi
]);
}
/*
|------------------------------------------------------------------
| LOG AKTIVITAS
|------------------------------------------------------------------
*/
LogAktivitas::create([
'id_user' =>
auth()->user()->id_user,
'aktivitas' =>
'Admin mengubah progress menjadi "' .
$request->tahap_saat_ini .
'" dengan status "' .
$request->status .
'"',
'icon' =>
'fa-sync-alt',
'tipe' =>
'monitoring',
'ref_id' =>
$pemesanan->id_pemesanan
]);
/*
|------------------------------------------------------------------
| KIRIM NOTIFIKASI
|------------------------------------------------------------------
*/
if ($request->kirim_notifikasi) {
$judul = 'Update Progress Pemesanan';
$pesan =
'Pemesanan properti kamu saat ini berada pada tahap "' .
$request->tahap_saat_ini .
'" dengan status "' .
$request->status .
'".';
// KHUSUS PELUNASAN
if (
strtolower($request->tahap_saat_ini) == 'pelunasan pembayaran' &&
$request->status != 'Selesai'
) {
$judul = 'Tagihan Pelunasan';
$pesan = 'Silakan melakukan pelunasan pembayaran rumah Anda. Klik notifikasi ini untuk melihat invoice dan detail tagihan.';
Notifikasi::create([
'id_user' => $pemesanan->id_user,
'judul' => $judul,
'pesan' => $pesan,
'tipe' => 'pelunasan',
'status_baca' => 0,
'status_kirim' => 'terkirim',
'channel' => 'in_app',
'referensi_id' => $transaksi->id_transaksi,
'referensi_tipe' => 'invoice',
]);
}
elseif (
strtolower($request->tahap_saat_ini) == 'pelunasan pembayaran' &&
$request->status == 'Selesai'
) {
$judul = 'Pelunasan Berhasil';
$pesan = 'Pembayaran Anda telah berhasil diverifikasi. Klik notifikasi ini untuk melihat invoice.';
Notifikasi::create([
'id_user' => $pemesanan->id_user,
'judul' => $judul,
'pesan' => $pesan,
'tipe' => 'pelunasan',
'status_baca' => 0,
'status_kirim' => 'terkirim',
'channel' => 'in_app',
'referensi_id' => $transaksi->id_transaksi,
'referensi_tipe' => 'invoice',
]);
} else {
Notifikasi::create([
'id_user' => $pemesanan->id_user,
'judul' => $judul,
'pesan' => $pesan,
'tipe' => 'monitoring',
'status_baca' => 0,
'status_kirim' => 'terkirim',
'channel' => 'in_app',
'referensi_id' => $pemesanan->id_pemesanan,
'referensi_tipe' => 'pemesanan',
]);
}
/*
|--------------------------------------------------------------
| LOG NOTIFIKASI
|--------------------------------------------------------------
*/
LogAktivitas::create([
'id_user' =>
auth()->user()->id_user,
'aktivitas' =>
'Admin mengirim notifikasi monitoring pemesanan',
'icon' =>
'fa-paper-plane',
'tipe' =>
'monitoring',
'ref_id' =>
$pemesanan->id_pemesanan
]);
}
return redirect()
->back()
->with(
'success',
'Monitoring berhasil diperbarui'
);
}
// =========================================================
// HALAMAN MONITORING PELANGGAN
// =========================================================
public function pelanggan($id)
{
// 1. Ambil transaksi dulu (dari klik user)
// $transaksi = Transaksi::with(['pemesanan','properti'])
// ->where('id_transaksi', $id)
// ->where('id_user', auth()->id())
// ->firstOrFail();
$pemesanan = Pemesanan::where('id_pemesanan', $id)
->where('id_user', auth()->id())
->firstOrFail();
// 2. Ambil pemesanan dari transaksi
$transaksi = $pemesanan->transaksi;
// 3. Ambil aktivitas dari PEMESANAN (bukan transaksi)
$aktivitas = LogAktivitas::where(
'ref_id',
$pemesanan->id_pemesanan
)
->latest()
->get();
return view('detail-pemesanan', compact('pemesanan', 'aktivitas', 'transaksi'));
}
}