| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- const _ = require('lodash')
- const app = require('../app')
- app.service('statistics', function(api) {
- const chart = ({
- rows,
- seriesField,
- dataField,
- labelsField,
- format
- }) => {
- const labels = _.chain(rows).map(x => x[labelsField]).uniq().value()
- const series = _.chain(rows).map(x => x[seriesField]).uniq().value()
- const seriesData = _.chain(rows)
- .groupBy(x => x[seriesField])
- .toPairs()
- .map(([key, rows]) => [
- key,
- _.chain(rows)
- .map(row => [row[labelsField], row[dataField]])
- .fromPairs()
- .value()
- ])
- .fromPairs()
- .value()
- const data = series.map(s => {
- const sdata = seriesData[s]
- return labels.map(l => sdata[l])
- })
- return {labels, series, data, options: {
- tooltips: {
- callbacks: {
- label: (tooltipItem, data) => {
- const label = data.datasets[tooltipItem.datasetIndex].label || ''
- const value = tooltipItem.yLabel
- return format ? format(label, value) : `${label}: ${value}`
- }
- }
- }
- }}
- }
- this.efficiency = async () => {
- const rows = await api.statistics()
- return {
- delivery: chart({
- rows,
- seriesField: 'key',
- dataField: 'delivered',
- labelsField: 'date',
- format: (label, value) => `${label}: ${value.toLocaleString()} cartons`
- }),
- efficiency: chart({
- rows,
- seriesField: 'key',
- dataField: 'efficiency',
- labelsField: 'date',
- format: (label, value) => `${label}: $${value.toFixed(2)} per carton`
- }),
- laborCost: chart({
- rows,
- seriesField: 'key',
- dataField: 'laborCost',
- labelsField: 'date',
- format: (label, value) => `${label}: $${value.toFixed(2)} labor cost`
- })
- }
- }
- })
|