dashboard-page.js 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. const app = require('../app')
  2. app.component('appDashboardPage', {
  3. template: html`
  4. <app-user-area title-text="Dashboard">
  5. <div flex layout="row">
  6. <md-card flex ng-repeat="serviceCategory in $ctrl.statistics.serviceCategories">
  7. <md-card-content>
  8. <h2>{{::$ctrl.serviceCategories[serviceCategory.serviceCategory].name}}</h2>
  9. <div flex layout="row">
  10. <md-card flex="30" md-whiteframe="15">
  11. <md-card-title><md-card-title-text style="text-align: center">
  12. Cartons
  13. </md-card-title-text></md-card-title>
  14. <md-card-content>
  15. <h1 style="text-align: center">{{serviceCategory.lastMetrics[serviceCategory.serviceColumn]}}</h1>
  16. </md-card-content>
  17. </md-card>
  18. <md-card flex="30" md-whiteframe="15">
  19. <md-card-title><md-card-title-text style="text-align: center">
  20. Labor Cost
  21. </md-card-title-text></md-card-title>
  22. <md-card-content>
  23. <h1 ng-if="serviceCategory.lastMetrics.laborCost" style="text-align: center">$\{{Math.floor(serviceCategory.lastMetrics.laborCost) || null}}</h1>
  24. </md-card-content>
  25. </md-card>
  26. <md-card flex="30" md-whiteframe="15">
  27. <md-card-title><md-card-title-text style="text-align: center">
  28. Cost per Carton
  29. </md-card-title-text></md-card-title>
  30. <md-card-content>
  31. <h1 style="text-align: center">{{serviceCategory.lastMetrics.costPer | currency}}</h1>
  32. </md-card-content>
  33. </md-card>
  34. </div>
  35. <div ng-repeat="terminal in serviceCategory.terminals">
  36. <table md-table>
  37. <thead>
  38. <th align="left">
  39. <h3>{{::$ctrl.terminals[terminal.terminal].name}}</h3>
  40. </th>
  41. <th align="right">
  42. <span ng-if="$index == 0">Cost per Carton</span>
  43. </th>
  44. </thead>
  45. <tbody>
  46. <tr ng-repeat="laborCategory in terminal.laborCategories">
  47. <th align="left">{{::$ctrl.laborCategories[laborCategory.laborCategory].name}}</th>
  48. <td align="right">{{laborCategory.costPer | currency}}</td>
  49. </tr>
  50. <tr ng-if="terminal.laborCategories.length > 1">
  51. <th align="left">All</th>
  52. <td align="right">{{terminal.costPer | currency}}</td>
  53. </tr>
  54. </tbody>
  55. </table>
  56. <hr />
  57. </div>
  58. <div ng-if="serviceCategory.terminals.length > 1">
  59. <table md-table>
  60. <thead>
  61. <th align="left">
  62. <h3>Overall</h3>
  63. </th>
  64. <th align="right"></th>
  65. </thead>
  66. <tbody>
  67. <tr ng-repeat="laborCategory in serviceCategory.laborCategories">
  68. <th align="left">{{::$ctrl.laborCategories[laborCategory.laborCategory].name}}</th>
  69. <td align="right">{{laborCategory.costPer | currency}}</td>
  70. </tr>
  71. <tr ng-if="serviceCategory.laborCategories.length > 1">
  72. <th align="left">All</th>
  73. <td align="right">{{serviceCategory.costPer | currency}}</td>
  74. </tr>
  75. </tbody>
  76. </table>
  77. </div>
  78. </md-card-content>
  79. </md-card>
  80. </div>
  81. <div flex layout="column" layout-gt-sm="row">
  82. <md-card flex="50" class="mg-margin md-padding">
  83. <md-card-title>
  84. <md-card-title-text>
  85. <span class="md-headline">Labor Costs</span>
  86. <span class="md-subhead"></span>
  87. </md-card-title-text>
  88. </md-card-title>
  89. <md-card-content>
  90. <div style="width: 520px; height: 260px;" >
  91. <canvas class="chart chart-line" chart-data="$ctrl.charts.laborCost.data" chart-colors="$ctrl.charts.laborCost.colors"
  92. chart-labels="$ctrl.charts.laborCost.labels" chart-series="$ctrl.charts.laborCost.series" chart-options="$ctrl.charts.laborCost.options">
  93. </canvas>
  94. </div>
  95. <div ng-repeat="color in $ctrl.charts.laborCost.colors">
  96. <div style="background-color: {{color}}; width: 16px; height: 16px; display: inline-block; margin: 0 4px;"></div>
  97. {{$ctrl.charts.laborCost.series[$index]}}
  98. </div>
  99. </md-card-content>
  100. </md-card>
  101. <md-card flex="50" class="mg-margin md-padding">
  102. <md-card-title>
  103. <md-card-title-text>
  104. <span class="md-headline">Cost per Carton</span>
  105. <span class="md-subhead"></span>
  106. </md-card-title-text>
  107. </md-card-title>
  108. <md-card-content>
  109. <div style="width: 520px; height: 260px;" >
  110. <canvas class="chart chart-line" chart-data="$ctrl.charts.costPerCarton.data" chart-colors="$ctrl.charts.costPerCarton.colors"
  111. chart-labels="$ctrl.charts.costPerCarton.labels" chart-series="$ctrl.charts.costPerCarton.series" chart-options="$ctrl.charts.costPerCarton.options">
  112. </canvas>
  113. </div>
  114. <div ng-repeat="color in $ctrl.charts.costPerCarton.colors">
  115. <div style="background-color: {{color}}; width: 16px; height: 16px; display: inline-block; margin: 0 4px;"></div>
  116. {{$ctrl.charts.costPerCarton.series[$index]}}
  117. </div>
  118. </md-card-content>
  119. </md-card>
  120. </div>
  121. </app-user-area>
  122. `,
  123. controller: function(api, statistics, $scope) {
  124. $scope.Math = Math
  125. api.statistics().then(stats => {
  126. this.statistics = stats
  127. this.charts = statistics.charts(stats.metricsOverTime)
  128. this.last = stats.last
  129. })
  130. api.terminals().then(terminals => {
  131. this.terminals = terminals
  132. })
  133. api.laborCategories().then(laborCategories => {
  134. this.laborCategories = laborCategories
  135. })
  136. api.serviceCategories().then(serviceCategories => {
  137. this.serviceCategories = serviceCategories
  138. })
  139. // statistics.costPerCarton().then(statistics => {
  140. // Object.assign(this, statistics)
  141. // })
  142. }
  143. })