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