@dhis2/analytics 24.7.0 → 24.9.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +40 -0
- package/build/cjs/__demo__/OrgUnitDimension.stories.js +9 -0
- package/build/cjs/components/OrgUnitDimension/OrgUnitDimension.js +5 -2
- package/build/cjs/components/PeriodDimension/PeriodTransfer.js +38 -4
- package/build/cjs/components/PeriodDimension/__tests__/PeriodSelector.spec.js +13 -0
- package/build/cjs/components/PeriodDimension/utils/fixedPeriods.js +207 -478
- package/build/cjs/locales/en/translations.json +0 -14
- package/build/es/__demo__/OrgUnitDimension.stories.js +9 -0
- package/build/es/components/OrgUnitDimension/OrgUnitDimension.js +5 -2
- package/build/es/components/PeriodDimension/PeriodTransfer.js +35 -4
- package/build/es/components/PeriodDimension/__tests__/PeriodSelector.spec.js +13 -0
- package/build/es/components/PeriodDimension/utils/fixedPeriods.js +205 -477
- package/build/es/locales/en/translations.json +0 -14
- package/package.json +2 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { generateFixedPeriods, getNowInCalendar } from '@dhis2/multi-calendar-dates';
|
|
1
2
|
import i18n from '../../../locales/index.js';
|
|
2
3
|
import { DAILY, WEEKLY, WEEKLYWED, WEEKLYTHU, WEEKLYSAT, WEEKLYSUN, BIWEEKLY, MONTHLY, BIMONTHLY, QUARTERLY, SIXMONTHLY, SIXMONTHLYAPR, YEARLY, FYNOV, FYOCT, FYJUL, FYAPR } from './index.js';
|
|
3
4
|
const PERIOD_TYPE_REGEX = {
|
|
@@ -38,452 +39,180 @@ const PERIOD_TYPE_REGEX = {
|
|
|
38
39
|
|
|
39
40
|
};
|
|
40
41
|
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
const getPeriods = _ref => {
|
|
43
|
+
let {
|
|
44
|
+
periodType,
|
|
45
|
+
config,
|
|
46
|
+
fnFilter,
|
|
47
|
+
periodSettings = {}
|
|
48
|
+
} = _ref;
|
|
49
|
+
const offset = parseInt(config.offset, 10);
|
|
50
|
+
const isFilter = config.filterFuturePeriods;
|
|
51
|
+
const isReverse = periodType.match(/^FY|YEARLY/) ? true : config.reversePeriods;
|
|
52
|
+
const {
|
|
53
|
+
calendar = 'gregory',
|
|
54
|
+
locale = 'en'
|
|
55
|
+
} = periodSettings;
|
|
56
|
+
const now = getNowInCalendar(calendar);
|
|
57
|
+
const year = (now.eraYear || now.year) + offset;
|
|
58
|
+
const params = {
|
|
59
|
+
periodType,
|
|
60
|
+
year,
|
|
61
|
+
calendar,
|
|
62
|
+
locale,
|
|
63
|
+
startingDay: config.startDay
|
|
64
|
+
};
|
|
65
|
+
let periods = generateFixedPeriods(params);
|
|
66
|
+
periods = isFilter ? fnFilter(periods) : periods;
|
|
67
|
+
periods = !isReverse ? periods : periods.reverse();
|
|
68
|
+
return periods;
|
|
44
69
|
};
|
|
45
70
|
|
|
46
|
-
const getDailyPeriodType = (
|
|
71
|
+
const getDailyPeriodType = (fnFilter, periodSettings) => {
|
|
47
72
|
return config => {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
while (date.getFullYear() === year) {
|
|
56
|
-
const period = {};
|
|
57
|
-
period.startDate = formatYyyyMmDd(date);
|
|
58
|
-
period.endDate = period.startDate;
|
|
59
|
-
period.name = period.startDate;
|
|
60
|
-
period.iso = period.startDate.replace(/-/g, '');
|
|
61
|
-
period.id = period.iso;
|
|
62
|
-
periods.push(period);
|
|
63
|
-
date.setDate(date.getDate() + 1);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
periods = isFilter ? fnFilter(periods) : periods;
|
|
67
|
-
periods = isReverse ? periods.reverse() : periods;
|
|
68
|
-
return periods;
|
|
73
|
+
return getPeriods({
|
|
74
|
+
periodType: 'DAILY',
|
|
75
|
+
config,
|
|
76
|
+
fnFilter,
|
|
77
|
+
periodSettings
|
|
78
|
+
});
|
|
69
79
|
};
|
|
70
80
|
};
|
|
71
81
|
|
|
72
|
-
const getWeeklyPeriodType = (
|
|
73
|
-
// Calculate the first date of an EPI year base on ISO standard ( first week always contains 4th Jan )
|
|
74
|
-
const getEpiWeekStartDay = (year, startDayOfWeek) => {
|
|
75
|
-
const jan4 = new Date(year, 0, 4);
|
|
76
|
-
const jan4DayOfWeek = jan4.getDay();
|
|
77
|
-
const startDate = jan4;
|
|
78
|
-
const dayDiff = jan4DayOfWeek - startDayOfWeek;
|
|
79
|
-
|
|
80
|
-
if (dayDiff > 0) {
|
|
81
|
-
startDate.setDate(jan4.getDate() - dayDiff);
|
|
82
|
-
} else if (dayDiff < 0) {
|
|
83
|
-
startDate.setDate(jan4.getDate() - dayDiff);
|
|
84
|
-
startDate.setDate(startDate.getDate() - 7);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
return startDate;
|
|
88
|
-
};
|
|
89
|
-
|
|
82
|
+
const getWeeklyPeriodType = (weekObj, fnFilter, periodSettings) => {
|
|
90
83
|
return config => {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
while (date.getFullYear() <= year) {
|
|
100
|
-
const period = {};
|
|
101
|
-
period.startDate = formatYyyyMmDd(date);
|
|
102
|
-
period.iso = "".concat(year).concat(weekObj.shortName, "W").concat(week);
|
|
103
|
-
period.id = period.iso;
|
|
104
|
-
date.setDate(date.getDate() + 6);
|
|
105
|
-
period.endDate = formatYyyyMmDd(date);
|
|
106
|
-
const weekNumber = week;
|
|
107
|
-
period.name = "".concat(i18n.t('Week {{weekNumber}}', {
|
|
108
|
-
weekNumber
|
|
109
|
-
}), " - ").concat(period.startDate, " - ").concat(period.endDate); // if end date is Jan 4th or later, week belongs to next year
|
|
110
|
-
|
|
111
|
-
if (date.getFullYear() > year && date.getDate() >= 4) {
|
|
112
|
-
break;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
periods.push(period);
|
|
116
|
-
date.setDate(date.getDate() + 1);
|
|
117
|
-
week += 1;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
periods = isFilter ? fnFilter(periods) : periods;
|
|
121
|
-
periods = isReverse ? periods.reverse() : periods;
|
|
122
|
-
return periods;
|
|
84
|
+
return getPeriods({
|
|
85
|
+
periodType: 'WEEKLY',
|
|
86
|
+
config: { ...config,
|
|
87
|
+
startDay: weekObj.startDay
|
|
88
|
+
},
|
|
89
|
+
fnFilter,
|
|
90
|
+
periodSettings
|
|
91
|
+
});
|
|
123
92
|
};
|
|
124
93
|
};
|
|
125
94
|
|
|
126
|
-
const getBiWeeklyPeriodType = (
|
|
95
|
+
const getBiWeeklyPeriodType = (fnFilter, periodSettings) => {
|
|
127
96
|
return config => {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
const day = date.getDay();
|
|
135
|
-
let biWeek = 1;
|
|
136
|
-
|
|
137
|
-
if (day <= 4) {
|
|
138
|
-
date.setDate(date.getDate() - (day - 1));
|
|
139
|
-
} else {
|
|
140
|
-
date.setDate(date.getDate() + (8 - day));
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
while (date.getFullYear() <= year) {
|
|
144
|
-
const period = {};
|
|
145
|
-
period.iso = "".concat(year, "BiW").concat(biWeek);
|
|
146
|
-
period.id = period.iso;
|
|
147
|
-
period.startDate = formatYyyyMmDd(date);
|
|
148
|
-
date.setDate(date.getDate() + 13);
|
|
149
|
-
period.endDate = formatYyyyMmDd(date);
|
|
150
|
-
const biWeekNumber = biWeek;
|
|
151
|
-
period.name = "".concat(i18n.t('Bi-Week {{biWeekNumber}}', {
|
|
152
|
-
biWeekNumber
|
|
153
|
-
}), " - ").concat(period.startDate, " - ").concat(period.endDate); // if end date is Jan 4th or later, biweek belongs to next year
|
|
154
|
-
|
|
155
|
-
if (date.getFullYear() > year && date.getDate() >= 4) {
|
|
156
|
-
break;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
periods.push(period);
|
|
160
|
-
date.setDate(date.getDate() + 1);
|
|
161
|
-
biWeek += 1;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
periods = isFilter ? fnFilter(periods) : periods;
|
|
165
|
-
periods = isReverse ? periods.reverse() : periods;
|
|
166
|
-
return periods;
|
|
97
|
+
return getPeriods({
|
|
98
|
+
periodType: 'BIWEEKLY',
|
|
99
|
+
config,
|
|
100
|
+
fnFilter,
|
|
101
|
+
periodSettings
|
|
102
|
+
});
|
|
167
103
|
};
|
|
168
104
|
};
|
|
169
105
|
|
|
170
|
-
const getMonthlyPeriodType = (
|
|
171
|
-
const formatIso = date => {
|
|
172
|
-
const y = date.getFullYear();
|
|
173
|
-
let m = String(date.getMonth() + 1);
|
|
174
|
-
m = m.length < 2 ? "0".concat(m) : m;
|
|
175
|
-
return y + m;
|
|
176
|
-
};
|
|
177
|
-
|
|
106
|
+
const getMonthlyPeriodType = (fnFilter, periodSettings) => {
|
|
178
107
|
return config => {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
while (date.getFullYear() === year) {
|
|
187
|
-
const period = {};
|
|
188
|
-
period.endDate = formatYyyyMmDd(date);
|
|
189
|
-
date.setDate(1);
|
|
190
|
-
period.startDate = formatYyyyMmDd(date);
|
|
191
|
-
const monthName = getMonthName(date.getMonth());
|
|
192
|
-
period.name = "".concat(monthName, " ").concat(year);
|
|
193
|
-
period.iso = formatIso(date);
|
|
194
|
-
period.id = period.iso;
|
|
195
|
-
periods.push(period);
|
|
196
|
-
date.setDate(0);
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
periods = isFilter ? fnFilter(periods) : periods;
|
|
200
|
-
periods = isReverse ? periods : periods.reverse(); // Months are collected backwards. If isReverse is true, then do nothing. Else reverse to correct order and return.
|
|
201
|
-
|
|
202
|
-
return periods;
|
|
108
|
+
return getPeriods({
|
|
109
|
+
periodType: 'MONTHLY',
|
|
110
|
+
config,
|
|
111
|
+
fnFilter,
|
|
112
|
+
periodSettings
|
|
113
|
+
});
|
|
203
114
|
};
|
|
204
115
|
};
|
|
205
116
|
|
|
206
|
-
const getBiMonthlyPeriodType = (
|
|
117
|
+
const getBiMonthlyPeriodType = (fnFilter, periodSettings) => {
|
|
207
118
|
return config => {
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
let index = 6;
|
|
215
|
-
|
|
216
|
-
while (date.getFullYear() === year) {
|
|
217
|
-
const period = {};
|
|
218
|
-
period.endDate = formatYyyyMmDd(date);
|
|
219
|
-
date.setDate(0);
|
|
220
|
-
date.setDate(1);
|
|
221
|
-
period.startDate = formatYyyyMmDd(date);
|
|
222
|
-
const monthStart = getMonthName(date.getMonth());
|
|
223
|
-
const monthEnd = getMonthName(date.getMonth() + 1);
|
|
224
|
-
const fullYear = date.getFullYear();
|
|
225
|
-
period.name = "".concat(monthStart, " - ").concat(monthEnd, " ").concat(fullYear);
|
|
226
|
-
period.iso = "".concat(year, "0").concat(index, "B");
|
|
227
|
-
period.id = period.iso;
|
|
228
|
-
periods.push(period);
|
|
229
|
-
date.setDate(0);
|
|
230
|
-
index--;
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
periods = isFilter ? fnFilter(periods) : periods;
|
|
234
|
-
periods = isReverse ? periods : periods.reverse(); // Bi-months are collected backwards. If isReverse is true, then do nothing. Else reverse to correct order and return.
|
|
235
|
-
|
|
236
|
-
return periods;
|
|
119
|
+
return getPeriods({
|
|
120
|
+
periodType: 'BIMONTHLY',
|
|
121
|
+
config,
|
|
122
|
+
fnFilter,
|
|
123
|
+
periodSettings
|
|
124
|
+
});
|
|
237
125
|
};
|
|
238
126
|
};
|
|
239
127
|
|
|
240
|
-
const getQuarterlyPeriodType = (
|
|
128
|
+
const getQuarterlyPeriodType = (fnFilter, periodSettings) => {
|
|
241
129
|
return config => {
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
let quarter = 4;
|
|
249
|
-
|
|
250
|
-
while (date.getFullYear() === year) {
|
|
251
|
-
const period = {};
|
|
252
|
-
period.endDate = formatYyyyMmDd(date);
|
|
253
|
-
date.setDate(0);
|
|
254
|
-
date.setDate(0);
|
|
255
|
-
date.setDate(1);
|
|
256
|
-
period.startDate = formatYyyyMmDd(date);
|
|
257
|
-
const monthStart = getMonthName(date.getMonth());
|
|
258
|
-
const monthEnd = getMonthName(date.getMonth() + 2);
|
|
259
|
-
const fullYear = date.getFullYear();
|
|
260
|
-
period.name = "".concat(monthStart, " - ").concat(monthEnd, " ").concat(fullYear);
|
|
261
|
-
period.iso = "".concat(year, "Q").concat(quarter);
|
|
262
|
-
period.id = period.iso;
|
|
263
|
-
periods.push(period);
|
|
264
|
-
date.setDate(0);
|
|
265
|
-
quarter -= 1;
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
periods = isFilter ? fnFilter(periods) : periods;
|
|
269
|
-
periods = isReverse ? periods : periods.reverse(); // Quarters are collected backwards. If isReverse is true, then do nothing. Else reverse to correct order and return.
|
|
270
|
-
|
|
271
|
-
return periods;
|
|
130
|
+
return getPeriods({
|
|
131
|
+
periodType: 'QUARTERLY',
|
|
132
|
+
config,
|
|
133
|
+
fnFilter,
|
|
134
|
+
periodSettings
|
|
135
|
+
});
|
|
272
136
|
};
|
|
273
137
|
};
|
|
274
138
|
|
|
275
|
-
const getSixMonthlyPeriodType = fnFilter => {
|
|
139
|
+
const getSixMonthlyPeriodType = (fnFilter, periodSettings) => {
|
|
276
140
|
return config => {
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
period.startDate = "".concat(year, "-01-01");
|
|
284
|
-
period.endDate = "".concat(year, "-06-30");
|
|
285
|
-
period.name = "".concat(getMonthName(0), " - ").concat(getMonthName(5), " ").concat(year);
|
|
286
|
-
period.iso = "".concat(year, "S1");
|
|
287
|
-
period.id = period.iso;
|
|
288
|
-
periods.push(period);
|
|
289
|
-
period = {};
|
|
290
|
-
period.startDate = "".concat(year, "-07-01");
|
|
291
|
-
period.endDate = "".concat(year, "-12-31");
|
|
292
|
-
period.name = "".concat(getMonthName(6), " - ").concat(getMonthName(11), " ").concat(year);
|
|
293
|
-
period.iso = "".concat(year, "S2");
|
|
294
|
-
period.id = period.iso;
|
|
295
|
-
periods.push(period);
|
|
296
|
-
periods = isFilter ? fnFilter(periods) : periods;
|
|
297
|
-
periods = isReverse ? periods.reverse() : periods;
|
|
298
|
-
return periods;
|
|
141
|
+
return getPeriods({
|
|
142
|
+
periodType: 'SIXMONTHLY',
|
|
143
|
+
config,
|
|
144
|
+
fnFilter,
|
|
145
|
+
periodSettings
|
|
146
|
+
});
|
|
299
147
|
};
|
|
300
148
|
};
|
|
301
149
|
|
|
302
|
-
const getSixMonthlyAprilPeriodType = fnFilter => {
|
|
150
|
+
const getSixMonthlyAprilPeriodType = (fnFilter, periodSettings) => {
|
|
303
151
|
return config => {
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
period.startDate = "".concat(year, "-04-01");
|
|
311
|
-
period.endDate = "".concat(year, "-09-30");
|
|
312
|
-
period.name = "".concat(getMonthName(3), " - ").concat(getMonthName(8), " ").concat(year);
|
|
313
|
-
period.iso = "".concat(year, "AprilS1");
|
|
314
|
-
period.id = period.iso;
|
|
315
|
-
periods.push(period);
|
|
316
|
-
period = {};
|
|
317
|
-
period.startDate = "".concat(year, "-10-01");
|
|
318
|
-
period.endDate = "".concat(year + 1, "-03-31");
|
|
319
|
-
period.name = "".concat(getMonthName(9), " ").concat(year, " - ").concat(getMonthName(2), " ").concat(year + 1);
|
|
320
|
-
period.iso = "".concat(year, "AprilS2");
|
|
321
|
-
period.id = period.iso;
|
|
322
|
-
periods.push(period);
|
|
323
|
-
periods = isFilter ? fnFilter(periods) : periods;
|
|
324
|
-
periods = isReverse ? periods.reverse() : periods;
|
|
325
|
-
return periods;
|
|
152
|
+
return getPeriods({
|
|
153
|
+
periodType: 'SIXMONTHLYAPR',
|
|
154
|
+
config,
|
|
155
|
+
fnFilter,
|
|
156
|
+
periodSettings
|
|
157
|
+
});
|
|
326
158
|
};
|
|
327
159
|
};
|
|
328
160
|
|
|
329
|
-
const getYearlyPeriodType = (
|
|
161
|
+
const getYearlyPeriodType = (fnFilter, periodSettings) => {
|
|
330
162
|
return config => {
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
while (year - date.getFullYear() < 10) {
|
|
339
|
-
const period = {};
|
|
340
|
-
period.endDate = formatYyyyMmDd(date);
|
|
341
|
-
date.setMonth(0, 1);
|
|
342
|
-
period.startDate = formatYyyyMmDd(date);
|
|
343
|
-
const dateString = date.getFullYear().toString();
|
|
344
|
-
period.name = dateString;
|
|
345
|
-
period.iso = date.getFullYear().toString();
|
|
346
|
-
period.id = period.iso.toString();
|
|
347
|
-
periods.push(period);
|
|
348
|
-
date.setDate(0);
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
periods = isFilter ? fnFilter(periods) : periods;
|
|
352
|
-
periods = isReverse ? periods : periods.reverse(); // Years are collected backwards. If isReverse is true, then do nothing. Else reverse to correct order and return.
|
|
353
|
-
|
|
354
|
-
return periods;
|
|
163
|
+
return getPeriods({
|
|
164
|
+
periodType: 'YEARLY',
|
|
165
|
+
config,
|
|
166
|
+
fnFilter,
|
|
167
|
+
periodSettings
|
|
168
|
+
});
|
|
355
169
|
};
|
|
356
170
|
};
|
|
357
171
|
|
|
358
|
-
const getFinancialOctoberPeriodType = (
|
|
172
|
+
const getFinancialOctoberPeriodType = (fnFilter, periodSettings) => {
|
|
359
173
|
return config => {
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
for (let i = 0; i < 10; i++) {
|
|
368
|
-
const period = {};
|
|
369
|
-
period.endDate = formatYyyyMmDd(date);
|
|
370
|
-
date.setYear(date.getFullYear() - 1);
|
|
371
|
-
date.setDate(date.getDate() + 1);
|
|
372
|
-
period.startDate = formatYyyyMmDd(date);
|
|
373
|
-
const yearStart = date.getFullYear();
|
|
374
|
-
const yearEnd = date.getFullYear() + 1;
|
|
375
|
-
period.name = "".concat(getMonthName(9), " ").concat(yearStart, " - ").concat(getMonthName(8), " ").concat(yearEnd);
|
|
376
|
-
period.id = "".concat(date.getFullYear(), "Oct");
|
|
377
|
-
periods.push(period);
|
|
378
|
-
date.setDate(date.getDate() - 1);
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
periods = isFilter ? fnFilter(periods) : periods;
|
|
382
|
-
periods = isReverse ? periods : periods.reverse(); // FinancialOctober periods are collected backwards. If isReverse is true, then do nothing. Else reverse to correct order and return.
|
|
383
|
-
|
|
384
|
-
return periods;
|
|
174
|
+
return getPeriods({
|
|
175
|
+
periodType: 'FYOCT',
|
|
176
|
+
config,
|
|
177
|
+
fnFilter,
|
|
178
|
+
periodSettings
|
|
179
|
+
});
|
|
385
180
|
};
|
|
386
181
|
};
|
|
387
182
|
|
|
388
|
-
const getFinancialNovemberPeriodType = (
|
|
183
|
+
const getFinancialNovemberPeriodType = (fnFilter, periodSettings) => {
|
|
389
184
|
return config => {
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
for (let i = 0; i < 10; i++) {
|
|
398
|
-
const period = {};
|
|
399
|
-
period.endDate = formatYyyyMmDd(date);
|
|
400
|
-
date.setYear(date.getFullYear() - 1);
|
|
401
|
-
date.setDate(date.getDate() + 1);
|
|
402
|
-
period.startDate = formatYyyyMmDd(date);
|
|
403
|
-
const yearStart = date.getFullYear();
|
|
404
|
-
const yearEnd = date.getFullYear() + 1;
|
|
405
|
-
period.name = "".concat(getMonthName(10), " ").concat(yearStart, " - ").concat(getMonthName(9), " ").concat(yearEnd);
|
|
406
|
-
period.id = "".concat(date.getFullYear(), "Nov");
|
|
407
|
-
periods.push(period);
|
|
408
|
-
date.setDate(date.getDate() - 1);
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
periods = isFilter ? fnFilter(periods) : periods;
|
|
412
|
-
periods = isReverse ? periods : periods.reverse(); // FinancialNovember periods are collected backwards. If isReverse is true, then do nothing. Else reverse to correct order and return.
|
|
413
|
-
|
|
414
|
-
return periods;
|
|
185
|
+
return getPeriods({
|
|
186
|
+
periodType: 'FYNOV',
|
|
187
|
+
config,
|
|
188
|
+
fnFilter,
|
|
189
|
+
periodSettings
|
|
190
|
+
});
|
|
415
191
|
};
|
|
416
192
|
};
|
|
417
193
|
|
|
418
|
-
const getFinancialJulyPeriodType = (
|
|
194
|
+
const getFinancialJulyPeriodType = (fnFilter, periodSettings) => {
|
|
419
195
|
return config => {
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
for (let i = 0; i < 10; i++) {
|
|
428
|
-
const period = {};
|
|
429
|
-
period.endDate = formatYyyyMmDd(date);
|
|
430
|
-
date.setYear(date.getFullYear() - 1);
|
|
431
|
-
date.setDate(date.getDate() + 1);
|
|
432
|
-
period.startDate = formatYyyyMmDd(date);
|
|
433
|
-
const yearStart = date.getFullYear();
|
|
434
|
-
const yearEnd = date.getFullYear() + 1;
|
|
435
|
-
period.name = "".concat(getMonthName(6), " ").concat(yearStart, " - ").concat(getMonthName(5), " ").concat(yearEnd);
|
|
436
|
-
period.id = "".concat(date.getFullYear(), "July");
|
|
437
|
-
periods.push(period);
|
|
438
|
-
date.setDate(date.getDate() - 1);
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
periods = isFilter ? fnFilter(periods) : periods;
|
|
442
|
-
periods = isReverse ? periods : periods.reverse(); // FinancialJuly periods are collected backwards. If isReverse is true, then do nothing. Else reverse to correct order and return.
|
|
443
|
-
|
|
444
|
-
return periods;
|
|
196
|
+
return getPeriods({
|
|
197
|
+
periodType: 'FYJUL',
|
|
198
|
+
config,
|
|
199
|
+
fnFilter,
|
|
200
|
+
periodSettings
|
|
201
|
+
});
|
|
445
202
|
};
|
|
446
203
|
};
|
|
447
204
|
|
|
448
|
-
const getFinancialAprilPeriodType = (
|
|
205
|
+
const getFinancialAprilPeriodType = (fnFilter, periodSettings) => {
|
|
449
206
|
return config => {
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
for (let i = 0; i < 10; i++) {
|
|
458
|
-
const period = {};
|
|
459
|
-
period.endDate = formatYyyyMmDd(date);
|
|
460
|
-
date.setYear(date.getFullYear() - 1);
|
|
461
|
-
date.setDate(date.getDate() + 1);
|
|
462
|
-
period.startDate = formatYyyyMmDd(date);
|
|
463
|
-
const yearStart = date.getFullYear();
|
|
464
|
-
const yearEnd = date.getFullYear() + 1;
|
|
465
|
-
period.name = "".concat(getMonthName(3), " ").concat(yearStart, " - ").concat(getMonthName(2), " ").concat(yearEnd);
|
|
466
|
-
period.id = "".concat(date.getFullYear(), "April");
|
|
467
|
-
periods.push(period);
|
|
468
|
-
date.setDate(date.getDate() - 1);
|
|
469
|
-
}
|
|
470
|
-
|
|
471
|
-
periods = isFilter ? fnFilter(periods) : periods;
|
|
472
|
-
periods = isReverse ? periods : periods.reverse(); // FinancialApril periods are collected backwards. If isReverse is true, then do nothing. Else reverse to correct order and return.
|
|
473
|
-
|
|
474
|
-
return periods;
|
|
207
|
+
return getPeriods({
|
|
208
|
+
periodType: 'FYAPR',
|
|
209
|
+
config,
|
|
210
|
+
fnFilter,
|
|
211
|
+
periodSettings
|
|
212
|
+
});
|
|
475
213
|
};
|
|
476
214
|
};
|
|
477
215
|
|
|
478
|
-
const formatYyyyMmDd = date => {
|
|
479
|
-
const y = date.getFullYear();
|
|
480
|
-
let m = String(date.getMonth() + 1);
|
|
481
|
-
let d = String(date.getDate());
|
|
482
|
-
m = m.length < 2 ? "0".concat(m) : m;
|
|
483
|
-
d = d.length < 2 ? "0".concat(d) : d;
|
|
484
|
-
return "".concat(y, "-").concat(m, "-").concat(d);
|
|
485
|
-
};
|
|
486
|
-
|
|
487
216
|
const filterFuturePeriods = periods => {
|
|
488
217
|
const array = [];
|
|
489
218
|
const now = new Date(Date.now());
|
|
@@ -497,92 +226,91 @@ const filterFuturePeriods = periods => {
|
|
|
497
226
|
return array;
|
|
498
227
|
};
|
|
499
228
|
|
|
500
|
-
const getOptions =
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
}, {
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
},
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
}, {
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
}, {
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
}, {
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
}, {
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
}, {
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
}, {
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
}, {
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
}, {
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
}, {
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
}, {
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
}
|
|
580
|
-
|
|
581
|
-
getPeriods: getFinancialAprilPeriodType(formatYyyyMmDd, filterFuturePeriods),
|
|
582
|
-
name: i18n.t('Financial year (Start April)')
|
|
583
|
-
}];
|
|
229
|
+
const getOptions = periodSettings => {
|
|
230
|
+
return [{
|
|
231
|
+
id: DAILY,
|
|
232
|
+
getPeriods: getDailyPeriodType(filterFuturePeriods, periodSettings),
|
|
233
|
+
name: i18n.t('Daily')
|
|
234
|
+
}, {
|
|
235
|
+
id: WEEKLY,
|
|
236
|
+
getPeriods: getWeeklyPeriodType({
|
|
237
|
+
startDay: 1
|
|
238
|
+
}, filterFuturePeriods, periodSettings),
|
|
239
|
+
name: i18n.t('Weekly')
|
|
240
|
+
}, {
|
|
241
|
+
id: WEEKLYWED,
|
|
242
|
+
getPeriods: getWeeklyPeriodType({
|
|
243
|
+
startDay: 3
|
|
244
|
+
}, filterFuturePeriods, periodSettings),
|
|
245
|
+
name: i18n.t('Weekly (Start Wednesday)')
|
|
246
|
+
}, {
|
|
247
|
+
id: WEEKLYTHU,
|
|
248
|
+
getPeriods: getWeeklyPeriodType({
|
|
249
|
+
startDay: 4
|
|
250
|
+
}, filterFuturePeriods, periodSettings),
|
|
251
|
+
name: i18n.t('Weekly (Start Thursday)')
|
|
252
|
+
}, {
|
|
253
|
+
id: WEEKLYSAT,
|
|
254
|
+
getPeriods: getWeeklyPeriodType({
|
|
255
|
+
startDay: 6
|
|
256
|
+
}, filterFuturePeriods, periodSettings),
|
|
257
|
+
name: i18n.t('Weekly (Start Saturday)')
|
|
258
|
+
}, {
|
|
259
|
+
id: WEEKLYSUN,
|
|
260
|
+
getPeriods: getWeeklyPeriodType({
|
|
261
|
+
startDay: 7
|
|
262
|
+
}, filterFuturePeriods, periodSettings),
|
|
263
|
+
name: i18n.t('Weekly (Start Sunday)')
|
|
264
|
+
}, {
|
|
265
|
+
id: BIWEEKLY,
|
|
266
|
+
getPeriods: getBiWeeklyPeriodType(filterFuturePeriods, periodSettings),
|
|
267
|
+
name: i18n.t('Bi-weekly')
|
|
268
|
+
}, {
|
|
269
|
+
id: MONTHLY,
|
|
270
|
+
getPeriods: getMonthlyPeriodType(filterFuturePeriods, periodSettings),
|
|
271
|
+
name: i18n.t('Monthly')
|
|
272
|
+
}, {
|
|
273
|
+
id: BIMONTHLY,
|
|
274
|
+
getPeriods: getBiMonthlyPeriodType(filterFuturePeriods, periodSettings),
|
|
275
|
+
name: i18n.t('Bi-monthly')
|
|
276
|
+
}, {
|
|
277
|
+
id: QUARTERLY,
|
|
278
|
+
getPeriods: getQuarterlyPeriodType(filterFuturePeriods, periodSettings),
|
|
279
|
+
name: i18n.t('Quarterly')
|
|
280
|
+
}, {
|
|
281
|
+
id: SIXMONTHLY,
|
|
282
|
+
getPeriods: getSixMonthlyPeriodType(filterFuturePeriods, periodSettings),
|
|
283
|
+
name: i18n.t('Six-monthly')
|
|
284
|
+
}, {
|
|
285
|
+
id: SIXMONTHLYAPR,
|
|
286
|
+
getPeriods: getSixMonthlyAprilPeriodType(filterFuturePeriods, periodSettings),
|
|
287
|
+
name: i18n.t('Six-monthly April')
|
|
288
|
+
}, {
|
|
289
|
+
id: YEARLY,
|
|
290
|
+
getPeriods: getYearlyPeriodType(filterFuturePeriods, periodSettings),
|
|
291
|
+
name: i18n.t('Yearly')
|
|
292
|
+
}, {
|
|
293
|
+
id: FYNOV,
|
|
294
|
+
getPeriods: getFinancialNovemberPeriodType(filterFuturePeriods, periodSettings),
|
|
295
|
+
name: i18n.t('Financial year (Start November)')
|
|
296
|
+
}, {
|
|
297
|
+
id: FYOCT,
|
|
298
|
+
getPeriods: getFinancialOctoberPeriodType(filterFuturePeriods, periodSettings),
|
|
299
|
+
name: i18n.t('Financial year (Start October)')
|
|
300
|
+
}, {
|
|
301
|
+
id: FYJUL,
|
|
302
|
+
getPeriods: getFinancialJulyPeriodType(filterFuturePeriods, periodSettings),
|
|
303
|
+
name: i18n.t('Financial year (Start July)')
|
|
304
|
+
}, {
|
|
305
|
+
id: FYAPR,
|
|
306
|
+
getPeriods: getFinancialAprilPeriodType(filterFuturePeriods, periodSettings),
|
|
307
|
+
name: i18n.t('Financial year (Start April)')
|
|
308
|
+
}];
|
|
309
|
+
};
|
|
584
310
|
|
|
585
|
-
export const getFixedPeriodsOptionsById = id
|
|
311
|
+
export const getFixedPeriodsOptionsById = (id, periodSettings) => {
|
|
312
|
+
return getOptions(periodSettings).find(option => option.id === id);
|
|
313
|
+
};
|
|
586
314
|
export const getFixedPeriodsOptions = () => getOptions();
|
|
587
315
|
export const getYearOffsetFromNow = yearStr => parseInt(yearStr) - new Date(Date.now()).getFullYear();
|
|
588
316
|
export const parsePeriodCode = (code, allowedTypes) => {
|