// salesreport.js - Versi yang ditingkatkan dengan penanganan tidak ada data $(document).ready(function () { // Inisialisasi datatable dengan penanganan kesalahan try { $('.datanew').DataTable({ responsive: true, language: { search: 'Cari: _INPUT_', searchPlaceholder: 'Cari transaksi...', lengthMenu: 'Tampilkan: _MENU_', paginate: { 'first': 'Pertama', 'last': 'Terakhir', 'next': '>', 'previous': '<' }, info: "Menampilkan _START_ sampai _END_ dari _TOTAL_ entri", infoEmpty: "Menampilkan 0 sampai 0 dari 0 entri", infoFiltered: "(disaring dari _MAX_ entri total)", emptyTable: "Tidak ada data tersedia untuk periode yang dipilih", zeroRecords: "Tidak ditemukan catatan yang cocok", processing: "Memproses..." }, dom: '<"top"fl>rt<"bottom"ip><"clear">', lengthMenu: [10, 25, 50, 100], pageLength: 10, // Penanganan kesalahan untuk DataTables drawCallback: function() { // Sembunyikan loading overlay saat data siap if (document.getElementById('loading-overlay')) { document.getElementById('loading-overlay').style.display = 'none'; } } }); } catch (e) { console.error("Kesalahan inisialisasi DataTable:", e); // Sembunyikan loading overlay jika terjadi kesalahan if (document.getElementById('loading-overlay')) { document.getElementById('loading-overlay').style.display = 'none'; } } // Menangani pemilihan preset tanggal $('#preset').on('change', function() { if ($(this).val() === '') { // Rentang tanggal kustom dipilih - tampilkan input tanggal kustom $('#custom-date-inputs').show(); } else { // Preset dipilih - sembunyikan input tanggal kustom dan tampilkan loading overlay $('#custom-date-inputs').hide(); // Tampilkan loading overlay sebelum mengirimkan if (document.getElementById('loading-overlay')) { document.getElementById('loading-overlay').style.display = 'flex'; } // Tambahkan penundaan kecil sebelum mengirimkan untuk memastikan loading overlay terlihat setTimeout(function() { $('#date-filter-form').submit(); }, 100); } }); // Validasi form dasar $('#date-filter-form').on('submit', function(e) { // Tampilkan loading overlay if (document.getElementById('loading-overlay')) { document.getElementById('loading-overlay').style.display = 'flex'; } // Hanya validasi jika rentang tanggal kustom dipilih if ($('#preset').val() === '') { var startDate = $('#start_date').val(); var endDate = $('#end_date').val(); if (!startDate || !endDate) { alert('Silakan pilih tanggal mulai dan tanggal akhir'); // Sembunyikan loading overlay jika validasi gagal if (document.getElementById('loading-overlay')) { document.getElementById('loading-overlay').style.display = 'none'; } e.preventDefault(); return false; } if (new Date(startDate) > new Date(endDate)) { alert('Tanggal mulai tidak boleh lebih besar dari tanggal akhir'); // Sembunyikan loading overlay jika validasi gagal if (document.getElementById('loading-overlay')) { document.getElementById('loading-overlay').style.display = 'none'; } e.preventDefault(); return false; } } return true; }); // Fungsi ekspor $('.pdf-export').on('click', function(e) { e.preventDefault(); // Tampilkan loading overlay if (document.getElementById('loading-overlay')) { document.getElementById('loading-overlay').style.display = 'flex'; } // Periksa apakah pengguna memiliki izin (dikontrol oleh kelas CSS) if ($(this).hasClass('disabled-for-employee')) { showPermissionModal('Ekspor PDF', 'Laporan ini tidak dapat diekspor ke PDF oleh akun karyawan.'); // Sembunyikan loading overlay jika pemeriksaan izin gagal if (document.getElementById('loading-overlay')) { document.getElementById('loading-overlay').style.display = 'none'; } return; } // Jika kita memiliki izin, lanjutkan dengan ekspor exportTableToPDF(); }); $('.excel-export').on('click', function(e) { e.preventDefault(); // Tampilkan loading overlay if (document.getElementById('loading-overlay')) { document.getElementById('loading-overlay').style.display = 'flex'; } // Periksa apakah pengguna memiliki izin (dikontrol oleh kelas CSS) if ($(this).hasClass('disabled-for-employee')) { showPermissionModal('Ekspor Excel', 'Laporan ini tidak dapat diekspor ke Excel oleh akun karyawan.'); // Sembunyikan loading overlay jika pemeriksaan izin gagal if (document.getElementById('loading-overlay')) { document.getElementById('loading-overlay').style.display = 'none'; } return; } // Jika kita memiliki izin, lanjutkan dengan ekspor exportTableToExcel(); }); $('.print-report').on('click', function(e) { e.preventDefault(); // Periksa apakah pengguna memiliki izin (dikontrol oleh kelas CSS) if ($(this).hasClass('disabled-for-employee')) { showPermissionModal('Cetak Laporan', 'Pencetakan laporan dibatasi hanya untuk akun administrator.'); return; } // Jika kita memiliki izin, lanjutkan dengan cetak printReport(); }); // Untuk akses karyawan - menangani upaya tindakan terbatas $('.employee-print, .employee-export').on('click', function(e) { e.preventDefault(); // Dapatkan jenis tindakan dari atribut data atau default var actionType = $(this).data('action') === 'print_attempt' ? 'Cetak Laporan' : 'Ekspor Laporan'; var message = $(this).data('action') === 'print_attempt' ? 'Pencetakan laporan dibatasi hanya untuk akun administrator.' : 'Ekspor data dibatasi hanya untuk akun administrator.'; showPermissionModal(actionType, message); }); // Menangani tombol reset - tampilkan loading overlay $('a[href="?reset=1"]').on('click', function() { if (document.getElementById('loading-overlay')) { document.getElementById('loading-overlay').style.display = 'flex'; } }); }); // Fungsi untuk menampilkan modal izin function showPermissionModal(actionType, message) { // Atur detail tindakan $('#actionDetails').html( 'Tindakan yang Dicoba: ' + actionType + '
' + '' + message + '' ); // Tampilkan modal var permissionModal = new bootstrap.Modal(document.getElementById('permissionModal')); permissionModal.show(); } // Fungsi untuk mencetak tanda terima function printReceipt(transactionId) { // Buka tanda terima di jendela baru untuk pencetakan var printWindow = window.open('../../transaction/transaction_success.php?id=' + transactionId + '&print=true', '_blank', 'width=400,height=600'); // Cetak otomatis setelah konten dimuat printWindow.onload = function () { setTimeout(function () { printWindow.print(); }, 500); }; return false; } // Fungsi untuk mencetak laporan saat ini function printReport() { // Tambahkan gaya khusus untuk pencetakan $('