diff --git a/app/Http/Controllers/CustomerController.php b/app/Http/Controllers/CustomerController.php index d53a1e0..182ccff 100644 --- a/app/Http/Controllers/CustomerController.php +++ b/app/Http/Controllers/CustomerController.php @@ -18,7 +18,7 @@ class CustomerController extends Controller public function dataOrder(){ $search = request('search'); $jenis_menu = request('jenis_menu'); - $perPage = request()->get('per_page', 6); + $perPage = request()->get('per_page', 12); if($jenis_menu === "paket"){ return self::dataPaketMenuOrder($search, $perPage); } @@ -102,65 +102,77 @@ class CustomerController extends Controller - private static function dataPaketMenuOrder($search = null, $perPage){ - $query = DB::connection('dbOrderGizi')->table('public.master_paket_menu as mpn')->where('mpn.statusenabled', true); - - if(!empty($search)){ - $query->where('mpn.nama_paket', 'ILIKE', '%' . $search . '%'); - } + private static function dataPaketMenuOrder($search = null, $perPage){ + $query = DB::connection('dbOrderGizi')->table('public.master_paket_menu as mpn')->where('mpn.statusenabled', true); - $paginated = $query->select( - 'mpn.master_paket_menu_id', - 'mpn.nama_paket', - 'mpn.foto', - 'mpn.harga_public', - 'mpn.harga_karyawan', - 'mpn.harga_keluarga_pasien', - 'mpn.deskripsi', - 'mpn.status' - )->paginate($perPage); - - $paketMenuIds = collect($paginated->items())->pluck('master_paket_menu_id')->toArray(); - - $klasifikasi = DB::connection('dbOrderGizi') - ->table('public.klasifikasi_menu_diet as kmd') - ->join('public.kategori_diet as kd', 'kd.kategori_diet_id', '=', 'kmd.kategori_diet_id') - ->whereIn('kmd.master_paket_menu_id', $paketMenuIds) - ->select('kmd.master_paket_menu_id', 'kd.kategori_diet_id', 'kd.nama_kategori_diet') - ->get() - ->groupBy('master_paket_menu_id'); + if(!empty($search)){ + $query->where('mpn.nama_paket', 'ILIKE', '%' . $search . '%'); + } - $result = collect($paginated->items())->map(function ($paketMenu) use ($klasifikasi) { - return [ - 'master_paket_menu_id' => $paketMenu->master_paket_menu_id, - 'nama' => $paketMenu->nama_paket, - 'foto' => $paketMenu->foto, - 'jenis_menu' => "paket", - 'harga_public' => $paketMenu->harga_public, - 'harga_karyawan' => $paketMenu->harga_karyawan, - 'harga_keluarga_pasien' => $paketMenu->harga_keluarga_pasien, - 'status' => $paketMenu->status, - 'deskripsi' => $paketMenu->deskripsi, - 'klasifikasiMenu' => isset($klasifikasi[$paketMenu->master_paket_menu_id]) ? $klasifikasi[$paketMenu->master_paket_menu_id]->map(function ($item) { - return [ - 'kategori_diet_id' => $item->kategori_diet_id, - 'nama_kategori_diet' => $item->nama_kategori_diet, - ]; - })->values() : [], - ]; - }); - + $paginated = $query->select( + 'mpn.master_paket_menu_id', + 'mpn.nama_paket', + 'mpn.foto', + 'mpn.harga_public', + 'mpn.harga_karyawan', + 'mpn.harga_keluarga_pasien', + 'mpn.deskripsi', + 'mpn.status' + )->paginate($perPage); - return response()->json([ - 'status' => true, - 'message' => 'Berhasil mendapatkan data', - 'data' => [ - 'data' => $result, - 'current_page' => $paginated->currentPage(), - 'last_page' => $paginated->lastPage(), - 'per_page' => $paginated->perPage(), - 'total' => $paginated->total(), - ] - ]); - } + $paketMenuIds = collect($paginated->items())->pluck('master_paket_menu_id')->toArray(); + + $klasifikasi = DB::connection('dbOrderGizi') + ->table('public.klasifikasi_menu_diet as kmd') + ->join('public.kategori_diet as kd', 'kd.kategori_diet_id', '=', 'kmd.kategori_diet_id') + ->whereIn('kmd.master_paket_menu_id', $paketMenuIds) + ->select('kmd.master_paket_menu_id', 'kd.kategori_diet_id', 'kd.nama_kategori_diet') + ->get() + ->groupBy('master_paket_menu_id'); + + $result = collect($paginated->items())->map(function ($paketMenu) use ($klasifikasi) { + return [ + 'master_paket_menu_id' => $paketMenu->master_paket_menu_id, + 'nama' => $paketMenu->nama_paket, + 'foto' => $paketMenu->foto, + 'jenis_menu' => "paket", + 'harga_public' => $paketMenu->harga_public, + 'harga_karyawan' => $paketMenu->harga_karyawan, + 'harga_keluarga_pasien' => $paketMenu->harga_keluarga_pasien, + 'status' => $paketMenu->status, + 'deskripsi' => $paketMenu->deskripsi, + 'klasifikasiMenu' => isset($klasifikasi[$paketMenu->master_paket_menu_id]) ? $klasifikasi[$paketMenu->master_paket_menu_id]->map(function ($item) { + return [ + 'kategori_diet_id' => $item->kategori_diet_id, + 'nama_kategori_diet' => $item->nama_kategori_diet, + ]; + })->values() : [], + ]; + }); + + + return response()->json([ + 'status' => true, + 'message' => 'Berhasil mendapatkan data', + 'data' => [ + 'data' => $result, + 'current_page' => $paginated->currentPage(), + 'last_page' => $paginated->lastPage(), + 'per_page' => $paginated->perPage(), + 'total' => $paginated->total(), + ] + ]); + } + + public function checkout(){ + $payload = [ + 'title' => 'Checkout ' + ]; + return view('guest.checkout_payment', $payload); + } + + public function submitCheckout(){ + $dataCart = json_decode(request('cart_data'), true); + dd(request()->all()); + } } diff --git a/app/Models/Order.php b/app/Models/Order.php index 103c9ea..3a1b875 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -6,5 +6,22 @@ use Illuminate\Database\Eloquent\Model; class Order extends Model { - // + protected $connection = 'dbOrderGizi'; + protected $table = 'public.order'; + public $timestamps = false; + protected $primaryKey = "order_id"; + protected $fillable =[ + 'entry_at', + 'modified_at', + 'no_order', + 'statusenabled', + 'kode_order', + 'nama_menu', + 'foto', + 'jenis_menu', + 'harga_public', + 'harga_karyawan', + 'deskripsi', + 'status' + ]; } diff --git a/public/gambar/1.jpg b/public/gambar/1.jpg new file mode 100644 index 0000000..d187418 Binary files /dev/null and b/public/gambar/1.jpg differ diff --git a/public/gambar/2.jpg b/public/gambar/2.jpg new file mode 100644 index 0000000..6813cdf Binary files /dev/null and b/public/gambar/2.jpg differ diff --git a/public/gambar/3.jpeg b/public/gambar/3.jpeg new file mode 100644 index 0000000..4e57e98 Binary files /dev/null and b/public/gambar/3.jpeg differ diff --git a/public/js/checkout/index.js b/public/js/checkout/index.js new file mode 100644 index 0000000..5d967b0 --- /dev/null +++ b/public/js/checkout/index.js @@ -0,0 +1,42 @@ + + +document.addEventListener('DOMContentLoaded', () => { + $("#cartButton").addClass('d-none'); + const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); + if (cart.length === 0) { + window.location.href="/" + return + } + + function toggleCustomerFields() { + const selected = $('input[name="jenis_customer"]:checked').val(); + + if (selected === 'Karyawan RSAB Harapan Kita') { + $('.karyawan').show(); + $('.pasien').hide(); + } else if (selected === 'Keluarga Pasien / Penunggu Pasien') { + $('.pasien').show(); + $('.karyawan').hide(); + } else { + $('.karyawan, .pasien').hide(); + } + } + + // Jalankan saat load awal (jika radio sudah terpilih) + toggleCustomerFields(); + + // Jalankan saat user memilih salah satu radio + $('input[name="jenis_customer"]').on('change', function() { + toggleCustomerFields(); + }); + + $("#checkoutFormFinal").on('submit', function(e){ + if(cart.length === 0){ + e.preventDefault(); + alert("Keranjang kosong. Silakan pilih menu terlebih dahulu!"); + return; + } + document.getElementById('cart_data').value = JSON.stringify(cart) + }); +}); + diff --git a/public/js/order_guest/checkout.js b/public/js/order_guest/checkout.js new file mode 100644 index 0000000..d31d05b --- /dev/null +++ b/public/js/order_guest/checkout.js @@ -0,0 +1,193 @@ +let orderIndex = 0; + function addOrderRow(data = {}) { + orderIndex++; + + const html = ` +
Memuat data....
'); + function fetchMenu(filter = {}) { + const containerGuest = $("#order_guest_id"); + let params = new URLSearchParams({ + page: filter.page || 1, + per_page: filter.per_page || 12, + search: filter.search || '', + jenis_menu: filter.jenis_menu || '' + }).toString(); - fetch(`/datamenu?${params}`) - .then(res => res.json()) - .then(res => { - if (!res.status){ - return containerGuest.html('Gagal Memuat Data...
'); - } - const session = JSON.parse(sessionStorage.getItem('customerData') || '{}') - let cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); - if(cart.length > 0){ - updateCartCount(cart.length) - } - if(session.nama_customer){ - $("#welcomeMessage").html(`Selamat Datang, ${session.nama_customer} !`) - } - const menus = res.data.data || []; - - if (menus.length === 0){ - return containerGuest.html('Pencarian tidak ditemukan.
'); - } - let html = '
+ containerGuest.html('Memuat data....
'); + + fetch(`/datamenu?${params}`) + .then(res => res.json()) + .then(res => { + if (!res.status){ + return containerGuest.html('Gagal Memuat Data...
'); + } + const session = JSON.parse(sessionStorage.getItem('customerData') || '{}') + let cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); + if(cart.length > 0){ + updateCartCount(cart.length) + } + if(session.nama_customer){ + $("#welcomeMessage").html(`Selamat Datang, ${session.nama_customer} !`) + } + const menus = res.data.data || []; + + if (menus.length === 0){ + return containerGuest.html('Pencarian tidak ditemukan.
'); + } + let html = '
+
+
+ Rp ${parseInt(hargaResult).toLocaleString('id-ID')}
-${menu.deskripsi || ''}
-Terjadi kesalahan saat memuat data.
'); + console.error(err); + }); + } + + const modalCheckout = $("#checkoutModal") + function orderMenu(e){ + const klasifikasiStr = $(e).data('klasifikasi_menu') || ''; + const tags = klasifikasiStr.split(',').map(tag => tag.trim()).filter(tag => tag !== '') + + const klasifikasiMenu =tags.map(tag => ` + ${tag} + `).join(''); + + modalCheckout.modal("show") + $('#cathering_order_photo').attr('src', `/gambar/${$(e).data('foto')}`) + $('#cathering_order_name').text($(e).data('nama_menu')) + $('#cathering_order_menu_id').text($(e).data('id')) + $('#cathering_order_jenis_menu').text($(e).data('jenis_menu')) + $('#cathering_order_deskripsi').text($(e).data('deskripsi')) + $('#cathering_order_price_keluarga_pasien').text("Rp " + parseInt($(e).data('harga_keluarga_pasien')).toLocaleString('id-ID')) + $('#cathering_order_price_karyawan').text("Rp " + parseInt($(e).data('harga_karyawan')).toLocaleString('id-ID')) + $("#tag_klasifikasi_menu").html(klasifikasiMenu) + } + + function updateCartCount(count) { + const $cartCount = $('#cartCount'); + if (count > 0) { + $cartCount.text(count).show(); + let cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); + console.log(cart); + + let menuNames = cart.map(item => item.nama_menu).join(', '); + const maxLength = 50; + + if (menuNames.length > maxLength) { + menuNames = menuNames.substring(0, maxLength).trim() + '...'; } - containerGuest.html(html); - }) - .catch(err => { - containerGuest.html('Terjadi kesalahan saat memuat data.
'); - console.error(err); - }); -} + $('#floatingCartButton').removeClass('d-none'); + $('#floatingCartCount').text(cart.length); + $('#floatingCartDesc').text(menuNames); - -const modalCheckout = $("#checkoutModal") -function orderMenu(e){ - const klasifikasiStr = $(e).data('klasifikasi_menu') || ''; - const tags = klasifikasiStr.split(',').map(tag => tag.trim()).filter(tag => tag !== '') - - const klasifikasiMenu =tags.map(tag => ` - ${tag} - `).join(''); - - modalCheckout.modal("show") - $('#cathering_order_photo').attr('src', `/gambar/${$(e).data('foto')}`) - $('#cathering_order_name').text($(e).data('nama_menu')) - $('#cathering_order_price').text("Rp " + parseInt($(e).data('harga')).toLocaleString('id-ID')) - $("#tag_klasifikasi_menu").html(klasifikasiMenu) - $('#order_input_wrapper').empty(); - addOrderRow(); -} - - -let orderIndex = 0; -function addOrderRow(data = {}) { - orderIndex++; - - const html = ` -