// 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
$('