UNPKG

@gameroom/cli

Version:

A command line tool for Gameroom

81 lines (72 loc) 3.19 kB
const Table = require('tabley'), { models: { Container, Store, Unit } } = require('@gameroom/kit'), { join, resolve } = require('path'), { dateAddDays, dateLocaleString, dateString, getAll, grGreen, writeTable, writeCSVFile } = require('../../helpers'), { spinner } = require('../../refs') module.exports = async ({ write }) => { if (write === true) write = '.' spinner.text = `generating ${grGreen('container units')} report` spinner.start() // stores spinner.text = `getting ${grGreen('stores')}` const stores = await getAll(Store, { sort: [{ name: 1 }] }, spinner) spinner.succeed(`got ${stores.length} ${grGreen('stores')}`) // containers spinner.text = `getting ${grGreen('containers')}` const containers = await getAll(Container, { sort: [{ name: 1 }] }, spinner) spinner.succeed(`got ${containers.length} ${grGreen('containers')}`) // units spinner.text = `getting ${grGreen('units')}` const units = await getAll(Unit, { filter: { key: 'quantity', comparison: '>', value: 0 } }, spinner) spinner.succeed(`got ${units.length} ${grGreen('units')}`) const meta = [{ container_name: 'None', container_id: '', store_name: '', offered: units.filter(u => u.container_id === null && u.offered === true).length, not_offered: units.filter(u => u.container_id === null && u.offered === false).length, shopified: units.filter(u => u.container_id === null && u.shopified === true).length, not_shopified: units.filter(u => u.container_id === null && u.shopified === false).length }, { container_name: 'Total', container_id: '', store_name: '', count: units.length, offered: units.filter(u => u.offered === true).length, not_offered: units.filter(u => u.offered === false).length, shopified: units.filter(u => u.shopified === true).length, not_shopified: units.filter(u => u.shopified === false).length }] const store_rows = { none: [] } for (const store of stores) store_rows[store.id] = [] for (const container of containers) { const store = stores.find(s => s.id === container.store_id) const container_units = units.filter(u => u.container_id === container.id) store_rows[store ? store.id : 'none'].push({ container_name: container.name, container_id: container.id, store_name: store ? store.name : '', count: container_units.length, offered: container_units.filter(u => u.offered === true).length, not_offered: container_units.filter(u => u.offered === false).length, shopified: container_units.filter(u => u.shopified === true).length, not_shopified: container_units.filter(u => u.shopified === false).length }) } const rows = [] for (const store of stores) rows.push(...store_rows[store.id]) rows.push(...store_rows.none) const table = new Table(rows, { title: grGreen('container units report'), meta, align: 'center', margin: 4 }) if (write) await writeCSVFile(join(resolve(write), 'container-units-report.csv'), [...rows, ...meta]) spinner.stop() console.log() table.print() console.log() spinner.succeed(`generated ${grGreen('container units')} report`).stop() }