$(document).ready(function () {
// Initialize DataTable
var table = $('#oc-file-det-tbl').DataTable({
paging: true,
searching: true,
ordering: true,
lengthChange: true,
pageLength: 10,
language: {
emptyTable: "No data available",
lengthMenu: "Display _MENU_ records per page",
info: "Showing _START_ to _END_ of _TOTAL_ entries",
infoEmpty: "No records to show",
infoFiltered: "(filtered from _MAX_ total records)"
},
columnDefs: [
{
orderable: false,
targets: [0, 5] // S.No and OC File columns
}
],
buttons: [
{
extend: 'excelHtml5',
title: "OC File Details",
filename: "OC File Details",
exportOptions: {
columns: ':visible:not(:eq(5))', // exclude OC File column
format: {
body: function (data, row, column, node) {
if (column === 0) {
return row + 1;
}
return $('
').html(data).text().trim();
}
}
}
},
'pdfHtml5'
]
});
// --- SEQUENTIAL S.NO FIX ---
table.on('order.dt search.dt draw.dt', function () {
var pageInfo = table.page.info();
table.column(0, { page: 'current' }).nodes().each(function (cell, i) {
cell.innerHTML = pageInfo.start + i + 1;
});
}).draw();
// Move DataTable controls to custom containers
$('#custom-pagination').html($('.dataTables_paginate'));
$('#custom-info').html($('.dataTables_info'));
$('#custom-length').html($('.dataTables_length'));
$('.dataTables_filter').hide(); // hide default search
// Custom search / filtering on the datatable
$('#export-excel').on('click', function () {
table.button('.buttons-excel').trigger();
});
$('#export-pdf').on('click', function () {
var originalLength = table.page.len();
table.one('draw', function () {
var tableClone = $('#oc-file-det-tbl').clone();
tableClone.removeClass('dataTable');
tableClone.find('thead, tbody, tfoot').removeAttr('style');
// Remove "OC File" column (6th col = index 5)
tableClone.find('tr').each(function () {
$(this).find('th:eq(5), td:eq(5)').remove();
});
var pdfContainer = $('#pdf-print-container');
if (!pdfContainer.length) {
$('body').append('
');
pdfContainer = $('#pdf-print-container');
}
pdfContainer.html('
OC File Details
');
pdfContainer.append(tableClone).css({ display: 'block', padding: '20px' });
tableClone.css({ width: '100%', borderCollapse: 'collapse' });
tableClone.find('th, td').css({
border: '1px solid #ccc',
padding: '5px',
fontSize: '10px',
textAlign: 'left',
verticalAlign: 'top'
});
tableClone.find('tr').css({ pageBreakInside: 'avoid', breakInside: 'avoid', webkitBreakInside: 'avoid' });
html2pdf().set({
margin: 0.5,
filename: 'OC File Details.pdf',
image: { type: 'jpeg', quality: 0.98 },
html2canvas: { scale: 2, useCORS: true },
jsPDF: { unit: 'in', format: 'a3', orientation: 'landscape' }
}).from(pdfContainer[0]).save().then(function () {
table.page.len(originalLength).draw();
pdfContainer.hide();
});
});
table.page.len(-1).draw(); // show all rows for PDF
});
function populateFilters() {
var numSet = {}, vendSet = {};
table.rows().every(function () {
var data = this.data();
var fileNum = data[1] ? $('
').html(data[1]).text().trim() : '';
var vendName = data[2] ? $('
').html(data[2]).text().trim() : '';
if (fileNum) numSet[fileNum] = true;
if (vendName) vendSet[vendName] = true;
});
Object.keys(numSet).sort().forEach(val => $('#file-num-list').append(`