orders-chart.service.ts 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. import { Injectable } from '@angular/core';
  2. import { PeriodsService } from './periods.service';
  3. import { OrdersChart, OrdersChartData } from '../data/orders-chart';
  4. @Injectable()
  5. export class OrdersChartService extends OrdersChartData {
  6. private year = [
  7. '2012',
  8. '2013',
  9. '2014',
  10. '2015',
  11. '2016',
  12. '2017',
  13. '2018',
  14. ];
  15. private data = { };
  16. constructor(private period: PeriodsService) {
  17. super();
  18. this.data = {
  19. week: this.getDataForWeekPeriod(),
  20. month: this.getDataForMonthPeriod(),
  21. year: this.getDataForYearPeriod(),
  22. };
  23. }
  24. private getDataForWeekPeriod(): OrdersChart {
  25. return {
  26. chartLabel: this.getDataLabels(42, this.period.getWeeks()),
  27. linesData: [
  28. [
  29. 184, 267, 326, 366, 389, 399,
  30. 392, 371, 340, 304, 265, 227,
  31. 191, 158, 130, 108, 95, 91, 97,
  32. 109, 125, 144, 166, 189, 212,
  33. 236, 259, 280, 300, 316, 329,
  34. 338, 342, 339, 329, 312, 288,
  35. 258, 221, 178, 128, 71,
  36. ],
  37. [
  38. 158, 178, 193, 205, 212, 213,
  39. 204, 190, 180, 173, 168, 164,
  40. 162, 160, 159, 158, 159, 166,
  41. 179, 195, 215, 236, 257, 276,
  42. 292, 301, 304, 303, 300, 293,
  43. 284, 273, 262, 251, 241, 234,
  44. 232, 232, 232, 232, 232, 232,
  45. ],
  46. [
  47. 58, 137, 202, 251, 288, 312,
  48. 323, 324, 311, 288, 257, 222,
  49. 187, 154, 124, 100, 81, 68, 61,
  50. 58, 61, 69, 80, 96, 115, 137,
  51. 161, 186, 210, 233, 254, 271,
  52. 284, 293, 297, 297, 297, 297,
  53. 297, 297, 297, 297, 297,
  54. ],
  55. ],
  56. };
  57. }
  58. private getDataForMonthPeriod(): OrdersChart {
  59. return {
  60. chartLabel: this.getDataLabels(47, this.period.getMonths()),
  61. linesData: [
  62. [
  63. 5, 63, 113, 156, 194, 225,
  64. 250, 270, 283, 289, 290,
  65. 286, 277, 264, 244, 220,
  66. 194, 171, 157, 151, 150,
  67. 152, 155, 160, 166, 170,
  68. 167, 153, 135, 115, 97,
  69. 82, 71, 64, 63, 62, 61,
  70. 62, 65, 73, 84, 102,
  71. 127, 159, 203, 259, 333,
  72. ],
  73. [
  74. 6, 83, 148, 200, 240,
  75. 265, 273, 259, 211,
  76. 122, 55, 30, 28, 36,
  77. 50, 68, 88, 109, 129,
  78. 146, 158, 163, 165,
  79. 173, 187, 208, 236,
  80. 271, 310, 346, 375,
  81. 393, 400, 398, 387,
  82. 368, 341, 309, 275,
  83. 243, 220, 206, 202,
  84. 207, 222, 247, 286, 348,
  85. ],
  86. [
  87. 398, 348, 315, 292, 274,
  88. 261, 251, 243, 237, 231,
  89. 222, 209, 192, 172, 152,
  90. 132, 116, 102, 90, 80, 71,
  91. 64, 58, 53, 49, 48, 54, 66,
  92. 84, 104, 125, 142, 156, 166,
  93. 172, 174, 172, 167, 159, 149,
  94. 136, 121, 105, 86, 67, 45, 22,
  95. ],
  96. ],
  97. };
  98. }
  99. private getDataForYearPeriod(): OrdersChart {
  100. return {
  101. chartLabel: this.getDataLabels(42, this.year),
  102. linesData: [
  103. [
  104. 190, 269, 327, 366, 389, 398,
  105. 396, 387, 375, 359, 343, 327,
  106. 312, 298, 286, 276, 270, 268,
  107. 265, 258, 247, 234, 220, 204,
  108. 188, 172, 157, 142, 128, 116,
  109. 106, 99, 95, 94, 92, 89, 84,
  110. 77, 69, 60, 49, 36, 22,
  111. ],
  112. [
  113. 265, 307, 337, 359, 375, 386,
  114. 393, 397, 399, 397, 390, 379,
  115. 365, 347, 326, 305, 282, 261,
  116. 241, 223, 208, 197, 190, 187,
  117. 185, 181, 172, 160, 145, 126,
  118. 105, 82, 60, 40, 26, 19, 22,
  119. 43, 82, 141, 220, 321,
  120. ],
  121. [
  122. 9, 165, 236, 258, 244, 206,
  123. 186, 189, 209, 239, 273, 307,
  124. 339, 365, 385, 396, 398, 385,
  125. 351, 300, 255, 221, 197, 181,
  126. 170, 164, 162, 161, 159, 154,
  127. 146, 135, 122, 108, 96, 87,
  128. 83, 82, 82, 82, 82, 82, 82,
  129. ],
  130. ],
  131. };
  132. }
  133. getDataLabels(nPoints: number, labelsArray: string[]): string[] {
  134. const labelsArrayLength = labelsArray.length;
  135. const step = Math.round(nPoints / labelsArrayLength);
  136. return Array.from(Array(nPoints)).map((item, index) => {
  137. const dataIndex = Math.round(index / step);
  138. return index % step === 0 ? labelsArray[dataIndex] : '';
  139. });
  140. }
  141. getOrdersChartData(period: string): OrdersChart {
  142. return this.data[period];
  143. }
  144. }