Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,22 @@
# [107.0.0](https://github.com/dhis2/capture-app/compare/v106.7.8...v107.0.0) (2026-08-11)


### chore

* **release:** [DHIS2-21692] stop support for 2.40 ([#4662](https://github.com/dhis2/capture-app/issues/4662)) ([22fa85d](https://github.com/dhis2/capture-app/commit/22fa85d256e27a962716fd85487e85773832c477))


### BREAKING CHANGES

* **release:** Bump version to 107.0.0 to facilitate potential fixes for 2.40.

## [106.7.8](https://github.com/dhis2/capture-app/compare/v106.7.7...v106.7.8) (2026-08-10)


### Bug Fixes

* **translations:** sync translations from transifex (master) ([#4697](https://github.com/dhis2/capture-app/issues/4697)) ([e8bdb2f](https://github.com/dhis2/capture-app/commit/e8bdb2f9486847e3fe90e1135bb468c15ebc687c))

## [106.7.7](https://github.com/dhis2/capture-app/compare/v106.7.6...v106.7.7) (2026-08-07)


Expand Down
5 changes: 0 additions & 5 deletions cypress/e2e/Changelog/Changelog.feature
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
Feature: The user interacts with the changelog widget

@v>=41
Scenario: The user can view an event changelog on the enrollment edit event
Given you land on the enrollment edit event page by having typed /#/enrollmentEventEdit?eventId=QsAhMiZtnl2&orgUnitId=DiszpKrYNg8
When you open the tracker program event changelog
Then the changelog modal should contain data
Then the number of changelog table rows should be 9

@v>=41
Scenario: The user can change the changelog page size
Given you land on the enrollment edit event page by having typed /#/enrollmentEventEdit?eventId=QsAhMiZtnl2&orgUnitId=DiszpKrYNg8
When you open the tracker program event changelog
Expand All @@ -18,7 +16,6 @@ Feature: The user interacts with the changelog widget
Then the number of changelog table rows should be 39
And the table footer should display page 1

@v>=41
Scenario: The user can navigate between pages in the changelog
Given you land on the enrollment edit event page by having typed /#/enrollmentEventEdit?eventId=QsAhMiZtnl2&orgUnitId=DiszpKrYNg8
When you open the tracker program event changelog
Expand Down Expand Up @@ -93,13 +90,11 @@ Feature: The user interacts with the changelog widget
When you click the sort Data item icon
Then the changelog data is sorted on Data item in ascending order

@v>=41
Scenario: The user can open tracked entity changelog from enrollment edit event page
Given you land on the enrollment edit event page by having typed /#/enrollmentEventEdit?eventId=Ni0yhZ7XhAP&orgUnitId=DiszpKrYNg8
When you open the tracked entity changelog
Then the changelog modal should contain data

@v>=41
Scenario: The user can open event program changelog from view event page
Given you land on the view event page by having typed /#/viewEvent?orgUnitId=DiszpKrYNg8&viewEventId=a5e67163090
When you open the event program changelog
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
import { Given, When, Then, defineStep as And } from '@badeball/cypress-cucumber-preprocessor';
import '../sharedSteps';
import { hasVersionSupport } from '../../../support/tagUtils';

Given('the tei created by this test is cleared from the database', () => {
const orgUnitModeParam = hasVersionSupport('@v>=41') ? 'orgUnitMode' : 'ouMode';
cy.buildApiUrl('tracker', `trackedEntities?filter=w75KJ2mc4zz:like:Breaking&filter=zDhUuAYrxNC:like:TheGlass&trackedEntityType=nEenWmSyUEp&page=1&pageSize=5&${orgUnitModeParam}=ACCESSIBLE`)
cy.buildApiUrl('tracker', 'trackedEntities?filter=w75KJ2mc4zz:like:Breaking&filter=zDhUuAYrxNC:like:TheGlass&trackedEntityType=nEenWmSyUEp&page=1&pageSize=5&orgUnitMode=ACCESSIBLE')
.then(url => cy.request(url))
.then(({ body }) => {
const apiTrackedEntities = body.trackedEntities || body.instances || [];
Expand Down
7 changes: 0 additions & 7 deletions cypress/e2e/MainPage/MainPage.feature
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,6 @@ Feature: User interacts with Main page
Then the current url is /#/?orgUnitId=DiszpKrYNg8&programId=uy2gU8kT1jF&selectedTemplateId=uy2gU8kT1jF-default
And the TEI working list is displayed

@v<41
Scenario: The icon is rendered as an svg
Given you are in the main page with no selections made
When you select Child Programme
Then the icon is rendered as an svg

@v>=41
Scenario: The icon is rendered as a custom icon
Given you are in the main page with no selections made
When you select Child Programme
Expand Down
6 changes: 0 additions & 6 deletions cypress/e2e/MainPage/MainPage.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,6 @@ Then('the icon is rendered as a custom icon', () => {
.should('match', /\/icons\/child_program_positive\/icon$/);
});

Then('the icon is rendered as an svg', () => {
cy.get('[title="child_program_positive"]')
.invoke('attr', 'src')
.should('match', /\/icons\/child_program_positive\/icon.svg$/);
});

Then('the TEI working list is displayed', () => {
cy.get('[data-test="tracker-working-lists"]').within(() => {
cy.contains('Rows per page').should('exist');
Expand Down
1 change: 0 additions & 1 deletion cypress/e2e/NewPage/NewPage.feature
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ Feature: User creates a new entries from the registration page
Given you are on the default registration page
Then there should be informative message explaining you need to select an organisation unit

@v>=41
Scenario: New person in Tracker Program > Filling the Allergies with multiple options
Given you are in the WHO RMNCH program registration page
When you fill in multiple Allergies options
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,10 @@ import { getCurrentYear } from '../../../support/date';
import { hasVersionSupport } from '../../../support/tagUtils';

After({ tags: '@with-transfer-ownership-data-cleanup' }, () => {
const teiQueryKey = hasVersionSupport('@v>=41') ? 'trackedEntity' : 'trackedEntityInstance';
const orgUnitKey = hasVersionSupport('@v>=42') ? 'orgUnit' : 'ou';
cy.buildApiUrl(
'tracker',
`ownership/transfer?program=IpHINAT79UW&${orgUnitKey}=DiszpKrYNg8&${teiQueryKey}=EaOyKGOIGRp`,
`ownership/transfer?program=IpHINAT79UW&${orgUnitKey}=DiszpKrYNg8&trackedEntity=EaOyKGOIGRp`,
).then(url => cy.request('PUT', url));
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,7 @@ Scenario: Show only teis with completed enrollments using the filter
And the list should display teis with a completed enrollment
And rows per page should be set to 15
And for a tracker program the page navigation should show that you are on the first page
# DHIS2-13960: /trackedEntities filter by assignee results are not consistent
@skip

Scenario: Show only teis with active enrollments and unassinged events using the filter
Given you open the main page with Ngelehun and Malaria focus investigation context
When you set the enrollment status filter to active
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { defineStep as And, Given, Then, When } from '@badeball/cypress-cucumber-preprocessor';
import { v4 as uuid } from 'uuid';
import '../sharedSteps';
import { hasVersionSupport } from '../../../../support/tagUtils';
import { truncateFilterLabelForTest } from '../../../../support/filterLabelTestUtils';

const cleanUpWorkingListIfApplicable = (resource, programId, displayName) => {
Expand Down Expand Up @@ -235,13 +234,14 @@ When('you set the WHOMCH Smoking filter to No', () => {

Then('the list should display teis with an active enrollment and unassinged events', () => {
const ids = [
'UGB082875',
'ZDA984904',
'FSL05494',
];

cy.get('[data-test="tracker-working-lists"]')
.find('tr')
.should('have.length', 3)
.should('have.length', 4)
.each(($teiRow, index) => {
if (index) {
cy.wrap($teiRow)
Expand Down Expand Up @@ -1127,10 +1127,7 @@ Then('the download dialog opens', () => {
});

Then('the CSV button exists', () => {
const pagingParam = hasVersionSupport('@v>=41') ? 'paging=false' : 'skipPaging=true';
const orgUnitModeParam = hasVersionSupport('@v>=41') ? 'orgUnitMode' : 'ouMode';
const orgUnitParam = hasVersionSupport('@v>=41') ? 'orgUnits' : 'orgUnit';
const params = `order=createdAt%3Adesc&${orgUnitParam}=DiszpKrYNg8&${orgUnitModeParam}=SELECTED&program=IpHINAT79UW&fields=%3Aall%2C%21relationships%2CprogramOwners%5BorgUnit%2Cprogram%5D&${pagingParam}`;
const params = 'order=createdAt%3Adesc&orgUnits=DiszpKrYNg8&orgUnitMode=SELECTED&program=IpHINAT79UW&fields=%3Aall%2C%21relationships%2CprogramOwners%5BorgUnit%2Cprogram%5D&paging=false';
cy.get('[data-test="working-lists-download-dialog"]')
.within(() => {
cy.contains('Download as CSV');
Expand All @@ -1142,10 +1139,7 @@ Then('the CSV button exists', () => {
});

Then('the JSON button exists', () => {
const pagingParam = hasVersionSupport('@v>=41') ? 'paging=false' : 'skipPaging=true';
const orgUnitModeParam = hasVersionSupport('@v>=41') ? 'orgUnitMode' : 'ouMode';
const orgUnitParam = hasVersionSupport('@v>=41') ? 'orgUnits' : 'orgUnit';
const params = `order=createdAt%3Adesc&${orgUnitParam}=DiszpKrYNg8&${orgUnitModeParam}=SELECTED&program=IpHINAT79UW&fields=%3Aall%2C%21relationships%2CprogramOwners%5BorgUnit%2Cprogram%5D&${pagingParam}`;
const params = 'order=createdAt%3Adesc&orgUnits=DiszpKrYNg8&orgUnitMode=SELECTED&program=IpHINAT79UW&fields=%3Aall%2C%21relationships%2CprogramOwners%5BorgUnit%2Cprogram%5D&paging=false';
cy.get('[data-test="working-lists-download-dialog"]')
.within(() => {
cy.contains('Download as JSON');
Expand Down
2 changes: 1 addition & 1 deletion d2.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ const config = {
type: 'app',
direction: 'auto',
id: '92b75fd0-34cc-451c-942f-3dd0f283bcbd',
minDHIS2Version: '2.40',
minDHIS2Version: '2.41',
coreApp: true,

entryPoints: {
Expand Down
4 changes: 2 additions & 2 deletions i18n/en.pot
Original file line number Diff line number Diff line change
Expand Up @@ -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: 2026-08-07T13:57:55.501Z\n"
"PO-Revision-Date: 2026-08-07T13:57:55.501Z\n"
"POT-Creation-Date: 2026-08-12T10:34:22.175Z\n"
"PO-Revision-Date: 2026-08-12T10:34:22.175Z\n"

msgid "The application could not be loaded."
msgstr "The application could not be loaded."
Expand Down
58 changes: 29 additions & 29 deletions i18n/zh.po
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
msgid ""
msgstr ""
"Project-Id-Version: i18next-conv\n"
"POT-Creation-Date: 2026-08-04T13:01:31.955Z\n"
"POT-Creation-Date: 2026-08-07T10:34:07.592Z\n"
"PO-Revision-Date: 2019-06-27 07:31+0000\n"
"Last-Translator: easylin <lin_xd@126.com>, 2026\n"
"Language-Team: Chinese (https://app.transifex.com/hisp-uio/teams/100509/zh/)\n"
Expand Down Expand Up @@ -614,7 +614,7 @@ msgid "No items to display"
msgstr "无条目可显示"

msgid "Tracked entity is deactivated"
msgstr ""
msgstr "跟踪实体 已停用"

msgid "Select columns"
msgstr "选择列"
Expand Down Expand Up @@ -802,7 +802,7 @@ msgid "Program stage is invalid"
msgstr "项目阶段无效"

msgid "Stage not found"
msgstr ""
msgstr "未找到该阶段"

msgid "Report"
msgstr "报表"
Expand Down Expand Up @@ -974,7 +974,7 @@ msgid "This event doesn't have any notes"
msgstr "该事件没有任何说明"

msgid "This event doesn't have any relationships"
msgstr ""
msgstr "该事件 没有关联关系"

msgid "Warnings"
msgstr "错误"
Expand Down Expand Up @@ -1059,37 +1059,37 @@ msgid "An error occurred loading possible duplicates"
msgstr "加载可能的重复项时发生错误"

msgid "You only have view access to this enrollment"
msgstr ""
msgstr "您对此仅具有查看权限注册"

msgid "You only have view access to this program"
msgstr ""
msgstr "您对该程序仅具有查看权限"

msgid "You only have view access to this {{trackedEntityName}}"
msgstr ""
msgstr "您对此仅具有查看权限{{trackedEntityName}}"

msgid "You only have view access to this tracked entity type"
msgstr ""
msgstr "您对该跟踪实体 类型仅具有查看权限"

msgid "You only have view access to these program stages"
msgstr ""
msgstr "您对这些程序阶段仅具有查看权限"

msgid "You only have view access to this program stage"
msgstr ""
msgstr "您对此仅具有查看权限项目阶段"

msgid "This event is outside the editing period"
msgstr ""
msgstr "该事件 已超出编辑期限"

msgid "This event has been completed"
msgstr ""
msgstr "该事件 项目已完工"

msgid "This {{trackedEntityName}} is deactivated"
msgstr ""
msgstr "该{{trackedEntityName}} 已停用"

msgid "This tracked entity is deactivated"
msgstr ""
msgstr "该跟踪实体 已停用"

msgid "View only - {{message}}"
msgstr ""
msgstr "仅限查看 -{{message}}"

msgid "View only"
msgstr "只读"
Expand Down Expand Up @@ -1601,32 +1601,32 @@ msgid "Fix errors in the form to continue."
msgstr "修正表单中的错误以继续。"

msgid "Activate {{trackedEntityTypeName}}"
msgstr ""
msgstr "激活{{trackedEntityTypeName}}"

msgid "Deactivate {{trackedEntityTypeName}}"
msgstr ""
msgstr "停用{{trackedEntityTypeName}}"

msgid ""
"Are you sure you want to activate this {{trackedEntityTypeName}}? This will "
"change its status to active and write operations will be allowed."
msgstr ""
msgstr "您确定要激活此{{trackedEntityTypeName}} 吗?此操作将使其状态变为“活动”,并允许写入操作。"

msgid ""
"Are you sure you want to deactivate this {{trackedEntityTypeName}}? This "
"will change its status to inactive and only read operations will be allowed."
msgstr ""
msgstr "您确定要停用此{{trackedEntityTypeName}} 吗?此操作将使其状态变为“停用”,且仅允许读取操作。"

msgid "Yes, activate {{trackedEntityTypeName}}"
msgstr ""
msgstr "是的,激活{{trackedEntityTypeName}}"

msgid "Yes, deactivate {{trackedEntityTypeName}}"
msgstr ""
msgstr "是的,停用{{trackedEntityTypeName}}"

msgid "There was a problem activating the {{trackedEntityTypeName}}"
msgstr ""
msgstr "激活时出现了一个问题,{{trackedEntityTypeName}}"

msgid "There was a problem deactivating the {{trackedEntityTypeName}}"
msgstr ""
msgstr "停用该功能时出现了一个问题,{{trackedEntityTypeName}}"

msgid "You do not have access to delete this {{trackedEntityTypeName}}"
msgstr "您无权删除此{{trackedEntityTypeName}}"
Expand Down Expand Up @@ -1721,7 +1721,7 @@ msgid "{{occurredAt}} belongs to an expired period. Event cannot be deleted"
msgstr "{{occurredAt}} 属于过期时段。事件无法删除"

msgid "This event is outside the edit period"
msgstr ""
msgstr "该事件 已超出编辑时段"

msgid "An error occurred while deleting the event"
msgstr "删除事件时发生错误"
Expand Down Expand Up @@ -1761,7 +1761,7 @@ msgid "{{ scheduledEvents }} scheduled"
msgstr "{{ scheduledEvents }} 已安排"

msgid "No stages found in this program"
msgstr ""
msgstr "未在此节目中找到任何环节"

msgid "Stages and Events"
msgstr "阶段与活动"
Expand Down Expand Up @@ -1901,7 +1901,7 @@ msgid "To open this relationship, please wait until saving is complete"
msgstr "要打开此关系,请等待保存完成"

msgid "This enrollment doesn't have any relationships"
msgstr ""
msgstr "该注册 没有关联关系"

msgid "Type"
msgstr "类型"
Expand Down Expand Up @@ -2232,10 +2232,10 @@ msgid "Error updating the Assignee"
msgstr "更新受托人时出错"

msgid "Could not save enrollment note"
msgstr ""
msgstr "无法保存注册 笔记"

msgid "Could not save event note"
msgstr ""
msgstr "无法保存事件 笔记"

msgid "There was an error fetching metadata"
msgstr "获取元数据时出现错误"
Expand Down Expand Up @@ -2328,4 +2328,4 @@ msgstr "采集"

msgctxt "Title for shortcut used by command palette"
msgid "__MANIFEST_SHORTCUT_Search TEI"
msgstr ""
msgstr "搜索 TEI"
6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "capture-app",
"homepage": ".",
"version": "106.7.7",
"version": "107.0.0",
"cacheVersion": "2",
"license": "BSD-3-Clause",
"private": true,
Expand All @@ -14,8 +14,8 @@
"@dhis2/d2-i18n": "^1.1.0",
"@dhis2/d2-ui-rich-text": "^7.4.0",
"@dhis2/data-engine": "^3.17.3",
"@dhis2/rule-engine": "3.8.1",
"@dhis2/rules-engine-javascript": "106.7.7",
"@dhis2/rule-engine": "^3.8.2",
"@dhis2/rules-engine-javascript": "107.0.0",
"@dhis2/ui": "^10.17.0",
"@emotion/css": "^11.13.5",
"@emotion/react": "^11.14.0",
Expand Down
2 changes: 1 addition & 1 deletion packages/rules-engine/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@dhis2/rules-engine-javascript",
"version": "106.7.7",
"version": "107.0.0",
"license": "BSD-3-Clause",
"main": "./build/cjs/index.js",
"scripts": {
Expand Down
Loading
Loading