menambahkan perubahan

This commit is contained in:
nylaaptr 2026-07-02 12:34:39 +07:00
parent e4fc7f0767
commit b180dcb437
27 changed files with 266 additions and 71 deletions

View File

@ -5,6 +5,7 @@
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
use App\Models\ChatSession; use App\Models\ChatSession;
use App\Models\ChatbotMessage; use App\Models\ChatbotMessage;
@ -44,6 +45,34 @@ public function index()
public function kirim(Request $request) public function kirim(Request $request)
{ {
$pesanUser = $request->input('message'); $pesanUser = $request->input('message');
$pesanLower = strtolower($pesanUser);
$keywordProperti = [
'rumah',
'properti',
'katalog',
'ruko',
'subsidi',
'tipe',
'cluster',
'unit',
'harga',
'beli rumah',
'cari rumah',
'lihat rumah',
'lihat katalog',
'show katalog',
'perumahan'
];
$perluTampilkanKatalog = false;
foreach ($keywordProperti as $keyword) {
if (str_contains($pesanLower, $keyword)) {
$perluTampilkanKatalog = true;
break;
}
}
$userId = Auth::id(); $userId = Auth::id();
@ -189,11 +218,18 @@ public function kirim(Request $request)
Jika ingin merekomendasikan properti, gunakan format: Jika ingin merekomendasikan properti, gunakan format:
[REKOMENDASI:id] [REKOMENDASI:id]
Jika pengguna meminta melihat rumah, properti, ruko, katalog, unit, atau mencari rumah berdasarkan budget, lokasi, tipe, maupun kategori, WAJIB sertakan tag:
[REKOMENDASI:id]
Contoh: Contoh:
[REKOMENDASI:1,2] [REKOMENDASI:1,2]
"; ";
try { try {
$client = new \GuzzleHttp\Client(); $client = new \GuzzleHttp\Client();
@ -210,22 +246,17 @@ public function kirim(Request $request)
], ],
'json' => [ 'json' => [
'model' => 'llama-3.1-8b-instant', 'model' => 'llama-3.1-8b-instant',
'max_tokens' => 500, 'max_tokens' => 500,
'messages' => [ 'messages' => [
[ [
'role' => 'system', 'role' => 'system',
'content' => $systemPrompt 'content' => $systemPrompt
], ],
[ [
'role' => 'user', 'role' => 'user',
'content' => $pesanUser 'content' => $pesanUser
] ]
] ]
@ -242,6 +273,7 @@ public function kirim(Request $request)
$balasan = $balasan =
$result['choices'][0]['message']['content'] $result['choices'][0]['message']['content']
?? 'Tidak ada balasan'; ?? 'Tidak ada balasan';
Log::info($balasan);
// ========================= // =========================
@ -279,7 +311,7 @@ public function kirim(Request $request)
'luas_tanah', 'luas_tanah',
'stok_unit' 'stok_unit'
) )
->get() ->get(1)
->toArray(); ->toArray();
// hapus tag dari chat // hapus tag dari chat
@ -304,15 +336,10 @@ public function kirim(Request $request)
// SIMPAN BALASAN BOT // SIMPAN BALASAN BOT
// ========================= // =========================
DB::table('chat_messages')->insert([ DB::table('chat_messages')->insert([
'id_sessions' => $sessionId, 'id_sessions' => $sessionId,
'sender' => 'bot', 'sender' => 'bot',
'message' => $balasan, 'message' => $balasan,
'properti_data' => json_encode($rekomendasiProperti), 'properti_data' => json_encode($rekomendasiProperti),
'created_at' => now() 'created_at' => now()
]); ]);

View File

@ -264,11 +264,34 @@ public function update(Request $request, $id)
// KHUSUS PELUNASAN // KHUSUS PELUNASAN
if ( if (
strtolower($request->progres) == 'pelunasan' || strtolower($request->progres) == 'pelunasan' &&
strtolower($request->tahap_saat_ini) == 'pelunasan pembayaran' $request->status != 'Selesai'
) { ) {
$judul = 'Tagihan Pelunasan'; $judul = 'Tagihan Pelunasan';
$pesan = 'Silakan melakukan pelunasan pembayaran rumah Anda. Klik notifikasi ini untuk melihat invoice dan detail tagihan.'; $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([ Notifikasi::create([
'id_user' => $pemesanan->id_user, 'id_user' => $pemesanan->id_user,
'judul' => $judul, 'judul' => $judul,

View File

@ -505,6 +505,12 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<span>Dashboard</span> <span>Dashboard</span>
</a> </a>
<a href="{{ route('admin.data_user') }}"
class="nav-item {{ request()->routeIs('admin.data_user') ? 'active' : '' }}">
<i class="fas fa-user"></i>
<span>Data User</span>
</a>
<div class="nav-group" id="propertiMenu"> <div class="nav-group" id="propertiMenu">
<div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')"> <div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')">
<i class="fas fa-house"></i> <i class="fas fa-house"></i>
@ -526,7 +532,7 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<a href="{{ route('admin.halaman_verifikasi') }}" <a href="{{ route('admin.halaman_verifikasi') }}"
class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}"> class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}">
<i class="fas fa-check-circle"></i> <i class="fas fa-check-circle"></i>
<span>Verifikasi Data</span> <span>Verifikasi Dokumen</span>
</a> </a>
<a href="{{ route('admin.monitoring-pemesanan') }}" <a href="{{ route('admin.monitoring-pemesanan') }}"

View File

@ -744,6 +744,12 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<span>Dashboard</span> <span>Dashboard</span>
</a> </a>
<a href="{{ route('admin.data_user') }}"
class="nav-item {{ request()->routeIs('admin.data_user') ? 'active' : '' }}">
<i class="fas fa-user"></i>
<span>Data User</span>
</a>
<div class="nav-group" id="propertiMenu"> <div class="nav-group" id="propertiMenu">
<div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')"> <div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')">
<i class="fas fa-house"></i> <i class="fas fa-house"></i>
@ -765,7 +771,7 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<a href="{{ route('admin.halaman_verifikasi') }}" <a href="{{ route('admin.halaman_verifikasi') }}"
class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}"> class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}">
<i class="fas fa-check-circle"></i> <i class="fas fa-check-circle"></i>
<span>Verifikasi Data</span> <span>Verifikasi Dokumen</span>
</a> </a>
<a href="{{ route('admin.monitoring-pemesanan') }}" <a href="{{ route('admin.monitoring-pemesanan') }}"

View File

@ -630,6 +630,12 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<span>Dashboard</span> <span>Dashboard</span>
</a> </a>
<a href="{{ route('admin.data_user') }}"
class="nav-item {{ request()->routeIs('admin.data_user') ? 'active' : '' }}">
<i class="fas fa-user"></i>
<span>Data User</span>
</a>
<div class="nav-group" id="propertiMenu"> <div class="nav-group" id="propertiMenu">
<div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')"> <div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')">
<i class="fas fa-house"></i> <i class="fas fa-house"></i>
@ -651,7 +657,7 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<a href="{{ route('admin.halaman_verifikasi') }}" <a href="{{ route('admin.halaman_verifikasi') }}"
class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}"> class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}">
<i class="fas fa-check-circle"></i> <i class="fas fa-check-circle"></i>
<span>Verifikasi Data</span> <span>Verifikasi Dokumen</span>
</a> </a>
<a href="{{ route('admin.monitoring-pemesanan') }}" <a href="{{ route('admin.monitoring-pemesanan') }}"

View File

@ -545,6 +545,12 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<span>Dashboard</span> <span>Dashboard</span>
</a> </a>
<a href="{{ route('admin.data_user') }}"
class="nav-item {{ request()->routeIs('admin.data_user') ? 'active' : '' }}">
<i class="fas fa-user"></i>
<span>Data User</span>
</a>
<div class="nav-group" id="propertiMenu"> <div class="nav-group" id="propertiMenu">
<div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')"> <div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')">
<i class="fas fa-house"></i> <i class="fas fa-house"></i>
@ -566,7 +572,7 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<a href="{{ route('admin.halaman_verifikasi') }}" <a href="{{ route('admin.halaman_verifikasi') }}"
class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}"> class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}">
<i class="fas fa-check-circle"></i> <i class="fas fa-check-circle"></i>
<span>Verifikasi Data</span> <span>Verifikasi Dokumen</span>
</a> </a>
<a href="{{ route('admin.monitoring-pemesanan') }}" <a href="{{ route('admin.monitoring-pemesanan') }}"
@ -758,11 +764,6 @@ class="nav-item {{ request()->routeIs('admin.pesan_pelanggan') ? 'active' : '' }
'desc' => 'Dokumen diverifikasi admin' 'desc' => 'Dokumen diverifikasi admin'
], ],
[
'title' => 'Proses Bank',
'desc' => 'Pelanggan sedang mengurus pengajuan KPR ke bank'
],
[ [
'title' => 'KPR Disetujui Bank', 'title' => 'KPR Disetujui Bank',
'desc' => 'Pelanggan telah mendapat persetujuan dari bank' 'desc' => 'Pelanggan telah mendapat persetujuan dari bank'

View File

@ -654,6 +654,12 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<span>Dashboard</span> <span>Dashboard</span>
</a> </a>
<a href="{{ route('admin.data_user') }}"
class="nav-item {{ request()->routeIs('admin.data_user') ? 'active' : '' }}">
<i class="fas fa-user"></i>
<span>Data User</span>
</a>
<div class="nav-group" id="propertiMenu"> <div class="nav-group" id="propertiMenu">
<div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')"> <div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')">
<i class="fas fa-house"></i> <i class="fas fa-house"></i>
@ -675,7 +681,7 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<a href="{{ route('admin.halaman_verifikasi') }}" <a href="{{ route('admin.halaman_verifikasi') }}"
class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}"> class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}">
<i class="fas fa-check-circle"></i> <i class="fas fa-check-circle"></i>
<span>Verifikasi Data</span> <span>Verifikasi Dokumen</span>
</a> </a>
<a href="{{ route('admin.monitoring-pemesanan') }}" <a href="{{ route('admin.monitoring-pemesanan') }}"

