Files
Jacek Pyziak 22fc330055 feat(11-12-accounting): phases 11-12 complete — milestone v0.3 done
Phase 11: Receipt preview, print & PDF via dompdf.
Phase 12: Accounting section with receipt list, filters, pagination,
selectable checkboxes and XLSX export via PhpSpreadsheet.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 21:00:29 +01:00

100 lines
3.4 KiB
PHP

<?php
$exportQueryVal = (string) ($exportQuery ?? '');
$csrfTokenVal = (string) ($csrfToken ?? '');
$queryData = is_array($tableList['query'] ?? null) ? $tableList['query'] : [];
?>
<section class="card">
<div class="orders-head">
<div>
<h2 class="section-title"><?= $e($t('accounting.title')) ?></h2>
</div>
<div class="accounting-export-actions">
<span class="muted js-accounting-selection-info"></span>
<button type="button" class="btn btn--secondary js-accounting-export-selected" disabled><?= $e($t('accounting.export_selected')) ?></button>
<button type="button" class="btn btn--primary js-accounting-export-all"><?= $e($t('accounting.export_all')) ?></button>
</div>
</div>
</section>
<form id="accountingExportForm" method="post" action="/accounting/export" style="display:none;">
<input type="hidden" name="_token" value="<?= $e($csrfTokenVal) ?>">
<input type="hidden" name="export_all" value="0" id="exportAllFlag">
<?php foreach ($queryData as $key => $value): ?>
<?php if ($value !== '' && $value !== null && $key !== 'page' && $key !== 'per_page' && $key !== 'sort' && $key !== 'sort_dir'): ?>
<input type="hidden" name="<?= $e((string) $key) ?>" value="<?= $e((string) $value) ?>">
<?php endif; ?>
<?php endforeach; ?>
<div id="exportSelectedIds"></div>
</form>
<?php require __DIR__ . '/../components/table-list.php'; ?>
<script>
(function() {
var form = document.getElementById('accountingExportForm');
var exportAllFlag = document.getElementById('exportAllFlag');
var exportSelectedIds = document.getElementById('exportSelectedIds');
var exportSelectedBtn = document.querySelector('.js-accounting-export-selected');
var exportAllBtn = document.querySelector('.js-accounting-export-all');
var selectionInfo = document.querySelector('.js-accounting-selection-info');
var tableRoot = document.querySelector('[data-table-list-id="accounting"]');
function getCheckedIds() {
if (!tableRoot) return [];
var items = tableRoot.querySelectorAll('.js-table-select-item:checked');
var ids = [];
for (var i = 0; i < items.length; i++) {
ids.push(items[i].value);
}
return ids;
}
function updateUI() {
var ids = getCheckedIds();
var count = ids.length;
if (exportSelectedBtn) {
exportSelectedBtn.disabled = count === 0;
}
if (selectionInfo) {
selectionInfo.textContent = count > 0 ? 'Zaznaczono: ' + count : '';
}
}
if (tableRoot) {
tableRoot.addEventListener('change', function(e) {
if (e.target && (e.target.classList.contains('js-table-select-item') || e.target.classList.contains('js-table-select-all'))) {
updateUI();
}
});
}
if (exportSelectedBtn) {
exportSelectedBtn.addEventListener('click', function() {
var ids = getCheckedIds();
if (ids.length === 0) return;
exportAllFlag.value = '0';
exportSelectedIds.innerHTML = '';
ids.forEach(function(id) {
var input = document.createElement('input');
input.type = 'hidden';
input.name = 'selected_ids[]';
input.value = id;
exportSelectedIds.appendChild(input);
});
form.submit();
});
}
if (exportAllBtn) {
exportAllBtn.addEventListener('click', function() {
exportAllFlag.value = '1';
exportSelectedIds.innerHTML = '';
form.submit();
});
}
updateUI();
})();
</script>