@dhis2/analytics 24.4.2 → 24.5.0
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 +7 -0
- package/build/cjs/components/PeriodDimension/PeriodTransfer.js +16 -4
- package/build/cjs/components/PeriodDimension/utils/fixedPeriods.js +204 -478
- package/build/cjs/locales/en/translations.json +0 -14
- package/build/es/components/PeriodDimension/PeriodTransfer.js +14 -4
- package/build/es/components/PeriodDimension/utils/fixedPeriods.js +202 -477
- package/build/es/locales/en/translations.json +0 -14
- package/package.json +7 -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,175 @@ 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
|
+
calendar
|
|
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 year = getNowInCalendar(calendar).eraYear + offset;
|
|
53
|
+
const params = {
|
|
54
|
+
periodType,
|
|
55
|
+
year,
|
|
56
|
+
calendar,
|
|
57
|
+
locale: 'en',
|
|
58
|
+
startingDay: config.startDay
|
|
59
|
+
};
|
|
60
|
+
let periods = generateFixedPeriods(params);
|
|
61
|
+
periods = isFilter ? fnFilter(periods) : periods;
|
|
62
|
+
periods = !isReverse ? periods : periods.reverse();
|
|
63
|
+
return periods;
|
|
44
64
|
};
|
|
45
65
|
|
|
46
|
-
const getDailyPeriodType = (
|
|
66
|
+
const getDailyPeriodType = (fnFilter, calendar) => {
|
|
47
67
|
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;
|
|
68
|
+
return getPeriods({
|
|
69
|
+
periodType: 'DAILY',
|
|
70
|
+
config,
|
|
71
|
+
fnFilter,
|
|
72
|
+
calendar
|
|
73
|
+
});
|
|
69
74
|
};
|
|
70
75
|
};
|
|
71
76
|
|
|
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
|
-
|
|
77
|
+
const getWeeklyPeriodType = (weekObj, fnFilter, calendar) => {
|
|
90
78
|
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;
|
|
79
|
+
return getPeriods({
|
|
80
|
+
periodType: 'WEEKLY',
|
|
81
|
+
config: { ...config,
|
|
82
|
+
startDay: weekObj.startDay
|
|
83
|
+
},
|
|
84
|
+
fnFilter,
|
|
85
|
+
calendar
|
|
86
|
+
});
|
|
123
87
|
};
|
|
124
88
|
};
|
|
125
89
|
|
|
126
|
-
const getBiWeeklyPeriodType = (
|
|
90
|
+
const getBiWeeklyPeriodType = (fnFilter, calendar) => {
|
|
127
91
|
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;
|
|
92
|
+
return getPeriods({
|
|
93
|
+
periodType: 'BIWEEKLY',
|
|
94
|
+
config,
|
|
95
|
+
fnFilter,
|
|
96
|
+
calendar
|
|
97
|
+
});
|
|
167
98
|
};
|
|
168
99
|
};
|
|
169
100
|
|
|
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
|
-
|
|
101
|
+
const getMonthlyPeriodType = (fnFilter, calendar) => {
|
|
178
102
|
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;
|
|
103
|
+
return getPeriods({
|
|
104
|
+
periodType: 'MONTHLY',
|
|
105
|
+
config,
|
|
106
|
+
fnFilter,
|
|
107
|
+
calendar
|
|
108
|
+
});
|
|
203
109
|
};
|
|
204
110
|
};
|
|
205
111
|
|
|
206
|
-
const getBiMonthlyPeriodType = (
|
|
112
|
+
const getBiMonthlyPeriodType = (fnFilter, calendar) => {
|
|
207
113
|
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;
|
|
114
|
+
return getPeriods({
|
|
115
|
+
periodType: 'BIMONTHLY',
|
|
116
|
+
config,
|
|
117
|
+
fnFilter,
|
|
118
|
+
calendar
|
|
119
|
+
});
|
|
237
120
|
};
|
|
238
121
|
};
|
|
239
122
|
|
|
240
|
-
const getQuarterlyPeriodType = (
|
|
123
|
+
const getQuarterlyPeriodType = (fnFilter, calendar) => {
|
|
241
124
|
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;
|
|
125
|
+
return getPeriods({
|
|
126
|
+
periodType: 'QUARTERLY',
|
|
127
|
+
config,
|
|
128
|
+
fnFilter,
|
|
129
|
+
calendar
|
|
130
|
+
});
|
|
272
131
|
};
|
|
273
132
|
};
|
|
274
133
|
|
|
275
|
-
const getSixMonthlyPeriodType = fnFilter => {
|
|
134
|
+
const getSixMonthlyPeriodType = (fnFilter, calendar) => {
|
|
276
135
|
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;
|
|
136
|
+
return getPeriods({
|
|
137
|
+
periodType: 'SIXMONTHLY',
|
|
138
|
+
config,
|
|
139
|
+
fnFilter,
|
|
140
|
+
calendar
|
|
141
|
+
});
|
|
299
142
|
};
|
|
300
143
|
};
|
|
301
144
|
|
|
302
|
-
const getSixMonthlyAprilPeriodType = fnFilter => {
|
|
145
|
+
const getSixMonthlyAprilPeriodType = (fnFilter, calendar) => {
|
|
303
146
|
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;
|
|
147
|
+
return getPeriods({
|
|
148
|
+
periodType: 'SIXMONTHLYAPR',
|
|
149
|
+
config,
|
|
150
|
+
fnFilter,
|
|
151
|
+
calendar
|
|
152
|
+
});
|
|
326
153
|
};
|
|
327
154
|
};
|
|
328
155
|
|
|
329
|
-
const getYearlyPeriodType = (
|
|
156
|
+
const getYearlyPeriodType = (fnFilter, calendar) => {
|
|
330
157
|
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;
|
|
158
|
+
return getPeriods({
|
|
159
|
+
periodType: 'YEARLY',
|
|
160
|
+
config,
|
|
161
|
+
fnFilter,
|
|
162
|
+
calendar
|
|
163
|
+
});
|
|
355
164
|
};
|
|
356
165
|
};
|
|
357
166
|
|
|
358
|
-
const getFinancialOctoberPeriodType = (
|
|
167
|
+
const getFinancialOctoberPeriodType = (fnFilter, calendar) => {
|
|
359
168
|
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;
|
|
169
|
+
return getPeriods({
|
|
170
|
+
periodType: 'FYOCT',
|
|
171
|
+
config,
|
|
172
|
+
fnFilter,
|
|
173
|
+
calendar
|
|
174
|
+
});
|
|
385
175
|
};
|
|
386
176
|
};
|
|
387
177
|
|
|
388
|
-
const getFinancialNovemberPeriodType = (
|
|
178
|
+
const getFinancialNovemberPeriodType = (fnFilter, calendar) => {
|
|
389
179
|
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;
|
|
180
|
+
return getPeriods({
|
|
181
|
+
periodType: 'FYNOV',
|
|
182
|
+
config,
|
|
183
|
+
fnFilter,
|
|
184
|
+
calendar
|
|
185
|
+
});
|
|
415
186
|
};
|
|
416
187
|
};
|
|
417
188
|
|
|
418
|
-
const getFinancialJulyPeriodType = (
|
|
189
|
+
const getFinancialJulyPeriodType = (fnFilter, calendar) => {
|
|
419
190
|
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;
|
|
191
|
+
return getPeriods({
|
|
192
|
+
periodType: 'FYJUL',
|
|
193
|
+
config,
|
|
194
|
+
fnFilter,
|
|
195
|
+
calendar
|
|
196
|
+
});
|
|
445
197
|
};
|
|
446
198
|
};
|
|
447
199
|
|
|
448
|
-
const getFinancialAprilPeriodType = (
|
|
200
|
+
const getFinancialAprilPeriodType = (fnFilter, calendar) => {
|
|
449
201
|
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;
|
|
202
|
+
return getPeriods({
|
|
203
|
+
periodType: 'FYAPR',
|
|
204
|
+
config,
|
|
205
|
+
fnFilter,
|
|
206
|
+
calendar
|
|
207
|
+
});
|
|
475
208
|
};
|
|
476
209
|
};
|
|
477
210
|
|
|
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
211
|
const filterFuturePeriods = periods => {
|
|
488
212
|
const array = [];
|
|
489
213
|
const now = new Date(Date.now());
|
|
@@ -497,92 +221,93 @@ const filterFuturePeriods = periods => {
|
|
|
497
221
|
return array;
|
|
498
222
|
};
|
|
499
223
|
|
|
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
|
-
|
|
582
|
-
name: i18n.t('Financial year (Start April)')
|
|
583
|
-
}];
|
|
224
|
+
const getOptions = function () {
|
|
225
|
+
let calendar = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'gregory';
|
|
226
|
+
return [{
|
|
227
|
+
id: DAILY,
|
|
228
|
+
getPeriods: getDailyPeriodType(filterFuturePeriods, calendar),
|
|
229
|
+
name: i18n.t('Daily')
|
|
230
|
+
}, {
|
|
231
|
+
id: WEEKLY,
|
|
232
|
+
getPeriods: getWeeklyPeriodType({
|
|
233
|
+
startDay: 1
|
|
234
|
+
}, filterFuturePeriods, calendar),
|
|
235
|
+
name: i18n.t('Weekly')
|
|
236
|
+
}, {
|
|
237
|
+
id: WEEKLYWED,
|
|
238
|
+
getPeriods: getWeeklyPeriodType({
|
|
239
|
+
startDay: 3
|
|
240
|
+
}, filterFuturePeriods, calendar),
|
|
241
|
+
name: i18n.t('Weekly (Start Wednesday)')
|
|
242
|
+
}, {
|
|
243
|
+
id: WEEKLYTHU,
|
|
244
|
+
getPeriods: getWeeklyPeriodType({
|
|
245
|
+
startDay: 4
|
|
246
|
+
}, filterFuturePeriods, calendar),
|
|
247
|
+
name: i18n.t('Weekly (Start Thursday)')
|
|
248
|
+
}, {
|
|
249
|
+
id: WEEKLYSAT,
|
|
250
|
+
getPeriods: getWeeklyPeriodType({
|
|
251
|
+
startDay: 6
|
|
252
|
+
}, filterFuturePeriods, calendar),
|
|
253
|
+
name: i18n.t('Weekly (Start Saturday)')
|
|
254
|
+
}, {
|
|
255
|
+
id: WEEKLYSUN,
|
|
256
|
+
getPeriods: getWeeklyPeriodType({
|
|
257
|
+
startDay: 7
|
|
258
|
+
}, filterFuturePeriods, calendar),
|
|
259
|
+
name: i18n.t('Weekly (Start Sunday)')
|
|
260
|
+
}, {
|
|
261
|
+
id: BIWEEKLY,
|
|
262
|
+
getPeriods: getBiWeeklyPeriodType(filterFuturePeriods, calendar),
|
|
263
|
+
name: i18n.t('Bi-weekly')
|
|
264
|
+
}, {
|
|
265
|
+
id: MONTHLY,
|
|
266
|
+
getPeriods: getMonthlyPeriodType(filterFuturePeriods, calendar),
|
|
267
|
+
name: i18n.t('Monthly')
|
|
268
|
+
}, {
|
|
269
|
+
id: BIMONTHLY,
|
|
270
|
+
getPeriods: getBiMonthlyPeriodType(filterFuturePeriods, calendar),
|
|
271
|
+
name: i18n.t('Bi-monthly')
|
|
272
|
+
}, {
|
|
273
|
+
id: QUARTERLY,
|
|
274
|
+
getPeriods: getQuarterlyPeriodType(filterFuturePeriods, calendar),
|
|
275
|
+
name: i18n.t('Quarterly')
|
|
276
|
+
}, {
|
|
277
|
+
id: SIXMONTHLY,
|
|
278
|
+
getPeriods: getSixMonthlyPeriodType(filterFuturePeriods, calendar),
|
|
279
|
+
name: i18n.t('Six-monthly')
|
|
280
|
+
}, {
|
|
281
|
+
id: SIXMONTHLYAPR,
|
|
282
|
+
getPeriods: getSixMonthlyAprilPeriodType(filterFuturePeriods, calendar),
|
|
283
|
+
name: i18n.t('Six-monthly April')
|
|
284
|
+
}, {
|
|
285
|
+
id: YEARLY,
|
|
286
|
+
getPeriods: getYearlyPeriodType(filterFuturePeriods, calendar),
|
|
287
|
+
name: i18n.t('Yearly')
|
|
288
|
+
}, {
|
|
289
|
+
id: FYNOV,
|
|
290
|
+
getPeriods: getFinancialNovemberPeriodType(filterFuturePeriods, calendar),
|
|
291
|
+
name: i18n.t('Financial year (Start November)')
|
|
292
|
+
}, {
|
|
293
|
+
id: FYOCT,
|
|
294
|
+
getPeriods: getFinancialOctoberPeriodType(filterFuturePeriods, calendar),
|
|
295
|
+
name: i18n.t('Financial year (Start October)')
|
|
296
|
+
}, {
|
|
297
|
+
id: FYJUL,
|
|
298
|
+
getPeriods: getFinancialJulyPeriodType(filterFuturePeriods, calendar),
|
|
299
|
+
name: i18n.t('Financial year (Start July)')
|
|
300
|
+
}, {
|
|
301
|
+
id: FYAPR,
|
|
302
|
+
getPeriods: getFinancialAprilPeriodType(filterFuturePeriods, calendar),
|
|
303
|
+
name: i18n.t('Financial year (Start April)')
|
|
304
|
+
}];
|
|
305
|
+
};
|
|
584
306
|
|
|
585
|
-
export const getFixedPeriodsOptionsById =
|
|
307
|
+
export const getFixedPeriodsOptionsById = function (id) {
|
|
308
|
+
let calendar = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'gregory';
|
|
309
|
+
return getOptions(calendar).find(option => option.id === id);
|
|
310
|
+
};
|
|
586
311
|
export const getFixedPeriodsOptions = () => getOptions();
|
|
587
312
|
export const getYearOffsetFromNow = yearStr => parseInt(yearStr) - new Date(Date.now()).getFullYear();
|
|
588
313
|
export const parsePeriodCode = (code, allowedTypes) => {
|