vb_book/app/Views/itemwise_report_with_payment_method.php
2024-12-31 18:08:25 +05:30

210 lines
9.6 KiB
PHP

<!-- start page title -->
<div class="row d-flex align-items-center">
<!-- Title Section -->
<div class="col-md-4">
<div class="page-title-box page-title-box-alt">
<h4 class="page-title"><?= $page_name ?></h4>
</div>
</div>
<!-- Form Section -->
<div class="col-md-5 offset-md-3">
<form action="<?php echo base_url('itemwise_report_with_payment_method'); ?>" method="post">
<div class="form-group">
<div class="row">
<div class="col-md-7">
<input class="form-control input-daterange-datepicker" type="text" name="date" value="<?php echo $selected_data; ?>" />
</div>
<div class="col-md-5">
<button type="submit" class="btn btn-primary">Generate Report</button>
</div>
</div>
</div>
</form>
</div>
</div>
<!-- Table Section -->
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-body">
<div class="table-responsive">
<table style="width: 100%;" id="datatable-buttons" class="table table-striped nowrap w-100">
<thead>
<tr>
<th><b>Publisher Code</b></th>
<th><b>Publisher Item Count</b></th>
<th><b>Publisher Total Cost</b></th>
<th style="width: 10%;"><b>Book Name</b></th>
<th><b>Item Count</b></th>
<th><b>Payment method</b></th>
<th style="text-align: center;"><b>Total Cost</b></th>
</tr>
</thead>
<tbody>
<?php foreach ($report_data as $row): ?>
<?php foreach ($row->books as $book): ?>
<tr>
<td style="text-align: center;"><?= isset($row->publisher_code) ? $row->publisher_code : '-' ?></td>
<td style="text-align: center;"><?= $row->publisher_item_count ?></td>
<td style="text-align: right;"><?= number_format($row->publisher_total_cost, 2) ?></td>
<td style="text-align: left;"><?= $book->book_name ?></td>
<td style="text-align: center;"><?= $book->item_count ?></td>
<td style="text-align: left;"><?= strtoupper($row->payment_method) ?></td>
<td style="text-align: right;"><?= number_format($book->total_cost, 2) ?></td>
</tr>
<?php endforeach; ?>
<?php endforeach; ?>
</tbody>
<tfoot>
<tr class="total-row">
<td colspan="6" style="text-align: right; font-weight: bold;">Total</td>
<td class="total" style="text-align: right;"></td>
</tr>
</tfoot>
</table>
</div>
</div> <!-- end card body-->
</div> <!-- end card -->
</div><!-- end col-->
</div>
<!-- end row-->
<script>
$(document).ready(function () {
var table = $('#datatable-buttons').DataTable({
dom: '<"row mb-3"<"col-md-6 d-flex align-items-center"B><"col-md-6 d-flex justify-content-end"f>>rtip',
buttons: [
{
extend: 'print',
title: '<?= $page_name . " " . $selected_data ?>',
text: 'Print',
customize: function (win) {
var total = calculateTotal();
$(win.document.body)
.append(`<div style="text-align: right; font-weight: bold; margin-top: 20px;">Total Amount: ${total}</div>`);
}
},
{
extend: 'csv',
text: 'CSV',
title: '<?= $page_name . " " . $selected_data ?>',
customize: function (csv) {
var total = calculateTotal();
var csvRows = csv.split("\n");
var columnCount = csvRows[0].split(",").length;
var emptyCells = Array(columnCount - 2).fill("").join(","); // Adjust the number of empty cells
var totalRow = `${emptyCells},Total,${total}`;
csvRows.push(totalRow);
return csvRows.join("\n");
}
}
]
});
// Function to calculate the total for print/CSV export
function calculateTotal() {
var total = table.rows({ filter: 'applied' }).data().toArray().reduce(function (a, b) {
var cost = parseFloat(b[6].replace(/[^0-9.-]+/g, "")); // Sum the 7th column (index 6) which represents the total cost
return a + (isNaN(cost) ? 0 : cost); // Only add valid numbers
}, 0);
console.log("Calculated total: " + total); // Add a console log to verify the calculation
return total.toFixed(2);
}
// Add total row to the table footer (this will display the total in the table)
table.on('draw', function () {
updateTotal();
});
// Function to update the total in the footer
function updateTotal() {
var total = table.rows({ filter: 'applied' }).data().toArray().reduce(function (a, b) {
var cost = parseFloat(b[6].replace(/[^0-9.-]+/g, "")); // Clean and parse the value
return a + (isNaN(cost) ? 0 : cost); // Only add valid numbers
}, 0);
console.log("Footer total: ₹" + total.toFixed(2)); // Log the footer total for debugging
$('#datatable-buttons tfoot .total').html(`₹${total.toFixed(2)}`);
}
// Trigger the total update after initial draw
updateTotal(); // Manually trigger the first total update
// Add date range filter and dropdowns for the table columns
$('#datatable-buttons thead tr').clone(true).appendTo('#datatable-buttons thead');
$('#datatable-buttons thead tr:eq(1) th').each(function(i) {
var title = $(this).text();
// For non-"Invoice Date" columns, add a dropdown
var uniqueValues = table.column(i).data().unique().sort();
var select = $('<select class="form-control form-control-sm"><option value="">Search ' + title + '</option></select>')
.appendTo($(this).empty())
.on('change', function() {
var val = $.fn.dataTable.util.escapeRegex($(this).val());
table.column(i)
.search(val ? '^' + val + '$' : '', true, false)
.draw();
});
uniqueValues.each(function(d, j) {
select.append('<option value="' + d + '">' + d + '</option>');
});
// Handle column search using the input
$('input', this).on('keyup change', function() {
if (table.column(i).search() !== this.value) {
table.column(i).search(this.value).draw();
}
});
});
// Date range picker initialization
var $select_data = '<?php echo $selected_data; ?>';
var dateRangeFilter = $('input.input-daterange-datepicker')
.daterangepicker({
locale: {
format: 'DD/MM/YYYY',
cancelLabel: 'Clear'
},
startDate: $select_data ? moment($select_data.split(' - ')[0], 'DD/MM/YYYY') : moment(),
endDate: $select_data ? moment($select_data.split(' - ')[1], 'DD/MM/YYYY') : moment(),
ranges: {
'Today': [moment(), moment()],
'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
'This Month': [moment().startOf('month'), moment().endOf('month')]
}
})
.on('apply.daterangepicker', function(ev, picker) {
var formattedStartDate = picker.startDate.format('DD/MM/YYYY');
var formattedEndDate = picker.endDate.format('DD/MM/YYYY');
var selectedDateRange = formattedStartDate + ' - ' + formattedEndDate;
$(this).val(selectedDateRange);
table.draw(); // Redraw table when date range changes
})
.on('cancel.daterangepicker', function() {
$(this).val('');
table.draw(); // Redraw table when date range is cleared
});
$('.today-btn').on('click', function() {
var today = moment();
dateRangeFilter.data('daterangepicker').setStartDate(today);
dateRangeFilter.data('daterangepicker').setEndDate(today);
dateRangeFilter.val(today.format('DD/MM/YYYY') + ' - ' + today.format('DD/MM/YYYY'));
dateRangeFilter.trigger('apply.daterangepicker');
});
// Trigger "Today" button click to set it as default if $select_data is empty
if ($select_data === '') {
$('.today-btn').trigger('click');
}
});
</script>