View File

@ -624,6 +624,12 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<span>Dashboard</span> <span>Dashboard</span>
</a> </a>
<a href="{{ route('admin.data_user') }}"
class="nav-item {{ request()->routeIs('admin.data_user') ? 'active' : '' }}">
<i class="fas fa-user"></i>
<span>Data User</span>
</a>
<div class="nav-group" id="propertiMenu"> <div class="nav-group" id="propertiMenu">
<div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')"> <div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')">
<i class="fas fa-house"></i> <i class="fas fa-house"></i>
@ -645,7 +651,7 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<a href="{{ route('admin.halaman_verifikasi') }}" <a href="{{ route('admin.halaman_verifikasi') }}"
class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}"> class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}">
<i class="fas fa-check-circle"></i> <i class="fas fa-check-circle"></i>
<span>Verifikasi Data</span> <span>Verifikasi Dokumen</span>
</a> </a>
<a href="{{ route('admin.monitoring-pemesanan') }}" <a href="{{ route('admin.monitoring-pemesanan') }}"

View File

@ -604,6 +604,12 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<span>Dashboard</span> <span>Dashboard</span>
</a> </a>
<a href="{{ route('admin.data_user') }}"
class="nav-item {{ request()->routeIs('admin.data_user') ? 'active' : '' }}">
<i class="fas fa-user"></i>
<span>Data User</span>
</a>
<div class="nav-group" id="propertiMenu"> <div class="nav-group" id="propertiMenu">
<div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')"> <div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')">
<i class="fas fa-house"></i> <i class="fas fa-house"></i>
@ -625,7 +631,7 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<a href="{{ route('admin.halaman_verifikasi') }}" <a href="{{ route('admin.halaman_verifikasi') }}"
class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}"> class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}">
<i class="fas fa-check-circle"></i> <i class="fas fa-check-circle"></i>
<span>Verifikasi Data</span> <span>Verifikasi Dokumen</span>
</a> </a>
<a href="{{ route('admin.monitoring-pemesanan') }}" <a href="{{ route('admin.monitoring-pemesanan') }}"

