From d661934ecab6a147657e9ab27741cccbad4e4a5f Mon Sep 17 00:00:00 2001 From: Dimas <124556325+Diz09@users.noreply.github.com> Date: Wed, 25 Jun 2025 19:16:44 +0700 Subject: [PATCH] fix ajax grafiks + test format slip gaji --- app/Http/Controllers/DashboardController.php | 68 +++++++++++ resources/views/dashboard/pimpinan.blade.php | 55 ++++++++- resources/views/operator/test.html | 114 +++++++++++++++++++ routes/web.php | 5 +- 4 files changed, 235 insertions(+), 7 deletions(-) create mode 100644 resources/views/operator/test.html diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php index 1e9e915..d63a9f3 100644 --- a/app/Http/Controllers/DashboardController.php +++ b/app/Http/Controllers/DashboardController.php @@ -228,4 +228,72 @@ public function tambahUangMakanHarian() } } + public function ajaxData(Request $request) + { + // Ambil semua logika seperti di `pimpinan()` + $currentYear = now()->year; + $start = $request->get('start_date') + ? Carbon::parse($request->get('start_date')) + : Carbon::create($currentYear, 1, 1)->startOfDay(); + $end = $request->get('end_date') + ? Carbon::parse($request->get('end_date')) + : Carbon::create($currentYear, 12, 31)->endOfDay(); + + $kloterId = $request->get('kloter'); + $labelsKloter = []; + $pendapatanKloter = []; + $pengeluaranKloter = []; + + if ($kloterId) { + $selectedKloter = HistoryGajiKloter::find($kloterId); + if ($selectedKloter) { + $labelsKloter[] = $selectedKloter->nama ?? 'Kloter ' . $selectedKloter->id; + + $pendapatanKloter[] = Transaksi::whereBetween('waktu_transaksi', [ + $selectedKloter->tanggal_awal, + $selectedKloter->tanggal_akhir + ]) + ->whereNotNull('pemasukan_id') + ->sum('jumlahRp'); + + $pengeluaranKloter[] = Transaksi::whereBetween('waktu_transaksi', [ + $selectedKloter->tanggal_awal, + $selectedKloter->tanggal_akhir + ]) + ->where(function ($q) { + $q->whereNotNull('pengeluaran_id') + ->orWhereNotNull('history_gaji_kloter_id'); + }) + ->sum('jumlahRp'); + } + } + + $dates = CarbonPeriod::create($start, $end); + $labels = []; + $pendapatanBulanan = []; + $pengeluaranBulanan = []; + + foreach ($dates as $date) { + $labels[] = $date->format('d M'); + $pendapatanBulanan[] = Transaksi::whereDate('waktu_transaksi', $date) + ->whereNotNull('pemasukan_id') + ->sum('jumlahRp'); + + $pengeluaranBulanan[] = Transaksi::whereDate('waktu_transaksi', $date) + ->where(function ($q) { + $q->whereNotNull('pengeluaran_id') + ->orWhereNotNull('history_gaji_kloter_id'); + }) + ->sum('jumlahRp'); + } + + return response()->json([ + 'labels' => $labels, + 'pendapatanBulanan' => $pendapatanBulanan, + 'pengeluaranBulanan' => $pengeluaranBulanan, + 'labelsKloter' => $labelsKloter, + 'pendapatanKloter' => $pendapatanKloter, + 'pengeluaranKloter' => $pengeluaranKloter + ]); + } } diff --git a/resources/views/dashboard/pimpinan.blade.php b/resources/views/dashboard/pimpinan.blade.php index ffc4ad3..c74dce0 100644 --- a/resources/views/dashboard/pimpinan.blade.php +++ b/resources/views/dashboard/pimpinan.blade.php @@ -148,7 +148,7 @@ class="filter-info border px-2 py-1 rounded text-sm"> const kloterChart = new Chart(ctxKloter, { type: 'line', data: { - labels: {!! json_encode(array_reverse($labelsKloter)) !!}, // diurut terbalik + labels: {!! json_encode(array_reverse($labelsKloter)) !!}, datasets: [ { label: 'Pendapatan', @@ -187,7 +187,6 @@ class="filter-info border px-2 py-1 rounded text-sm"> spanGaps: true, scales: { y: { - // type: 'logarithmic', beginAtZero: true, ticks: { callback: function(value) { @@ -203,24 +202,68 @@ class="filter-info border px-2 py-1 rounded text-sm"> const form = document.getElementById('date-filter-form'); const startInput = document.getElementById('start_date'); const endInput = document.getElementById('end_date'); + [startInput, endInput].forEach(input => { input.addEventListener('change', () => { const startDate = startInput.value; const endDate = endInput.value; if (startDate && endDate && startDate <= endDate) { - form.submit(); + fetchChartData(); } }); }); + document.getElementById('kloterFilter').addEventListener('change', function () { const selected = this.options[this.selectedIndex]; const start = selected.getAttribute('data-start'); const end = selected.getAttribute('data-end'); if (start && end) { - document.getElementById('start_date').value = start; - document.getElementById('end_date').value = end; + startInput.value = start; + endInput.value = end; } - form.submit(); + fetchChartData(); }); + + // AJAX Chart Update + const updateCharts = (data) => { + // Update Chart Tanggal + financeChart.data.labels = data.labels; + financeChart.data.datasets[0].data = data.pendapatanBulanan; + financeChart.data.datasets[1].data = data.pengeluaranBulanan; + financeChart.update(); + + // Update Chart Kloter + kloterChart.data.labels = data.labelsKloter.reverse(); + kloterChart.data.datasets[0].data = data.pendapatanKloter.reverse(); + kloterChart.data.datasets[1].data = data.pengeluaranKloter.reverse(); + kloterChart.update(); + }; + + const fetchChartData = () => { + const startDate = startInput.value; + const endDate = endInput.value; + const kloterId = document.getElementById('kloterFilter').value; + + fetch("{{ route('dashboard.pimpinan.data') }}", { + method: 'POST', + headers: { + 'X-CSRF-TOKEN': '{{ csrf_token() }}', + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + start_date: startDate, + end_date: endDate, + kloter_id: kloterId + }) + }) + .then(res => res.json()) + .then(updateCharts) + .catch(err => console.error('Gagal fetch data:', err)); + }; + + // Event listener input + startInput.addEventListener('change', fetchChartData); + endInput.addEventListener('change', fetchChartData); + document.getElementById('kloterFilter').addEventListener('change', fetchChartData); @endsection diff --git a/resources/views/operator/test.html b/resources/views/operator/test.html new file mode 100644 index 0000000..f89e773 --- /dev/null +++ b/resources/views/operator/test.html @@ -0,0 +1,114 @@ + + + + + Slip Gaji Karyawan + + + +
+

UD. DNL PUTRA

+

KP.Nyamplong, Desa Sumberanyar, Kecamatan Banyuputih, Kabupaten Situbondo
Telp: 0812-3913-9713 | Email: info@ud-dnlputra.com

+
+
+ +

SLIP GAJI KARYAWAN
Periode: 07 - 12 Juni 2025

+ +
+ +

Nama Karyawan: Jibno

+ +

Jenis Kelamin: Laki-laki

+ +

Kloter: 6

+ +

Tanggal Cetak: 25 Juni 2025

+
+ + + + + + + + + + + + + + + + + +
TanggalJam Kerja
07-Jun-202513 jam 5 menit
08-Jun-202513 jam 5 menit
09-Jun-202513 jam 5 menit
12-Jun-20250 jam 0 menit
Total39 jam 16 menit
+ + + + + + + + + + + + + + + + + +
Gaji per JamRp2.273
Total Jam Kerja39 jam 16 menit
Total GajiRp89.259
+ +
+
+

Mengetahui,

+


+

Poniman

+
+
+

Diterima oleh,

+


+

Jibno

+
+
+ + \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index e3863e8..6bcaafb 100644 --- a/routes/web.php +++ b/routes/web.php @@ -97,10 +97,14 @@ // Pimpinan // Route::middleware(['auth', 'role:pimpinan'])->group(function () { Route::get('/pimpinan/dashboard', [DashboardController::class, 'pimpinan'])->name('dashboard.pimpinan'); + Route::post('/dashboard-pimpinan/data', [DashboardController::class, 'ajaxData'])->name('dashboard.pimpinan.data'); + Route::get('/pimpinan/laporan-barang', [LaporanController::class, 'barang'])->name('laporan.barang'); Route::get('/pimpinan/laporan-karyawan', [LaporanController::class, 'karyawan'])->name('laporan.karyawan'); Route::get('/pimpinan/laporan-supplier', [LaporanController::class, 'supplier'])->name('laporan.supplier'); Route::get('/pimpinan/laporan-transaksi', [LaporanController::class, 'transaksi'])->name('laporan.transaksi'); + + // }); // Operator @@ -188,6 +192,5 @@ Route::get('operator/transaksi/export', [TransaksiController::class, 'exportExcel'])->name('operator.transaksi.export'); Route::get('/laporan/transaksi/export-pdf', [TransaksiController::class, 'exportPDF'])->name('operator.transaksi.export_pdf'); - // });