diff --git a/app/Http/Controllers/CustomerController.php b/app/Http/Controllers/CustomerController.php index c785db9..0c96777 100644 --- a/app/Http/Controllers/CustomerController.php +++ b/app/Http/Controllers/CustomerController.php @@ -6,15 +6,18 @@ use App\Mail\NotifikasiCustomer; use App\Mail\NotifikasiPembayaran; use App\Models\JadwalKonsul; use App\Models\Karbohidrat; +use App\Models\Karyawan; use App\Models\MasterMcu; use App\Models\Order; use App\Models\OrderDetail; +use App\Models\UnitInstalasi; use Carbon\Carbon; use Carbon\CarbonPeriod; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Mail; use Illuminate\Support\Str; +use Illuminate\Support\Facades\Validator; class CustomerController extends Controller { @@ -288,6 +291,10 @@ class CustomerController extends Controller 'alamat' => $biodataResult['alamat'], 'entry_at' => Carbon::now()->format('Y-m-d H:i:s.u'), ]; + if($jenisCustomer === "Karyawan RSAB Harapan Kita"){ + $nip_pns = Karyawan::where('namalengkap',$biodataResult['nama_pemesan'])->first()->nip_pns; + $payloadOrder['nip'] = $nip_pns ?? null; + } $order = Order::create($payloadOrder); foreach ($dataCart as $cart) { $payloadOrderDetail = [ @@ -555,4 +562,52 @@ class CustomerController extends Controller ]; return view('guest.success_page', $payload); } + + public function karyawan(Request $request) + { + $search = trim($request->input('search')); + + // 1. Validasi dulu + $validator = Validator::make( + ['search' => $search], + ['search' => 'required|string|min:2|max:50|regex:/^[a-zA-Z.\s]+$/'] + ); + if ($validator->fails()) { + return response()->json(['error' => 0, 'data' => []]); + } + + // 2. Baru query kalau ada keyword + $data =Karyawan::where('statusenabled', true) + ->where('namalengkap', 'ILIKE', "%{$search}%") + ->limit(5) + ->pluck('namalengkap') // langsung ambil string + ->map(fn($nama) => ['label' => $nama]); + + return response()->json(['error' => 0, 'data' => $data]); + } + + public function unitInstalasi(Request $request) + { + $search = trim($request->input('search')); + + // 1. Validasi dulu + $validator = Validator::make( + ['search' => $search], + ['search' => 'required|string|min:2|max:50|regex:/^[a-zA-Z.\s]+$/'] + ); + if ($validator->fails()) { + return response()->json(['error' => 0, 'data' => []]); + } + + // 2. Baru query kalau ada keyword + $data = UnitInstalasi::where('statusenabled', true) + ->select('name') + ->where('name', 'ILIKE', "%{$search}%") + ->limit(5) + ->get() + ->map(fn($row) => ['label' => $row->name]); + + return response()->json(['error' => 0, 'data' => $data]); + } } + diff --git a/app/Models/Karyawan.php b/app/Models/Karyawan.php new file mode 100644 index 0000000..7a3a0d4 --- /dev/null +++ b/app/Models/Karyawan.php @@ -0,0 +1,16 @@ + env('APP_TIMEZONE', 'utc' ), ], + 'dbKaryawan' => [ + 'driver' => 'pgsql', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST_KARYAWAN', '127.0.0.1'), + 'port' => env('DB_PORT_KARYAWAN', '3306'), + 'database' => env('DB_DATABASE_KARYAWAN', 'laravel'), + 'username' => env('DB_USERNAME_KARYAWAN', 'root'), + 'password' => env('DB_PASSWORD_KARYAWAN', ''), + 'charset' => env('DB_CHARSET', 'utf8'), + 'prefix' => '', + 'prefix_indexes' => true, + 'search_path' => 'public', + 'sslmode' => 'prefer', + 'prefix' => '', + 'prefix_indexes' => true, + 'search_path' => 'public', + 'sslmode' => 'prefer', + 'timezone' => env('APP_TIMEZONE', 'utc' ), + ], + + + ], /* diff --git a/env_prod b/env_prod index 73ddb2b..fc3d20d 100644 --- a/env_prod +++ b/env_prod @@ -27,12 +27,12 @@ DB_DATABASE_ORDER_GIZI = order_gizi DB_USERNAME_ORDER_GIZI = simrs DB_PASSWORD_ORDER_GIZI = @S1mrs.3205@ -DB_CONNECTION_ORDER_GIZI= pgsql -DB_HOST_ORDER_GIZI = 172.16.88.22 -DB_PORT_ORDER_GIZI = 5432 -DB_DATABASE_ORDER_GIZI = order_gizi -DB_USERNAME_ORDER_GIZI = simrs -DB_PASSWORD_ORDER_GIZI = @S1mrs.3205@ +DB_CONNECTION_AUTH_KARYAWAN = pgsql +DB_HOST_KARYAWAN = psql1.rsabhk.lan +DB_PORT_KARYAWAN = 5432 +DB_DATABASE_KARYAWAN = rsab_hk_production +DB_USERNAME_KARYAWAN = postgres +DB_PASSWORD_KARYAWAN = postgres DB_CONNECTION_AUTH_DEV = pgsql DB_HOST_AUTH_DEV = 172.16.88.22 diff --git a/public/cara_pesan/order_karyawan.png b/public/cara_pesan/order_karyawan.png new file mode 100644 index 0000000..037baaf Binary files /dev/null and b/public/cara_pesan/order_karyawan.png differ diff --git a/public/cara_pesan/order_keluarga_pasien.png b/public/cara_pesan/order_keluarga_pasien.png new file mode 100644 index 0000000..820f7ab Binary files /dev/null and b/public/cara_pesan/order_keluarga_pasien.png differ diff --git a/public/cara_pesan/order_masyarakat_umum.png b/public/cara_pesan/order_masyarakat_umum.png new file mode 100644 index 0000000..5299ae6 Binary files /dev/null and b/public/cara_pesan/order_masyarakat_umum.png differ diff --git a/public/js/checkout/index.js b/public/js/checkout/index.js index 9f0662f..7c49657 100644 --- a/public/js/checkout/index.js +++ b/public/js/checkout/index.js @@ -224,18 +224,38 @@ function showStep(index) { // ======================= function toggleCustomerFields() { const selected = $('input[name="jenis_customer"]:checked').val(); - if (selected === 'Karyawan RSAB Harapan Kita') { - $('.karyawan').show(); - $('.pasien, .umum').hide(); - } else if (selected === 'Keluarga Pasien / Penunggu Pasien') { - $('.pasien').show(); - $('.karyawan, .umum').hide(); - } else { - $('.umum').show(); - $('.karyawan, .pasien').hide(); + const $nama = $('#nama_pemesan'); + + // Sembunyikan semua section + $('.karyawan, .pasien, .umum').hide(); + + // Destroy jika sudah ada selectize + if ($nama[0] && $nama[0].selectize) { + $nama[0].selectize.destroy(); + } + + + switch (selected) { + case 'Karyawan RSAB Harapan Kita': + $('.karyawan').show(); + $nama.val('') + $nama.removeClass('form-control') + $("#help_nama_pemesan").removeClass('d-none') + selectKaryawan(); // inisialisasi ulang selectize + break; + case 'Keluarga Pasien / Penunggu Pasien': + $('.pasien').show(); + $nama.addClass('form-control') + $("#help_nama_pemesan").addClass('d-none') + break; + + default: // Masyarakat Umum + $('.umum').show(); + $nama.addClass('form-control') + $("#help_nama_pemesan").addClass('d-none') + break; } } - $('input[name="jenis_customer"]').on('change', toggleCustomerFields); toggleCustomerFields(); @@ -246,7 +266,9 @@ if (typeof checkout_biodata === 'object') { if(checkout_biodata.jenis_kelamin){ $(`input[name="jenis_kelamin"][value="${checkout_biodata.jenis_kelamin}"]`).prop('checked', true); } - $('#nama_pemesan').val(checkout_biodata.nama_pemesan); + if(checkout_biodata.jenis_customer !== 'Karyawan RSAB Harapan Kita'){ + $('#nama_pemesan').val(checkout_biodata.nama_pemesan); + } // $('#tanggal_lahir').val(checkout_biodata.tanggal_lahir); $('#tinggi_badan').val(checkout_biodata.tinggi_badan); $('#berat_badan').val(checkout_biodata.berat_badan); @@ -266,7 +288,7 @@ function isiKonfirmasi() { jenis_customer: $('input[name="jenis_customer"]:checked').val(), nama_pemesan: $('#nama_pemesan').val(), jenis_kelamin: $('input[name="jenis_kelamin"]:checked').val(), - // tanggal_lahir: $('#tanggal_lahir').val(), + id_karyawan: $('#id_karyawan').val(), tinggi_badan: $('#tinggi_badan').val(), berat_badan: $('#berat_badan').val(), no_whatsapp: $('#no_whatsapp').val(), @@ -293,6 +315,7 @@ function renderCartSummary() { container.innerHTML = ''; let totalKeseluruhan = 0; const carts = JSON.parse(sessionStorage.getItem('cart') || '[]'); + const checkout_biodata = JSON.parse(sessionStorage.getItem('checkout_biodata') || '[]'); carts.forEach((item) => { const pesananList = Array.isArray(item.pesanan) ? item.pesanan : []; @@ -438,31 +461,58 @@ function renderCartSummary() {
-
-
${item.nama_menu}
-
Rp ${parseInt(harga).toLocaleString('id-ID')}
- ${item?.kalori ? `
Kalori : ${item?.kalori} kal
` : ''} +
+ +

${item.nama_menu}

- ${item.deskripsi ? `

${item.deskripsi}

` : ''} -
- ${item.apakah_someday - ? 'Tersedia setiap hari (Senin - Minggu)' - : (item.tgl_tersedia ? `Tersedia pada tanggal: ${item.tgl_tersedia}` : 'Tidak ada info tanggal tersedia')} -
-
- Menu: ${item.apakah_someday ? 'Sameday' : 'Menu Normal'} -
+ +
+ ${checkout_biodata?.jenis_customer === "Karyawan RSAB Harapan Kita" + ? 'Harga Karyawan' + : 'Harga' + } + Rp ${parseInt(harga).toLocaleString('id-ID')} +
-
Silahkan isi tanggal pemesanan, pilih karbohidrat dan catatan pemesanan (opsional) yang diinginkan
- ${pesananHTML} -
- + + ${item?.kalori ? `
Kalori: ${item.kalori} kal
` : ''} -
Total: Rp ${itemTotal.toLocaleString('id-ID')}
-
+ + ${item.deskripsi ? `

${item.deskripsi}

` : ''} + + +
+
+ + ${item.apakah_someday + ? 'Tersedia setiap hari (Senin – Minggu)' + : (item.tgl_tersedia ? `Tersedia pada tanggal: ${item.tgl_tersedia}` : 'Tidak ada info tanggal tersedia') + } +
+
+ + ${item.apakah_someday ? 'Sameday' : 'Menu Normal'} +
+
+ + +
+ Petunjuk: Isi tanggal pemesanan, pilih karbohidrat, dan catatan tambahan (opsional). +
+ + + ${pesananHTML} + + +
+ + +
+ Total: Rp ${itemTotal.toLocaleString('id-ID')} +
+
@@ -922,3 +972,80 @@ document.getElementById('submitNote').addEventListener('click', function(e){ }) } }); + + +function selectKaryawan(){ + const $el = $('#nama_pemesan'); + + // 1. destroy jika sudah ada + if ($el[0] && $el[0].selectize) { + $el[0].selectize.destroy(); + } + $el.selectize({ + valueField: 'label', // sama dengan labelField + labelField: 'label', + searchField: ['label'], + create: false, + placeholder: "Cari nama karyawan...", + maxItems: 1, + load: function (query, callback) { + $.ajax({ + url: '/karyawan', + data: { search: query }, + success: res => callback(res.data || []), + error: () => callback([]) + }); + }, + render: { + option: (item, escape) => + `
${escape(item.label)}
`, + item: (item, escape) => `
${escape(item.label)}
` + } + }); +} + +selectUnitInstalasi() +function selectUnitInstalasi(){ + const bagian_instalasi = $('#bagian_instalasi'); + + // 1. destroy jika sudah ada + if (bagian_instalasi[0] && bagian_instalasi[0].selectize) { + bagian_instalasi[0].selectize.destroy(); + } + bagian_instalasi.selectize({ + valueField: 'label', + labelField: 'label', + searchField: ['label'], + create: false, + sortField: [], + placeholder: "Cari unit instalasi...", + maxItems:1, + load: function (query, callback) { + $.ajax({ + url: '/unit-instalasi', + data: { search: query }, + success: function (response) { + if (response.error === 0 && Array.isArray(response.data)) { + callback(response.data); + } else { + callback(); + } + }, + error: function () { + callback(); + } + }); + }, + render: { + option: function (item, escape) { + + return `
+
${escape(item.label)}
+
`; + }, + item: function (item, escape) { + return `
${escape(item?.label)}
`; + } + } + }); +} diff --git a/public/js/order_guest/functions.js b/public/js/order_guest/functions.js index 1039734..02c62e7 100644 --- a/public/js/order_guest/functions.js +++ b/public/js/order_guest/functions.js @@ -51,6 +51,8 @@ $(document).ready(function(){ fetchMenu(filterState) }, 300) }) + + }) function changePerPage(select) { diff --git a/public/js/order_guest/index.js b/public/js/order_guest/index.js index 7ff7f42..97b5cde 100644 --- a/public/js/order_guest/index.js +++ b/public/js/order_guest/index.js @@ -3,14 +3,152 @@ if (cart.length > 0) { $('#floatingCartButton').removeClass('d-none'); $('#menuBtn').removeClass('d-none'); - } + } + + }); - + function openImageModal(imageSrc, title) { + document.getElementById('modalImage').src = imageSrc; + document.getElementById('imageModalLabel').textContent = title; + $('#imageModal').modal('show'); + } function fetchMenu(filter = {}) { const containerGuest = $("#order_guest_id"); $("#tanggal-filter").removeClass('d-none'); + if (filter.jenis_menu === "cara_pesan") { + $("#tanggal-filter").addClass('d-none'); + const cara_pesan = [ + { + type: "Karyawan RSAB Harapan Kita", + gambar: "/cara_pesan/order_karyawan.png", + color: "success" + }, + { + type: "Keluarga Pasien / Penunggu Pasien", + gambar: "/cara_pesan/order_keluarga_pasien.png", + color: "success" + }, + { + type: "Masyarakat Umum", + gambar: "/cara_pesan/order_masyarakat_umum.png", + color: "success" + } + ]; + + let html = ` +
+
+

Cara Pemesanan

+
+ +
+ `; + + cara_pesan.forEach((cara, index) => { + html += ` +
+
+
+
+
+ + ${cara.type} + +
+
+
${cara.type}
+ Panduan pemesanan +
+ +
+
+ `; + }); + + + html += ` +
+
+ + + + + + `; + containerGuest.html(html); + + GLightbox({ + selector: '.glightbox', + touchNavigation: true, + loop: true, + zoomable: true, + autoplayVideos: true + }); + return + } + let params = new URLSearchParams({ page: filter.page || 1, @@ -45,7 +183,7 @@ $("#tanggal-filter").addClass('d-none'); let html = `
-

+

Jadwal Konsultasi

@@ -147,6 +285,11 @@ --soft-gray: #f8f9fa; --charcoal: #2d3436; } + .text-gradient { + background: linear-gradient(45deg, #667eea 0%, #764ba2 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + } .bg-gradient-primary { background: linear-gradient(135deg, var(--mint-dark) 0%, var(--mint) 100%); } diff --git a/resources/views/guest/cara_bayar.blade.php b/resources/views/guest/cara_bayar.blade.php new file mode 100644 index 0000000..575e5c2 --- /dev/null +++ b/resources/views/guest/cara_bayar.blade.php @@ -0,0 +1,13 @@ + diff --git a/resources/views/guest/checkout/step/step1.blade.php b/resources/views/guest/checkout/step/step1.blade.php index 9fd939d..e622551 100644 --- a/resources/views/guest/checkout/step/step1.blade.php +++ b/resources/views/guest/checkout/step/step1.blade.php @@ -40,6 +40,8 @@
+ +
Silakan cari dan pilih nama karyawan.
@@ -104,7 +106,7 @@ {{-- Karyawan --}}
- +
diff --git a/resources/views/guest/index.blade.php b/resources/views/guest/index.blade.php index 69e479e..8c35d7c 100644 --- a/resources/views/guest/index.blade.php +++ b/resources/views/guest/index.blade.php @@ -1,7 +1,7 @@ @extends('guest.layout.main') @section('body_main_guests') -
+
@@ -121,6 +121,7 @@
@include('guest.checkout_order') +@include('guest.cara_bayar') diff --git a/resources/views/guest/layout/main.blade.php b/resources/views/guest/layout/main.blade.php index 908de97..7d873a5 100644 --- a/resources/views/guest/layout/main.blade.php +++ b/resources/views/guest/layout/main.blade.php @@ -27,11 +27,27 @@ + {{-- Selectize --}} + {{-- Jquery --}} - + \ + + + diff --git a/routes/web.php b/routes/web.php index ba3e196..36b3194 100644 --- a/routes/web.php +++ b/routes/web.php @@ -98,6 +98,8 @@ Route::get('/check-order/search', [CustomerController::class, 'searchOrder']); Route::get('/order-mcu', [CustomerController::class, 'indexMcu']); Route::post('/order-mcu', [CustomerController::class, 'storeMcu']); Route::get('/success-mcu', [CustomerController::class, 'successMcu']); +Route::get('/karyawan', [CustomerController::class, 'karyawan']); +Route::get('/unit-instalasi', [CustomerController::class, 'unitInstalasi']); // Route::get('/send-mail', function(){ // Mail::to('skyjok14@gmail.com')->queue(new NotifikasiCustomer('Test'));