mirror of
https://github.com/glenndehaan/unifi-voucher-site.git
synced 2026-03-31 06:24:02 -04:00
112 lines
4.2 KiB
JavaScript
112 lines
4.2 KiB
JavaScript
/**
|
|
* Import own modules
|
|
*/
|
|
const variables = require('../modules/variables');
|
|
const cache = require('../modules/cache');
|
|
const print = require('../modules/print');
|
|
|
|
/**
|
|
* Import own utils
|
|
*/
|
|
const notes = require('../utils/notes');
|
|
const time = require('../utils/time');
|
|
const bytes = require('../utils/bytes');
|
|
const languages = require('../utils/languages');
|
|
|
|
module.exports = {
|
|
print: {
|
|
/**
|
|
* GET - /bulk/print
|
|
*
|
|
* @param req
|
|
* @param res
|
|
*/
|
|
get: (req, res) => {
|
|
if(variables.printers === '') {
|
|
res.status(501).send();
|
|
return;
|
|
}
|
|
|
|
res.render('components/bulk-print', {
|
|
baseUrl: req.headers['x-ingress-path'] ? req.headers['x-ingress-path'] : '',
|
|
timeConvert: time,
|
|
bytesConvert: bytes,
|
|
notesConvert: notes,
|
|
languages,
|
|
defaultLanguage: variables.translationDefault,
|
|
printers: variables.printers.split(','),
|
|
vouchers: cache.vouchers,
|
|
updated: cache.updated
|
|
});
|
|
},
|
|
|
|
/**
|
|
* POST - /bulk/print
|
|
*
|
|
* @param req
|
|
* @param res
|
|
*/
|
|
post: async (req, res) => {
|
|
if(variables.printers === '') {
|
|
res.status(501).send();
|
|
return;
|
|
}
|
|
|
|
if(!variables.printers.includes(req.body.printer)) {
|
|
res.status(400).send();
|
|
return;
|
|
}
|
|
|
|
if(!req.body.vouchers) {
|
|
res.cookie('flashMessage', JSON.stringify({type: 'error', message: 'No selected vouchers to print!'}), {httpOnly: true, expires: new Date(Date.now() + 24 * 60 * 60 * 1000)}).redirect(302, `${req.headers['x-ingress-path'] ? req.headers['x-ingress-path'] : ''}/vouchers`);
|
|
return;
|
|
}
|
|
|
|
// Single checkboxes get send as string so conversion is needed
|
|
if(typeof req.body.vouchers === 'string') {
|
|
req.body.vouchers = [req.body.vouchers];
|
|
}
|
|
|
|
const vouchers = req.body.vouchers.map((voucher) => {
|
|
return cache.vouchers.find((e) => {
|
|
return e.id === voucher;
|
|
});
|
|
});
|
|
|
|
if(!vouchers.includes(undefined)) {
|
|
if(req.body.printer === 'pdf') {
|
|
const buffers = await print.pdf(vouchers, req.body.language, true);
|
|
const pdfData = Buffer.concat(buffers);
|
|
res.writeHead(200, {
|
|
'Content-Length': Buffer.byteLength(pdfData),
|
|
'Content-Type': 'application/pdf',
|
|
'Content-Disposition': `attachment;filename=bulk_vouchers_${new Date().getTime()}.pdf`
|
|
}).end(pdfData);
|
|
} else {
|
|
let printSuccess = true;
|
|
|
|
for(let voucher = 0; voucher < vouchers.length; voucher++) {
|
|
const printResult = await print.escpos(vouchers[voucher], req.body.language, req.body.printer).catch((e) => {
|
|
res.cookie('flashMessage', JSON.stringify({type: 'error', message: e}), {httpOnly: true, expires: new Date(Date.now() + 24 * 60 * 60 * 1000)}).redirect(302, `${req.headers['x-ingress-path'] ? req.headers['x-ingress-path'] : ''}/vouchers`);
|
|
});
|
|
|
|
if(!printResult) {
|
|
printSuccess = false;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(printSuccess) {
|
|
res.cookie('flashMessage', JSON.stringify({type: 'info', message: `Vouchers send to printer!`}), {httpOnly: true, expires: new Date(Date.now() + 24 * 60 * 60 * 1000)}).redirect(302, `${req.headers['x-ingress-path'] ? req.headers['x-ingress-path'] : ''}/vouchers`);
|
|
}
|
|
}
|
|
} else {
|
|
res.status(404);
|
|
res.render('404', {
|
|
baseUrl: req.headers['x-ingress-path'] ? req.headers['x-ingress-path'] : ''
|
|
});
|
|
}
|
|
}
|
|
}
|
|
};
|