feat(qr-custom): filter tanggal + pilih baris & hapus terpilih
All checks were successful
CI / test (push) Successful in 1m37s

- filter from/to pada list
- checkbox pilih semua, batch delete dengan password admin
- reset histori tetap
- versi 0.6.6
This commit is contained in:
oxpoe
2026-11-06 05:11:50 +07:00
parent a2888810ad
commit 0f7affc498
7 changed files with 73 additions and 8 deletions

View File

@@ -4019,6 +4019,8 @@ router.get('/custom-qr', requireAdminSession, requireSidebarMenuAccess('custom_q
let detail = null;
const detailId = Number(req.query.id) || 0;
if (detailId > 0) { try { detail = svc.getById(detailId); } catch (e) {} }
const filterFrom = String(req.query.from || '').trim();
const filterTo = String(req.query.to || '').trim();
const settings = getSettings();
const baseUrl = String(settings.public_base_url || ((req.headers['x-forwarded-proto'] || req.protocol) + '://' + req.get('host'))).replace(/\/+$/, '');
res.render('admin/custom_qr', {
@@ -4026,7 +4028,8 @@ router.get('/custom-qr', requireAdminSession, requireSidebarMenuAccess('custom_q
company: company(),
activePage: 'custom_qr',
msg: flashMsg(req),
rows: svc.list(150),
rows: svc.list(200, { from: filterFrom, to: filterTo }),
filterFrom, filterTo,
stats: svc.stats(),
detail,
baseUrl,
@@ -4086,6 +4089,19 @@ router.post('/custom-qr/reset', requireAdminSession, restrictToAdmin, requireSid
res.redirect('/admin/custom-qr');
});
router.post('/custom-qr/delete-bulk', requireAdminSession, restrictToAdmin, requireSidebarMenuAccess('custom_qr'), express.urlencoded({ extended: true }), (req, res) => {
try {
if (!_checkAdminPassword(req)) throw new Error('Password admin salah.');
const ids = Array.isArray(req.body.ids) ? req.body.ids : [req.body.ids];
const n = require('../services/customQrService').removeMany(ids);
req.session._msg = { type: 'success', text: `${n} QR custom dihapus.` };
} catch (e) { req.session._msg = { type: 'error', text: e.message }; }
const q = [];
if (req.body.from) q.push('from=' + encodeURIComponent(req.body.from));
if (req.body.to) q.push('to=' + encodeURIComponent(req.body.to));
res.redirect('/admin/custom-qr' + (q.length ? ('?' + q.join('&')) : ''));
});
router.post('/custom-qr/:id/regenerate', requireAdminSession, requireSidebarMenuAccess('custom_qr'), express.urlencoded({ extended: true }), (req, res) => {
try {
const row = require('../services/customQrService').regenerate(req.params.id, resolvePaidByName(req, 'Admin'));