diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3f8e81a1bc..9fad9e8b4f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,17 @@
+## [101.21.1](https://github.com/dhis2/capture-app/compare/v101.21.0...v101.21.1) (2025-01-08)
+
+
+### Bug Fixes
+
+* [DHIS2-18632] Sorting stage detail table on orgunit breaks the app ([#3917](https://github.com/dhis2/capture-app/issues/3917)) ([15414cc](https://github.com/dhis2/capture-app/commit/15414cc73f7ce74d4d057acad13bf4855d358426))
+
+# [101.21.0](https://github.com/dhis2/capture-app/compare/v101.20.3...v101.21.0) (2025-01-07)
+
+
+### Features
+
+* [DHIS2-18328] Handle log entries for occurredAt, scheduledAt and geometry ([#3887](https://github.com/dhis2/capture-app/issues/3887)) ([f670971](https://github.com/dhis2/capture-app/commit/f670971808f49b75295c1d3c7ef25a747b4888df))
+
## [101.20.3](https://github.com/dhis2/capture-app/compare/v101.20.2...v101.20.3) (2024-12-29)
diff --git a/cypress/e2e/EnrollmentPage/StagesAndEventsWidget/StagesAndEventsWidget.feature b/cypress/e2e/EnrollmentPage/StagesAndEventsWidget/StagesAndEventsWidget.feature
index e944741b2f..a18e595f6b 100644
--- a/cypress/e2e/EnrollmentPage/StagesAndEventsWidget/StagesAndEventsWidget.feature
+++ b/cypress/e2e/EnrollmentPage/StagesAndEventsWidget/StagesAndEventsWidget.feature
@@ -71,7 +71,7 @@ Feature: User interacts with Stages and Events Widget
@with-restore-deleted-event
Scenario: User can delete an event
- Given you open the enrollment page by typing #/enrollment?enrollmentId=ikYMpSKXik1&orgUnitId=DiszpKrYNg8&programId=ur1Edk5Oe2n&teiId=Trc1H9T5C6f
+ Given you open the enrollment page by typing #/enrollment?enrollmentId=ITyaPVATEwc&orgUnitId=DiszpKrYNg8&programId=ur1Edk5Oe2n&teiId=wsk89u7zquT
And there is an Active event in the TB visit stage
When you click the Delete event overflow button on the Active event
And you confirm you want to delete the event
diff --git a/cypress/e2e/EnrollmentPage/StagesAndEventsWidget/StagesAndEventsWidget.js b/cypress/e2e/EnrollmentPage/StagesAndEventsWidget/StagesAndEventsWidget.js
index 35d8996ee7..bf5334da58 100644
--- a/cypress/e2e/EnrollmentPage/StagesAndEventsWidget/StagesAndEventsWidget.js
+++ b/cypress/e2e/EnrollmentPage/StagesAndEventsWidget/StagesAndEventsWidget.js
@@ -3,7 +3,7 @@ import { getCurrentYear } from '../../../support/date';
import '../sharedSteps';
After({ tags: '@with-restore-deleted-event' }, () => {
- cy.visit('#/enrollment?enrollmentId=ikYMpSKXik1&orgUnitId=DiszpKrYNg8&programId=ur1Edk5Oe2n&teiId=Trc1H9T5C6f');
+ cy.visit('#/enrollment?enrollmentId=ITyaPVATEwc&orgUnitId=DiszpKrYNg8&programId=ur1Edk5Oe2n&teiId=wsk89u7zquT');
cy.get('[data-test="stages-and-events-widget"]')
.find('[data-test="widget-contents"]')
@@ -215,7 +215,7 @@ When(/you click the (.*) event overflow button on the (.*) event$/, (buttonName,
cy.get('[data-test="overflow-menu"]')
.contains(buttonName)
- .click();
+ .click({ force: true });
});
Then('the event should be skipped', () => {
diff --git a/cypress/e2e/WidgetsForEnrollmentPages/WidgetEnrollment/index.js b/cypress/e2e/WidgetsForEnrollmentPages/WidgetEnrollment/index.js
index 9f4148abf9..fe8fdfee12 100644
--- a/cypress/e2e/WidgetsForEnrollmentPages/WidgetEnrollment/index.js
+++ b/cypress/e2e/WidgetsForEnrollmentPages/WidgetEnrollment/index.js
@@ -9,10 +9,10 @@ After({ tags: '@with-transfer-ownership-data-cleanup' }, () => {
});
const changeEnrollmentAndEventsStatus = () => (
- cy.buildApiUrl('tracker', 'trackedEntities/osF4RF4EiqP?program=IpHINAT79UW&fields=enrollments')
+ cy.buildApiUrl('tracker', 'trackedEntities/mPLqCVS27AD?program=IpHINAT79UW&fields=enrollments')
.then(url => cy.request(url))
.then(({ body }) => {
- const enrollment = body.enrollments && body.enrollments.find(e => e.enrollment === 'qyx7tscVpVB');
+ const enrollment = body.enrollments && body.enrollments.find(e => e.enrollment === 'YqNTNLKmX4z');
const eventsToUpdate = enrollment.events.map(e => ({
...e,
status: 'ACTIVE',
diff --git a/cypress/e2e/WidgetsForEnrollmentPages/WidgetsForEnrollmentAddEventPage/WidgetsForEnrollmentAddEventPage.feature b/cypress/e2e/WidgetsForEnrollmentPages/WidgetsForEnrollmentAddEventPage/WidgetsForEnrollmentAddEventPage.feature
index 0ab586b19f..cd6062c7fe 100644
--- a/cypress/e2e/WidgetsForEnrollmentPages/WidgetsForEnrollmentAddEventPage/WidgetsForEnrollmentAddEventPage.feature
+++ b/cypress/e2e/WidgetsForEnrollmentPages/WidgetsForEnrollmentAddEventPage/WidgetsForEnrollmentAddEventPage.feature
@@ -68,7 +68,7 @@ Feature: The user interacts with the widgets on the enrollment add event page
Then you can assign a user when scheduling the event
Scenario: User can complete the enrollment and the active events
- Given you land on the enrollment edit event page by having typed #/enrollmentEventNew?enrollmentId=qyx7tscVpVB&orgUnitId=DiszpKrYNg8&programId=IpHINAT79UW&teiId=osF4RF4EiqP
+ Given you land on the enrollment edit event page by having typed #/enrollmentEventNew?enrollmentId=YqNTNLKmX4z&orgUnitId=RzgSFJ9E46G&programId=IpHINAT79UW&teiId=mPLqCVS27AD
And the enrollment widget should be opened
And the user sees the enrollment status and the Baby Postnatal event status is active
And the user opens the enrollment actions menu
diff --git a/cypress/e2e/WidgetsForEnrollmentPages/WidgetsForEnrollmentDashboard/WidgetsForEnrollmentDashboard.feature b/cypress/e2e/WidgetsForEnrollmentPages/WidgetsForEnrollmentDashboard/WidgetsForEnrollmentDashboard.feature
index ffd0a56c1c..76b3465297 100644
--- a/cypress/e2e/WidgetsForEnrollmentPages/WidgetsForEnrollmentDashboard/WidgetsForEnrollmentDashboard.feature
+++ b/cypress/e2e/WidgetsForEnrollmentPages/WidgetsForEnrollmentDashboard/WidgetsForEnrollmentDashboard.feature
@@ -127,7 +127,7 @@ Feature: The user interacts with the widgets on the enrollment dashboard
Then the user can see the program rules effect in the indicator widget
Scenario: User can complete the enrollment and the active events
- Given you land on the enrollment dashboard page by having typed #/enrollment?enrollmentId=qyx7tscVpVB
+ Given you land on the enrollment dashboard page by having typed #/enrollment?enrollmentId=YqNTNLKmX4z
And the enrollment widget should be opened
And the user sees the enrollment status and the Baby Postnatal event status is active
And the user opens the enrollment actions menu
diff --git a/cypress/e2e/WidgetsForEnrollmentPages/WidgetsForEnrollmentEditEvent/WidgetsForEnrollmentEditEvent.feature b/cypress/e2e/WidgetsForEnrollmentPages/WidgetsForEnrollmentEditEvent/WidgetsForEnrollmentEditEvent.feature
index 39bd30c304..defa075922 100644
--- a/cypress/e2e/WidgetsForEnrollmentPages/WidgetsForEnrollmentEditEvent/WidgetsForEnrollmentEditEvent.feature
+++ b/cypress/e2e/WidgetsForEnrollmentPages/WidgetsForEnrollmentEditEvent/WidgetsForEnrollmentEditEvent.feature
@@ -105,7 +105,7 @@ Feature: The user interacts with the widgets on the enrollment edit event
Then the table footer should display page 2
Scenario: User can complete the enrollment and the active events
- Given you land on the enrollment edit event page by having typed #/enrollmentEventEdit?eventId=OWpIzQ4xabC&orgUnitId=DiszpKrYNg8
+ Given you land on the enrollment edit event page by having typed #/enrollmentEventEdit?eventId=PyXThVzWJzL&orgUnitId=RzgSFJ9E46G
And the enrollment widget should be opened
And the user sees the enrollment status and the Baby Postnatal event status is active
And the user opens the enrollment actions menu
diff --git a/cypress/e2e/WorkingLists/TeiWorkingLists/TeiBulkActions/TeiBulkActions.feature b/cypress/e2e/WorkingLists/TeiWorkingLists/TeiBulkActions/TeiBulkActions.feature
index f79f4faf87..40b383e7b3 100644
--- a/cypress/e2e/WorkingLists/TeiWorkingLists/TeiBulkActions/TeiBulkActions.feature
+++ b/cypress/e2e/WorkingLists/TeiWorkingLists/TeiBulkActions/TeiBulkActions.feature
@@ -31,6 +31,8 @@ Feature: User facing tests for bulk actions on Tracked Entity working lists
When you select the first 5 rows
Then the filters should be disabled
+#DHIS2-18447
+@skip
Scenario: The user should see an error message when trying to bulk complete enrollments with errors
Given you open the main page with Ngelehun and Malaria focus investigation context
And you select the first 3 rows
diff --git a/i18n/en.pot b/i18n/en.pot
index 2f414dc91a..0e6ac05309 100644
--- a/i18n/en.pot
+++ b/i18n/en.pot
@@ -5,8 +5,8 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-"POT-Creation-Date: 2024-12-05T11:39:04.447Z\n"
-"PO-Revision-Date: 2024-12-05T11:39:04.447Z\n"
+"POT-Creation-Date: 2024-12-15T15:25:38.375Z\n"
+"PO-Revision-Date: 2024-12-15T15:25:38.375Z\n"
msgid "Choose one or more dates..."
msgstr "Choose one or more dates..."
@@ -101,6 +101,24 @@ msgstr "Date of enrollment"
msgid "Last updated"
msgstr "Last updated"
+msgid "Lat"
+msgstr "Lat"
+
+msgid "Long"
+msgstr "Long"
+
+msgid "lat"
+msgstr "lat"
+
+msgid "long"
+msgstr "long"
+
+msgid "Show less"
+msgstr "Show less"
+
+msgid "Show more"
+msgstr "Show more"
+
msgid "error encountered during field validation"
msgstr "error encountered during field validation"
diff --git a/package.json b/package.json
index e4caffa666..e6ed78a410 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "capture-app",
"homepage": ".",
- "version": "101.20.3",
+ "version": "101.21.1",
"cacheVersion": "7",
"serverVersion": "38",
"license": "BSD-3-Clause",
@@ -10,7 +10,7 @@
"packages/rules-engine"
],
"dependencies": {
- "@dhis2/rules-engine-javascript": "101.20.3",
+ "@dhis2/rules-engine-javascript": "101.21.1",
"@dhis2/app-runtime": "^3.9.3",
"@dhis2/d2-i18n": "^1.1.0",
"@dhis2/d2-icons": "^1.0.1",
diff --git a/packages/rules-engine/package.json b/packages/rules-engine/package.json
index 0ae04d0315..c3b0df5cf7 100644
--- a/packages/rules-engine/package.json
+++ b/packages/rules-engine/package.json
@@ -1,6 +1,6 @@
{
"name": "@dhis2/rules-engine-javascript",
- "version": "101.20.3",
+ "version": "101.21.1",
"license": "BSD-3-Clause",
"main": "./build/cjs/index.js",
"scripts": {
diff --git a/src/core_modules/capture-core/components/MinimalCoordinates/MinimalCoordinates.js b/src/core_modules/capture-core/components/Coordinates/MinimalCoordinates/MinimalCoordinates.js
similarity index 61%
rename from src/core_modules/capture-core/components/MinimalCoordinates/MinimalCoordinates.js
rename to src/core_modules/capture-core/components/Coordinates/MinimalCoordinates/MinimalCoordinates.js
index 36af51e4f5..39b23b672c 100644
--- a/src/core_modules/capture-core/components/MinimalCoordinates/MinimalCoordinates.js
+++ b/src/core_modules/capture-core/components/Coordinates/MinimalCoordinates/MinimalCoordinates.js
@@ -1,5 +1,6 @@
// @flow
import React from 'react';
+import i18n from '@dhis2/d2-i18n';
type Props = $ReadOnly<{|
latitude: number | string,
@@ -8,9 +9,10 @@ type Props = $ReadOnly<{|
const toSixDecimal = value => (parseFloat(value) ? parseFloat(value).toFixed(6) : null);
-export const MinimalCoordinates = ({ latitude, longitude }: Props) =>
- (