View File

@ -769,6 +769,12 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<span>Dashboard</span> <span>Dashboard</span>
</a> </a>
<a href="{{ route('admin.data_user') }}"
class="nav-item {{ request()->routeIs('admin.data_user') ? 'active' : '' }}">
<i class="fas fa-user"></i>
<span>Data User</span>
</a>
<div class="nav-group" id="propertiMenu"> <div class="nav-group" id="propertiMenu">
<div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')"> <div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')">
<i class="fas fa-house"></i> <i class="fas fa-house"></i>
@ -790,7 +796,7 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<a href="{{ route('admin.halaman_verifikasi') }}" <a href="{{ route('admin.halaman_verifikasi') }}"
class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}"> class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}">
<i class="fas fa-check-circle"></i> <i class="fas fa-check-circle"></i>
<span>Verifikasi Data</span> <span>Verifikasi Dokumen</span>
</a> </a>
<a href="{{ route('admin.monitoring-pemesanan') }}" <a href="{{ route('admin.monitoring-pemesanan') }}"

View File

@ -862,6 +862,12 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<span>Dashboard</span> <span>Dashboard</span>
</a> </a>
<a href="{{ route('admin.data_user') }}"
class="nav-item {{ request()->routeIs('admin.data_user') ? 'active' : '' }}">
<i class="fas fa-user"></i>
<span>Data User</span>
</a>
<div class="nav-group" id="propertiMenu"> <div class="nav-group" id="propertiMenu">
<div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')"> <div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')">
<i class="fas fa-house"></i> <i class="fas fa-house"></i>
@ -883,7 +889,7 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<a href="{{ route('admin.halaman_verifikasi') }}" <a href="{{ route('admin.halaman_verifikasi') }}"
class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}"> class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}">
<i class="fas fa-check-circle"></i> <i class="fas fa-check-circle"></i>
<span>Verifikasi Data</span> <span>Verifikasi Dokumen</span>
</a> </a>
<a href="{{ route('admin.monitoring-pemesanan') }}" <a href="{{ route('admin.monitoring-pemesanan') }}"

