const app = require('../app') const moment = require('moment-immutable') const _ = require('lodash') const { previousWeekIcon, previousDayIcon, nextDayIcon, nextWeekIcon } = require('../assets') app.component('appDashboardPage', { template: html`
{{workday.short}}

{{$ctrl.date.format('LL')}}

{{::$ctrl.serviceCategories[serviceCategory.key].name}}

Cartons

{{serviceCategory.lastMetrics[serviceCategory.serviceColumn] || 0}}

Labor Cost

$\{{Math.floor(serviceCategory.lastMetrics.laborCost) || null}}

N/A

Cost per Carton

{{serviceCategory.lastMetrics.costPer | currency}}

N/A

{{::$ctrl.terminals[terminal.terminal].name}}

Cost per Carton
{{::$ctrl.laborCategories[laborCategory.laborCategory].name}} {{laborCategory.costPer | currency}}
All {{terminal.costPer | currency}}

Overall

{{::$ctrl.laborCategories[laborCategory.laborCategory].name}} {{laborCategory.costPer | currency}}
All {{serviceCategory.costPer | currency}}
Labor cost
{{$ctrl.charts.costPerCarton.series[$index]}}
Cost per carton
{{$ctrl.charts.costPerCarton.series[$index]}}
Labor Costs
{{$ctrl.charts.laborCost.series[$index]}}
Cost per Carton
{{$ctrl.charts.costPerCarton.series[$index]}}
`, controller: function(api, statistics, $scope, $mdToast) { this.$mdToast = $mdToast $scope.Math = Math const load = (date) => { api.statistics(date).then(stats => { this.statistics = stats stats.serviceCategories.forEach(serviceCategory => { serviceCategory.charts = { costPerCarton: statistics.chart({ rows: serviceCategory.metricsOverTime, seriesField: 'key', dataField: 'costPer', labelsField: 'date', format: (label, value) => `${label}: $${value.toFixed(2)} per carton` }), laborCost: statistics.chart({ rows: serviceCategory.metricsOverTime, seriesField: 'key', dataField: 'laborCost', labelsField: 'date', format: (label, value) => `${label}: $${value.toFixed(2)} labor cost` }) } }) this.charts = statistics.charts(stats.metricsOverTime) this.last = stats.last }) } api.terminals().then(terminals => { this.terminals = terminals }) api.laborCategories().then(laborCategories => { this.laborCategories = laborCategories }) api.serviceCategories().then(serviceCategories => { this.serviceCategories = serviceCategories }) api.get(`/api/workdays`).then(results => { const wds = {} results.workdays.forEach(wd => (wds[moment(wd.date).format('YYYY-MM-DD')] = wd)) const getWorkdays = (offset) => { const dates = _.range(offset - 6, offset + 1) .map(x => { const date = moment().startOf('day').add(x, 'days') const workday = wds[date.format('YYYY-MM-DD')] return { date, formatted: date.format('L'), short: date.format('M/DD'), hasData: !!workday, hasLabor: workday && workday.hasLabor, hasService: workday && workday.hasService } }) return dates } this.setOffset = (offset) => { this.offset = offset this.workdays = getWorkdays(offset) } this.setDate = (date) => { this.date = date this.now = moment() load(date) } const defaultWorkday = results.workdays.slice(0).reverse().find(x => x.hasLabor && x.hasService) if (defaultWorkday) { this.setDate(moment(defaultWorkday.date)) this.setOffset(3 - (moment().diff(moment(defaultWorkday.date), 'days'))) } else { this.setOffset(0) } // this.setDate(moment( // results.workdays // .map(wd => moment(wd.date).valueOf()) // .sort() // .pop() || moment.now() // )) }) // statistics.costPerCarton().then(statistics => { // Object.assign(this, statistics) // }) } }) window.moment = moment