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 = ` +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ `; + $('#order_input_wrapper').append(html); + } + + function removeOrderRow(index) { + $(`#order_input_wrapper [data-row="${index}"]`).remove(); + } + function renderCartList() { + $("#cartSidebar").offcanvas('show') + $('#floatingCartButton').addClass('d-none'); + const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); + let total = 0; + + const html = cart.map(item => { + const hargaNum = parseInt(item.harga.replace(/[^\d]/g, '')); + let pesananHTML = ''; + + item.pesanan.forEach((p, i) => { + pesananHTML += ` +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ `; + }); + + const itemTotal = item.pesanan.reduce((sum, p) => sum + (p.jumlah * hargaNum), 0); + total += itemTotal; + + return ` +
+
+ +
+
${item.nama_menu}
+
${item.harga}
+
+
+ +
+ ${pesananHTML} + +
+ +
+
Total: Rp ${itemTotal.toLocaleString('id-ID')}
+ +
+
+ `; + }).join(''); + + $('#cartListContainer').html(html); + $('#cartTotal').text('Rp ' + total.toLocaleString('id-ID')); + } + + + function addOrderDate(itemId) { + const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); + const item = cart.find(i => i.id === itemId); + if (item) { + item.pesanan.push({ tgl: '', jumlah: 1 }); + sessionStorage.setItem('cart', JSON.stringify(cart)); + renderCartList(); + + } + } + + function removeOrderDate(itemId, index) { + const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); + const item = cart.find(i => i.id === itemId); + if (item && item.pesanan.length > index) { + item.pesanan.splice(index, 1); + sessionStorage.setItem('cart', JSON.stringify(cart)); + renderCartList(); + } + } + + function removeCartItem(itemId){ + let cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); + cart = cart.filter(i => i.id !== itemId); + sessionStorage.setItem('cart', JSON.stringify(cart)); + updateCartCount(cart.length); + renderCartList() + } + + function onJumlahChange(itemId, index) { + const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); + const jumlahInput = document.querySelector(`div[data-item-id='${itemId}'][data-index='${index}'] .jumlah-input`).value; + if (!isNaN(jumlahInput)) { + cart.forEach(item => { + if (item.id === itemId) { + item.pesanan[index].jumlah = parseInt(jumlahInput); + } + }); + sessionStorage.setItem('cart', JSON.stringify(cart)); + renderCartList(); + } + } + + function onTanggalChange(itemId, index) { + const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); + const tanggalInput = document.querySelector(`div[data-item-id='${itemId}'][data-index='${index}'] .tanggal-input`).value; + cart.forEach(item => { + if (item.id === itemId) { + item.pesanan[index].tgl = tanggalInput; + } + }); + sessionStorage.setItem('cart', JSON.stringify(cart)); + validateCheckoutButton(); + } + + function onKategoriChange(itemId, index) { + const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); + const item = cart.find(i => i.id === itemId); + if (!item) return; + + const kategori = $(`[data-item-id='${itemId}'][data-index='${index}'] .kategori-pemesanan-input`).val(); + item.pesanan[index].kategoriPemesanan = kategori; + sessionStorage.setItem('cart', JSON.stringify(cart)); + } + + + function renderCartTotalOnly() { + const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); + let total = 0; + cart.forEach(item => { + const hargaNum = parseInt(item.harga.replace(/[^\d]/g, '')); + const itemTotal = item.pesanan.reduce((sum, p) => sum + (p.jumlah * hargaNum), 0); + total += itemTotal; + }); + $('#cartTotal').text('Rp ' + total.toLocaleString('id-ID')); + } + + function updateFloatingCartButton() { + const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); + const totalItem = cart.reduce((sum, item) => { + return sum + item.pesanan.reduce((s, p) => s + p.jumlah, 0); + }, 0); + + const totalHarga = cart.reduce((sum, item) => { + const harga = parseInt(item.harga.replace(/[^\d]/g, '')); + return sum + item.pesanan.reduce((s, p) => s + (p.jumlah * harga), 0); + }, 0); + + if (cart.length > 0) { + $('#floatingCartButton').removeClass('d-none'); + $('#floatingCartCount').text(totalItem); + $('#floatingCartTotal').text('Rp ' + totalHarga.toLocaleString('id-ID')); + $('#floatingCartDesc').text(`Total pesanan dari ${cart[0].nama_menu}`); + } else { + $('#floatingCartButton').addClass('d-none'); + } + } diff --git a/public/js/order_guest/functions.js b/public/js/order_guest/functions.js index e705c8f..878c3db 100644 --- a/public/js/order_guest/functions.js +++ b/public/js/order_guest/functions.js @@ -4,7 +4,7 @@ $(document).ready(function(){ filterState ={ jenis_menu: jenisMenuAwal, search:'', - per_page: 6, + per_page: 12, } fetchMenu(filterState) diff --git a/public/js/order_guest/index.js b/public/js/order_guest/index.js index 359f5d2..13ef420 100644 --- a/public/js/order_guest/index.js +++ b/public/js/order_guest/index.js @@ -1,200 +1,215 @@ -$(document).ready(function () { - // Auto render setiap buka offcanvas - const cartSidebar = document.getElementById('cartSidebar'); - cartSidebar.addEventListener('shown.bs.offcanvas', renderCartList); - cartSidebar.addEventListener('hidden.bs.offcanvas', function () { - const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); - if (cart.length > 0) { - $('#floatingCartButton').removeClass('d-none'); - } - }); -}); + $(document).ready(function () { + // Auto render setiap buka offcanvas + + cartSidebar.addEventListener('shown.bs.offcanvas', renderCartList); + cartSidebar.addEventListener('hidden.bs.offcanvas', function () { + const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); + if (cart.length > 0) { + $('#floatingCartButton').removeClass('d-none'); + } + }); + }); -function fetchMenu(filter = {}) { - const containerGuest = $("#order_guest_id"); - let params = new URLSearchParams({ - page: filter.page || 1, - per_page: filter.per_page || 6, - search: filter.search || '', - jenis_menu: filter.jenis_menu || '' - }).toString(); - - containerGuest.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 = '
'; - menus.forEach(menu => { - let hargaResult = 0; - if(session.jenis_customer === "Karyawan RSAB Harapan Kita"){ - hargaResult = menu.harga_karyawan - }else if(session.jenis_customer === "Keluarga Pasien / Penunggu Pasien"){ - hargaResult = menu.harga_keluarga_pasien - }else{ - hargaResult = menu.harga_public - } - html += ` -
-
-
- -
- ${menu.nama_menu} + 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 = '
'; + menus.forEach(menu => { + html += ` +
+
+ + ${menu.nama_menu} + + +
${menu.nama}
+
+
Harga
+
Karyawan:
+
Rp ${parseInt(menu.harga_karyawan).toLocaleString('id-ID')}
+
Keluarga Pasien:
+
Rp ${parseInt(menu.harga_keluarga_pasien).toLocaleString('id-ID')}
- -
-
-
${menu.nama}
-

Rp ${parseInt(hargaResult).toLocaleString('id-ID')}

-

${menu.deskripsi || ''}

-
- ${(menu.klasifikasiMenu || []).map(tag => `${tag.nama_kategori_diet}`).join('')} -
+ + +
+ ${(menu.klasifikasiMenu || []) + .slice(0, 2) + .map(tag => { + const name = tag.nama_kategori_diet || ''; + const truncated = name.length > 12 ? name.substring(0, 12) + '...' : name; + return `${truncated}`; + }).join('')} + ${(menu.klasifikasiMenu || []).length > 2 + ? `+${(menu.klasifikasiMenu.length - 2)} lainnya` + : ''}
+ + +
+ +
- -
- -
-
- `; - }); - - html += '
'; - html += `
-
- - + + `; + }); + + html += '
'; + + html += `
`; + + if(res.data.total > 12){ + html +=`
+ +
` - // Pagination buttons - if (res.data.last_page > 1) { - html += ` -
`; - for (let i = 1; i <= res.data.last_page; i++) { - html += ` - `; } - html += `
`; + // Pagination buttons + if (res.data.last_page > 1) { + html += ` +
`; + for (let i = 1; i <= res.data.last_page; i++) { + html += ` + `; + } + html += `
`; + } + containerGuest.html(html); + }) + .catch(err => { + containerGuest.html('

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 = ` -
-
- -
-
- -
-
- -
-
- `; - $('#order_input_wrapper').append(html); -} - -function removeOrderRow(index) { - $(`#order_input_wrapper [data-row="${index}"]`).remove(); -} - - -function updateCartCount(count) { - const $cartCount = $('#cartCount'); - if (count > 0) { - $cartCount.text(count).show(); - let cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); - let totalHarga = cart.reduce((total, item) => { - const harga = parseInt(item.harga.replace(/[^\d]/g, '')) || 0; - const subtotal = item.pesanan.reduce((sum, p) => sum + (p.jumlah * harga), 0); - return total + subtotal; - }, 0); - $('#floatingCartButton').removeClass('d-none'); - $('#floatingCartCount').text(count); - $('#floatingCartTotal').text('Rp ' + totalHarga.toLocaleString('id-ID')); - $('#floatingCartDesc').text(cart[0].nama_menu); - - } else { - $cartCount.hide(); - $('#floatingCartButton').addClass('d-none'); - } -} + } else { + $cartCount.hide(); + $('#floatingCartButton').addClass('d-none'); + } + } $("#checkoutForm").on('submit', function(e){ - e.preventDefault(); - const orders = []; + e.preventDefault(); + let cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); - $("#order_input_wrapper .row").each(function(){ - const tgl = $(this).find('input[type="date"]').val(); - const jumlah = $(this).find('input[type="number"]').val(); - if(tgl && jumlah > 0){ - orders.push({ tgl, jumlah}) - } - }) - let existingItem = cart.find(item => item.nama_menu === $("#cathering_order_name").text()); + const now = new Date(); + const todayFormatted = now.getFullYear() + '-' + (now.getMonth() + 1).toString().padStart(2, '0') + '-' + now.getDate().toString().padStart(2, '0') + + const orders = [{ + tgl: todayFormatted, + jumlah: 1, + kategoriPemesanan: '' + }]; + // Dikomen dulu + // $("#order_input_wrapper .row").each(function(){ + // const tgl = $(this).find('input[type="date"]').val(); + // const jumlah = $(this).find('input[type="number"]').val(); + // const kategoriPemesanan = $(this).find('select').val(); + // if(tgl && kategoriPemesanan && jumlah > 0){ + // orders.push({ tgl, kategoriPemesanan, jumlah}) + // } + // }) + let idMenu = $("#cathering_order_menu_id").text().trim(); + let namaMenu = $("#cathering_order_name").text().trim(); + let existingItem = cart.find(item => item.id_menu === idMenu && item.nama_menu === namaMenu); if(existingItem){ orders.forEach(newOrder => { const existingOrder =existingItem.pesanan.find(p => p.tgl === newOrder.tgl) @@ -207,161 +222,73 @@ function updateCartCount(count) { }else{ const orderItem ={ id:Date.now(), + id_menu : $("#cathering_order_menu_id").text(), nama_menu : $("#cathering_order_name").text(), - harga : $("#cathering_order_price").text(), + harga_karyawan : $("#cathering_order_price_karyawan").text(), + harga_kp : $("#cathering_order_price_keluarga_pasien").text(), foto: $('#cathering_order_photo').attr('src'), + jenis_menu: $('#cathering_order_jenis_menu').text(), pesanan : orders } cart.push(orderItem) } - + sessionStorage.setItem('cart', JSON.stringify(cart)) updateCartCount(cart.length) modalCheckout.modal('hide') - }) + }) - function renderCartList() { - $("#cartSidebar").offcanvas('show') - $('#floatingCartButton').addClass('d-none'); - const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); - let total = 0; + function saveItem(e){ + let cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); - const html = cart.map(item => { - const hargaNum = parseInt(item.harga.replace(/[^\d]/g, '')); - let pesananHTML = ''; + const now = new Date(); + const todayFormatted = now.getFullYear() + '-' + (now.getMonth() + 1).toString().padStart(2, '0') + '-' + now.getDate().toString().padStart(2, '0') - item.pesanan.forEach((p, i) => { - pesananHTML += ` -
-
- -
-
- -
-
- -
-
- `; - }); + const orders = [{ + tgl: todayFormatted, + jumlah: 1, + kategoriPemesanan: '' + }]; - const itemTotal = item.pesanan.reduce((sum, p) => sum + (p.jumlah * hargaNum), 0); - total += itemTotal; - - return ` -
-
- -
-
${item.nama_menu}
-
${item.harga}
-
-
- -
- ${pesananHTML} - -
- -
-
Total: Rp ${itemTotal.toLocaleString('id-ID')}
- -
-
- `; - }).join(''); - - $('#cartListContainer').html(html); - $('#cartTotal').text('Rp ' + total.toLocaleString('id-ID')); - } - - - function addOrderDate(itemId) { - const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); - const item = cart.find(i => i.id === itemId); - if (item) { - item.pesanan.push({ tgl: '', jumlah: 1 }); - sessionStorage.setItem('cart', JSON.stringify(cart)); - renderCartList(); - - } - } - - function removeOrderDate(itemId, index) { - const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); - const item = cart.find(i => i.id === itemId); - if (item && item.pesanan.length > index) { - item.pesanan.splice(index, 1); - sessionStorage.setItem('cart', JSON.stringify(cart)); - renderCartList(); - } - } - - function removeCartItem(itemId){ - let cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); - cart = cart.filter(i => i.id !== itemId); - sessionStorage.setItem('cart', JSON.stringify(cart)); - updateCartCount(cart.length); - renderCartList() - } - - function onJumlahChange(itemId, index) { - const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); - const jumlahInput = document.querySelector(`div[data-item-id='${itemId}'][data-index='${index}'] .jumlah-input`).value; - if (!isNaN(jumlahInput)) { - cart.forEach(item => { - if (item.id === itemId) { - item.pesanan[index].jumlah = parseInt(jumlahInput); + let idMenu = $(e).data('id'); + let namaMenu = $(e).data('nama_menu'); + let existingItem = cart.find(item => item.id_menu === idMenu && item.nama_menu === namaMenu); + if(existingItem){ + orders.forEach(newOrder => { + const existingOrder =existingItem.pesanan.find(p => p.tgl === newOrder.tgl) + if(existingOrder){ + existingOrder.jumlah += newOrder.jumlah; + }else{ + existingItem.pesanan.push(newOrder) + } + }) + }else{ + const orderItem ={ + id:Date.now(), + id_menu : idMenu, + nama_menu : namaMenu, + harga_karyawan : $(e).data('harga_karyawan'), + harga_kp : $(e).data('harga_keluarga_pasien'), + foto: $(e).data('foto'), + jenis_menu: $(e).data('jenis_menu'), + pesanan : orders } - }); - sessionStorage.setItem('cart', JSON.stringify(cart)); - renderCartList(); - } - } - - function onTanggalChange(itemId, index) { - const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); - const tanggalInput = document.querySelector(`div[data-item-id='${itemId}'][data-index='${index}'] .tanggal-input`).value; - cart.forEach(item => { - if (item.id === itemId) { - item.pesanan[index].tgl = tanggalInput; + cart.push(orderItem) } - }); - sessionStorage.setItem('cart', JSON.stringify(cart)); - validateCheckoutButton(); + sessionStorage.setItem('cart', JSON.stringify(cart)) + updateCartCount(cart.length) } - function renderCartTotalOnly() { - const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); - let total = 0; - cart.forEach(item => { - const hargaNum = parseInt(item.harga.replace(/[^\d]/g, '')); - const itemTotal = item.pesanan.reduce((sum, p) => sum + (p.jumlah * hargaNum), 0); - total += itemTotal; - }); - $('#cartTotal').text('Rp ' + total.toLocaleString('id-ID')); + function checkout(){ + const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); + if(cart.length > 0){ + window.location.href = '/checkout' + }else{ + alert("Pilih Menu terlebih dahulu yang ingin dipesan !"); + return + } } - function updateFloatingCartButton() { - const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); - const totalItem = cart.reduce((sum, item) => { - return sum + item.pesanan.reduce((s, p) => s + p.jumlah, 0); - }, 0); - const totalHarga = cart.reduce((sum, item) => { - const harga = parseInt(item.harga.replace(/[^\d]/g, '')); - return sum + item.pesanan.reduce((s, p) => s + (p.jumlah * harga), 0); - }, 0); - if (cart.length > 0) { - $('#floatingCartButton').removeClass('d-none'); - $('#floatingCartCount').text(totalItem); - $('#floatingCartTotal').text('Rp ' + totalHarga.toLocaleString('id-ID')); - $('#floatingCartDesc').text(`Total pesanan dari ${cart[0].nama_menu}`); - } else { - $('#floatingCartButton').addClass('d-none'); - } - } + diff --git a/public/js/order_guest/register.js b/public/js/order_guest/register.js index bf77ebd..5126a8a 100644 --- a/public/js/order_guest/register.js +++ b/public/js/order_guest/register.js @@ -1,19 +1,19 @@ $(document).ready(function(){ - const modal = new bootstrap.Modal(document.getElementById('registerModal'), { - backdrop: 'static', // Tidak bisa klik luar - keyboard: false // Tidak bisa ESC - }); - if(!sessionStorage.getItem('customerData')){ - modal.show(); - } + // const modal = new bootstrap.Modal(document.getElementById('registerModal'), { + // backdrop: 'static', // Tidak bisa klik luar + // keyboard: false // Tidak bisa ESC + // }); + // if(!sessionStorage.getItem('customerData')){ + // modal.show(); + // } $("#formRegister").on('submit', function(e){ e.preventDefault() if(this.checkValidity()){ const formData =Object.fromEntries(new FormData(this).entries()) sessionStorage.setItem('customerData', JSON.stringify(formData)) - - modal.hide() + + modal.hide() if(formData.nama_customer){ $("#welcomeMessage").html(`Selamat Datang, ${formData.nama_customer} !`) } @@ -21,4 +21,4 @@ $(document).ready(function(){ this.reportValidity() } }) -}) \ No newline at end of file +}) diff --git a/resources/views/guest/checkout_order.blade.php b/resources/views/guest/checkout_order.blade.php index 044b097..26a856a 100644 --- a/resources/views/guest/checkout_order.blade.php +++ b/resources/views/guest/checkout_order.blade.php @@ -1,7 +1,7 @@ -
-
\ No newline at end of file +
diff --git a/resources/views/guest/checkout_payment.blade.php b/resources/views/guest/checkout_payment.blade.php new file mode 100644 index 0000000..dc2896e --- /dev/null +++ b/resources/views/guest/checkout_payment.blade.php @@ -0,0 +1,131 @@ +@extends('guest.layout.main') +@section('body_main_guests') + +
+
+
+

Checkout Order

+ + Kembali ke Menu + +
+ + + + {{-- Form Identitas --}} +
+ @csrf +
+ +
+ +
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + {{-- Pasien --}} +
+ + +
+
+ + +
+ +
+ + +
+ +
+ + +
+ {{-- End Pasien --}} + + {{-- Karyawan --}} +
+ + +
+
+ + +
+ {{-- End Karyawan --}} +
+ + +
+
+
+ + +@endsection diff --git a/resources/views/guest/index.blade.php b/resources/views/guest/index.blade.php index 45793c6..b09af39 100644 --- a/resources/views/guest/index.blade.php +++ b/resources/views/guest/index.blade.php @@ -13,6 +13,7 @@ +
@@ -22,26 +23,22 @@
-
-
-
- 0 item
- Isi keranjang anda -
-
- Rp 0 -
- +
+
+
+ 0 item
+ Isi keranjang anda +
+
+
+ +
-
- - -
diff --git a/resources/views/guest/keranjang.blade.php b/resources/views/guest/keranjang.blade.php index 992749c..da5d8b9 100644 --- a/resources/views/guest/keranjang.blade.php +++ b/resources/views/guest/keranjang.blade.php @@ -17,6 +17,6 @@ Total Bayar: Rp 0
- + Checkout
diff --git a/resources/views/guest/layout/partials/header.blade.php b/resources/views/guest/layout/partials/header.blade.php index b6bf4fb..2067e81 100644 --- a/resources/views/guest/layout/partials/header.blade.php +++ b/resources/views/guest/layout/partials/header.blade.php @@ -12,7 +12,7 @@