const Component = require(`vn-print/core/component`); const reportHeader = new Component('report-header'); const reportFooter = new Component('report-footer'); module.exports = { name: 'supplier-campaign-metrics', async serverPrefetch() { this.supplier = await this.fetchSupplier(this.id); let entries = await this.fetchEntries(this.id, this.from, this.to); const entriesId = []; for (let entry of entries) entriesId.push(entry.id); const buys = await this.fetchBuys(entriesId); const entriesMap = new Map(); for (let entry of entries) entriesMap.set(entry.id, entry); for (let buy of buys) { const entry = entriesMap.get(buy.entryFk); if (entry) { if (!entry.buys) entry.buys = []; entry.buys.push(buy); } } this.entries = entries; if (!this.supplier) throw new Error('Something went wrong'); }, methods: { fetchSupplier(supplierId) { return this.findOneFromDef('supplier', [supplierId]); }, fetchEntries(supplierId, from, to) { return this.rawSqlFromDef('entries', [supplierId, from, to]); }, fetchBuys(entriesId) { return this.rawSqlFromDef('buys', [entriesId]); } }, components: { 'report-header': reportHeader.build(), 'report-footer': reportFooter.build() }, props: { id: { type: [Number, String], required: true, description: 'The supplier id' }, from: { required: true }, to: { required: true } } };