@gameroom/cli
Version:
A command line tool for Gameroom
81 lines (72 loc) • 3.19 kB
JavaScript
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()
}