diff --git a/modules/client/front/balance/index/index.html b/modules/client/front/balance/index/index.html index cf0c07cfc..53fda7f08 100644 --- a/modules/client/front/balance/index/index.html +++ b/modules/client/front/balance/index/index.html @@ -108,7 +108,7 @@ + href="api/InvoiceOuts/{{::balance.id}}/download?access_token={{::$ctrl.vnToken.token}}"> diff --git a/print/boot.js b/print/boot.js index 02bb27817..5e84bb5dd 100644 --- a/print/boot.js +++ b/print/boot.js @@ -1,11 +1,13 @@ const express = require('express'); const path = require('path'); const fs = require('fs'); +const puppeteer = require('puppeteer'); const templatesPath = path.resolve(__dirname, './templates'); const componentsPath = path.resolve(__dirname, './core/components'); +const config = require('./core/config'); -module.exports = app => { +module.exports = async app => { global.appPath = __dirname; process.env.OPENSSL_CONF = '/etc/ssl/'; @@ -51,4 +53,16 @@ module.exports = app => { app.use(`/api/${templateName}/assets`, express.static(assetsDir)); }); }); + + // Instantiate Puppeteer browser + async function launchBrowser() { + config.browser = await puppeteer.launch({ + headless: true, + args: ['--no-sandbox', '--disable-setuid-sandbox'] + }); + + config.browser.on('disconnected', launchBrowser); + } + + launchBrowser(); }; diff --git a/print/core/config.js b/print/core/config.js index 5194762b4..fba30dab9 100644 --- a/print/core/config.js +++ b/print/core/config.js @@ -1,4 +1,5 @@ const fs = require('fs-extra'); +const path = require('path'); let env = process.env.NODE_ENV ? process.env.NODE_ENV : 'development'; let configPath = `/etc/salix`; @@ -12,8 +13,9 @@ let configFiles = [ ]; for (let configFile of configFiles) { - if (fs.existsSync(configFile)) { - const conf = require(configFile); + const filePath = path.join(__dirname, configFile); + if (fs.existsSync(filePath)) { + const conf = require(filePath); for (let prop in conf) Object.assign(config[prop], conf[prop]); } diff --git a/print/core/report.js b/print/core/report.js index c5847fda1..b20b8e5df 100644 --- a/print/core/report.js +++ b/print/core/report.js @@ -1,5 +1,4 @@ const fs = require('fs'); -const puppeteer = require('puppeteer'); const path = require('path'); const config = require('./config'); const Component = require('./component'); @@ -28,11 +27,7 @@ class Report extends Component { if (fs.existsSync(fullPath)) options = require(optionsPath); - const browser = await puppeteer.launch({ - headless: true, - args: ['--no-sandbox', '--disable-setuid-sandbox'] - }); - const page = await browser.newPage(); + const page = (await config.browser.pages())[0]; await page.emulateMedia('screen'); await page.setContent(template); @@ -51,7 +46,6 @@ class Report extends Component { options.footerTemplate = footer; const buffer = await page.pdf(options); - await browser.close(); return buffer; } diff --git a/print/templates/reports/driver-route/driver-route.js b/print/templates/reports/driver-route/driver-route.js index cab5342e5..0f8461046 100755 --- a/print/templates/reports/driver-route/driver-route.js +++ b/print/templates/reports/driver-route/driver-route.js @@ -10,12 +10,15 @@ module.exports = { const routes = await this.fetchRoutes(routesId); const tickets = await this.fetchTickets(routesId); - for (let route of routes) { - const routeTickets = tickets.filter(ticket => { - return ticket.routeFk == route.id; - }); + const map = new Map(); - route.tickets = routeTickets; + for (let route of routes) + map.set(route.id, route); + + for (let ticket of tickets) { + const route = map.get(ticket.routeFk); + if (!route.tickets) route.tickets = []; + route.tickets.push(ticket); } this.routes = routes; @@ -61,7 +64,7 @@ module.exports = { a.postalCode, LPAD(a.id, 5, '0') AS addressFk, p.name province, - vn.ticketGetTotal(t.id) AS import, + 0 AS import, am.name ticketAgency, tob.description, s.shipFk,