refs #4564 mixin vn-report created
gitea/salix/pipeline/head This commit looks good Details

This commit is contained in:
Alexandre Riera 2023-01-23 10:12:34 +01:00
parent 6e5728eead
commit 96becec9d3
3 changed files with 56 additions and 29 deletions

View File

@ -0,0 +1,9 @@
module.exports = class NotFoundError extends Error {
constructor(message = 'Not found', code = 'NOT_FOUND', ...translateArgs) {
super(message);
this.name = 'NotFoundError';
this.statusCode = 404;
this.code = code;
this.translateArgs = translateArgs;
}
};

View File

@ -0,0 +1,22 @@
const Component = require(`vn-print/core/component`);
const reportHeader = new Component('report-header');
const reportFooter = new Component('report-footer');
const reportBody = new Component('report-body');
const NotFoundError = require('vn-loopback/util/not-found-error');
module.exports = {
components: {
'report-body': reportBody.build(),
'report-header': reportHeader.build(),
'report-footer': reportFooter.build()
},
methods: {
checkMainEntity: function(entity) {
if (entity == null)
throw new NotFoundError();
},
dated: function(filters, date, format) {
return filters.date(date, format);
}
},
};

View File

@ -23,43 +23,39 @@ class Report extends Component {
} }
async toPdfStream() { async toPdfStream() {
try { const template = await this.render();
const template = await this.render(); const defaultOptions = Object.assign({}, config.pdf);
const defaultOptions = Object.assign({}, config.pdf);
const optionsPath = `${this.path}/options.json`; const optionsPath = `${this.path}/options.json`;
const fullPath = path.resolve(__dirname, optionsPath); const fullPath = path.resolve(__dirname, optionsPath);
let options = defaultOptions; let options = defaultOptions;
if (fs.existsSync(fullPath)) if (fs.existsSync(fullPath))
options = require(optionsPath); options = require(optionsPath);
return new Promise(resolve => { return new Promise(resolve => {
Cluster.pool.queue({}, async({page}) => { Cluster.pool.queue({}, async({page}) => {
await page.emulateMediaType('screen'); await page.emulateMediaType('screen');
await page.setContent(template); await page.setContent(template);
const element = await page.$('#pageFooter'); const element = await page.$('#pageFooter');
let footer = '\n'; let footer = '\n';
if (element) { if (element) {
footer = await page.evaluate(el => { footer = await page.evaluate(el => {
const html = el.innerHTML; const html = el.innerHTML;
el.remove(); el.remove();
return html; return html;
}, element); }, element);
} }
options.headerTemplate = '\n'; options.headerTemplate = '\n';
options.footerTemplate = footer; options.footerTemplate = footer;
const stream = await page.pdf(options); const stream = await page.pdf(options);
resolve(stream); resolve(stream);
});
}); });
} catch (e) { });
console.log('ERROR CATCHED:', e);
}
} }
/** /**