diff --git a/app/Http/Controllers/CustomerController.php b/app/Http/Controllers/CustomerController.php index 3a1b1a8..fe5487c 100644 --- a/app/Http/Controllers/CustomerController.php +++ b/app/Http/Controllers/CustomerController.php @@ -4,7 +4,9 @@ namespace App\Http\Controllers; use App\Mail\NotifikasiCustomer; use App\Mail\NotifikasiPembayaran; +use App\Models\JadwalKonsul; use App\Models\Karbohidrat; +use App\Models\MasterMcu; use App\Models\Order; use App\Models\OrderDetail; use Carbon\Carbon; @@ -31,8 +33,11 @@ class CustomerController extends Controller $perPage = request()->get('per_page', 50); $tanggal_awal = (int) request('tanggal_awal'); $tanggal_akhir = (int) request('tanggal_akhir'); - - return self::menuOrder($search, $jenis_menu, $perPage, $tanggal_awal, $tanggal_akhir); + if($jenis_menu === "konsultasi"){ + return self::konsultasi(); + }else{ + return self::menuOrder($search, $jenis_menu, $perPage, $tanggal_awal, $tanggal_akhir); + } } @@ -230,73 +235,14 @@ class CustomerController extends Controller ]); } - - - // paket do komen dulu - // 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 . '%'); - // } - - // $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', - // 'dmph.detail_menu_paket_harian_id', - // 'dmph.tgl_harian' - // )->paginate($perPage); - - // $paketMenuIds = collect($paginated->items())->pluck('master_paket_menu_id')->toArray(); - // dd($paketMenuIds); - // $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(), - // ] - // ]); - // } + private static function konsultasi(){ + $data = JadwalKonsul::where('statusenabled', true)->with('tglAvailable')->get(); + return response()->json([ + 'status' => true, + 'message' => 'Berhasil mendapatkan data', + 'data' => $data + ]); + } public function checkout(){ $karbohidrat = Karbohidrat::where('statusenabled', true)->select('karbohidrat_id', 'nama_karbohidrat', 'nilai_kalori')->get(); @@ -353,12 +299,8 @@ class CustomerController extends Controller $payloadOrderDetail['type'] = $value['kategoriPemesanan']; $payloadOrderDetail['karbohidrat_id'] = $value['karbohidrat_id'] ?? null; $payloadOrderDetail['catatan'] = $value['catatan'] ?? null; - if($cart['jenis_menu'] === "paket"){ - $payloadOrderDetail['master_paket_menu_id'] = $cart['id_menu']; - }else{ - $payloadOrderDetail['master_menu_id'] = $cart['id_menu']; - } - OrderDetail::create($payloadOrderDetail); + $payloadOrderDetail['master_menu_id'] = $cart['id_menu']; + OrderDetail::create($payloadOrderDetail); } } //code... @@ -465,7 +407,6 @@ class CustomerController extends Controller ->table('public.order as o') ->leftJoin('public.order_detail as od', 'od.order_id', '=', 'o.order_id') ->leftJoin('public.master_menu as mm', 'mm.master_menu_id', '=', 'od.master_menu_id') - ->leftJoin('public.master_paket_menu as mpm', 'mpm.master_paket_menu_id', '=', 'od.master_paket_menu_id') ->where('o.no_order', 'ILIKE', '%' . $noOrder . '%') ->select( 'o.*', @@ -475,8 +416,8 @@ class CustomerController extends Controller 'od.harga_satuan', 'od.status_order as status_order_detail', 'od.catatan', - DB::raw("COALESCE(mm.nama_menu, mpm.nama_paket) as nama_item"), - DB::raw("COALESCE(mm.foto, mpm.foto) as foto"), + 'mm.nama_menu as nama_item', + 'mm.foto as foto' ) ->get(); @@ -531,4 +472,72 @@ class CustomerController extends Controller 'data' => $result, ], 200); } + + public function indexMcu(){ + $paketMcu = MasterMcu::where('statusenabled', true)->get(); + $data = [ + 'title' => 'Order Gizi MCU', + 'paketMcu' => $paketMcu + ]; + return view('guest.mcu.index', $data); + } + + public function storeMcu(){ + try { + DB::connection('dbOrderGizi')->beginTransaction(); + $today = now()->toDateString(); + $jumlahHariIni = Order::whereDate('entry_at', $today)->count(); + $urutan = $jumlahHariIni + 1; + $noOrder = 'TX/CT/GIZI/' . now()->year .'/'. now()->month .'/' . now()->day .'/MCU/' . Str::random(6) .'/' . str_pad($urutan, 4, '0', STR_PAD_LEFT); + $payload = [ + 'email' => request('email') ?? null, + 'nama_pemesan' => request('nama_pemesan'), + 'jenis_customer' => 'MCU', + 'medical_record' => request('no_mr'), + 'jenis_kelamin' => request('jenis_kelamin'), + 'no_order' => $noOrder, + 'no_wa' => request('no_hp') ?? null, + 'tinggi_badan' => request('tinggi_badan') ?? null, + 'berat_badan' => request('berat_badan') ?? null, + 'status_order' =>'Menunggu Konfirmasi Pesanan MCU' + ]; + $order = Order::create($payload); + $payloadDetail = [ + 'order_id' => $order->order_id, + 'jumlah' => 1, + 'tgl_antar' => request('tgl_mcu'), + 'menu_mcu_id' => request('paket_mcu'), + 'jam_layanan' => request('jam_layanan'), + 'cara_pembayaran' => 'MCU', + 'status_order' =>'Menunggu Konfirmasi' + ]; + OrderDetail::create($payloadDetail); + + DB::connection('dbOrderGizi')->commit(); + session()->flash('success_mcu', true); + session()->flash('no_order', $noOrder); + return response()->json([ + 'status' => true, + 'message' => 'Pesanan Berhasil diproses' + ]); + } catch (\Throwable $th) { + DB::rollBack(); + return response()->json([ + 'status' => false, + 'message' => 'Pesanan gagal diproses ' . $th->getMessage() + ]); + } + } + + public function successMcu(){ + if(!session()->has('success_mcu')){ + return redirect('/order-mcu'); + } + $payload = [ + 'title' => 'Berhasil Melakukan Pesanan ', + 'no_order' => session('no_order'), + 'back_href' => '/order-mcu' + ]; + return view('guest.success_page', $payload); + } } diff --git a/app/Http/Controllers/JadwalKonsulController.php b/app/Http/Controllers/JadwalKonsulController.php new file mode 100644 index 0000000..fa7260e --- /dev/null +++ b/app/Http/Controllers/JadwalKonsulController.php @@ -0,0 +1,140 @@ + 'Master Jadwal Konsul' + ]; + return view('dashboard.jadwal_konsul.index', $data); + } + + /** + * Show the form for creating a new resource. + */ + public function create() + { + // + } + + /** + * Store a newly created resource in storage. + */ + public function store(Request $request) + { + try { + DB::connection('dbOrderGizi')->beginTransaction(); + $datas = request('data'); + foreach ($datas as $data) { + $payload = [ + 'nama_dokter' => $data['nama_dokter'] + ]; + $jk = JadwalKonsul::create($payload); + if(isset($data['tanggal'])){ + $tanggal = $data['tanggal']; + foreach ($tanggal as $tgl) { + $payloadTgl = [ + 'tgl_harian' => $tgl, + 'jadwal_konsul_id' => $jk->jadwal_konsul_id, + ]; + JadwalKonsulDetail::create($payloadTgl); + } + } + } + //code... + DB::connection('dbOrderGizi')->commit(); + return response()->json([ + 'status' => true, + 'message' => 'Data berhasil ditambahkan!' + ]); + } catch (\Throwable $th) { + DB::connection('dbOrderGizi')->rollBack(); + return response()->json([ + 'status' => false, + 'message' => 'Data gagal ditambahkan!', + 'errors' => $th->getMessage() + ]); + } + } + + /** + * Display the specified resource. + */ + public function show(JadwalKonsul $jadwalKonsul) + { + // + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(JadwalKonsul $jadwalKonsul) + { + // + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, string $id) + { + try { + DB::connection('dbOrderGizi')->beginTransaction(); + JadwalKonsulDetail::where('jadwal_konsul_id', $id)->delete(); + + $jadwalKonsul = JadwalKonsul::where('jadwal_konsul_id', $id)->first(); + $jadwalKonsul->update([ + 'nama_dokter' => request('nama_dokter') + ]); + $tanggals = request('tanggal'); + foreach ($tanggals as $tgl) { + $payload = [ + 'jadwal_konsul_id' => $id, + 'tgl_harian' => $tgl + ]; + JadwalKonsulDetail::create($payload); + } + DB::connection('dbOrderGizi')->commit(); + return response()->json([ + 'status' => true, + 'message' => 'Data berhasil diperbarui!' + ]); + } catch (\Throwable $th) { + DB::connection('dbOrderGizi')->rollBack(); + return response()->json([ + 'status' => false, + 'message' => 'Data gagal diperbarui!', + 'errors' => $th->getMessage() + ]); + } + } + /** + * Remove the specified resource from storage. + */ + public function destroy(string $id) + { + $jadwalKonsul = JadwalKonsul::where('jadwal_konsul_id', $id)->first(); + $jadwalKonsul->update([ + 'statusenabled' => false + ]); + return response()->json([ + 'status' => true, + 'message' => 'Data berhasil dihapus!' + ]); + } + + public function datatable(){ + return JadwalKonsul::where('statusenabled', true)->with('tglAvailable')->get(); + } +} diff --git a/app/Http/Controllers/MasterMcuController.php b/app/Http/Controllers/MasterMcuController.php new file mode 100644 index 0000000..83f9f0f --- /dev/null +++ b/app/Http/Controllers/MasterMcuController.php @@ -0,0 +1,117 @@ + 'Master MCU' + ]; + return view('dashboard.master.mcu.index', $payload); + } + + /** + * Show the form for creating a new resource. + */ + public function create() + { + // + } + + /** + * Store a newly created resource in storage. + */ + public function store(Request $request) + { + try { + DB::connection('dbOrderGizi')->beginTransaction(); + $datas = request('data'); + foreach ($datas as $data) { + $payload =[ + 'nama_mcu' => $data['nama_mcu'] + ]; + if($data['harga']){ + $harga = $data['harga'] ? str_replace('.', '', $data['harga']) : null; + $payload['harga'] = $harga; + } + MasterMcu::create($payload); + } + DB::connection('dbOrderGizi')->commit(); + return response()->json([ + 'status' => true, + 'message' => 'Data berhasil ditambahkan!' + ]); + } catch (\Throwable $th) { + DB::connection('dbOrderGizi')->rollBack(); + return response()->json([ + 'status' => false, + 'message' => 'Data gagal ditambahkan!', + 'errors' => $th->getMessage() + ]); + } + } + + /** + * Display the specified resource. + */ + public function show(MasterMcu $masterMcu) + { + // + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(MasterMcu $masterMcu) + { + // + } + + /** + * Update the specified resource in storage. + */ + public function update(string $id) + { + $masterMcu = MasterMcu::where('menu_mcu_id', $id)->first(); + $payload =[ + 'nama_mcu' => request('nama_mcu'), + ]; + if(request('harga')){ + $harga = request('harga') ? str_replace('.', '', request('harga')) : null; + $payload['harga'] = $harga; + } + $masterMcu->update($payload); + return response()->json([ + 'status' => true, + 'message' => 'Data berhasil diperbarui!' + ]); + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(string $id) + { + $masterMcu = MasterMcu::where('menu_mcu_id', $id)->first(); + $masterMcu->update([ + 'statusenabled' => false + ]); + return response()->json([ + 'status' => true, + 'message' => 'Data berhasil dihapus!' + ]); + } + + public function datatable(){ + return MasterMcu::where('statusenabled', true)->get(); + } +} diff --git a/app/Http/Controllers/PesananController.php b/app/Http/Controllers/PesananController.php index 09de531..5313e07 100644 --- a/app/Http/Controllers/PesananController.php +++ b/app/Http/Controllers/PesananController.php @@ -44,7 +44,7 @@ class PesananController extends Controller "DATE(o.entry_at) IN (" . implode(',', array_fill(0, count($tanggalFormatted), '?')) . ")", $tanggalFormatted ) - ->whereIn('o.status_order', ['Menunggu Konfirmasi Pembayaran', 'Menunggu Konfirmasi Pembayaran Via Billing']) + ->whereIn('o.status_order', ['Menunggu Konfirmasi Pembayaran', 'Menunggu Konfirmasi Pembayaran Via Billing', 'Menunggu Konfirmasi Pesanan MCU']) ->select( 'o.order_id', 'o.entry_at', @@ -372,7 +372,7 @@ class PesananController extends Controller $sheet->setCellValue("F{$row}", $item?->menu?->nama_menu ?? '-'); $karbohidratNama = $item?->karbohidrat?->nama_karbohidrat ?? '-'; $karbohidratNilai = $item?->karbohidrat?->nilai_kalori ?? '-'; - $sheet->setCellValue("G{$row}", $karbohidratNama . ($karbohidratNilai !== '-' ? " ({$karbohidratNilai} Kkal)" : '')); + $sheet->setCellValue("G{$row}", $karbohidratNama . ($karbohidratNilai !== '-' ? " ({$karbohidratNilai} kal)" : '')); $sheet->setCellValue("H{$row}", $item?->jumlah ?? '-'); $sheet->setCellValue("I{$row}", $item?->tgl_antar ? Carbon::parse($item->tgl_antar)->translatedFormat('d F Y') : "Tanggal Antar"); $sheet->setCellValue("J{$row}", $item?->type ?? "-"); @@ -545,7 +545,7 @@ class PesananController extends Controller } public function countKonfirmasiPesanan(){ - $count = Order::where('statusenabled', true)->whereIn('status_order', ['Menunggu Konfirmasi Pembayaran', 'Menunggu Konfirmasi Pembayaran Via Billing'])->count(); + $count = Order::where('statusenabled', true)->whereIn('status_order', ['Menunggu Konfirmasi Pembayaran', 'Menunggu Konfirmasi Pembayaran Via Billing', 'Menunggu Konfirmasi Pesanan MCU'])->count(); return response()->json([ 'status' => true, 'count' => $count, diff --git a/app/Models/JadwalKonsul.php b/app/Models/JadwalKonsul.php new file mode 100644 index 0000000..70041bc --- /dev/null +++ b/app/Models/JadwalKonsul.php @@ -0,0 +1,22 @@ +hasMany(JadwalKonsulDetail::class, 'jadwal_konsul_id', 'jadwal_konsul_id'); + } +} diff --git a/app/Models/JadwalKonsulDetail.php b/app/Models/JadwalKonsulDetail.php new file mode 100644 index 0000000..a7e60e9 --- /dev/null +++ b/app/Models/JadwalKonsulDetail.php @@ -0,0 +1,17 @@ +belongsTo(Karbohidrat::class, 'karbohidrat_id', 'karbohidrat_id')->select('karbohidrat_id', 'nama_karbohidrat', 'nilai_kalori'); } - - public function paketMenu(){ - return $this->belongsTo(PaketMenu::class, 'master_paket_menu_id', 'master_paket_menu_id')->select('master_paket_menu_id', 'nama_paket', 'foto'); - } - public function order(){ return $this->belongsTo(Order::class, 'order_id', 'order_id'); } diff --git a/app/Models/TanggalMenuTersedia.php b/app/Models/TanggalMenuTersedia.php index 13f7e72..d63904b 100644 --- a/app/Models/TanggalMenuTersedia.php +++ b/app/Models/TanggalMenuTersedia.php @@ -19,7 +19,6 @@ class TanggalMenuTersedia extends Model 'pegawai_nama_modified', 'statusenabled', 'tgl_harian', - 'master_paket_menu_id', 'master_menu_id' ]; } diff --git a/public/js/jadwal_konsul/_init.js b/public/js/jadwal_konsul/_init.js new file mode 100644 index 0000000..bab618b --- /dev/null +++ b/public/js/jadwal_konsul/_init.js @@ -0,0 +1,8 @@ +const datatableMasterJadwalKonsul = $("#datatableMasterJadwalKonsul") + +const formAddJadwalKonsul = $("#formMasterJadwalKonsul") +const modalAddJadwalKonsul = document.getElementById("modalMasterJadwalKonsul") + +const modalMasterJadwalKonsulEdit = document.getElementById('modalMasterJadwalKonsulEdit'); +const formMasterJadwalKonsulEdit = document.getElementById('formMasterJadwalKonsulEdit'); + diff --git a/public/js/jadwal_konsul/action.js b/public/js/jadwal_konsul/action.js new file mode 100644 index 0000000..ccd6528 --- /dev/null +++ b/public/js/jadwal_konsul/action.js @@ -0,0 +1,264 @@ +// Fungsi inisialisasi Selectize dan Auto-expand +function initSelectize(formElement) { + const tanggalSelect = formElement.querySelector('.date-input'); + + + if (tanggalSelect) { + $(tanggalSelect).selectize({ + valueField: 'tanggal', + labelField: 'tgl', + create: true, + placeholder: "Masukkan Tanggal...", + }); + } + +} + +document.addEventListener('DOMContentLoaded', function () { + const firstForm = document.querySelector('.form-set'); + initSelectize(firstForm); +}); +// Fungsi untuk menambah form baru +let countForm = 1; // karena form pertama pakai index 0 +function addFormJadwalKonsul() { + const container = document.getElementById('form-sets-container'); + const original = container.querySelector('.form-set'); + + const html = original.outerHTML + .replace(/\[0\]/g, `[${countForm}]`); + + const wrapper = document.createElement('div'); + wrapper.innerHTML = html.trim(); + const newForm = wrapper.firstChild; + + // Hapus Selectize wrapper jika ada + newForm.querySelectorAll('select').forEach(select => { + const wrapper = select.nextElementSibling; + if (wrapper?.classList.contains('selectize-control')) wrapper.remove(); + + select.value = ''; + if (select.multiple) { + // Untuk multiple select, pastikan semua opsi tidak terseleksi + Array.from(select.options).forEach(option => option.selected = false); + } + }); + + container.appendChild(newForm); + initSelectize(newForm); + countForm++; +} + +// Hapus form-set (kecuali jika hanya 1) +document.addEventListener('click', function (e) { + if (e.target.closest('.btn-remove-form')) { + const targetForm = e.target.closest('.form-set'); + const total = document.querySelectorAll('.form-set').length; + if (total > 1) { + targetForm.remove(); + } else { + alert('Minimal satu form harus ada.'); + } + } +}); + + + +document.getElementById('formMasterJadwalKonsul').addEventListener('submit', function(e){ + e.preventDefault(); + const form = this; + const actionUrl = form.getAttribute('action'); + const formData = new FormData(form); + + fetch(actionUrl, { + method: 'POST', + headers: { + 'X-CSRF-TOKEN': document.querySelector('input[name="_token"]').value, + }, + body: formData + }).then(async (res) => { + const data = await res.json(); + if (data.status) { + const handler = function () { + Swal.fire({ + icon: 'success', + title: 'Berhasil', + text: data.message, + timer: 2000, + showConfirmButton: false, + backdrop: true, + }); + datatableMasterJadwalKonsul.bootstrapTable('refresh'); + modalAddJadwalKonsul.removeEventListener('hidden.bs.modal', handler); // ✅ pakai DOM + }; + modalAddJadwalKonsul.addEventListener('hidden.bs.modal', handler); // ✅ pakai DOM + bootstrap.Modal.getInstance(modalAddJadwalKonsul).hide(); // ✅ pakai instance + const allFormSets = document.querySelectorAll('.form-set'); + + for(let i = 1; i < allFormSets.length; i++){ + allFormSets[i].remove(); + } + document.querySelectorAll('.form-set').forEach((formSet, index) => { + formSet.querySelectorAll('input, textarea, select').forEach(el => { + // Reset Selectize jika ada + if (el.classList.contains('selectized')) { + const selectize = el.selectize; + if (selectize) { + selectize.clear(); + } + } + }); + }); + } else { + throw new Error(data.message || 'Terjadi kesalahan saat mengubah status.'); + } + }).catch(err => { + console.error(err); + Swal.fire({ + icon: 'error', + title: 'Gagal', + text: err.message || 'Terjadi kesalahan pada server.', + }); + }); +}) + + +function deleteMasterJadwalKonsul(e){ + let id = $(e).data('jadwal_konsul_id') + Swal.fire({ + title: "Apakah kamu yakin ingin menghapus data ini?", + text : $(e).data('nama_dokter'), + icon: "warning", + showCancelButton: true, + backdrop: true, + }).then((result) => { + if(result.isConfirmed){ + fetch(`/dashboard/jadwal-konsul/${id}`, { + method:'DELETE', + headers: { + "X-CSRF-TOKEN": document.querySelector('input[name="_token"]').value, + "Content-Type": "application/json" + } + }).then((response) => { + if(!response.ok){ + throw new Error("Network response was not ok"); + } + return response.json(); + }) + .then((data) => { + if(data.status){ + Swal.fire({ + title: "Success", + text: "Data berhasil dihapus", + icon:"success", + showConfirmButton: false, + timer: 1000 + }).then(() => { + datatableMasterJadwalKonsul.bootstrapTable("refresh") + }) + }else{ + Swal.fire({ + title: "Error!", + text: data.message || "Failed to delete Item.", + icon: "error" + }); + } + }) + .catch(error => { + Swal.fire({ + title: "Error!", + text: "Something went wrong. Please try again later.", + icon: "error" + }); + }); + } + }) +} + +let tanggalSelectizeInstance = null; + +function editMasterJadwalKonsul(e) { + const el = $(e); + const modal = new bootstrap.Modal(modalMasterJadwalKonsulEdit); + formMasterJadwalKonsulEdit.setAttribute('action', `/dashboard/jadwal-konsul/${el.data('jadwal_konsul_id')}`) + modal.show(); + + // Ambil data + let dataOld = { + jadwal_konsul_id: el.data('jadwal_konsul_id'), + nama_dokter: el.data('nama_dokter'), + tgl: JSON.parse(decodeURIComponent(el.data('tgl_available') || '[]')), + }; + + // Set value ke input form + $("#nama_dokter_edit").val(dataOld.nama_dokter); + const tanggalField = document.getElementById('tanggal_edit'); + + if(tanggalSelectizeInstance){ + tanggalSelectizeInstance.destroy(); + tanggalSelectizeInstance = null + } + tanggalField.style.display = 'block'; + tanggalSelectizeInstance =$('#tanggal_edit').selectize({ + valueField: 'tanggal', + labelField: 'tgl', + create: true, + placeholder: 'Masukkan Tanggal...', + onInitialize: function () { + const s = this; + dataOld.tgl.forEach(item => { + const tglValue = item?.tgl_harian || item?.tanggal || item; + s.addOption({ tanggal: tglValue, tgl: tglValue }); + s.addItem(tglValue); + }); + } + })[0].selectize; + +} + + +document.getElementById('formMasterJadwalKonsulEdit').addEventListener('submit', function(e){ + e.preventDefault(); + + const form = this; + const actionUrl = form.getAttribute('action'); + const formData = new FormData(form); + + fetch(actionUrl, { + method: 'POST', + headers: { + 'X-CSRF-TOKEN': document.querySelector('input[name="_token"]').value, + }, + body: formData + }).then(async (res) => { + const data = await res.json(); + + if (data.status) { + form.reset(); + const handler = function () { + Swal.fire({ + icon: 'success', + title: 'Berhasil', + text: data.message, + timer: 2000, + showConfirmButton: false, + backdrop: true, + }); + datatableMasterJadwalKonsul.bootstrapTable('refresh'); + modalMasterJadwalKonsulEdit.removeEventListener('hidden.bs.modal', handler); // ✅ pakai DOM + }; + + modalMasterJadwalKonsulEdit.addEventListener('hidden.bs.modal', handler); // ✅ pakai DOM + bootstrap.Modal.getInstance(modalMasterJadwalKonsulEdit).hide(); // ✅ pakai instance + } else { + throw new Error(data.message || 'Terjadi kesalahan saat mengubah status.'); + } + }).catch(err => { + console.error(err); + Swal.fire({ + icon: 'error', + title: 'Gagal', + text: err.message || 'Terjadi kesalahan pada server.', + }); + }); +}) + diff --git a/public/js/jadwal_konsul/dt.js b/public/js/jadwal_konsul/dt.js new file mode 100644 index 0000000..caf2678 --- /dev/null +++ b/public/js/jadwal_konsul/dt.js @@ -0,0 +1,69 @@ + + datatableMasterJadwalKonsul.bootstrapTable({ + url: "/dashboard/datatable/jadwal-konsul", + showColumns: true, + showColumnsToggleAll: true, + showRefresh: true, + sortable: true, + search: true, + searchOnEnterKey: false, + searchHighlight: true, + pagination: true, + serverSide: true, + pageSize: 10, + pageList: [10, 20, 30, 40, 50, 100, 200], + cookie: true, + icons: { + refresh: "fas fa-sync-alt", // atau ganti ke icon lain + columns: "fas fa-th-large" + }, + + columns: [ + { + title: "Action", + field: 'jadwal_konsul_id', + formatter: function(value, row) { + + let buttons = '' + buttons += ` + + ` + + buttons += ` + + ` + return ` +
${jadwal.spesialis}
-Hari: ${jadwal.hari}
-Jam: ${jadwal.jam}
-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} !`) - } + if(filter.jenis_menu === "konsultasi"){ - const menus = res.data.data || []; + const jk = res.data|| []; + console.log(jk); + + $("#tanggal-filter").addClass('d-none'); + let html = ` +Belum ada jadwal tersedia
+