diff --git a/app/Http/Controllers/CustomerController.php b/app/Http/Controllers/CustomerController.php index 57bfb7e..3a1b1a8 100644 --- a/app/Http/Controllers/CustomerController.php +++ b/app/Http/Controllers/CustomerController.php @@ -28,7 +28,7 @@ class CustomerController extends Controller public function dataOrder(){ $search = request('search'); $jenis_menu = request('jenis_menu'); - $perPage = request()->get('per_page', 12); + $perPage = request()->get('per_page', 50); $tanggal_awal = (int) request('tanggal_awal'); $tanggal_akhir = (int) request('tanggal_akhir'); @@ -57,8 +57,7 @@ class CustomerController extends Controller // Step 2: Query menu $menuQuery = DB::connection('dbOrderGizi') ->table('public.master_menu as mn') - ->where('mn.statusenabled', true); - + ->where(['mn.statusenabled' => true, 'mn.status' => true]); if (!empty($jenis_menu)) { $menuQuery->where('mn.jenis_menu', 'ILIKE', '%' . $jenis_menu . '%'); } @@ -96,7 +95,6 @@ class CustomerController extends Controller )->get(); $menuIds = $menuItems->pluck('master_menu_id')->toArray(); - if (empty($menuIds)) { return self::emptyMenuResponse($perPage); } @@ -123,26 +121,22 @@ class CustomerController extends Controller ->get() ->groupBy('master_menu_id'); - function buildGroupLabel($tglList, $isSomeday){ - if($isSomeday) return 'Menu Sameday'; + function buildGroupLabel($tglList, $isSomeday){ + if($isSomeday) return 'Menu Sameday'; - if(empty($tglList)) return '-'; - $days = collect($tglList)->map(fn($t) => substr($t, -2)) - ->unique() - ->sort() - ->values(); - $groups = []; - foreach ($days as $d) { - $lastDigit = substr($d, -1); - $groups[$lastDigit][] = $d; + if(empty($tglList)) return '-'; + + $days = collect($tglList) + ->map(fn($t) => substr($t, -2)) + ->unique() + ->sort() + ->values(); + + // Jika semua tanggal memiliki digit terakhir yang sama, gabungkan + $tanggal = implode(',', $days->toArray()); + + return 'Menu Normal Tersedia Tanggal ' . $tanggal; } - // buat label - $labels = []; - foreach ($groups as $list) { - $labels[] = 'Menu Normal Tersedia Tanggal ' . implode(',', $list); - } - return implode(' & ', $labels); - } // Step 4: Transform response $enriched = $menuItems->map(function ($menu) use ($klasifikasi, $dmph, $kkal) { diff --git a/app/Http/Controllers/MenuController.php b/app/Http/Controllers/MenuController.php index df2e2ca..6c9d69e 100644 --- a/app/Http/Controllers/MenuController.php +++ b/app/Http/Controllers/MenuController.php @@ -58,7 +58,7 @@ class MenuController extends Controller 'status' => true, 'apakah_someday' => $data['kategori_menu'] === "Menu Normal" ? false : true, 'apakah_menu_siang' => (isset($data['apakah_menu_siang']) && $data['apakah_menu_siang'] === "iya") ? true : false, - 'apakah_menu_sore' => (isset($data['apakah_menu_sore']) && $data['apakah_menu_sore'] === "iya") ? true : false, + 'apakah_menu_sore' => (isset($data['apakah_menu_sore']) && $data['apakah_menu_sore'] === "iya") ? true : false ]; if($data['foto']){ @@ -115,7 +115,6 @@ class MenuController extends Controller ]); } catch (\Throwable $th) { DB::connection('dbOrderGizi')->rollBack(); - return response()->json([ 'status' => false, 'message' => 'Menu gagal ditambahkan!', @@ -169,7 +168,7 @@ class MenuController extends Controller 'status' => true, 'apakah_someday' => request('kategori_menu') === "Menu Normal" ? false : true, 'apakah_menu_siang' => (request('apakah_menu_siang') && request('apakah_menu_siang') === "iya") ? true : false, - 'apakah_menu_sore' => (request('apakah_menu_sore') && request('apakah_menu_sore') === "iya") ? true : false, + 'apakah_menu_sore' => (request('apakah_menu_sore') && request('apakah_menu_sore') === "iya") ? true : false ]; if(request()->hasFile('foto')){ $imageName = Str::random(15) . '.' . request('foto')->getClientOriginalExtension(); @@ -235,8 +234,8 @@ class MenuController extends Controller */ public function destroy(string $id) { - $data = Menu::where(['statusenabled' => true, 'master_menu_id' => $id])->first(); - $payload = [ + $data = Menu::where(['statusenabled' => true, 'master_menu_id' => $id])->first(); + $payload = [ 'statusenabled' => false, 'pegawai_id_entry' => auth()->user()->id, 'pegawai_nama_entry' => auth()->user()->full_name, @@ -342,4 +341,18 @@ class MenuController extends Controller 'message' => 'berhasil mendapatkan data' ]); } + + public function switchMenu(string $id, $status){ + $data = Menu::where('master_menu_id', $id)->first(); + $statusResult = $status === "true" ? true : false; + + $data->update([ + 'status' => $statusResult + ]); + return response()->json([ + 'status' => true, + 'message' => 'berhasil memperbarui data' + ], 200); + + } } diff --git a/app/Http/Controllers/PesananController.php b/app/Http/Controllers/PesananController.php index 51aa947..09de531 100644 --- a/app/Http/Controllers/PesananController.php +++ b/app/Http/Controllers/PesananController.php @@ -268,6 +268,7 @@ class PesananController extends Controller $q->where('status_order', 'Lunas'); }); $tanggal = request('tanggal'); + $status = request('status'); if(!empty($tanggal)){ $flattened = is_array($tanggal[0]) ? Arr::flatten($tanggal) : $tanggal; $data->whereIn('tgl_antar', $flattened); @@ -275,6 +276,9 @@ class PesananController extends Controller $now = Carbon::now()->format('Y-m-d'); $data->where('tgl_antar', $now); } + // if($status !== "all"){ + // $data->where('status_order', $status); + // } $data = $data->get(); return response()->json([ diff --git a/app/Models/Menu.php b/app/Models/Menu.php index 548dfaa..d2ff548 100644 --- a/app/Models/Menu.php +++ b/app/Models/Menu.php @@ -28,7 +28,7 @@ class Menu extends Model 'status', 'apakah_someday', 'apakah_menu_siang', - 'apakah_menu_sore' + 'apakah_menu_sore', ]; public function klasifikasiMenuKalori(){ diff --git a/public/assets/css/demo.css b/public/assets/css/demo.css index de1e494..3abae76 100644 --- a/public/assets/css/demo.css +++ b/public/assets/css/demo.css @@ -130,3 +130,11 @@ .tagify__dropdown { z-index: 99999 !important; } +.row-disabled { + opacity: 0.5; +} + +/* Kunci interaksi di semua kolom kecuali Action */ +.row-disabled td:not(:first-child) { + pointer-events: none; +} diff --git a/public/gambar/3XWTtco35MMnkOm.jpg b/public/gambar/3XWTtco35MMnkOm.jpg new file mode 100644 index 0000000..46c1428 Binary files /dev/null and b/public/gambar/3XWTtco35MMnkOm.jpg differ diff --git a/public/gambar/FkUlOiP2ayCcmLN.png b/public/gambar/FkUlOiP2ayCcmLN.png new file mode 100644 index 0000000..a12f6e7 Binary files /dev/null and b/public/gambar/FkUlOiP2ayCcmLN.png differ diff --git a/public/gambar/JYsT1u3OO6nh65P.jpg b/public/gambar/JYsT1u3OO6nh65P.jpg new file mode 100644 index 0000000..4a53692 Binary files /dev/null and b/public/gambar/JYsT1u3OO6nh65P.jpg differ diff --git a/public/gambar/PFIxh3Ip7dHHnGV.png b/public/gambar/PFIxh3Ip7dHHnGV.png new file mode 100644 index 0000000..f1c3450 Binary files /dev/null and b/public/gambar/PFIxh3Ip7dHHnGV.png differ diff --git a/public/gambar/REZDDmhE7ldVSfH.jpg b/public/gambar/REZDDmhE7ldVSfH.jpg new file mode 100644 index 0000000..652eaab Binary files /dev/null and b/public/gambar/REZDDmhE7ldVSfH.jpg differ diff --git a/public/gambar/ZzpfD5sC5NSJ8mF.jpg b/public/gambar/ZzpfD5sC5NSJ8mF.jpg new file mode 100644 index 0000000..652eaab Binary files /dev/null and b/public/gambar/ZzpfD5sC5NSJ8mF.jpg differ diff --git a/public/gambar/iTTNxFmBk06B5aE.png b/public/gambar/iTTNxFmBk06B5aE.png new file mode 100644 index 0000000..7b35e09 Binary files /dev/null and b/public/gambar/iTTNxFmBk06B5aE.png differ diff --git a/public/gambar/odUYjkIt3BueoMr.png b/public/gambar/odUYjkIt3BueoMr.png new file mode 100644 index 0000000..7b35e09 Binary files /dev/null and b/public/gambar/odUYjkIt3BueoMr.png differ diff --git a/public/gambar/p2jZoa7Uo1U1gpz.png b/public/gambar/p2jZoa7Uo1U1gpz.png new file mode 100644 index 0000000..7b35e09 Binary files /dev/null and b/public/gambar/p2jZoa7Uo1U1gpz.png differ diff --git a/public/gambar/r2Hx6t7TtfFpwRl.png b/public/gambar/r2Hx6t7TtfFpwRl.png new file mode 100644 index 0000000..7b35e09 Binary files /dev/null and b/public/gambar/r2Hx6t7TtfFpwRl.png differ diff --git a/public/gambar/tLwK04DBgwSFXc2.jpg b/public/gambar/tLwK04DBgwSFXc2.jpg new file mode 100644 index 0000000..8c199ec Binary files /dev/null and b/public/gambar/tLwK04DBgwSFXc2.jpg differ diff --git a/public/js/menu/action.js b/public/js/menu/action.js index ef1cc16..e346102 100644 --- a/public/js/menu/action.js +++ b/public/js/menu/action.js @@ -387,8 +387,12 @@ function editMasterMenu(e) { $("#harga_karyawan_edit").val(dataOld.harga_karyawan); $("#jenis_makanan_edit").val(dataOld.jenis_menu); $("#deskripsi_edit").val(dataOld.deskripsi); + let kategoriValue = 'Menu Normal'; + if (dataOld?.apakah_someday) { + kategoriValue = 'Sameday'; + } - $(`input[name="kategori_menu"][value="${dataOld.apakah_someday ? 'Sameday' : 'Menu Normal'}"]`).prop('checked', true); + $(`input[name="kategori_menu"][value="${kategoriValue}"]`).prop('checked', true); $(`input[name="apakah_menu_siang"][value="${dataOld.apakah_menu_siang ? 'iya' : ''}"]`).prop('checked', true); $(`input[name="apakah_menu_sore"][value="${dataOld.apakah_menu_sore ? 'iya' : ''}"]`).prop('checked', true); @@ -601,9 +605,10 @@ function detailMasterMenu(e){ const sore = el.data('apakah_menu_sore'); const kalori = JSON.parse(decodeURIComponent(el.data('kalori'))) - const kaloriMenu = kalori.map(kal => ` + + const kaloriMenu = kalori.length > 0 && kalori.every(item => item.kalori_id !== null) ? kalori.map(kal => ` ${kal.nilai_kalori} (kkal) - `).join(''); + `).join('') :'-'; const tags = JSON.parse(decodeURIComponent(el.data('klasifikasi_menu'))); const klasifikasiMenu = tags.map(tag => ` @@ -615,7 +620,7 @@ function detailMasterMenu(e){
${someday ? 'Tersedia setiap hari (Senin - Minggu)' : - tgl.length ? `Tersedia pada tanggal: ${tgl.map(d => d.tgl_harian).join(', ')}` : + tgl.length ? `Tersedia pada tanggal: ${tgl.map(d => d.tgl_harian).join(', ')}` : 'Tidak ada info tanggal tersedia'}
@@ -645,10 +650,11 @@ function detailMasterMenu(e){ ${klasifikasiMenu || 'Tidak ada klasifikasi'}
`); + $('#kalori_menu').html(`

Kalori:

- ${kaloriMenu || '-'} + ${kaloriMenu}
`); diff --git a/public/js/menu/dt.js b/public/js/menu/dt.js index 3e93b92..4970ad5 100644 --- a/public/js/menu/dt.js +++ b/public/js/menu/dt.js @@ -9,11 +9,10 @@ searchOnEnterKey: false, searchHighlight: true, pagination: true, - serverSide:true, + serverSide: true, pageSize: 10, pageList: [10, 20, 30, 40, 50, 100, 200], cookie: true, - cookieIdTable: "datatableMasterMenu", icons: { refresh: "fas fa-sync-alt", // atau ganti ke icon lain columns: "fas fa-th-large" @@ -24,6 +23,10 @@ title: "Action", field: 'master_menu_id', formatter: function(value, row) { + let statusLabel = ''; + if (!row.status) { + statusLabel = `
Tidak Aktif
`; + } let buttons = '' buttons += ` @@ -72,7 +75,13 @@ ` + buttons +=` +
+ +
+ ` return ` + ${statusLabel}
${buttons}
@@ -114,14 +123,13 @@ title: "Waktu Makan", field: "master_menu_id", formatter: function (value, row) { - - if (row?.apakah_menu_siang && row?.apakah_menu_sore) { + if (row?.apakah_menu_siang && row?.apakah_menu_sore) { return `Makan Siang & Sore`; } else if (row?.apakah_menu_siang) { return `Makan Siang`; } else if (row?.apakah_menu_sore) { return `Makan Sore`; - } else { + } else { return `-`; } }, @@ -139,4 +147,55 @@ }, ], + rowStyle: function(row, index) { + if (!row.status) { + return { + classes: 'row-disabled' + }; + } + return {}; + } }); + + // Tambahkan event listener pada elemen induk (misalnya, body) + document.body.addEventListener('click', function(event) { + if (event.target.type === 'checkbox' && event.target.id === 'switchActiveMenu') { + const isChecked = event.target.checked; + const masterMenuId = event.target.closest('.form-check').getAttribute('data-master_menu_id'); + toggleActiveMenu(masterMenuId, isChecked); + } + }); + + // Fungsi untuk menangani aktivasi atau deaktivasi menu + function toggleActiveMenu(masterMenuId, isChecked) { + fetch(`/dashboard/menu/switch/${masterMenuId}/${isChecked}`, { + headers: { + 'X-CSRF-TOKEN': document.querySelector('input[name="_token"]').value, + }, + }) + .then(response => { + if (!response.ok) { + throw new Error('Network response was not ok'); + } + return response.json(); + }) + .then(data => { + Swal.fire({ + icon: 'success', + title: 'Berhasil', + text: 'Status Menu diperbarui', + timer: 1500, + showConfirmButton: false, + backdrop: true, + }); + datatableMasterMenu.bootstrapTable('refresh'); + }) + .catch(err => { + console.error('Error:', err); + Swal.fire({ + icon: 'error', + title: 'Gagal', + text: err.message || 'Terjadi kesalahan pada server.', + }); + }); + } diff --git a/public/js/order_guest/functions.js b/public/js/order_guest/functions.js index 10580d9..1039734 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: 12, + per_page: 50, } fetchMenu(filterState) diff --git a/public/js/order_guest/index.js b/public/js/order_guest/index.js index c5a58a1..d272025 100644 --- a/public/js/order_guest/index.js +++ b/public/js/order_guest/index.js @@ -59,7 +59,7 @@ let params = new URLSearchParams({ page: filter.page || 1, - per_page: filter.per_page || 12, + per_page: filter.per_page || 50, search: filter.search || '', jenis_menu: filter.jenis_menu || '', tanggal_awal: filter.tanggal_awal || '', @@ -119,8 +119,8 @@ scheduleInfo = `
Dipesan maksimal H-1 sebelum pukul 13.00 WIB
`; } html += ` -
-
+
+
${label}
${scheduleInfo} @@ -250,16 +250,17 @@ html += `
`; - if(res.data.total > 12){ + if(res.data.total > 50){ html +=`
` } + // Pagination buttons if (res.data.last_page > 1) { html += ` diff --git a/public/js/pesanan_pending/action.js b/public/js/pesanan_pending/action.js index e8d8e9f..6fbe758 100644 --- a/public/js/pesanan_pending/action.js +++ b/public/js/pesanan_pending/action.js @@ -122,6 +122,7 @@ document.getElementById('formActionApproveBillingOrder').addEventListener('submi }); getReminderKonfirmasiPesanan() getReminderVerifikasiMakanan() + getReminderVerifikasiMakananOffCanvas() datatablePending.bootstrapTable('refresh'); modalActionApproveBillingnOrder.removeEventListener('hidden.bs.modal', handler); // ✅ pakai DOM }; diff --git a/public/js/pesanan_pending/of_dt.js b/public/js/pesanan_pending/of_dt.js index cac7d45..1c1c711 100644 --- a/public/js/pesanan_pending/of_dt.js +++ b/public/js/pesanan_pending/of_dt.js @@ -63,7 +63,11 @@ function initPekerjaanDt(selectDate = []) { datatableOfPekerjaan.bootstrapTable('destroy').bootstrapTable({ url: "/dashboard/datatable/pekerjaan", method: 'get', - queryParams: params => ({ ...params, tanggal: selectDate }), + queryParams: params => ({ + ...params, + tanggal: selectDate, + // status: $('#filterStatus').val() + }), showColumns: true, showColumnsToggleAll: true, showRefresh: true, @@ -80,6 +84,9 @@ function initPekerjaanDt(selectDate = []) { icons: { refresh: "fas fa-sync-alt", columns: "fas fa-th-large" }, columns: getTableColumns(), }); + $('#filterStatus').on('change', function () { + datatableOfPekerjaan.bootstrapTable('refresh'); + }); // Checkbox Handling $(document).off('click', '#selectAll').on('click', '#selectAll', function () { diff --git a/resources/views/dashboard/master/menu/modal/add.blade.php b/resources/views/dashboard/master/menu/modal/add.blade.php index dffc1a5..6c883fe 100644 --- a/resources/views/dashboard/master/menu/modal/add.blade.php +++ b/resources/views/dashboard/master/menu/modal/add.blade.php @@ -101,12 +101,6 @@ Menu Normal
-
- - -
diff --git a/resources/views/dashboard/master/menu/modal/edit.blade.php b/resources/views/dashboard/master/menu/modal/edit.blade.php index e9bc2f3..12fcefb 100644 --- a/resources/views/dashboard/master/menu/modal/edit.blade.php +++ b/resources/views/dashboard/master/menu/modal/edit.blade.php @@ -96,12 +96,6 @@ Menu Normal
-
- - -
diff --git a/resources/views/dashboard/partials/sidenav.blade.php b/resources/views/dashboard/partials/sidenav.blade.php index 931e2d6..df17973 100644 --- a/resources/views/dashboard/partials/sidenav.blade.php +++ b/resources/views/dashboard/partials/sidenav.blade.php @@ -65,8 +65,7 @@ diff --git a/resources/views/dashboard/pesanan/pending/offcanvas/konfirmasiPesanan.blade.php b/resources/views/dashboard/pesanan/pending/offcanvas/konfirmasiPesanan.blade.php index 647d389..9e58cc3 100644 --- a/resources/views/dashboard/pesanan/pending/offcanvas/konfirmasiPesanan.blade.php +++ b/resources/views/dashboard/pesanan/pending/offcanvas/konfirmasiPesanan.blade.php @@ -33,9 +33,22 @@
+
-
+ {{--
+ + +
--}} + + +
+
diff --git a/routes/web.php b/routes/web.php index 37d5e0d..c32f95a 100644 --- a/routes/web.php +++ b/routes/web.php @@ -17,7 +17,7 @@ use Illuminate\Support\Facades\Route; // Route::get('/blank', function () { // return view('layouts.blank'); // }); -Route::get('/login', [AuthController::class, 'index'])->name('login'); +Route::get('/login', [AuthController::class, 'index'])->name('login')->middleware('guest'); Route::post('/login', [AuthController::class, 'authanticate']); @@ -40,6 +40,7 @@ Route::group(['middleware' => ['auth']], function(){ Route::get('/option/kalori', [KaloriController::class, 'option']); Route::resource('/menu', MenuController::class); + Route::get('/menu/switch/{id}/{status}', [MenuController::class, 'switchMenu']); Route::get('/menu/{id}/detail', [MenuController::class, 'getDataDetail']); Route::get('/datatable/menu', [MenuController::class, 'datatable']);