View File

@ -989,6 +989,12 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<span>Dashboard</span> <span>Dashboard</span>
</a> </a>
<a href="{{ route('admin.data_user') }}"
class="nav-item {{ request()->routeIs('admin.data_user') ? 'active' : '' }}">
<i class="fas fa-user"></i>
<span>Data User</span>
</a>
<div class="nav-group" id="propertiMenu"> <div class="nav-group" id="propertiMenu">
<div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')"> <div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')">
<i class="fas fa-house"></i> <i class="fas fa-house"></i>
@ -1010,7 +1016,7 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<a href="{{ route('admin.halaman_verifikasi') }}" <a href="{{ route('admin.halaman_verifikasi') }}"
class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}"> class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}">
<i class="fas fa-check-circle"></i> <i class="fas fa-check-circle"></i>
<span>Verifikasi Data</span> <span>Verifikasi Dokumen</span>
</a> </a>
<a href="{{ route('admin.monitoring-pemesanan') }}" <a href="{{ route('admin.monitoring-pemesanan') }}"

View File

@ -620,6 +620,12 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<span>Dashboard</span> <span>Dashboard</span>
</a> </a>
<a href="{{ route('admin.data_user') }}"
class="nav-item {{ request()->routeIs('admin.data_user') ? 'active' : '' }}">
<i class="fas fa-user"></i>
<span>Data User</span>
</a>
<div class="nav-group" id="propertiMenu"> <div class="nav-group" id="propertiMenu">
<div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')"> <div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')">
<i class="fas fa-house"></i> <i class="fas fa-house"></i>
@ -641,7 +647,7 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<a href="{{ route('admin.halaman_verifikasi') }}" <a href="{{ route('admin.halaman_verifikasi') }}"
class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}"> class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}">
<i class="fas fa-check-circle"></i> <i class="fas fa-check-circle"></i>
<span>Verifikasi Data</span> <span>Verifikasi Dokumen</span>
</a> </a>
<a href="{{ route('admin.monitoring-pemesanan') }}" <a href="{{ route('admin.monitoring-pemesanan') }}"

View File

@ -800,6 +800,12 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<span>Dashboard</span> <span>Dashboard</span>
</a> </a>
<a href="{{ route('admin.data_user') }}"
class="nav-item {{ request()->routeIs('admin.data_user') ? 'active' : '' }}">
<i class="fas fa-user"></i>
<span>Data User</span>
</a>
<div class="nav-group" id="propertiMenu"> <div class="nav-group" id="propertiMenu">
<div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')"> <div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')">
<i class="fas fa-house"></i> <i class="fas fa-house"></i>
@ -821,7 +827,7 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<a href="{{ route('admin.halaman_verifikasi') }}" <a href="{{ route('admin.halaman_verifikasi') }}"
class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}"> class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}">
<i class="fas fa-check-circle"></i> <i class="fas fa-check-circle"></i>
<span>Verifikasi Data</span> <span>Verifikasi Dokumen</span>
</a> </a>
<a href="{{ route('admin.monitoring-pemesanan') }}" <a href="{{ route('admin.monitoring-pemesanan') }}"

