diff --git a/app/Http/Controllers/CustomerController.php b/app/Http/Controllers/CustomerController.php index 7dce0d7..04e6750 100644 --- a/app/Http/Controllers/CustomerController.php +++ b/app/Http/Controllers/CustomerController.php @@ -399,6 +399,7 @@ class CustomerController extends Controller session()->flash('no_order', $noOrder); return response([ 'status' => true, + 'no_order' => $noOrder, 'message' => 'Terima kasih atas pesanan Anda. Mohon tunggu, kami sedang memprosesnya' ], 200); return back()->with('success', 'Bukti pembayaran berhasil diunggah.'); diff --git a/app/Http/Controllers/SurveyController.php b/app/Http/Controllers/SurveyController.php new file mode 100644 index 0000000..22fd4ce --- /dev/null +++ b/app/Http/Controllers/SurveyController.php @@ -0,0 +1,178 @@ +has('payment_success')){ + return redirect('/'); + } + $no_order = $request->query('no_order'); + $type = $request->query('type'); + $data = [ + 'title' => 'Survey Gizi', + 'mcu' => false, + 'no_order' => $no_order, + 'type' => $type + ]; + return view('guest.survey.index', $data); + } + + public function store(){ + DB::connection('dbOrderGizi')->beginTransaction(); + try { + $payload =[ + 'no_order' => request('no_order'), + 'type' => request('type'), + 'keterangan' => request('kritik_saran'), + 'kepuasan' => request('kepuasan'), + 'created_at' => now() + ]; + Survey::create($payload); + DB::connection('dbOrderGizi')->commit(); + session()->flash('payment_success', true); + session()->flash('no_order', $payload['no_order']); + return response()->json([ + 'status' => true, + 'message' => 'Survei berhasil disimpan' + ]); + } catch (\Throwable $th) { + DB::connection('dbOrderGizi')->rollBack(); + return response()->json([ + 'status' => false, + 'message' => 'Data gagal disimpan ' . $th->getMessage() + ]); + } + + } + + public function datatable(){ + $data = Survey::query(); + $tanggal = request('tanggal'); + if(!empty($tanggal)){ + $flattened = is_array($tanggal[0]) ? Arr::flatten($tanggal) : $tanggal; + $data->whereIn(DB::raw('DATE(created_at)'), $flattened); + }else{ + $now = Carbon::now()->format('Y-m-d'); + $data->whereDate('created_at', $now); + } + $data = $data->get(); + return response()->json([ + 'rows' => $data->values(), + 'total' => $data->count(), + ]); + } + + public function chartDataSurvey(Request $request) + { + $tanggal = $request->query('tanggal'); + if(is_string($tanggal)) $tanggal = json_decode($tanggal, true); + + $query = Survey::query(); + if (!empty($tanggal) && is_array($tanggal)) { + $query->whereIn(DB::raw('DATE(created_at)'), $tanggal); + } else { + $query->whereDate('created_at', Carbon::today()); + } + + $allData = $query->get(); + + // Pisahkan data untuk perhitungan Card + $dataBaru = $allData->where('type', 'pengguna_baru'); + $dataLama = $allData->where('type', 'pelanggan_setia'); + + return response()->json([ + 'responden' => [ + 'baru' => $dataBaru->count(), + 'lama' => $dataLama->count(), + ], + 'kepuasan_baru' => [ + 'total' => $dataBaru->count(), + 'puas' => $dataBaru->where('kepuasan', 'Puas')->count(), + 'tidak_puas' => $dataBaru->where('kepuasan', 'Tidak Puas')->count(), + ], + 'kepuasan_lama' => [ + 'total' => $dataLama->count(), + 'puas' => $dataLama->where('kepuasan', 'Puas')->count(), + 'tidak_puas' => $dataLama->where('kepuasan', 'Tidak Puas')->count(), + ] + ]); + } + + + public function dashboardSurvey(){ + $data = [ + 'title' => 'List Survey Order Gizi' + ]; + return view('dashboard.survey.index', $data); + } + + public function exportSurveyExcel(){ + $startDate = Carbon::parse(request('start_date'))->startOfDay(); + $endDate = Carbon::parse(request('end_date'))->endOfDay(); + $data = Survey::whereBetween('created_at', [$startDate, $endDate])->get(); + $waktu_cetak = Carbon::now()->locale('id')->translatedFormat('d F Y'); + $spreadsheet = new Spreadsheet(); + $sheet = $spreadsheet->getActiveSheet(); + $sheet->setCellValue('A1', "Laporan Survei dari {$startDate->format('Y-m-d')} sampai {$endDate->format('Y-m-d')}"); + $sheet->mergeCells('A1:E1'); + $sheet->getStyle('A1')->getFont()->setBold(true)->setSize(14); + $sheet->getStyle('A1')->getAlignment()->setHorizontal('center'); + + $sheet->setCellValue('A2', "Waktu Cetak: {$waktu_cetak}"); + $sheet->mergeCells('A2:E2'); + $sheet->getStyle('A2')->getAlignment()->setHorizontal('center'); + + // Header tabel + $headers = ["No", "Nama", "Tipe Survei", "Kepuasan", "Kritik dan Saran"]; + $sheet->fromArray($headers, null, 'A4'); + $sheet->getStyle('A4:E4')->applyFromArray([ + 'font' => ['bold' => true], + 'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER], + 'borders' => [ + 'allBorders' => [ + 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN + ] + ] + ]); + $sheet->getStyle('A4:E4')->getFont()->setBold(true); + $sheet->getStyle('A4:E4')->getAlignment()->setHorizontal('center'); + $sheet->getStyle('A4:E4')->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN); + // Isi data + $row = 5; + foreach ($data as $index => $item) { + $sheet->setCellValue("A{$row}", $index + 1); + $sheet->setCellValue("B{$row}", $item->order->nama_pemesan); + $sheet->setCellValue("C{$row}", $item->type === "pelanggan_setia" ? "Pelanggan Setia" : "Pengguna Baru"); + $sheet->setCellValue("D{$row}", $item->kepuasan); + $sheet->setCellValue("E{$row}", $item->keterangan); + $row++; + } + // Auto size kolom + foreach(range('A', 'E') as $col){ + $sheet->getColumnDimension($col)->setAutoSize(true); + } + $lastRow = $row - 1; + $sheet->setAutoFilter("A4:E{$lastRow}"); + // Download file + $fileName = "Laporan Survei {$startDate->format('Y-m-d')} sampai {$endDate->format('Y-m-d')} ". '.xlsx'; + $writer = new Xlsx($spreadsheet); + + // Output ke browser + header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); + header("Content-Disposition: attachment; filename=\"{$fileName}\""); + header('Cache-Control: max-age=0'); + + $writer->save('php://output'); + exit; + } +} diff --git a/app/Models/Survey.php b/app/Models/Survey.php new file mode 100644 index 0000000..ff55e61 --- /dev/null +++ b/app/Models/Survey.php @@ -0,0 +1,25 @@ +belongsTo(Order::class, 'no_order', 'no_order')->select('no_order', 'nama_pemesan'); + } +} diff --git a/env_prod b/env_prod index fc3d20d..5d2f816 100644 --- a/env_prod +++ b/env_prod @@ -3,7 +3,7 @@ APP_ENV=production APP_KEY=base64:R54Pgs6qwWsP6eKZGCcHNd7rrsSSU0DsWSbFHwaT4Bc= APP_DEBUG=true APP_URL=http://127.0.0.1:8000/ -APP_TIMEZONE =Asia/Jakarta +APP_TIMEZONE=Asia/Jakarta APP_LOCALE=en APP_FALLBACK_LOCALE=en APP_FAKER_LOCALE=en_US @@ -23,7 +23,7 @@ LOG_LEVEL=debug 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_DATABASE_ORDER_GIZI = lms_mutu DB_USERNAME_ORDER_GIZI = simrs DB_PASSWORD_ORDER_GIZI = @S1mrs.3205@ diff --git a/public/asset_guests/css/main.css b/public/asset_guests/css/main.css index 4e48dca..bc9731f 100644 --- a/public/asset_guests/css/main.css +++ b/public/asset_guests/css/main.css @@ -305,7 +305,7 @@ h6 { } .header .logo img { - max-height: 36px; + max-height: 60px; margin-right: 8px; } @@ -347,6 +347,10 @@ h6 { .header .navmenu { order: 3; } + .header .logo img { + max-height: 35px; + margin-right: 8px; + } } .scrolled .header { diff --git a/public/assets/img/avatars/8.jpg b/public/assets/img/avatars/8.jpg new file mode 100644 index 0000000..1129ea7 Binary files /dev/null and b/public/assets/img/avatars/8.jpg differ diff --git a/public/js/checkout/action.js b/public/js/checkout/action.js index a9ff791..311f8e0 100644 --- a/public/js/checkout/action.js +++ b/public/js/checkout/action.js @@ -109,16 +109,41 @@ async function submitOrderToServer(){ }); const result = await response.json(); - if (result.status) { // ✅ Hapus sessionStorage di client clearSession() Swal.fire({ - title: 'Pesanan Berhasil!', - text: 'Terima kasih, pesanan Anda sedang kami siapkan.', + title: 'Pesanan Berhasil!', icon: 'success', - confirmButtonText: 'Berhasil!', - confirmButtonColor: '#28a745' + iconColor: '#2e7d32', // Warna hijau Kemenkes + html: ` +

Terima kasih, pesanan Anda sedang kami siapkan.

+
+

Bantu Kami Meningkatkan Layanan:

+ + + + +
+ `, + showConfirmButton: false, + showCancelButton: true, + cancelButtonText: 'Lewati & Selesai', + cancelButtonColor: '#6c757d', + customClass: { + popup: 'rounded-4', + cancelButton: 'px-4 py-2 rounded-3' + } }).then(() => { window.location.href = "/success-page"; // kehalaman success }); diff --git a/public/js/checkout/index.js b/public/js/checkout/index.js index 611e399..d3e8b1a 100644 --- a/public/js/checkout/index.js +++ b/public/js/checkout/index.js @@ -246,13 +246,28 @@ function toggleCustomerFields() { $("#help_email_karyawan").removeClass('d-none') selectKaryawan(); // inisialisasi ulang selectize break; + case 'Karyawan RSAB Harapan Kita (Rapat Internal, Seminar /Pelatihan)': + $('.karyawan').show(); + $nama.val('') + $nama.removeClass('form-control') + $("#help_nama_pemesan").removeClass('d-none') + $("#help_email_karyawan").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') $("#help_email_karyawan").addClass('d-none') break; - case 'Masyarakat Umum' : + case 'Masyarakat Umum (Corporate)' : + $('.umum').show(); + $nama.addClass('form-control') + $("#help_nama_pemesan").addClass('d-none') + $("#help_email_karyawan").addClass('d-none') + $("#modalAttentionModeUmum").modal('show'); + break; + case 'Masyarakat Umum (Personal)' : $('.umum').show(); $nama.addClass('form-control') $("#help_nama_pemesan").addClass('d-none') diff --git a/public/logo/gizi.png b/public/logo/gizi.png new file mode 100644 index 0000000..6cd15a1 Binary files /dev/null and b/public/logo/gizi.png differ diff --git a/public/logo/nice.png b/public/logo/nice.png new file mode 100644 index 0000000..96cf33a Binary files /dev/null and b/public/logo/nice.png differ diff --git a/public/logo/no_nice.png b/public/logo/no_nice.png new file mode 100644 index 0000000..ec75efd Binary files /dev/null and b/public/logo/no_nice.png differ diff --git a/resources/views/dashboard/partials/sidenav.blade.php b/resources/views/dashboard/partials/sidenav.blade.php index 65e11fb..3ccb79c 100644 --- a/resources/views/dashboard/partials/sidenav.blade.php +++ b/resources/views/dashboard/partials/sidenav.blade.php @@ -109,6 +109,14 @@
Laporan Pesanan
+ + + {{--