UNPKG

alphascript-server

Version:

CRUD operations for mongo and other functionalities to get started quickly in any CMS project

96 lines (85 loc) 2.82 kB
var api = require('../../../'); var Q = require('q'); var moment = require('moment'); var PdfTable = require('voilab-pdf-table'); var PdfDocument = require('pdfkit'); module.exports = { getList: function (listKey) { var list = api.listMap[listKey]; return function (req, res) { //setup excel var xlsHeader = {}; list.metadata.cols.forEach(function (col) { xlsHeader[col.field] = col.title; }); //parse parameters if (req.query.query) req.query.query = JSON.parse(req.query.query); //get data list.get(req, function (err, items) { if (err) return res.status(500).send(err); if (req.query.xls) { //on spreadsheet var xls = { sheets: [] }; var filename = list.metadata.caption + ' ' + moment().format('YYYY-MM-DD') + '.xlsx'; xls.sheets.push({ header: xlsHeader, sheetName: req.params.db, items: items }); res.setHeader('Content-Type', 'application/vnd.openxmlformats'); res.setHeader("Content-Disposition", "attachment; filename=" + filename); return res.send(api.xlsx.fromJson(xls)); } else if (req.query.pdf) { //on pdf var pdf = new PdfDocument({ autoFirstPage: false, size: [842, 595], bufferPages: true, }); pdf.fontSize(8); var cols = list.metadata.cols.map(function (col) { return { id: col.field, header: col.title, width: (842 - 130) / list.metadata.cols.length }; }); var table = new PdfTable(pdf, { bottomMargin: 30 }); table.setColumnsDefaults({ headerBorder: 'LTBR', align: 'left' }).addColumns(cols).onPageAdded(function (tb) { tb.addHeader(); }); pdf.addPage(); items = items.map(function (item) { for (var key in item) { if (typeof item[key] === 'undefined') continue; if (!item[key]) continue; if (typeof item[key] !== 'string' && typeof item[key].toString === 'function') { item[key] = item[key].toString(); } } return item; }); table.addBody(items); pdf.pipe(res); return pdf.end(); } else { //on screen return res.json(items); } }); }; }, getMetadata: function (req, res) { var lists = []; for (var key in api.listMap) { lists.push(api.listMap[key].metadata); } lists.sort(function (a, b) { if (a.category < b.category) return -1; if (a.category > b.category) return 1; return 0; }); res.json(lists); } };