View File

@ -1388,6 +1388,12 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<span>Dashboard</span> <span>Dashboard</span>
</a> </a>
<a href="{{ route('admin.data_user') }}"
class="nav-item {{ request()->routeIs('admin.data_user') ? 'active' : '' }}">
<i class="fas fa-user"></i>
<span>Data User</span>
</a>
<div class="nav-group" id="propertiMenu"> <div class="nav-group" id="propertiMenu">
<div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')"> <div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')">
<i class="fas fa-house"></i> <i class="fas fa-house"></i>
@ -1409,7 +1415,7 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<a href="{{ route('admin.halaman_verifikasi') }}" <a href="{{ route('admin.halaman_verifikasi') }}"
class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}"> class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}">
<i class="fas fa-check-circle"></i> <i class="fas fa-check-circle"></i>
<span>Verifikasi Data</span> <span>Verifikasi Dokumen</span>
</a> </a>
<a href="{{ route('admin.monitoring-pemesanan') }}" <a href="{{ route('admin.monitoring-pemesanan') }}"

View File

@ -599,6 +599,12 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<span>Dashboard</span> <span>Dashboard</span>
</a> </a>
<a href="{{ route('admin.data_user') }}"
class="nav-item {{ request()->routeIs('admin.data_user') ? 'active' : '' }}">
<i class="fas fa-user"></i>
<span>Data User</span>
</a>
<div class="nav-group" id="propertiMenu"> <div class="nav-group" id="propertiMenu">
<div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')"> <div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')">
<i class="fas fa-house"></i> <i class="fas fa-house"></i>
@ -620,7 +626,7 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<a href="{{ route('admin.halaman_verifikasi') }}" <a href="{{ route('admin.halaman_verifikasi') }}"
class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}"> class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}">
<i class="fas fa-check-circle"></i> <i class="fas fa-check-circle"></i>
<span>Verifikasi Data</span> <span>Verifikasi Dokumen</span>
</a> </a>
<a href="{{ route('admin.monitoring-pemesanan') }}" <a href="{{ route('admin.monitoring-pemesanan') }}"

View File

@ -698,6 +698,12 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<span>Dashboard</span> <span>Dashboard</span>
</a> </a>
<a href="{{ route('admin.data_user') }}"
class="nav-item {{ request()->routeIs('admin.data_user') ? 'active' : '' }}">
<i class="fas fa-user"></i>
<span>Data User</span>
</a>
<div class="nav-group" id="propertiMenu"> <div class="nav-group" id="propertiMenu">
<div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')"> <div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')">
<i class="fas fa-house"></i> <i class="fas fa-house"></i>
@ -719,7 +725,7 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<a href="{{ route('admin.halaman_verifikasi') }}" <a href="{{ route('admin.halaman_verifikasi') }}"
class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}"> class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}">
<i class="fas fa-check-circle"></i> <i class="fas fa-check-circle"></i>
<span>Verifikasi Data</span> <span>Verifikasi Dokumen</span>
</a> </a>
<a href="{{ route('admin.monitoring-pemesanan') }}" <a href="{{ route('admin.monitoring-pemesanan') }}"

View File

@ -630,6 +630,12 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<span>Dashboard</span> <span>Dashboard</span>
</a> </a>
<a href="{{ route('admin.data_user') }}"
class="nav-item {{ request()->routeIs('admin.data_user') ? 'active' : '' }}">
<i class="fas fa-user"></i>
<span>Data User</span>
</a>
<div class="nav-group" id="propertiMenu"> <div class="nav-group" id="propertiMenu">
<div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')"> <div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')">
<i class="fas fa-house"></i> <i class="fas fa-house"></i>
@ -651,7 +657,7 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<a href="{{ route('admin.halaman_verifikasi') }}" <a href="{{ route('admin.halaman_verifikasi') }}"
class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}"> class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}">
<i class="fas fa-check-circle"></i> <i class="fas fa-check-circle"></i>
<span>Verifikasi Data</span> <span>Verifikasi Dokumen</span>
</a> </a>
<a href="{{ route('admin.monitoring-pemesanan') }}" <a href="{{ route('admin.monitoring-pemesanan') }}"

View File

