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