@dhis2/analytics 21.3.0 → 21.4.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 +28 -0
- package/build/cjs/__fixtures__/fixtures.js +1 -0
- package/build/cjs/__fixtures__/json/api/analytics/enrollments.json +206 -0
- package/build/cjs/api/analytics/Analytics.js +6 -0
- package/build/cjs/api/analytics/AnalyticsEnrollments.js +48 -0
- package/build/cjs/api/analytics/__tests__/AnalyticsEnrollments.spec.js +50 -0
- package/build/cjs/api/analytics/__tests__/__snapshots__/AnalyticsEnrollments.spec.js.snap +3 -0
- package/build/cjs/components/FileMenu/utils.js +1 -1
- package/build/cjs/components/OpenFileDialog/utils.js +1 -1
- package/build/cjs/locales/cs/translations.json +8 -8
- package/build/es/__fixtures__/fixtures.js +1 -0
- package/build/es/__fixtures__/json/api/analytics/enrollments.json +206 -0
- package/build/es/api/analytics/Analytics.js +5 -0
- package/build/es/api/analytics/AnalyticsEnrollments.js +38 -0
- package/build/es/api/analytics/__tests__/AnalyticsEnrollments.spec.js +40 -0
- package/build/es/api/analytics/__tests__/__snapshots__/AnalyticsEnrollments.spec.js.snap +3 -0
- package/build/es/components/FileMenu/utils.js +1 -1
- package/build/es/components/OpenFileDialog/utils.js +1 -1
- package/build/es/locales/cs/translations.json +8 -8
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,31 @@
|
|
|
1
|
+
## [21.4.1](https://github.com/dhis2/analytics/compare/v21.4.0...v21.4.1) (2022-01-21)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* enable enrollments endpoint ([#1134](https://github.com/dhis2/analytics/issues/1134)) ([e4d5d7f](https://github.com/dhis2/analytics/commit/e4d5d7f453064215d013930dea61da7c95941946))
|
|
7
|
+
|
|
8
|
+
# [21.4.0](https://github.com/dhis2/analytics/compare/v21.3.2...v21.4.0) (2022-01-20)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* add support for enrollments/query API request (TECH-697) ([#1074](https://github.com/dhis2/analytics/issues/1074)) ([0e48d42](https://github.com/dhis2/analytics/commit/0e48d42763b0c773d3f0093e778627e1afc7aeb6))
|
|
14
|
+
|
|
15
|
+
## [21.3.2](https://github.com/dhis2/analytics/compare/v21.3.1...v21.3.2) (2022-01-20)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Bug Fixes
|
|
19
|
+
|
|
20
|
+
* event visualization endpoint ([#1133](https://github.com/dhis2/analytics/issues/1133)) ([cefd746](https://github.com/dhis2/analytics/commit/cefd746989f37d1ec8686731c7a7300c5f10624a))
|
|
21
|
+
|
|
22
|
+
## [21.3.1](https://github.com/dhis2/analytics/compare/v21.3.0...v21.3.1) (2022-01-20)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### Bug Fixes
|
|
26
|
+
|
|
27
|
+
* **translations:** sync translations from transifex (master) ([0fd64dc](https://github.com/dhis2/analytics/commit/0fd64dcec04bb484291c1ba33cb90604970d360c))
|
|
28
|
+
|
|
1
29
|
# [21.3.0](https://github.com/dhis2/analytics/compare/v21.2.5...v21.3.0) (2022-01-17)
|
|
2
30
|
|
|
3
31
|
|
|
@@ -98,6 +98,7 @@ var _default = function x() {
|
|
|
98
98
|
addFixture('/api/analytics/query', require('./json/api/analytics/query.json'));
|
|
99
99
|
addFixture('/api/analytics/cluster', require('./json/api/analytics/cluster.json'));
|
|
100
100
|
addFixture('/api/analytics/response', require('./json/api/analytics/response.json'));
|
|
101
|
+
addFixture('/api/analytics/enrollments', require('./json/api/analytics/enrollments.json'));
|
|
101
102
|
return {
|
|
102
103
|
get: getFixture,
|
|
103
104
|
add: addFixture
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
{
|
|
2
|
+
"headers": [
|
|
3
|
+
{
|
|
4
|
+
"name": "pi",
|
|
5
|
+
"column": "Enrollment",
|
|
6
|
+
"valueType": "TEXT",
|
|
7
|
+
"type": "java.lang.String",
|
|
8
|
+
"hidden": false,
|
|
9
|
+
"meta": true
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"name": "tei",
|
|
13
|
+
"column": "Tracked entity instance",
|
|
14
|
+
"valueType": "TEXT",
|
|
15
|
+
"type": "java.lang.String",
|
|
16
|
+
"hidden": false,
|
|
17
|
+
"meta": true
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"name": "enrollmentdate",
|
|
21
|
+
"column": "Enrollment date",
|
|
22
|
+
"valueType": "DATE",
|
|
23
|
+
"type": "java.util.Date",
|
|
24
|
+
"hidden": false,
|
|
25
|
+
"meta": true
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "incidentdate",
|
|
29
|
+
"column": "Incident date",
|
|
30
|
+
"valueType": "DATE",
|
|
31
|
+
"type": "java.util.Date",
|
|
32
|
+
"hidden": false,
|
|
33
|
+
"meta": true
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"name": "geometry",
|
|
37
|
+
"column": "Geometry",
|
|
38
|
+
"valueType": "TEXT",
|
|
39
|
+
"type": "java.lang.String",
|
|
40
|
+
"hidden": false,
|
|
41
|
+
"meta": true
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"name": "longitude",
|
|
45
|
+
"column": "Longitude",
|
|
46
|
+
"valueType": "NUMBER",
|
|
47
|
+
"type": "java.lang.Double",
|
|
48
|
+
"hidden": false,
|
|
49
|
+
"meta": true
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"name": "latitude",
|
|
53
|
+
"column": "Latitude",
|
|
54
|
+
"valueType": "NUMBER",
|
|
55
|
+
"type": "java.lang.Double",
|
|
56
|
+
"hidden": false,
|
|
57
|
+
"meta": true
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"name": "ouname",
|
|
61
|
+
"column": "Organisation unit name",
|
|
62
|
+
"valueType": "TEXT",
|
|
63
|
+
"type": "java.lang.String",
|
|
64
|
+
"hidden": false,
|
|
65
|
+
"meta": true
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"name": "oucode",
|
|
69
|
+
"column": "Organisation unit code",
|
|
70
|
+
"valueType": "TEXT",
|
|
71
|
+
"type": "java.lang.String",
|
|
72
|
+
"hidden": false,
|
|
73
|
+
"meta": true
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"name": "ou",
|
|
77
|
+
"column": "Organisation unit",
|
|
78
|
+
"valueType": "TEXT",
|
|
79
|
+
"type": "java.lang.String",
|
|
80
|
+
"hidden": false,
|
|
81
|
+
"meta": true
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"name": "de0FEHSIoxh",
|
|
85
|
+
"column": "WHOMCH Chronic conditions",
|
|
86
|
+
"valueType": "BOOLEAN",
|
|
87
|
+
"type": "java.lang.Boolean",
|
|
88
|
+
"hidden": false,
|
|
89
|
+
"meta": true
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"name": "sWoqcoByYmD",
|
|
93
|
+
"column": "WHOMCH Smoking",
|
|
94
|
+
"valueType": "BOOLEAN",
|
|
95
|
+
"type": "java.lang.Boolean",
|
|
96
|
+
"hidden": false,
|
|
97
|
+
"meta": true
|
|
98
|
+
}
|
|
99
|
+
],
|
|
100
|
+
"metaData": {
|
|
101
|
+
"pager": {
|
|
102
|
+
"page": 2,
|
|
103
|
+
"total": 163,
|
|
104
|
+
"pageSize": 4,
|
|
105
|
+
"pageCount": 41
|
|
106
|
+
},
|
|
107
|
+
"items": {
|
|
108
|
+
"ImspTQPwCqd": {
|
|
109
|
+
"name": "Sierra Leone"
|
|
110
|
+
},
|
|
111
|
+
"PFDfvmGpsR3": {
|
|
112
|
+
"name": "Care at birth"
|
|
113
|
+
},
|
|
114
|
+
"bbKtnxRZKEP": {
|
|
115
|
+
"name": "Postpartum care visit"
|
|
116
|
+
},
|
|
117
|
+
"ou": {
|
|
118
|
+
"name": "Organisation unit"
|
|
119
|
+
},
|
|
120
|
+
"PUZaKR0Jh2k": {
|
|
121
|
+
"name": "Previous deliveries"
|
|
122
|
+
},
|
|
123
|
+
"edqlbukwRfQ": {
|
|
124
|
+
"name": "Antenatal care visit"
|
|
125
|
+
},
|
|
126
|
+
"WZbXY0S00lP": {
|
|
127
|
+
"name": "First antenatal care visit"
|
|
128
|
+
},
|
|
129
|
+
"sWoqcoByYmD": {
|
|
130
|
+
"name": "WHOMCH Smoking"
|
|
131
|
+
},
|
|
132
|
+
"WSGAb5XwJ3Y": {
|
|
133
|
+
"name": "WHO RMNCH Tracker"
|
|
134
|
+
},
|
|
135
|
+
"de0FEHSIoxh": {
|
|
136
|
+
"name": "WHOMCH Chronic conditions"
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
"dimensions": {
|
|
140
|
+
"pe": [],
|
|
141
|
+
"ou": ["ImspTQPwCqd"],
|
|
142
|
+
"sWoqcoByYmD": [],
|
|
143
|
+
"de0FEHSIoxh": []
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
"width": 12,
|
|
147
|
+
"rows": [
|
|
148
|
+
[
|
|
149
|
+
"A0cP533hIQv",
|
|
150
|
+
"to8G9jAprnx",
|
|
151
|
+
"2019-02-02 12:05:00.0",
|
|
152
|
+
"2019-02-02 12:05:00.0",
|
|
153
|
+
"",
|
|
154
|
+
"0.0",
|
|
155
|
+
"0.0",
|
|
156
|
+
"Tonkomba MCHP",
|
|
157
|
+
"OU_193264",
|
|
158
|
+
"xIMxph4NMP1",
|
|
159
|
+
"0",
|
|
160
|
+
"1"
|
|
161
|
+
],
|
|
162
|
+
[
|
|
163
|
+
"ZqiUn2uXmBi",
|
|
164
|
+
"SJtv0WzoYki",
|
|
165
|
+
"2019-02-02 12:05:00.0",
|
|
166
|
+
"2019-02-02 12:05:00.0",
|
|
167
|
+
"",
|
|
168
|
+
"0.0",
|
|
169
|
+
"0.0",
|
|
170
|
+
"Mawoma MCHP",
|
|
171
|
+
"OU_254973",
|
|
172
|
+
"Srnpwq8jKbp",
|
|
173
|
+
"0",
|
|
174
|
+
"0"
|
|
175
|
+
],
|
|
176
|
+
[
|
|
177
|
+
"lE747mUAtbz",
|
|
178
|
+
"PGzTv2A1xzn",
|
|
179
|
+
"2019-02-02 12:05:00.0",
|
|
180
|
+
"2019-02-02 12:05:00.0",
|
|
181
|
+
"",
|
|
182
|
+
"0.0",
|
|
183
|
+
"0.0",
|
|
184
|
+
"Kunsho CHP",
|
|
185
|
+
"OU_193254",
|
|
186
|
+
"tdhB1JXYBx2",
|
|
187
|
+
"",
|
|
188
|
+
"0"
|
|
189
|
+
],
|
|
190
|
+
[
|
|
191
|
+
"nmcqu9QF8ow",
|
|
192
|
+
"pav3tGLjYuq",
|
|
193
|
+
"2019-02-03 12:05:00.0",
|
|
194
|
+
"2019-02-03 12:05:00.0",
|
|
195
|
+
"",
|
|
196
|
+
"0.0",
|
|
197
|
+
"0.0",
|
|
198
|
+
"Korbu MCHP",
|
|
199
|
+
"OU_678893",
|
|
200
|
+
"m73lWmo5BDG",
|
|
201
|
+
"",
|
|
202
|
+
"1"
|
|
203
|
+
]
|
|
204
|
+
],
|
|
205
|
+
"height": 4
|
|
206
|
+
}
|
|
@@ -7,6 +7,8 @@ exports.default = void 0;
|
|
|
7
7
|
|
|
8
8
|
var _AnalyticsAggregate = _interopRequireDefault(require("./AnalyticsAggregate.js"));
|
|
9
9
|
|
|
10
|
+
var _AnalyticsEnrollments = _interopRequireDefault(require("./AnalyticsEnrollments.js"));
|
|
11
|
+
|
|
10
12
|
var _AnalyticsEvents = _interopRequireDefault(require("./AnalyticsEvents.js"));
|
|
11
13
|
|
|
12
14
|
var _AnalyticsRequest = _interopRequireDefault(require("./AnalyticsRequest.js"));
|
|
@@ -43,17 +45,20 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
43
45
|
class Analytics {
|
|
44
46
|
/**
|
|
45
47
|
* @param {!module:analytics.AnalyticsAggregate} analyticsAggregate The AnalyticsAggregate instance
|
|
48
|
+
* @param {!module:analytics.AnalyticsEnrollments} analyticsEnrollments The AnalyticsEnrollments instance
|
|
46
49
|
* @param {!module:analytics.AnalyticsEvents} analyticsEvents The AnalyticsEvents instance
|
|
47
50
|
* @param {!module:analytics.AnalyticsRequest} analyticsRequest The AnalyticsRequest class
|
|
48
51
|
* @param {!module:analytics.AnalyticsResponse} analyticsResponse The AnalyticsResponse class
|
|
49
52
|
*/
|
|
50
53
|
constructor({
|
|
51
54
|
aggregate,
|
|
55
|
+
enrollments,
|
|
52
56
|
events,
|
|
53
57
|
request,
|
|
54
58
|
response
|
|
55
59
|
}) {
|
|
56
60
|
this.aggregate = aggregate;
|
|
61
|
+
this.enrollments = enrollments;
|
|
57
62
|
this.events = events;
|
|
58
63
|
this.request = request;
|
|
59
64
|
this.response = response;
|
|
@@ -76,6 +81,7 @@ class Analytics {
|
|
|
76
81
|
if (!Analytics.getAnalytics.analytics) {
|
|
77
82
|
Analytics.getAnalytics.analytics = new Analytics({
|
|
78
83
|
aggregate: new _AnalyticsAggregate.default(dataEngine),
|
|
84
|
+
enrollments: new _AnalyticsEnrollments.default(dataEngine),
|
|
79
85
|
events: new _AnalyticsEvents.default(dataEngine),
|
|
80
86
|
request: _AnalyticsRequest.default,
|
|
81
87
|
response: _AnalyticsResponse.default
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _AnalyticsBase = _interopRequireDefault(require("./AnalyticsBase.js"));
|
|
9
|
+
|
|
10
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @extends module:analytics.AnalyticsBase
|
|
14
|
+
*
|
|
15
|
+
* @description
|
|
16
|
+
* Analytics enrollments class used to request analytics enrollments data from Web API.
|
|
17
|
+
*
|
|
18
|
+
* @memberof module:analytics
|
|
19
|
+
*
|
|
20
|
+
* @see https://docs.dhis2.org/en/develop/using-the-api/dhis-core-version-236/analytics.html#webapi_enrollment_analytics
|
|
21
|
+
*/
|
|
22
|
+
class AnalyticsEnrollments extends _AnalyticsBase.default {
|
|
23
|
+
/**
|
|
24
|
+
* @param {!AnalyticsRequest} req Request object
|
|
25
|
+
*
|
|
26
|
+
* @returns {Promise} Promise that resolves with the analytics query data from the api.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* const req = new analytics.request()
|
|
30
|
+
* .withProgram('eBAyeGv0exc')
|
|
31
|
+
* .addDataDimension(['Uvn6LCg7dVU','OdiHJayrsKo'])
|
|
32
|
+
* .addPeriodDimension('LAST_4_QUARTERS')
|
|
33
|
+
* .addOrgUnitDimension(['lc3eMKXaEfw','PMa2VCrupOd'])
|
|
34
|
+
* .addOrgUnitFilter('O6uvpzGd5pu')
|
|
35
|
+
* .withStartDate('2017-10-01')
|
|
36
|
+
* .withEndDate('2017-10-31');
|
|
37
|
+
*
|
|
38
|
+
* analytics.enrollments.getQuery(req)
|
|
39
|
+
* .then(console.log);
|
|
40
|
+
*/
|
|
41
|
+
getQuery(req) {
|
|
42
|
+
return this.fetch(req.withPath('enrollments/query'));
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
var _default = AnalyticsEnrollments;
|
|
48
|
+
exports.default = _default;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _fixtures = _interopRequireDefault(require("../../../__fixtures__/fixtures.js"));
|
|
4
|
+
|
|
5
|
+
var _DataEngine = _interopRequireDefault(require("../__mocks__/DataEngine.js"));
|
|
6
|
+
|
|
7
|
+
var _AnalyticsEnrollments = _interopRequireDefault(require("../AnalyticsEnrollments.js"));
|
|
8
|
+
|
|
9
|
+
var _AnalyticsRequest = _interopRequireDefault(require("../AnalyticsRequest.js"));
|
|
10
|
+
|
|
11
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
12
|
+
|
|
13
|
+
describe('analytics.enrollments', () => {
|
|
14
|
+
let enrollments;
|
|
15
|
+
let request;
|
|
16
|
+
let dataEngineMock;
|
|
17
|
+
let fixture;
|
|
18
|
+
beforeEach(() => {
|
|
19
|
+
dataEngineMock = new _DataEngine.default();
|
|
20
|
+
|
|
21
|
+
_DataEngine.default.mockClear();
|
|
22
|
+
|
|
23
|
+
enrollments = new _AnalyticsEnrollments.default();
|
|
24
|
+
});
|
|
25
|
+
it('should not be allowed to be called without new', () => {
|
|
26
|
+
expect(() => (0, _AnalyticsEnrollments.default)()).toThrowErrorMatchingSnapshot();
|
|
27
|
+
});
|
|
28
|
+
it('should use the dataEngine object when it is passed', () => {
|
|
29
|
+
const dataEngineMockObject = {};
|
|
30
|
+
enrollments = new _AnalyticsEnrollments.default(dataEngineMockObject);
|
|
31
|
+
expect(enrollments.dataEngine).toBe(dataEngineMockObject);
|
|
32
|
+
});
|
|
33
|
+
describe('.getQuery()', () => {
|
|
34
|
+
beforeEach(() => {
|
|
35
|
+
enrollments = new _AnalyticsEnrollments.default(new _DataEngine.default());
|
|
36
|
+
request = new _AnalyticsRequest.default().addOrgUnitDimension('ImspTQPwCqd').addDimension('WZbXY0S00lP.de0FEHSIoxh').addDimension('WZbXY0S00lP.sWoqcoByYmD').addPeriodFilter('LAST_MONTH').withProgram('WSGAb5XwJ3Y').withStage('WZbXY0S00lP').withAsc('ENROLLMENTDATE').withOuMode('DESCENDANTS').withColumns('w75KJ2mc4zz').withPage(1).withPageSize(10);
|
|
37
|
+
fixture = _fixtures.default.get('/api/analytics/enrollments');
|
|
38
|
+
dataEngineMock.query.mockReturnValue(Promise.resolve({
|
|
39
|
+
data: fixture
|
|
40
|
+
}));
|
|
41
|
+
});
|
|
42
|
+
it('should be a function', () => {
|
|
43
|
+
expect(enrollments.getQuery).toBeInstanceOf(Function);
|
|
44
|
+
});
|
|
45
|
+
it('should resolve a promise with data', () => enrollments.getQuery(request).then(data => {
|
|
46
|
+
expect(data.width).toEqual(fixture.width);
|
|
47
|
+
expect(data.height).toEqual(fixture.height);
|
|
48
|
+
}));
|
|
49
|
+
});
|
|
50
|
+
});
|
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.appPathFor = exports.endpointFromFileType = exports.supportedFileTypes = void 0;
|
|
7
|
-
const supportedFileTypes = ['eventReport', 'visualization', 'map'];
|
|
7
|
+
const supportedFileTypes = ['eventReport', 'visualization', 'map', 'eventVisualization'];
|
|
8
8
|
exports.supportedFileTypes = supportedFileTypes;
|
|
9
9
|
|
|
10
10
|
const endpointFromFileType = fileType => {
|
|
@@ -230,14 +230,14 @@
|
|
|
230
230
|
"Six-months": "Půlrok",
|
|
231
231
|
"Financial Years": "Finanční roky",
|
|
232
232
|
"Years": "Let",
|
|
233
|
-
"Translating to": "",
|
|
234
|
-
"Choose a locale": "",
|
|
235
|
-
"Base locale reference": "",
|
|
236
|
-
"Choose a locale to translate from the menu above": "",
|
|
237
|
-
"Translate: {{objectName}}": "",
|
|
238
|
-
"Save translations": "",
|
|
239
|
-
"Could not load translations": "",
|
|
240
|
-
"Retry": "",
|
|
233
|
+
"Translating to": "Překlad do",
|
|
234
|
+
"Choose a locale": "Vyberte národní prostředí",
|
|
235
|
+
"Base locale reference": "Odkaz na základní národní prostředí",
|
|
236
|
+
"Choose a locale to translate from the menu above": "Z nabídky výše vyberte národní prostředí, které chcete přeložit",
|
|
237
|
+
"Translate: {{objectName}}": "Přeložit: {{objectName}}",
|
|
238
|
+
"Save translations": "Uložit překlady",
|
|
239
|
+
"Could not load translations": "Nelze načíst překlady",
|
|
240
|
+
"Retry": "Opakovat",
|
|
241
241
|
"Series": "Série",
|
|
242
242
|
"Category": "Kategorie",
|
|
243
243
|
"Filter": "Filtr",
|
|
@@ -91,6 +91,7 @@ export default (function x() {
|
|
|
91
91
|
addFixture('/api/analytics/query', require('./json/api/analytics/query.json'));
|
|
92
92
|
addFixture('/api/analytics/cluster', require('./json/api/analytics/cluster.json'));
|
|
93
93
|
addFixture('/api/analytics/response', require('./json/api/analytics/response.json'));
|
|
94
|
+
addFixture('/api/analytics/enrollments', require('./json/api/analytics/enrollments.json'));
|
|
94
95
|
return {
|
|
95
96
|
get: getFixture,
|
|
96
97
|
add: addFixture
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
{
|
|
2
|
+
"headers": [
|
|
3
|
+
{
|
|
4
|
+
"name": "pi",
|
|
5
|
+
"column": "Enrollment",
|
|
6
|
+
"valueType": "TEXT",
|
|
7
|
+
"type": "java.lang.String",
|
|
8
|
+
"hidden": false,
|
|
9
|
+
"meta": true
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"name": "tei",
|
|
13
|
+
"column": "Tracked entity instance",
|
|
14
|
+
"valueType": "TEXT",
|
|
15
|
+
"type": "java.lang.String",
|
|
16
|
+
"hidden": false,
|
|
17
|
+
"meta": true
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"name": "enrollmentdate",
|
|
21
|
+
"column": "Enrollment date",
|
|
22
|
+
"valueType": "DATE",
|
|
23
|
+
"type": "java.util.Date",
|
|
24
|
+
"hidden": false,
|
|
25
|
+
"meta": true
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "incidentdate",
|
|
29
|
+
"column": "Incident date",
|
|
30
|
+
"valueType": "DATE",
|
|
31
|
+
"type": "java.util.Date",
|
|
32
|
+
"hidden": false,
|
|
33
|
+
"meta": true
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"name": "geometry",
|
|
37
|
+
"column": "Geometry",
|
|
38
|
+
"valueType": "TEXT",
|
|
39
|
+
"type": "java.lang.String",
|
|
40
|
+
"hidden": false,
|
|
41
|
+
"meta": true
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"name": "longitude",
|
|
45
|
+
"column": "Longitude",
|
|
46
|
+
"valueType": "NUMBER",
|
|
47
|
+
"type": "java.lang.Double",
|
|
48
|
+
"hidden": false,
|
|
49
|
+
"meta": true
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"name": "latitude",
|
|
53
|
+
"column": "Latitude",
|
|
54
|
+
"valueType": "NUMBER",
|
|
55
|
+
"type": "java.lang.Double",
|
|
56
|
+
"hidden": false,
|
|
57
|
+
"meta": true
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"name": "ouname",
|
|
61
|
+
"column": "Organisation unit name",
|
|
62
|
+
"valueType": "TEXT",
|
|
63
|
+
"type": "java.lang.String",
|
|
64
|
+
"hidden": false,
|
|
65
|
+
"meta": true
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"name": "oucode",
|
|
69
|
+
"column": "Organisation unit code",
|
|
70
|
+
"valueType": "TEXT",
|
|
71
|
+
"type": "java.lang.String",
|
|
72
|
+
"hidden": false,
|
|
73
|
+
"meta": true
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"name": "ou",
|
|
77
|
+
"column": "Organisation unit",
|
|
78
|
+
"valueType": "TEXT",
|
|
79
|
+
"type": "java.lang.String",
|
|
80
|
+
"hidden": false,
|
|
81
|
+
"meta": true
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"name": "de0FEHSIoxh",
|
|
85
|
+
"column": "WHOMCH Chronic conditions",
|
|
86
|
+
"valueType": "BOOLEAN",
|
|
87
|
+
"type": "java.lang.Boolean",
|
|
88
|
+
"hidden": false,
|
|
89
|
+
"meta": true
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"name": "sWoqcoByYmD",
|
|
93
|
+
"column": "WHOMCH Smoking",
|
|
94
|
+
"valueType": "BOOLEAN",
|
|
95
|
+
"type": "java.lang.Boolean",
|
|
96
|
+
"hidden": false,
|
|
97
|
+
"meta": true
|
|
98
|
+
}
|
|
99
|
+
],
|
|
100
|
+
"metaData": {
|
|
101
|
+
"pager": {
|
|
102
|
+
"page": 2,
|
|
103
|
+
"total": 163,
|
|
104
|
+
"pageSize": 4,
|
|
105
|
+
"pageCount": 41
|
|
106
|
+
},
|
|
107
|
+
"items": {
|
|
108
|
+
"ImspTQPwCqd": {
|
|
109
|
+
"name": "Sierra Leone"
|
|
110
|
+
},
|
|
111
|
+
"PFDfvmGpsR3": {
|
|
112
|
+
"name": "Care at birth"
|
|
113
|
+
},
|
|
114
|
+
"bbKtnxRZKEP": {
|
|
115
|
+
"name": "Postpartum care visit"
|
|
116
|
+
},
|
|
117
|
+
"ou": {
|
|
118
|
+
"name": "Organisation unit"
|
|
119
|
+
},
|
|
120
|
+
"PUZaKR0Jh2k": {
|
|
121
|
+
"name": "Previous deliveries"
|
|
122
|
+
},
|
|
123
|
+
"edqlbukwRfQ": {
|
|
124
|
+
"name": "Antenatal care visit"
|
|
125
|
+
},
|
|
126
|
+
"WZbXY0S00lP": {
|
|
127
|
+
"name": "First antenatal care visit"
|
|
128
|
+
},
|
|
129
|
+
"sWoqcoByYmD": {
|
|
130
|
+
"name": "WHOMCH Smoking"
|
|
131
|
+
},
|
|
132
|
+
"WSGAb5XwJ3Y": {
|
|
133
|
+
"name": "WHO RMNCH Tracker"
|
|
134
|
+
},
|
|
135
|
+
"de0FEHSIoxh": {
|
|
136
|
+
"name": "WHOMCH Chronic conditions"
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
"dimensions": {
|
|
140
|
+
"pe": [],
|
|
141
|
+
"ou": ["ImspTQPwCqd"],
|
|
142
|
+
"sWoqcoByYmD": [],
|
|
143
|
+
"de0FEHSIoxh": []
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
"width": 12,
|
|
147
|
+
"rows": [
|
|
148
|
+
[
|
|
149
|
+
"A0cP533hIQv",
|
|
150
|
+
"to8G9jAprnx",
|
|
151
|
+
"2019-02-02 12:05:00.0",
|
|
152
|
+
"2019-02-02 12:05:00.0",
|
|
153
|
+
"",
|
|
154
|
+
"0.0",
|
|
155
|
+
"0.0",
|
|
156
|
+
"Tonkomba MCHP",
|
|
157
|
+
"OU_193264",
|
|
158
|
+
"xIMxph4NMP1",
|
|
159
|
+
"0",
|
|
160
|
+
"1"
|
|
161
|
+
],
|
|
162
|
+
[
|
|
163
|
+
"ZqiUn2uXmBi",
|
|
164
|
+
"SJtv0WzoYki",
|
|
165
|
+
"2019-02-02 12:05:00.0",
|
|
166
|
+
"2019-02-02 12:05:00.0",
|
|
167
|
+
"",
|
|
168
|
+
"0.0",
|
|
169
|
+
"0.0",
|
|
170
|
+
"Mawoma MCHP",
|
|
171
|
+
"OU_254973",
|
|
172
|
+
"Srnpwq8jKbp",
|
|
173
|
+
"0",
|
|
174
|
+
"0"
|
|
175
|
+
],
|
|
176
|
+
[
|
|
177
|
+
"lE747mUAtbz",
|
|
178
|
+
"PGzTv2A1xzn",
|
|
179
|
+
"2019-02-02 12:05:00.0",
|
|
180
|
+
"2019-02-02 12:05:00.0",
|
|
181
|
+
"",
|
|
182
|
+
"0.0",
|
|
183
|
+
"0.0",
|
|
184
|
+
"Kunsho CHP",
|
|
185
|
+
"OU_193254",
|
|
186
|
+
"tdhB1JXYBx2",
|
|
187
|
+
"",
|
|
188
|
+
"0"
|
|
189
|
+
],
|
|
190
|
+
[
|
|
191
|
+
"nmcqu9QF8ow",
|
|
192
|
+
"pav3tGLjYuq",
|
|
193
|
+
"2019-02-03 12:05:00.0",
|
|
194
|
+
"2019-02-03 12:05:00.0",
|
|
195
|
+
"",
|
|
196
|
+
"0.0",
|
|
197
|
+
"0.0",
|
|
198
|
+
"Korbu MCHP",
|
|
199
|
+
"OU_678893",
|
|
200
|
+
"m73lWmo5BDG",
|
|
201
|
+
"",
|
|
202
|
+
"1"
|
|
203
|
+
]
|
|
204
|
+
],
|
|
205
|
+
"height": 4
|
|
206
|
+
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* @module analytics
|
|
3
3
|
*/
|
|
4
4
|
import AnalyticsAggregate from './AnalyticsAggregate.js';
|
|
5
|
+
import AnalyticsEnrollments from './AnalyticsEnrollments.js';
|
|
5
6
|
import AnalyticsEvents from './AnalyticsEvents.js';
|
|
6
7
|
import AnalyticsRequest from './AnalyticsRequest.js';
|
|
7
8
|
import AnalyticsResponse from './AnalyticsResponse.js';
|
|
@@ -30,17 +31,20 @@ import AnalyticsResponse from './AnalyticsResponse.js';
|
|
|
30
31
|
class Analytics {
|
|
31
32
|
/**
|
|
32
33
|
* @param {!module:analytics.AnalyticsAggregate} analyticsAggregate The AnalyticsAggregate instance
|
|
34
|
+
* @param {!module:analytics.AnalyticsEnrollments} analyticsEnrollments The AnalyticsEnrollments instance
|
|
33
35
|
* @param {!module:analytics.AnalyticsEvents} analyticsEvents The AnalyticsEvents instance
|
|
34
36
|
* @param {!module:analytics.AnalyticsRequest} analyticsRequest The AnalyticsRequest class
|
|
35
37
|
* @param {!module:analytics.AnalyticsResponse} analyticsResponse The AnalyticsResponse class
|
|
36
38
|
*/
|
|
37
39
|
constructor({
|
|
38
40
|
aggregate,
|
|
41
|
+
enrollments,
|
|
39
42
|
events,
|
|
40
43
|
request,
|
|
41
44
|
response
|
|
42
45
|
}) {
|
|
43
46
|
this.aggregate = aggregate;
|
|
47
|
+
this.enrollments = enrollments;
|
|
44
48
|
this.events = events;
|
|
45
49
|
this.request = request;
|
|
46
50
|
this.response = response;
|
|
@@ -63,6 +67,7 @@ class Analytics {
|
|
|
63
67
|
if (!Analytics.getAnalytics.analytics) {
|
|
64
68
|
Analytics.getAnalytics.analytics = new Analytics({
|
|
65
69
|
aggregate: new AnalyticsAggregate(dataEngine),
|
|
70
|
+
enrollments: new AnalyticsEnrollments(dataEngine),
|
|
66
71
|
events: new AnalyticsEvents(dataEngine),
|
|
67
72
|
request: AnalyticsRequest,
|
|
68
73
|
response: AnalyticsResponse
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import AnalyticsBase from './AnalyticsBase.js';
|
|
2
|
+
/**
|
|
3
|
+
* @extends module:analytics.AnalyticsBase
|
|
4
|
+
*
|
|
5
|
+
* @description
|
|
6
|
+
* Analytics enrollments class used to request analytics enrollments data from Web API.
|
|
7
|
+
*
|
|
8
|
+
* @memberof module:analytics
|
|
9
|
+
*
|
|
10
|
+
* @see https://docs.dhis2.org/en/develop/using-the-api/dhis-core-version-236/analytics.html#webapi_enrollment_analytics
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
class AnalyticsEnrollments extends AnalyticsBase {
|
|
14
|
+
/**
|
|
15
|
+
* @param {!AnalyticsRequest} req Request object
|
|
16
|
+
*
|
|
17
|
+
* @returns {Promise} Promise that resolves with the analytics query data from the api.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* const req = new analytics.request()
|
|
21
|
+
* .withProgram('eBAyeGv0exc')
|
|
22
|
+
* .addDataDimension(['Uvn6LCg7dVU','OdiHJayrsKo'])
|
|
23
|
+
* .addPeriodDimension('LAST_4_QUARTERS')
|
|
24
|
+
* .addOrgUnitDimension(['lc3eMKXaEfw','PMa2VCrupOd'])
|
|
25
|
+
* .addOrgUnitFilter('O6uvpzGd5pu')
|
|
26
|
+
* .withStartDate('2017-10-01')
|
|
27
|
+
* .withEndDate('2017-10-31');
|
|
28
|
+
*
|
|
29
|
+
* analytics.enrollments.getQuery(req)
|
|
30
|
+
* .then(console.log);
|
|
31
|
+
*/
|
|
32
|
+
getQuery(req) {
|
|
33
|
+
return this.fetch(req.withPath('enrollments/query'));
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export default AnalyticsEnrollments;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import fixtures from '../../../__fixtures__/fixtures.js';
|
|
2
|
+
import DataEngineMock from '../__mocks__/DataEngine.js';
|
|
3
|
+
import AnalyticsEnrollments from '../AnalyticsEnrollments.js';
|
|
4
|
+
import AnalyticsRequest from '../AnalyticsRequest.js';
|
|
5
|
+
describe('analytics.enrollments', () => {
|
|
6
|
+
let enrollments;
|
|
7
|
+
let request;
|
|
8
|
+
let dataEngineMock;
|
|
9
|
+
let fixture;
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
dataEngineMock = new DataEngineMock();
|
|
12
|
+
DataEngineMock.mockClear();
|
|
13
|
+
enrollments = new AnalyticsEnrollments();
|
|
14
|
+
});
|
|
15
|
+
it('should not be allowed to be called without new', () => {
|
|
16
|
+
expect(() => AnalyticsEnrollments()).toThrowErrorMatchingSnapshot();
|
|
17
|
+
});
|
|
18
|
+
it('should use the dataEngine object when it is passed', () => {
|
|
19
|
+
const dataEngineMockObject = {};
|
|
20
|
+
enrollments = new AnalyticsEnrollments(dataEngineMockObject);
|
|
21
|
+
expect(enrollments.dataEngine).toBe(dataEngineMockObject);
|
|
22
|
+
});
|
|
23
|
+
describe('.getQuery()', () => {
|
|
24
|
+
beforeEach(() => {
|
|
25
|
+
enrollments = new AnalyticsEnrollments(new DataEngineMock());
|
|
26
|
+
request = new AnalyticsRequest().addOrgUnitDimension('ImspTQPwCqd').addDimension('WZbXY0S00lP.de0FEHSIoxh').addDimension('WZbXY0S00lP.sWoqcoByYmD').addPeriodFilter('LAST_MONTH').withProgram('WSGAb5XwJ3Y').withStage('WZbXY0S00lP').withAsc('ENROLLMENTDATE').withOuMode('DESCENDANTS').withColumns('w75KJ2mc4zz').withPage(1).withPageSize(10);
|
|
27
|
+
fixture = fixtures.get('/api/analytics/enrollments');
|
|
28
|
+
dataEngineMock.query.mockReturnValue(Promise.resolve({
|
|
29
|
+
data: fixture
|
|
30
|
+
}));
|
|
31
|
+
});
|
|
32
|
+
it('should be a function', () => {
|
|
33
|
+
expect(enrollments.getQuery).toBeInstanceOf(Function);
|
|
34
|
+
});
|
|
35
|
+
it('should resolve a promise with data', () => enrollments.getQuery(request).then(data => {
|
|
36
|
+
expect(data.width).toEqual(fixture.width);
|
|
37
|
+
expect(data.height).toEqual(fixture.height);
|
|
38
|
+
}));
|
|
39
|
+
});
|
|
40
|
+
});
|
|
@@ -230,14 +230,14 @@
|
|
|
230
230
|
"Six-months": "Půlrok",
|
|
231
231
|
"Financial Years": "Finanční roky",
|
|
232
232
|
"Years": "Let",
|
|
233
|
-
"Translating to": "",
|
|
234
|
-
"Choose a locale": "",
|
|
235
|
-
"Base locale reference": "",
|
|
236
|
-
"Choose a locale to translate from the menu above": "",
|
|
237
|
-
"Translate: {{objectName}}": "",
|
|
238
|
-
"Save translations": "",
|
|
239
|
-
"Could not load translations": "",
|
|
240
|
-
"Retry": "",
|
|
233
|
+
"Translating to": "Překlad do",
|
|
234
|
+
"Choose a locale": "Vyberte národní prostředí",
|
|
235
|
+
"Base locale reference": "Odkaz na základní národní prostředí",
|
|
236
|
+
"Choose a locale to translate from the menu above": "Z nabídky výše vyberte národní prostředí, které chcete přeložit",
|
|
237
|
+
"Translate: {{objectName}}": "Přeložit: {{objectName}}",
|
|
238
|
+
"Save translations": "Uložit překlady",
|
|
239
|
+
"Could not load translations": "Nelze načíst překlady",
|
|
240
|
+
"Retry": "Opakovat",
|
|
241
241
|
"Series": "Série",
|
|
242
242
|
"Category": "Kategorie",
|
|
243
243
|
"Filter": "Filtr",
|