@ -915,6 +915,12 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<span>Dashboard</span> <span>Dashboard</span>
</a> </a>
<a href="{{ route('admin.data_user') }}"
class="nav-item {{ request()->routeIs('admin.data_user') ? 'active' : '' }}">
<i class="fas fa-user"></i>
<span>Data User</span>
</a>
<div class="nav-group" id="propertiMenu"> <div class="nav-group" id="propertiMenu">
<div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')"> <div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')">
<i class="fas fa-house"></i> <i class="fas fa-house"></i>
@ -936,7 +942,7 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<a href="{{ route('admin.halaman_verifikasi') }}" <a href="{{ route('admin.halaman_verifikasi') }}"
class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}"> class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}">
<i class="fas fa-check-circle"></i> <i class="fas fa-check-circle"></i>
<span>Verifikasi Data</span> <span>Verifikasi Dokumen</span>
</a> </a>
<a href="{{ route('admin.monitoring-pemesanan') }}" <a href="{{ route('admin.monitoring-pemesanan') }}"
@ -987,7 +993,9 @@ class="nav-item {{ request()->routeIs('admin.pesan_pelanggan') ? 'active' : '' }
<div class="verification-header"> <div class="verification-header">
<h2 class="verification-title"> <h2 class="verification-title">
Verifikasi Dokumen - {{ $user->nama_user }} Verifikasi Dokumen - {{ $user->nama_user }}
<small>{{ \Carbon\Carbon::parse($transaksi->tanggal_transaksi)->format('d/m/Y H:i') }}</small> <small>
{{ \Carbon\Carbon::parse($transaksi->dokumen->first()->uploaded_at)->format('d/m/Y H:i') }}
</small>
</h2> </h2>
</div> </div>

View File

@ -696,6 +696,12 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<span>Dashboard</span> <span>Dashboard</span>
</a> </a>
<a href="{{ route('admin.data_user') }}"
class="nav-item {{ request()->routeIs('admin.data_user') ? 'active' : '' }}">
<i class="fas fa-user"></i>
<span>Data User</span>
</a>
<div class="nav-group" id="propertiMenu"> <div class="nav-group" id="propertiMenu">
<div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')"> <div class="nav-item nav-parent" onclick="toggleMenu('propertiMenu')">
<i class="fas fa-house"></i> <i class="fas fa-house"></i>
@ -717,7 +723,7 @@ class="nav-item {{ request()->routeIs('admin.welcome') ? 'active' : '' }}">
<a href="{{ route('admin.halaman_verifikasi') }}" <a href="{{ route('admin.halaman_verifikasi') }}"
class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}"> class="nav-item {{ request()->routeIs('admin.halaman_verifikasi') ? 'active' : '' }}">
<i class="fas fa-check-circle"></i> <i class="fas fa-check-circle"></i>
<span>Verifikasi Data</span> <span>Verifikasi Dokumen</span>
</a> </a>
<a href="{{ route('admin.monitoring-pemesanan') }}" <a href="{{ route('admin.monitoring-pemesanan') }}"

View File

@ -302,6 +302,26 @@
.step-desc { font-size: 0.88rem; color: #475569; margin-bottom: 3px; line-height: 1.4; background: #f8fafc; padding: 8px 12px; border-radius: 8px; border: 1px solid #e2e8f0; } .step-desc { font-size: 0.88rem; color: #475569; margin-bottom: 3px; line-height: 1.4; background: #f8fafc; padding: 8px 12px; border-radius: 8px; border: 1px solid #e2e8f0; }
.step-date { font-size: 0.78rem; color: #94a3b8; margin-top: 4px; } .step-date { font-size: 0.78rem; color: #94a3b8; margin-top: 4px; }
/* BUTTON INVOICE */
.btn-invoice{
display:inline-flex;
align-items:center;
gap:6px;
margin-top:8px;
padding:6px 12px;
background:#1E3A5F;
color:#fff;
text-decoration:none;
border-radius:6px;
font-size:13px;
font-weight:600;
transition:.2s;
}
.btn-invoice:hover{
background:#7AB2D3;
}
/* Document Lists */ /* Document Lists */
.doc-list { display: flex; flex-direction: column; gap: 10px; } .doc-list { display: flex; flex-direction: column; gap: 10px; }
.doc-item { display: flex; align-items: center; justify-content: space-between; padding: 12px; background: #f8fafc; border-radius: 10px; border: 1px solid #e2e8f0; transition: 0.2s; } .doc-item { display: flex; align-items: center; justify-content: space-between; padding: 12px; background: #f8fafc; border-radius: 10px; border: 1px solid #e2e8f0; transition: 0.2s; }
@ -613,11 +633,6 @@ class="profile-avatar"
'desc' => 'Dokumen diverifikasi admin' 'desc' => 'Dokumen diverifikasi admin'
], ],
[
'title' => 'Proses Bank',
'desc' => 'Pelanggan sedang mengurus pengajuan KPR ke bank'
],
[ [
'title' => 'KPR Disetujui Bank', 'title' => 'KPR Disetujui Bank',
'desc' => 'Pelanggan telah mendapat persetujuan dari bank' 'desc' => 'Pelanggan telah mendapat persetujuan dari bank'
@ -818,20 +833,27 @@ class="profile-avatar"
<!-- DESKRIPSI --> <!-- DESKRIPSI -->
<div class="step-desc"> <div class="step-desc">
@if( @if(
$index == $currentIndex && $index == $currentIndex &&
$pemesanan->catatan_admin $pemesanan->catatan_admin
) )
{{ $pemesanan->catatan_admin }} {{ $pemesanan->catatan_admin }}
@else @else
{{ $step['desc'] }} {{ $step['desc'] }}
@endif @endif
{{-- Tombol Invoice --}}
@if($step['title'] == 'Pelunasan Pembayaran')
<div style="margin-top:10px;">
<a href="{{ route('invoice', $pemesanan->transaksi->id_transaksi) }}"
class="btn-invoice">
<i class="fas fa-file-invoice"></i>
Lihat Invoice
</a>
</div>
@endif
</div> </div>
<!-- TANGGAL / STATUS --> <!-- TANGGAL / STATUS -->
@ -1106,7 +1128,6 @@ class="doc-btn">
<!-- Action --> <!-- Action -->
<div class="doc-actions"> <div class="doc-actions">
<!-- Lihat --> <!-- Lihat -->
<a href="{{ asset('storage/' . $dokumen->path_file) }}" <a href="{{ asset('storage/' . $dokumen->path_file) }}"
target="_blank" target="_blank"
@ -1124,9 +1145,7 @@ class="doc-btn">
<i class="fas fa-download"></i> <i class="fas fa-download"></i>
Unduh Unduh
</a> </a>
</div> </div>
</div> </div>
@empty @empty
@ -1146,7 +1165,6 @@ class="doc-btn">
</div> </div>
<div class="doc-actions"> <div class="doc-actions">
<button class="doc-btn" <button class="doc-btn"
style="opacity:0.5; cursor:not-allowed;" style="opacity:0.5; cursor:not-allowed;"
disabled> disabled>
@ -1154,17 +1172,11 @@ class="doc-btn">
<i class="fas fa-clock"></i> <i class="fas fa-clock"></i>
Menunggu Menunggu
</button> </button>
</div> </div>
</div> </div>
@endforelse @endforelse
</div> </div>
</div> </div>
</main> </main>
<script> <script>

View File

@ -1246,7 +1246,7 @@ class="form-control"
<div class="payment-detail-row"> <div class="payment-detail-row">
<span class="payment-detail-label">Bank</span> <span class="payment-detail-label">Bank</span>
<span class="payment-detail-value"> <span class="payment-detail-value">
Bank BCA Bank Mandiri
</span> </span>
</div> </div>

View File

@ -1104,7 +1104,11 @@ class="action-btn btn-view">
</a> </a>
@endauth @endauth
<button class="action-btn btn-contact">Hubungi</button> <button
class="action-btn btn-contact"
onclick="window.location.href='{{ route('halaman-kontak') }}'">
Hubungi
</button>
</div> </div>
</div> </div>
</div> </div>

View File

@ -779,13 +779,6 @@ class="profile-avatar-img">
<span class="info-label">Alamat</span> <span class="info-label">Alamat</span>
<textarea name="alamat" class="form-input">{{ $user->alamat }}</textarea> <textarea name="alamat" class="form-input">{{ $user->alamat }}</textarea>
</div> </div>
<div class="info-item">
<span class="info-label">Pekerjaan</span>
<input type="text" name="pekerjaan"
value="{{ $user->pekerjaan }}" class="form-input">
</div>
</div> </div>
</div> </div>

View File

@ -763,7 +763,7 @@
<div class="rekening-box"> <div class="rekening-box">
<span id="nomorRekening"> <span id="nomorRekening">
1234567890 1430033363555
</span> </span>
<button <button
@ -989,7 +989,7 @@ class="btn btn-primary">
</div> </div>
<div class="action-buttons"> <div class="action-buttons">
<a href="{{ route('halaman-notifikasi') }}" <a href="{{ route('detail-pemesanan', $transaksi->pemesanan->id_pemesanan) }}"
class="btn btn-outline"> class="btn btn-outline">
<i class="fas fa-arrow-left"></i> <i class="fas fa-arrow-left"></i>
Kembali Kembali

View File

@ -405,7 +405,7 @@
<p class="form-subtitle">Daftar sekarang untuk mengakses semua fitur layanan kami</p> <p class="form-subtitle">Daftar sekarang untuk mengakses semua fitur layanan kami</p>
</div> </div>
<form method="POST" action="{{ route('register.proses') }}"> <form id="registerForm" method="POST" action="{{ route('register.proses') }}">
@csrf @csrf
<div class="form-group"> <div class="form-group">
@ -416,6 +416,7 @@
</span> </span>
<input type="text" <input type="text"
name="nama_user" name="nama_user"
id="fullName"
class="form-control" class="form-control"
placeholder="Masukkan nama lengkap Anda" placeholder="Masukkan nama lengkap Anda"
required> required>
@ -430,6 +431,7 @@ class="form-control"
</span> </span>
<input type="email" <input type="email"
name="email_user" name="email_user"
id="email"
class="form-control" class="form-control"
placeholder="Masukkan email Anda" placeholder="Masukkan email Anda"
required> required>
@ -444,6 +446,7 @@ class="form-control"
</span> </span>
<input type="text" <input type="text"
name="no_hp" name="no_hp"
id="phone"
class="form-control" class="form-control"
placeholder="Contoh: 081234567890" placeholder="Contoh: 081234567890"
required> required>
@ -499,6 +502,11 @@ class="form-control password-input"
</div> </div>
</div> </div>
<small id="passwordError"
style="color:red; display:none;">
Password tidak sama.
</small>
<script> <script>
// Toggle password visibility // Toggle password visibility
function setupPasswordToggle(toggleId, passwordId) { function setupPasswordToggle(toggleId, passwordId) {
@ -524,7 +532,6 @@ function setupPasswordToggle(toggleId, passwordId) {
// Form submission // Form submission
document.getElementById('registerForm').addEventListener('submit', function(e) { document.getElementById('registerForm').addEventListener('submit', function(e) {
e.preventDefault();
const fullName = document.getElementById('fullName').value; const fullName = document.getElementById('fullName').value;
const email = document.getElementById('email').value; const email = document.getElementById('email').value;
@ -552,7 +559,7 @@ function setupPasswordToggle(toggleId, passwordId) {
console.log('Register attempt:', { fullName, email, phone, password }); console.log('Register attempt:', { fullName, email, phone, password });
alert('Pendaftaran berhasil! Silakan login dengan akun Anda.'); alert('Pendaftaran berhasil! Silakan login dengan akun Anda.');
window.location.href = 'login.html'; window.location.href = "{{ route('login') }}";
}); });
// Add subtle animation on page load // Add subtle animation on page load
@ -567,6 +574,28 @@ function setupPasswordToggle(toggleId, passwordId) {
registerContainer.style.transform = 'translateY(0)'; registerContainer.style.transform = 'translateY(0)';
}, 100); }, 100);
}); });
document.getElementById("registerForm").addEventListener("submit", function(e){
if(password.value !== confirmPassword.value){
e.preventDefault();
error.style.display = "block";
confirmPassword.focus();
}
});
const password = document.getElementById("password");
const confirmPassword = document.getElementById("confirmPassword");
const error = document.getElementById("passwordError");
confirmPassword.addEventListener("input", function () {
if (password.value !== confirmPassword.value) {
error.style.display = "block";
} else {
error.style.display = "none";
}
});
</script> </script>
</body> </body>
</html> </html>

View File

@ -301,6 +301,8 @@
// [TransaksiController::class, 'storePembayaranLunas'] // [TransaksiController::class, 'storePembayaranLunas']
// )->name('pembayaran.lunas.store'); // )->name('pembayaran.lunas.store');
// YANG LAMA INI
Route::get( Route::get(
'/pembayaran-lunas/berhasil/{id}', '/pembayaran-lunas/berhasil/{id}',
function ($id) { function ($id) {