diff --git a/.github/workflows/rebuild-docs.yml b/.github/workflows/rebuild-docs.yml new file mode 100644 index 0000000000..a5c86d59e0 --- /dev/null +++ b/.github/workflows/rebuild-docs.yml @@ -0,0 +1,19 @@ +name: 'dhis2: rebuild developer docs' + +on: + push: + branches: + - master + paths: + - 'docs/developer/**' + - 'CHANGELOG.md' + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + rebuild-docs: + runs-on: ubuntu-latest + steps: + - run: curl -X POST -d {} https://api.netlify.com/build_hooks/${{ secrets.NETLIFY_DEVELOPER_DOCS_TOKEN }} diff --git a/.github/workflows/verify-app.yml b/.github/workflows/verify-app.yml index c8a7d22379..c0623e4d64 100644 --- a/.github/workflows/verify-app.yml +++ b/.github/workflows/verify-app.yml @@ -193,7 +193,7 @@ jobs: - name: Build run: yarn build - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v4 with: name: app-build path: | @@ -214,7 +214,7 @@ jobs: with: node-version: 18.x - - uses: actions/download-artifact@v2 + - uses: actions/download-artifact@v4 with: name: app-build diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c354b0a76..65bc0a3ec3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,59 @@ +## [101.6.2](https://github.com/dhis2/capture-app/compare/v101.6.1...v101.6.2) (2024-10-01) + + +### Bug Fixes + +* [DHIS2-18004] sort events in rules engine by occurredAt and createdAt ([#3788](https://github.com/dhis2/capture-app/issues/3788)) ([2bb485e](https://github.com/dhis2/capture-app/commit/2bb485e0927e9137874131a982fe690b9f6c5361)) + +## [101.6.1](https://github.com/dhis2/capture-app/compare/v101.6.0...v101.6.1) (2024-09-29) + + +### Bug Fixes + +* **translations:** sync translations from transifex (master) ([cbeb102](https://github.com/dhis2/capture-app/commit/cbeb1022bf45b241a91dcfb8c3e49956b28b1c44)) + +# [101.6.0](https://github.com/dhis2/capture-app/compare/v101.5.0...v101.6.0) (2024-09-27) + + +### Features + +* support custom background color ([#3814](https://github.com/dhis2/capture-app/issues/3814)) ([22cfe58](https://github.com/dhis2/capture-app/commit/22cfe585b6b044c7d6b146c1449ccddb85d8abb4)) + +# [101.5.0](https://github.com/dhis2/capture-app/compare/v101.4.1...v101.5.0) (2024-09-24) + + +### Features + +* [DHIS2-17770] Org unit contextualization in self contained widgets ([#3720](https://github.com/dhis2/capture-app/issues/3720)) ([562b03a](https://github.com/dhis2/capture-app/commit/562b03a1cf2cb5cff5382bd433943f289c860095)) + +## [101.4.1](https://github.com/dhis2/capture-app/compare/v101.4.0...v101.4.1) (2024-09-19) + + +### Bug Fixes + +* **translations:** sync translations from transifex (master) ([#3805](https://github.com/dhis2/capture-app/issues/3805)) ([a4464f4](https://github.com/dhis2/capture-app/commit/a4464f431618200853772cc2546ea9adff515840)) + +# [101.4.0](https://github.com/dhis2/capture-app/compare/v101.3.3...v101.4.0) (2024-09-09) + + +### Features + +* [DHIS2-17878][DHIS2-17048] Add overflow menu with actions to stages&events ([#3756](https://github.com/dhis2/capture-app/issues/3756)) ([12af138](https://github.com/dhis2/capture-app/commit/12af1384f4ab4e9c6eeef2460bee7d53bfb6b8cc)) + +## [101.3.3](https://github.com/dhis2/capture-app/compare/v101.3.2...v101.3.3) (2024-09-02) + + +### Bug Fixes + +* [DHIS2-17971] trigger program stage specific rules on opening new event page ([#3776](https://github.com/dhis2/capture-app/issues/3776)) ([cd06e41](https://github.com/dhis2/capture-app/commit/cd06e414fc2162397f3844887e1b3f902d18a874)) + +## [101.3.2](https://github.com/dhis2/capture-app/compare/v101.3.1...v101.3.2) (2024-09-01) + + +### Bug Fixes + +* **translations:** sync translations from transifex (master) ([3dfd424](https://github.com/dhis2/capture-app/commit/3dfd4240ad9d5ef4512b283dc222eb54891aa896)) + ## [101.3.1](https://github.com/dhis2/capture-app/compare/v101.3.0...v101.3.1) (2024-08-29) diff --git a/cypress/e2e/EnrollmentPage/StagesAndEventsWidget/StagesAndEventsWidget.feature b/cypress/e2e/EnrollmentPage/StagesAndEventsWidget/StagesAndEventsWidget.feature index 07387fcde5..e944741b2f 100644 --- a/cypress/e2e/EnrollmentPage/StagesAndEventsWidget/StagesAndEventsWidget.feature +++ b/cypress/e2e/EnrollmentPage/StagesAndEventsWidget/StagesAndEventsWidget.feature @@ -1,9 +1,5 @@ Feature: User interacts with Stages and Events Widget - @user:trackerAutoTestRestricted - Scenario: Create new event button is disabled if no data write access - Given you open the enrollment page by typing #enrollment?enrollmentId=WKPoiZxZxNG&orgUnitId=DiszpKrYNg8&programId=WSGAb5XwJ3Y&teiId=PgmUFEQYZdt - Then you should see the disabled button New Previous deliveries event Scenario: User can view program stages Given you open the enrollment page @@ -57,13 +53,36 @@ Feature: User interacts with Stages and Events Widget When you click New First antenatal care visit event Then you should navigate to Add new page #/enrollmentEventNew?enrollmentId=ek4WWAgXX5i&orgUnitId=DwpbWkiqjMy&programId=WSGAb5XwJ3Y&stageId=WZbXY0S00lP&teiId=yFcOhsM1Yoa - Scenario: User can not go to Add new page if stage is not repeatable and there is event in the stage Given you open the enrollment page by typing #enrollment?programId=IpHINAT79UW&orgUnitId=UgYg0YW7ZIh&teiId=fhFQhO0xILJ&enrollmentId=gPDueU02tn8 Then you should see the disabled button New Birth event + Scenario: User can skip a scheduled event + Given you open the enrollment page by typing #/enrollment?enrollmentId=gL8BooqKhdX&orgUnitId=DiszpKrYNg8&programId=ur1Edk5Oe2n&teiId=RABlFsj5Omi + And there is an Overdue event in the TB visit stage + When you click the Skip event overflow button on the Overdue event + Then the event should be skipped + + Scenario: User can unskip a scheduled event + Given you open the enrollment page by typing #/enrollment?enrollmentId=gL8BooqKhdX&orgUnitId=DiszpKrYNg8&programId=ur1Edk5Oe2n&teiId=RABlFsj5Omi + And there is an Skipped event in the TB visit stage + When you click the Unskip event overflow button on the Skipped event + Then there is an Overdue event in the TB visit stage + + @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 + 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 + Then the TB visit stage should be empty + @user:trackerAutoTestRestricted Scenario: Program stage is hidden if no data read access And you open the enrollment page by typing #enrollment?enrollmentId=iNEq9d22Nyp&orgUnitId=DiszpKrYNg8&programId=WSGAb5XwJ3Y&teiId=k4ODejBytgv Then the Care at birth program stage should be hidden + @user:trackerAutoTestRestricted + Scenario: Create new event button is disabled if no data write access + Given you open the enrollment page by typing #enrollment?enrollmentId=WKPoiZxZxNG&orgUnitId=DiszpKrYNg8&programId=WSGAb5XwJ3Y&teiId=PgmUFEQYZdt + Then you should see the disabled button New Previous deliveries event diff --git a/cypress/e2e/EnrollmentPage/StagesAndEventsWidget/StagesAndEventsWidget.js b/cypress/e2e/EnrollmentPage/StagesAndEventsWidget/StagesAndEventsWidget.js index d772f41034..d4771a8876 100644 --- a/cypress/e2e/EnrollmentPage/StagesAndEventsWidget/StagesAndEventsWidget.js +++ b/cypress/e2e/EnrollmentPage/StagesAndEventsWidget/StagesAndEventsWidget.js @@ -1,7 +1,38 @@ -import { Given, When, Then, defineStep as And } from '@badeball/cypress-cucumber-preprocessor'; +import { Given, When, Then, defineStep as And, After } from '@badeball/cypress-cucumber-preprocessor'; 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.get('[data-test="stages-and-events-widget"]') + .find('[data-test="widget-contents"]') + .contains('[data-test="stage-content"]', 'TB visit') + .find('[data-test="create-new-button"]') + .click(); + + cy.get('[data-test="capture-ui-input"]') + .first() + .type('2023-01-26') + .blur(); + + cy.get('[data-test="virtualized-select"]') + .eq(0) + .click() + .contains('P+') + .click(); + + cy.get('[data-test="virtualized-select"]') + .eq(1) + .click() + .contains('New') + .click(); + + cy.get('[data-test="dhis2-uicore-button"]') + .contains('Save without completing') + .click(); +}); + Then('the program stages should be displayed', () => { cy.get('[data-test="stages-and-events-widget"]') .within(() => { @@ -162,3 +193,58 @@ Then('the Care at birth program stage should be hidden', () => { cy.contains('[data-test="stages-and-events-widget"]', 'Postpartum care visit').should('exist'); cy.contains('[data-test="stages-and-events-widget"]', 'Care at birth').should('not.exist'); }); + +Given(/there is an (.*) event in the TB visit stage$/, (eventStatus) => { + cy.get('[data-test="stages-and-events-widget"]') + .find('[data-test="widget-contents"]') + .contains('[data-test="stage-content"]', 'TB visit') + .within(() => { + cy.get('[data-test="dhis2-uicore-datatablerow"]') + .contains(eventStatus); + }); +}); + +When(/you click the (.*) event overflow button on the (.*) event$/, (buttonName, eventStatus) => { + cy.get('[data-test="stages-and-events-widget"]') + .find('[data-test="widget-contents"]') + .contains('[data-test="stage-content"]', 'TB visit') + .find('[data-test="dhis2-uicore-tablebody"]') + .contains('tr', eventStatus) + .find('[data-test="overflow-button"]') + .click({ force: true }); + + cy.get('[data-test="overflow-menu"]') + .contains(buttonName) + .click(); +}); + +Then('the event should be skipped', () => { + cy.get('[data-test="stages-and-events-widget"]') + .find('[data-test="widget-contents"]') + .contains('[data-test="stage-content"]', 'TB visit') + .find('[data-test="dhis2-uicore-datatablerow"]') + .contains('Skipped'); +}); + +Then('the TB visit stage should be empty', () => { + cy.get('[data-test="stages-and-events-widget"]') + .find('[data-test="widget-contents"]') + .contains('[data-test="stage-content"]', 'TB visit') + .find('[data-test="dhis2-uicore-datatablerow"]') + .should('not.exist'); +}); + +When('you confirm you want to delete the event', () => { + cy.intercept('POST', '**/tracker?async=false&importStrategy=DELETE') + .as('deleteEvent'); + + cy.get('[data-test="dhis2-uicore-modal"]').within(() => { + cy.contains('button', 'Yes, delete event') + .click(); + }); + + cy.wait('@deleteEvent') + .its('response.statusCode') + .should('eq', 200); +}); + diff --git a/cypress/e2e/WidgetsForEnrollmentPages/WidgetEnrollment/index.js b/cypress/e2e/WidgetsForEnrollmentPages/WidgetEnrollment/index.js index 7ad8539f77..ca5bef0b08 100644 --- a/cypress/e2e/WidgetsForEnrollmentPages/WidgetEnrollment/index.js +++ b/cypress/e2e/WidgetsForEnrollmentPages/WidgetEnrollment/index.js @@ -66,7 +66,7 @@ Then('the user sees the enrollment organisation unit', () => { cy.get('[data-test="widget-enrollment"]').within(() => { cy.get('[data-test="widget-enrollment-icon-orgunit"]').should('exist'); cy.get('[data-test="widget-enrollment-orgunit"]') - .contains('Started at Ngelehun CHC') + .contains('Started at: Ngelehun CHC') .should('exist'); }); }); @@ -77,7 +77,7 @@ Then('the user sees the owner organisation unit', () => { 'exist', ); cy.get('[data-test="widget-enrollment-owner-orgunit"]') - .contains('Owned by Ngelehun CHC') + .contains('Owned by: Ngelehun CHC') .should('exist'); }); }); @@ -232,7 +232,7 @@ Then(/^the user successfully transfers the enrollment/, () => { cy.get('[data-test="widget-enrollment"]').within(() => { cy.get('[data-test="widget-enrollment-owner-orgunit"]') - .contains('Owned by Njandama MCHP') + .contains('Owned by: Njandama MCHP') .should('exist'); }); }); @@ -246,7 +246,7 @@ Then(/^the user types in (.*)/, (orgunit) => { Given(/^the enrollment owner organisation unit is (.*)/, (orgunit) => { cy.get('[data-test="widget-enrollment"]').within(() => { cy.get('[data-test="widget-enrollment-owner-orgunit"]') - .contains(`Owned by ${orgunit}`) + .contains(`Owned by: ${orgunit}`) .should('exist'); }); }); diff --git a/docs/developer/enrollment-plugins/manual-setup.mdx b/docs/developer/enrollment-plugins/manual-setup.mdx index 895973f25b..bae6afbe0f 100644 --- a/docs/developer/enrollment-plugins/manual-setup.mdx +++ b/docs/developer/enrollment-plugins/manual-setup.mdx @@ -76,7 +76,7 @@ You can also have different layouts for the three different enrollment pages. }, { "type": "component", - "name": "EnrollmentComment" + "name": "EnrollmentNote" }, { "type": "component", @@ -188,7 +188,7 @@ You can also have different layouts for the three different enrollment pages. }, { "type": "component", - "name": "EventComment" + "name": "EventNote" }, { "type": "component", @@ -229,8 +229,8 @@ type DefaultComponents = 'QuickActions' | 'AssigneeWidget' | 'NewEventWorkspace' | 'EditEventWorkspace' - | 'EnrollmentComment' - | 'EventComment' + | 'EnrollmentNote' + | 'EventNote' | 'TrackedEntityRelationship' | 'ErrorWidget' | 'WarningWidget' diff --git a/i18n/ar.po b/i18n/ar.po index 4bb4146a90..b619c664e0 100644 --- a/i18n/ar.po +++ b/i18n/ar.po @@ -1316,6 +1316,9 @@ msgstr "" msgid "Event completed" msgstr "الحدث مكتمل" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1484,13 +1487,27 @@ msgstr "" msgid "New {{ eventName }} event" msgstr "" -msgid "To open this event, please wait until saving is complete" +msgid "An error occurred while deleting the event" msgstr "" -msgid "Show {{ rest }} more" +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" + +msgid "An error occurred when updating event status" msgstr "" -msgid "Reset list" +msgid "Unskip" +msgstr "" + +msgid "Skip" +msgstr "تخطى" + +msgid "To open this event, please wait until saving is complete" +msgstr "" + +msgid "Show {{ rest }} more" msgstr "" msgid "Go to full {{ eventName }}" diff --git a/i18n/ar_IQ.po b/i18n/ar_IQ.po index 01af8b5790..cbeeaaf0e3 100644 --- a/i18n/ar_IQ.po +++ b/i18n/ar_IQ.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-08T11:49:13.423Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: KRG HIS , 2024\n" "Language-Team: Arabic (Iraq) (https://app.transifex.com/hisp-uio/teams/100509/ar_IQ/)\n" @@ -491,18 +491,6 @@ msgstr "يحتوي على نص" msgid "Yes" msgstr "نعم" -msgid "mm/dd/yyyy" -msgstr "شهر / يوم / سنة" - -msgid "Years" -msgstr "السنوات" - -msgid "Months" -msgstr "الأشهر" - -msgid "Days" -msgstr "‏‏الأيام" - msgid "Uploading file" msgstr "تحميل ملف" @@ -1323,6 +1311,9 @@ msgstr "" msgid "Event completed" msgstr "" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1482,22 +1473,22 @@ msgstr "" msgid "Please select a valid event" msgstr "" -msgid "New {{ eventName }} event" +msgid "You do not have access to create events in this stage" msgstr "" -msgid "To open this event, please wait until saving is complete" +msgid "This stage can only have one event" msgstr "" -msgid "Show {{ rest }} more" +msgid "New {{ eventName }} event" msgstr "" -msgid "Reset list" +msgid "To open this event, please wait until saving is complete" msgstr "" -msgid "Go to full {{ eventName }}" +msgid "Show {{ rest }} more" msgstr "" -msgid "This stage can only have one event" +msgid "Go to full {{ eventName }}" msgstr "" msgid "Events could not be retrieved. Please try again later." diff --git a/i18n/ckb.po b/i18n/ckb.po index 9ca0dee15f..1a33d92772 100644 --- a/i18n/ckb.po +++ b/i18n/ckb.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-06-28T11:23:02.970Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Philip Larsen Donnelly, 2024\n" "Language-Team: Central Kurdish (https://app.transifex.com/hisp-uio/teams/100509/ckb/)\n" @@ -45,6 +45,9 @@ msgstr "" "تکایە پەیجەکەت ریفرێش بکەوە بۆ ئەوەی ئەم وەشانە بکەیتەوە بەڵام ئاگاداربکە " "ئەم کردارە وەشانەکانیتر دادەخات" +msgid "More" +msgstr "" + msgid "View {{programName}} dashboard" msgstr "" @@ -375,17 +378,11 @@ msgstr "کەسی تۆمارکراو" msgid "validation failed" msgstr "سەلماندنەکە سەرکەوتوونەبوو" -msgid "Errors" -msgstr "هەڵەکان" - -msgid "Feedback" -msgstr "ڕاووبۆچون" - -msgid "Indicators" -msgstr "نیشاندەر" +msgid "No feedback for this event yet" +msgstr "" -msgid "Warnings" -msgstr "ئاگادارکردنەوەکان" +msgid "No indicator output for this event yet" +msgstr "" msgid "Generate new event" msgstr "" @@ -499,18 +496,6 @@ msgstr "نووسینی تێدایە" msgid "Yes" msgstr "بەڵێ" -msgid "mm/dd/yyyy" -msgstr "مانگ/رۆژ/ساڵ" - -msgid "Years" -msgstr "ساڵەکان" - -msgid "Months" -msgstr "مانگەکان" - -msgid "Days" -msgstr "رۆژەکان" - msgid "Uploading file" msgstr "سەرخستنی فایل" @@ -577,6 +562,9 @@ msgstr "ستونەکانی دەتەوێ دەربکەوێ لە خشتەکە" msgid "Column" msgstr "ستوون" +msgid "Visible" +msgstr "" + msgid "Update" msgstr "نوێ کردنەوە" @@ -784,12 +772,6 @@ msgstr "" msgid "Choose an organisation unit to start reporting" msgstr "" -msgid "No feedback for this event yet" -msgstr "" - -msgid "No indicator output for this event yet" -msgstr "" - msgid "Program stage is invalid" msgstr "" @@ -820,6 +802,11 @@ msgstr "" msgid "Registered events" msgstr "حالەتە تۆمارکراوەکان" +msgid "" +"The category option is not valid for the selected organisation unit. Please " +"select a valid combination." +msgstr "" + msgid "Please select {{category}}." msgstr "" @@ -935,6 +922,18 @@ msgstr "" "بەجێهێشتنی ئەم پەڕەیە هەڵبژاردنەکانت هەڵدەسپێری کە بۆ پەیوەندیە نوێیەکان " "کردووتە" +msgid "Errors" +msgstr "هەڵەکان" + +msgid "Feedback" +msgstr "ڕاووبۆچون" + +msgid "Indicators" +msgstr "نیشاندەر" + +msgid "Warnings" +msgstr "ئاگادارکردنەوەکان" + msgid "Show all events" msgstr "هەموو حاڵەتەکان پیشان بدە" @@ -976,6 +975,12 @@ msgstr "" msgid "The enrollment event data could not be found" msgstr "" +msgid "Loading" +msgstr "" + +msgid "An error occurred while loading the form" +msgstr "" + msgid "Possible duplicates found" msgstr "ڕەنگە دووبارەبوونەوە دۆزرابێتەوە" @@ -1255,9 +1260,6 @@ msgstr "" msgid "Owned by {{ownerOrgUnit}}" msgstr "" -msgid "Last updated {{date}}" -msgstr "" - msgid "Cancelled" msgstr "" @@ -1312,6 +1314,9 @@ msgstr "" msgid "Event completed" msgstr "" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1463,22 +1468,22 @@ msgstr "" msgid "Please select a valid event" msgstr "" -msgid "New {{ eventName }} event" +msgid "You do not have access to create events in this stage" msgstr "" -msgid "To open this event, please wait until saving is complete" +msgid "This stage can only have one event" msgstr "" -msgid "Show {{ rest }} more" +msgid "New {{ eventName }} event" msgstr "" -msgid "Reset list" +msgid "To open this event, please wait until saving is complete" msgstr "" -msgid "Go to full {{ eventName }}" +msgid "Show {{ rest }} more" msgstr "" -msgid "This stage can only have one event" +msgid "Go to full {{ eventName }}" msgstr "" msgid "Events could not be retrieved. Please try again later." @@ -1498,6 +1503,15 @@ msgstr "" msgid "Stages and Events" msgstr "" +msgid "An error occurred while loading the widget." +msgstr "" + +msgid "View linked event" +msgstr "" + +msgid "Scheduled" +msgstr "" + msgid "Changelog" msgstr "" @@ -1663,9 +1677,6 @@ msgstr "هەڵەیک ڕوویدا، تکایە سەیری لۆگ فایل بکە msgid "Scheduled{{ escape }} due {{ time }}" msgstr "" -msgid "Scheduled" -msgstr "" - msgid "Overdue{{ escape }} due {{ time }}" msgstr "" diff --git a/i18n/cs.po b/i18n/cs.po index 9248d56299..61c3bef8ce 100644 --- a/i18n/cs.po +++ b/i18n/cs.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" +"POT-Creation-Date: 2024-09-02T11:08:16.281Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Jiří Podhorecký , 2024\n" "Language-Team: Czech (https://app.transifex.com/hisp-uio/teams/100509/cs/)\n" @@ -1294,12 +1294,6 @@ msgstr "Widget pro zápis nelze načíst. Prosím zkuste to znovu později" msgid "Follow-up" msgstr "Následovat" -msgid "Started at {{orgUnitName}}" -msgstr "Zahájeno v {{orgUnitName}}" - -msgid "Owned by {{ownerOrgUnit}}" -msgstr "Vlastník: {{ownerOrgUnit}}" - msgid "Cancelled" msgstr "Zrušeno" @@ -1354,6 +1348,9 @@ msgstr "Naplánované datum nelze změnit pro události {{ eventStatus }}" msgid "Event completed" msgstr "Událost dokončena" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "Zpět ke všem fázím a událostem" @@ -1532,15 +1529,29 @@ msgstr "Tato fáze může mít pouze jednu událost" msgid "New {{ eventName }} event" msgstr "Nová událost {{ eventName }}" +msgid "An error occurred while deleting the event" +msgstr "" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" + +msgid "An error occurred when updating event status" +msgstr "" + +msgid "Unskip" +msgstr "" + +msgid "Skip" +msgstr "Přeskočit" + msgid "To open this event, please wait until saving is complete" msgstr "Chcete-li otevřít tuto událost, počkejte na dokončení ukládání" msgid "Show {{ rest }} more" msgstr "Zobrazit {{ rest }} více" -msgid "Reset list" -msgstr "Resetovat seznam" - msgid "Go to full {{ eventName }}" msgstr "Přejít na celou {{ eventName }}" diff --git a/i18n/en.pot b/i18n/en.pot index 25f3a5987a..5d63ac1048 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-08-10T10:42:21.141Z\n" -"PO-Revision-Date: 2024-08-10T10:42:21.141Z\n" +"POT-Creation-Date: 2024-09-02T11:08:16.281Z\n" +"PO-Revision-Date: 2024-09-02T11:08:16.281Z\n" msgid "Choose one or more dates..." msgstr "Choose one or more dates..." @@ -1281,12 +1281,6 @@ msgstr "Enrollment widget could not be loaded. Please try again later" msgid "Follow-up" msgstr "Follow-up" -msgid "Started at {{orgUnitName}}" -msgstr "Started at {{orgUnitName}}" - -msgid "Owned by {{ownerOrgUnit}}" -msgstr "Owned by {{ownerOrgUnit}}" - msgid "Cancelled" msgstr "Cancelled" @@ -1508,6 +1502,25 @@ msgstr "This stage can only have one event" msgid "New {{ eventName }} event" msgstr "New {{ eventName }} event" +msgid "An error occurred while deleting the event" +msgstr "An error occurred while deleting the event" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" + +msgid "An error occurred when updating event status" +msgstr "An error occurred when updating event status" + +msgid "Unskip" +msgstr "Unskip" + +msgid "Skip" +msgstr "Skip" + msgid "To open this event, please wait until saving is complete" msgstr "To open this event, please wait until saving is complete" diff --git a/i18n/es.po b/i18n/es.po index c876e8fa4f..534e4de691 100644 --- a/i18n/es.po +++ b/i18n/es.po @@ -3,7 +3,6 @@ # Sergio Valenzuela , 2020 # ericbp , 2021 # Jaime Bosque , 2021 -# Marta Vila , 2022 # Pablo Pajuelo Cabezas , 2022 # Prabhjot Singh, 2023 # Christian Atavillos, 2023 @@ -13,13 +12,15 @@ # Janeth Cruz, 2024 # Enzo Nicolas Rossi , 2024 # Viktor Varland , 2024 +# Marta Vila , 2024 +# Juan M Alcantara Acosta , 2024 # msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" +"POT-Creation-Date: 2024-09-02T11:08:16.281Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" -"Last-Translator: Viktor Varland , 2024\n" +"Last-Translator: Juan M Alcantara Acosta , 2024\n" "Language-Team: Spanish (https://app.transifex.com/hisp-uio/teams/100509/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -848,6 +849,8 @@ msgid "" "The category option is not valid for the selected organisation unit. Please " "select a valid combination." msgstr "" +"La opción de categoría no es válida para la unidad organizativa " +"seleccionada. Seleccione una combinación válida." msgid "Please select {{category}}." msgstr "Seleccione {{category}}." @@ -1027,7 +1030,7 @@ msgid "Loading" msgstr "Cargando" msgid "An error occurred while loading the form" -msgstr "" +msgstr "Ocurrió un error al cargar el formulario" msgid "Possible duplicates found" msgstr "Posibles duplicados encontrados" @@ -1330,12 +1333,6 @@ msgstr "" msgid "Follow-up" msgstr "Seguimiento" -msgid "Started at {{orgUnitName}}" -msgstr "Comenzó en {{orgUnitName}}" - -msgid "Owned by {{ownerOrgUnit}}" -msgstr "Propiedad de {{ownerOrgUnit}}" - msgid "Cancelled" msgstr "Cancelar" @@ -1393,6 +1390,9 @@ msgstr "" msgid "Event completed" msgstr "Evento completado" +msgid "The event cannot be edited after it has been completed" +msgstr "El evento no admite cambios después de haber sido completado" + msgid "Back to all stages and events" msgstr "Volver a todas las etapas y eventos" @@ -1557,7 +1557,7 @@ msgid "Enter details now" msgstr "Introducir datos ahora" msgid "Link to an existing" -msgstr "" +msgstr "Relacionar con ..." msgid "Scheduled date" msgstr "Fecha planificada" @@ -1569,7 +1569,7 @@ msgid "Please select a valid event" msgstr "Seleccione un evento válido" msgid "You do not have access to create events in this stage" -msgstr "" +msgstr "No cuenta con acceso para crear eventos en esta etapa" msgid "This stage can only have one event" msgstr "Esta etapa solo puede tener un evento" @@ -1577,15 +1577,31 @@ msgstr "Esta etapa solo puede tener un evento" msgid "New {{ eventName }} event" msgstr "Nuevo evento {{ eventName }}" +msgid "An error occurred while deleting the event" +msgstr "Se produjo un error eliminando el evento" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" +"La eliminación de un evento es permanente y no se puede deshacer. ¿Está " +"seguro de que desea eliminar este evento?" + +msgid "An error occurred when updating event status" +msgstr "Ocurrió un error al actualizar el estado del evento" + +msgid "Unskip" +msgstr "des omitir" + +msgid "Skip" +msgstr "Omitir" + msgid "To open this event, please wait until saving is complete" msgstr "Para abrir este evento, espere hasta que se complete el guardado." msgid "Show {{ rest }} more" msgstr "Mostrar más {{ rest }} " -msgid "Reset list" -msgstr "Resetear lista" - msgid "Go to full {{ eventName }}" msgstr "Ir a {{ eventName }} completado" @@ -1610,10 +1626,10 @@ msgid "Stages and Events" msgstr "Etapas y eventos" msgid "An error occurred while loading the widget." -msgstr "" +msgstr "Ha ocurrido un error al cargar el componente" msgid "View linked event" -msgstr "" +msgstr "Ver eventos relacionados" msgid "Scheduled" msgstr "Planificado" diff --git a/i18n/es_419.po b/i18n/es_419.po index c4288e743b..1007032b9c 100644 --- a/i18n/es_419.po +++ b/i18n/es_419.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-06-28T11:23:02.970Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Jaime Bosque , 2024\n" "Language-Team: Spanish (Latin America) (https://app.transifex.com/hisp-uio/teams/100509/es_419/)\n" @@ -46,6 +46,9 @@ msgstr "" " a utilizar esta versión, pero tenga en cuenta que esto cerrará otras " "versiones." +msgid "More" +msgstr "" + msgid "View {{programName}} dashboard" msgstr "Ver panel de {{programName}}" @@ -384,17 +387,11 @@ msgstr "persona registrada" msgid "validation failed" msgstr "La validación ha fallado" -msgid "Errors" -msgstr "Errores" - -msgid "Feedback" -msgstr "Retroalimentación" - -msgid "Indicators" -msgstr "Indicadores" +msgid "No feedback for this event yet" +msgstr "" -msgid "Warnings" -msgstr "Advertencias" +msgid "No indicator output for this event yet" +msgstr "" msgid "Generate new event" msgstr "Generar nuevo evento" @@ -509,18 +506,6 @@ msgstr "Contiene texto" msgid "Yes" msgstr "Sí" -msgid "mm/dd/yyyy" -msgstr "mm/dd/aaaa" - -msgid "Years" -msgstr "Años" - -msgid "Months" -msgstr "Meses" - -msgid "Days" -msgstr "Días" - msgid "Uploading file" msgstr "Subiendo archivo" @@ -587,6 +572,9 @@ msgstr "Columns to show in table" msgid "Column" msgstr "Columna" +msgid "Visible" +msgstr "" + msgid "Update" msgstr "Actualizar" @@ -816,12 +804,6 @@ msgstr "Hubo un error al cargar la página" msgid "Choose an organisation unit to start reporting" msgstr "" -msgid "No feedback for this event yet" -msgstr "" - -msgid "No indicator output for this event yet" -msgstr "" - msgid "Program stage is invalid" msgstr "La etapa del programa no es válida" @@ -852,6 +834,11 @@ msgstr "Etapa" msgid "Registered events" msgstr "Eventos registrados" +msgid "" +"The category option is not valid for the selected organisation unit. Please " +"select a valid combination." +msgstr "" + msgid "Please select {{category}}." msgstr "Seleccione {{category}}." @@ -969,6 +956,18 @@ msgstr "" "Al salir de esta página, se descartarán las selecciones que haya realizado " "para una nueva relación." +msgid "Errors" +msgstr "Errores" + +msgid "Feedback" +msgstr "Retroalimentación" + +msgid "Indicators" +msgstr "Indicadores" + +msgid "Warnings" +msgstr "Advertencias" + msgid "Show all events" msgstr "Mostrar todos los eventos" @@ -1012,6 +1011,12 @@ msgstr "" msgid "The enrollment event data could not be found" msgstr "No se pudieron encontrar los datos del evento de inscripción" +msgid "Loading" +msgstr "" + +msgid "An error occurred while loading the form" +msgstr "" + msgid "Possible duplicates found" msgstr "Posibles duplicados encontrados." @@ -1294,9 +1299,6 @@ msgstr "" msgid "Owned by {{ownerOrgUnit}}" msgstr "" -msgid "Last updated {{date}}" -msgstr "" - msgid "Cancelled" msgstr "Cancelar" @@ -1351,6 +1353,9 @@ msgstr "" msgid "Event completed" msgstr "Evento completado" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "Volver a todas las etapas y eventos" @@ -1504,22 +1509,39 @@ msgstr "Fecha de reporte" msgid "Please select a valid event" msgstr "" +msgid "You do not have access to create events in this stage" +msgstr "" + +msgid "This stage can only have one event" +msgstr "" + msgid "New {{ eventName }} event" msgstr "Nuevo evento {{ eventName }}" -msgid "To open this event, please wait until saving is complete" +msgid "An error occurred while deleting the event" msgstr "" -msgid "Show {{ rest }} more" +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" msgstr "" -msgid "Reset list" +msgid "An error occurred when updating event status" msgstr "" -msgid "Go to full {{ eventName }}" +msgid "Unskip" msgstr "" -msgid "This stage can only have one event" +msgid "Skip" +msgstr "Omitir" + +msgid "To open this event, please wait until saving is complete" +msgstr "" + +msgid "Show {{ rest }} more" +msgstr "" + +msgid "Go to full {{ eventName }}" msgstr "" msgid "Events could not be retrieved. Please try again later." @@ -1540,6 +1562,15 @@ msgstr "" msgid "Stages and Events" msgstr "" +msgid "An error occurred while loading the widget." +msgstr "" + +msgid "View linked event" +msgstr "" + +msgid "Scheduled" +msgstr "" + msgid "Changelog" msgstr "" @@ -1705,9 +1736,6 @@ msgstr " Ha ocurrido un error. Ver el registro para más detalles." msgid "Scheduled{{ escape }} due {{ time }}" msgstr "" -msgid "Scheduled" -msgstr "" - msgid "Overdue{{ escape }} due {{ time }}" msgstr "" diff --git a/i18n/fr.po b/i18n/fr.po index cb371ad974..c9418fa104 100644 --- a/i18n/fr.po +++ b/i18n/fr.po @@ -7,16 +7,16 @@ # Gabriela Rodriguez , 2024 # Yao Selom SAKA (HISP WCA) , 2024 # Elise Desailly, 2024 -# Bram Piot , 2024 # Viktor Varland , 2024 # Yayra Gomado , 2024 +# Bram Piot , 2024 # msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" +"POT-Creation-Date: 2024-09-02T11:08:16.281Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" -"Last-Translator: Yayra Gomado , 2024\n" +"Last-Translator: Bram Piot , 2024\n" "Language-Team: French (https://app.transifex.com/hisp-uio/teams/100509/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1304,12 +1304,6 @@ msgstr "" msgid "Follow-up" msgstr "Suivi" -msgid "Started at {{orgUnitName}}" -msgstr "Commencé à {{orgUnitName}}" - -msgid "Owned by {{ownerOrgUnit}}" -msgstr "Propriété de {{ownerOrgUnit}}" - msgid "Cancelled" msgstr "Annulé" @@ -1368,6 +1362,9 @@ msgstr "" msgid "Event completed" msgstr "Événement terminé" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "Retour à tous les stades et événements" @@ -1545,15 +1542,29 @@ msgstr "Ce stade ne peut avoir qu'un seul événement" msgid "New {{ eventName }} event" msgstr "Nouvel événement {{ eventName }}" +msgid "An error occurred while deleting the event" +msgstr "" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" + +msgid "An error occurred when updating event status" +msgstr "" + +msgid "Unskip" +msgstr "" + +msgid "Skip" +msgstr "Ignorer" + msgid "To open this event, please wait until saving is complete" msgstr "" msgid "Show {{ rest }} more" msgstr "Afficher {{ rest }} plus" -msgid "Reset list" -msgstr "Réinitialiser la liste" - msgid "Go to full {{ eventName }}" msgstr "Aller à l'intégralité de {{ eventName }}" diff --git a/i18n/id.po b/i18n/id.po index 85a7841d2d..a4124e8e01 100644 --- a/i18n/id.po +++ b/i18n/id.po @@ -8,15 +8,15 @@ # ratih syabrina, 2024 # Yusuf Setiawan , 2024 # Guardian Sanjaya , 2024 -# Aprisa Chrysantina , 2024 # Viktor Varland , 2024 +# Aprisa Chrysantina , 2024 # msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" +"POT-Creation-Date: 2024-09-02T11:08:16.281Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" -"Last-Translator: Viktor Varland , 2024\n" +"Last-Translator: Aprisa Chrysantina , 2024\n" "Language-Team: Indonesian (https://app.transifex.com/hisp-uio/teams/100509/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1272,12 +1272,6 @@ msgstr "Widget pendaftaran tidak dapat dimuat. Silakan coba lagi nanti" msgid "Follow-up" msgstr "Mengikuti" -msgid "Started at {{orgUnitName}}" -msgstr "Dimulai di {{orgUnitName}}" - -msgid "Owned by {{ownerOrgUnit}}" -msgstr "Dimiliki oleh {{ownerOrgUnit}}" - msgid "Cancelled" msgstr "Dibatalkan" @@ -1332,6 +1326,9 @@ msgstr "" msgid "Event completed" msgstr "Even selesai" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1490,15 +1487,29 @@ msgstr "" msgid "New {{ eventName }} event" msgstr "" +msgid "An error occurred while deleting the event" +msgstr "" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" + +msgid "An error occurred when updating event status" +msgstr "" + +msgid "Unskip" +msgstr "" + +msgid "Skip" +msgstr "Lewati" + msgid "To open this event, please wait until saving is complete" msgstr "" msgid "Show {{ rest }} more" msgstr "" -msgid "Reset list" -msgstr "Mengatur ulang daftar" - msgid "Go to full {{ eventName }}" msgstr "" diff --git a/i18n/km.po b/i18n/km.po index 488cdcbe42..04fa91cdc5 100644 --- a/i18n/km.po +++ b/i18n/km.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-08T11:49:13.423Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Viktor Varland , 2024\n" "Language-Team: Khmer (https://app.transifex.com/hisp-uio/teams/100509/km/)\n" @@ -478,18 +478,6 @@ msgstr "" msgid "Yes" msgstr "បាទ/ចាស" -msgid "mm/dd/yyyy" -msgstr "" - -msgid "Years" -msgstr "ឆ្នាំ" - -msgid "Months" -msgstr "ខែ" - -msgid "Days" -msgstr "ថ្ងៃ" - msgid "Uploading file" msgstr "" @@ -1305,6 +1293,9 @@ msgstr "" msgid "Event completed" msgstr "" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1454,22 +1445,22 @@ msgstr "ថ្ងៃខែឆ្នាំរាយការណ៏" msgid "Please select a valid event" msgstr "" -msgid "New {{ eventName }} event" +msgid "You do not have access to create events in this stage" msgstr "" -msgid "To open this event, please wait until saving is complete" +msgid "This stage can only have one event" msgstr "" -msgid "Show {{ rest }} more" +msgid "New {{ eventName }} event" msgstr "" -msgid "Reset list" +msgid "To open this event, please wait until saving is complete" msgstr "" -msgid "Go to full {{ eventName }}" +msgid "Show {{ rest }} more" msgstr "" -msgid "This stage can only have one event" +msgid "Go to full {{ eventName }}" msgstr "" msgid "Events could not be retrieved. Please try again later." diff --git a/i18n/lo.po b/i18n/lo.po index da0a57c457..b12cc74fe7 100644 --- a/i18n/lo.po +++ b/i18n/lo.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" +"POT-Creation-Date: 2024-09-02T11:08:16.281Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Namwan Chanthavisouk, 2024\n" "Language-Team: Lao (https://app.transifex.com/hisp-uio/teams/100509/lo/)\n" @@ -1275,12 +1275,6 @@ msgstr "ບໍ່ສາມາດໂຫຼດລາຍການການລົງ msgid "Follow-up" msgstr "ຕິດຕາມ" -msgid "Started at {{orgUnitName}}" -msgstr "ເລີ່ມຈາກ {{orgUnitName}}" - -msgid "Owned by {{ownerOrgUnit}}" -msgstr "ເປັນເຈົ້າຂອງໂດຍ {{ownerOrgUnit}}" - msgid "Cancelled" msgstr "ຍົກເລີກແລ້ວ" @@ -1335,6 +1329,9 @@ msgstr "ວັນທີທີ່ກຳນົດໄວ້ບໍ່ສາມາດ msgid "Event completed" msgstr "ກິດຈະກຳສຳເລັດແລ້ວ" +msgid "The event cannot be edited after it has been completed" +msgstr "ເຫດການດັ່ງກ່າວບໍ່ສາມາດແກ້ໄຂໄດ້ຫຼັງຈາກສໍາເລັດແລ້ວ" + msgid "Back to all stages and events" msgstr "ກັບໄປທຸກຂັ້ນຕອນ ແລະ ເຫດການ" @@ -1494,7 +1491,7 @@ msgid "Please select a valid event" msgstr "ກະລຸນາເລືອກເຫດການທີ່ຖືກຕ້ອງ" msgid "You do not have access to create events in this stage" -msgstr "" +msgstr "ທ່ານບໍ່ມີສິດເຂົ້າເຖິງເພື່ອສ້າງເຫດການໃນຂັ້ນຕອນນີ້" msgid "This stage can only have one event" msgstr "ຂັ້ນຕອນນີ້ສາມາດມີເຫດການດຽວເທົ່ານັ້ນ" @@ -1502,15 +1499,31 @@ msgstr "ຂັ້ນຕອນນີ້ສາມາດມີເຫດການດ msgid "New {{ eventName }} event" msgstr "ເຫດການໃໝ່ {{ eventName }}" +msgid "An error occurred while deleting the event" +msgstr "ພົບຂໍ້ຜິດພາດໃນລະຫວ່າງລົບເຫດການ" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" +"ການລົບເຫດການແມ່ນຖາວອນ ແລະ ບໍ່ສາມາດຍົກເລີກໄດ້. " +"ທ່ານແນ່ໃຈບໍ່ວ່າຕ້ອງການລົບເຫດການນີ້?" + +msgid "An error occurred when updating event status" +msgstr "ພົບຂໍ້ຜິດພາດໃນລະຫວ່າງອັບເດດສະຖານະເຫດການ" + +msgid "Unskip" +msgstr "ຍົກເລີກ" + +msgid "Skip" +msgstr "ຂ້າມ" + msgid "To open this event, please wait until saving is complete" msgstr "ເພື່ອເປີດເຫດການນີ້, ກະລຸນາລໍຖ້າຈົນກວ່າການບັນທຶກຈະສຳເລັດ" msgid "Show {{ rest }} more" msgstr "ສະແດງ {{ rest }} ເພີ່ມເຕີມ" -msgid "Reset list" -msgstr "ເຮັດລາຍຊື່ຄືນໃໝ່" - msgid "Go to full {{ eventName }}" msgstr "ໄປທີ່ {{ eventName }} ແບບເຕັມ" @@ -1701,13 +1714,13 @@ msgid "Download with current filters" msgstr "ດາວໂຫຼດດ້ວຍຕົວກອງປັດຈຸບັນ" msgid "An error has occured. See log for details" -msgstr "" +msgstr "ເກີດຄວາມຜິດພາດຂຶ້ນ. ເບິ່ງລາຍລະອຽດ" msgid "Scheduled{{ escape }} due {{ time }}" -msgstr "" +msgstr "ກຳນົດເວລາ {{ escape }} ຈົນເຖິງ {{ time }}" msgid "Overdue{{ escape }} due {{ time }}" -msgstr "" +msgstr "ເກີນກຳນົດ {{ escape }} ຈົນເຖິງ {{ time }}" msgid "Overdue" msgstr "ກາຍເວລາທີ່ກໍານົດ" @@ -1719,76 +1732,76 @@ msgid "Visited" msgstr "ເຂົ້າຊົມ" msgid "{{trackedEntityName}} in program{{escape}} {{programName}}" -msgstr "" +msgstr "{{trackedEntityName}} ໃນໂປຣແກຣມ {{escape}} {{programName}}" msgid "Program not found" -msgstr "" +msgstr "ບໍ່ພົບໂປຣແກຣມ" msgid "Program is not a tracker program" -msgstr "" +msgstr "ໂປແກຣມນີ້ບໍ່ແມ່ນໂປແກຣມຕິດຕາມ" msgid "Error saving event" -msgstr "" +msgstr "ເກີດຄວາມຜິດພາດໃນການບັນທຶກເຫດການ" msgid "Could not save event" -msgstr "" +msgstr "ບໍ່ສາມາດບັນທຶກເຫດການໄດ້" msgid "Could not delete event" -msgstr "" +msgstr "ບໍ່ສາມາດລົບເຫດການໄດ້" msgid "Could not save working list" -msgstr "" +msgstr "ບໍ່ສາມາດບັນທຶກລາຍຊື່ການເຮັດວຽກໄດ້" msgid "Could not add working list" -msgstr "" +msgstr "ບໍ່ສາມາດເພີ່ມລາຍຊື່ການເຮັດວຽກໄດ້" msgid "Could not delete working list" -msgstr "" +msgstr "ບໍ່ສາມາດລົບລາຍຊື່ການເຮັດວຽກໄດ້" msgid "Organisation unit search failed." -msgstr "" +msgstr "ເກີດຄວາມຜິດພາດໃນການຄົ້ນຫາຫົວໜ່ວຍການຈັດຕັ້ງ" msgid "Error saving tracked entity instance" -msgstr "" +msgstr "ເກີດຄວາມຜິດພາດໃນການບັນທຶກການຕິດຕາມລາຍບຸກຄົນ" msgid "Error saving enrollment" -msgstr "" +msgstr "ເກີດຄວາມຜິດພາດໃນການບັນທຶກການລົງທະບຽນ" msgid "Error saving the enrollment event" -msgstr "" +msgstr "ເກີດຄວາມຜິດພາດໃນການບັນທຶກການລົງທະບຽນເຫດການ" msgid "Error deleting the enrollment event" -msgstr "" +msgstr "ເກີດຄວາມຜິດພາດໃນການລົບການລົງທະບຽນເຫດການ" msgid "Error editing the event, the changes made were not saved" -msgstr "" +msgstr "ເກີດຄວາມຜິດພາດໃນການແກ້ໄຂເຫດການ, ການປ່ຽນແປງທີ່ເຮັດບໍ່ໄດ້ມີການບັນທຶກ" msgid "Error updating the Assignee" -msgstr "" +msgstr "ເກີດຄວາມຜິດພາດໃນການອັບເດດຜູ້ຮັບຜິດຊອບ" msgid "Set coordinate" msgstr "ຕັ້ງຄ່າເສັ້ນສະແດງ" msgid "Time" -msgstr "" +msgstr "ເວລາ" msgid "From date" msgstr "From date" msgid "From time" -msgstr "" +msgstr "ຈາກເວລາ" msgid "To date" msgstr "ເຖີງວັນທີ່" msgid "To time" -msgstr "" +msgstr "ເຖິງເວລາ" msgid "Page {{currentPage}}" -msgstr "" +msgstr "ໜ້າ {{currentPage}}" msgid "Area on map saved" -msgstr "" +msgstr "ບັນທຶກພື້ນທີ່ໃນແຜນທີ່ແລ້ວ" msgid "Compatibility mode" -msgstr "" +msgstr "ຮູບແບບຄວາມເຂົ້າກັນໄດ້" diff --git a/i18n/my.po b/i18n/my.po index c244ccbdf3..5bc6407800 100644 --- a/i18n/my.po +++ b/i18n/my.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-08T11:49:13.423Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Viktor Varland , 2024\n" "Language-Team: Burmese (https://app.transifex.com/hisp-uio/teams/100509/my/)\n" @@ -479,18 +479,6 @@ msgstr "" msgid "Yes" msgstr "Yes" -msgid "mm/dd/yyyy" -msgstr "" - -msgid "Years" -msgstr "နှစ်များ" - -msgid "Months" -msgstr "လများ" - -msgid "Days" -msgstr "" - msgid "Uploading file" msgstr "" @@ -1306,6 +1294,9 @@ msgstr "" msgid "Event completed" msgstr "" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1455,22 +1446,22 @@ msgstr "" msgid "Please select a valid event" msgstr "" -msgid "New {{ eventName }} event" +msgid "You do not have access to create events in this stage" msgstr "" -msgid "To open this event, please wait until saving is complete" +msgid "This stage can only have one event" msgstr "" -msgid "Show {{ rest }} more" +msgid "New {{ eventName }} event" msgstr "" -msgid "Reset list" +msgid "To open this event, please wait until saving is complete" msgstr "" -msgid "Go to full {{ eventName }}" +msgid "Show {{ rest }} more" msgstr "" -msgid "This stage can only have one event" +msgid "Go to full {{ eventName }}" msgstr "" msgid "Events could not be retrieved. Please try again later." diff --git a/i18n/nb.po b/i18n/nb.po index 9577fef16d..e14d1e2e25 100644 --- a/i18n/nb.po +++ b/i18n/nb.po @@ -2,13 +2,14 @@ # Translators: # Karoline Tufte Lien , 2024 # Caroline Hesthagen Holen , 2024 +# Merethe Wollan Blisten, 2024 # msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-08T11:49:13.423Z\n" +"POT-Creation-Date: 2024-09-02T11:08:16.281Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" -"Last-Translator: Caroline Hesthagen Holen , 2024\n" +"Last-Translator: Merethe Wollan Blisten, 2024\n" "Language-Team: Norwegian Bokmål (https://app.transifex.com/hisp-uio/teams/100509/nb/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -47,7 +48,7 @@ msgid "More" msgstr "Mer" msgid "View {{programName}} dashboard" -msgstr "Vis {{programName}} dashbord" +msgstr "Vis {{programName}} dashbord" msgid "View dashboard" msgstr "Vis dashbord" @@ -240,7 +241,7 @@ msgid "Completed" msgstr "Fullført" msgid "Please add or cancel note before saving the event" -msgstr "" +msgstr "Legg til eller avbryt notat før lagring" msgid "Save and add another" msgstr "Lagre og legg til en til" @@ -325,25 +326,25 @@ msgid "An error has occurred. See log for details" msgstr "Det har oppstått en feil. Se logg for detaljer" msgid "{{programStageName}} completed" -msgstr "" +msgstr "{{programStageName}} fullført" msgid "" "Would you like to complete the enrollment and all active events as well?" -msgstr "" +msgstr "Ønsker du å fullføre registreringen og alle aktive hendelser?" msgid "{{count}} event in {{programStageName}}" msgid_plural "{{count}} event in {{programStageName}}" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "{{count}}hendelse i {{programStageName}}" +msgstr[1] "{{count}} hendelser i {{programStageName}}" msgid "Yes, complete enrollment and events" -msgstr "" +msgstr "Ja, fullfør registreringen og hendelsen. " msgid "Complete enrollment only" -msgstr "" +msgstr "Fullfør bare registreringen" msgid "Would you like to complete the enrollment?" -msgstr "" +msgstr "Ønsker du å fullføre registreringen?" msgid "Complete enrollment" msgstr "Fullfør registrering" @@ -378,10 +379,10 @@ msgid "validation failed" msgstr "validering mislyktes" msgid "No feedback for this event yet" -msgstr "" +msgstr "Det er ingen tilbakemeldinger på denne hendelsen " msgid "No indicator output for this event yet" -msgstr "" +msgstr "Det er ingen indikatorresulater for denne hendelsen " msgid "Generate new event" msgstr "Generer en ny hendelse" @@ -496,18 +497,6 @@ msgstr "Inneholder tekst" msgid "Yes" msgstr "Ja" -msgid "mm/dd/yyyy" -msgstr "mm/dd/yyyy" - -msgid "Years" -msgstr "År" - -msgid "Months" -msgstr "Måneder" - -msgid "Days" -msgstr "Dager" - msgid "Uploading file" msgstr "Laster opp fil" @@ -575,7 +564,7 @@ msgid "Column" msgstr "Kolonne" msgid "Visible" -msgstr "" +msgstr "Synlig" msgid "Update" msgstr "Oppdater" @@ -617,7 +606,7 @@ msgid "Program doesn't exist" msgstr "Programmet finnes ikke" msgid "Selected program is invalid for selected organisation unit" -msgstr "" +msgstr "Valgt program er ugyldig for valgt organisajonsenhet" msgid "Online" msgstr "Påkoblet" @@ -632,10 +621,10 @@ msgid "Add note" msgstr "Legg til notat" msgid "You don't have access to write notes" -msgstr "" +msgstr "Du har ikke tilgang til å skrive notater" msgid "Write note" -msgstr "" +msgstr "Skriv notat" msgid "was blanked out and hidden by your last action" msgstr "ble tømt og skjult av den siste handlingen din" @@ -802,7 +791,7 @@ msgid "There was an error loading the page" msgstr "Det oppsto en feil under lasting av siden" msgid "Choose an organisation unit to start reporting" -msgstr "" +msgstr "Velg en organisasjonsenhet for å starte rapportering" msgid "Program stage is invalid" msgstr "Programfase er ugyldig" @@ -817,7 +806,7 @@ msgid "Refer" msgstr "Henvis" msgid "You can't add any more {{ programStageName }} events" -msgstr "Du kan ikke legge til flere {{ programStageName }}-hendelser" +msgstr "Du kan ikke legge til flere {{ programStageName }} hendelser" msgid "Cancel without saving" msgstr "Avbryt uten å lagre" @@ -838,6 +827,8 @@ msgid "" "The category option is not valid for the selected organisation unit. Please " "select a valid combination." msgstr "" +"Valgt kategori er ikke gyldig for valgt organisasjonsenhet. Velg en gyldig " +"kombinasjon. " msgid "Please select {{category}}." msgstr "Velg {{category}}." @@ -854,7 +845,7 @@ msgstr "Vennligst velg en organisasjonsenhet" msgid "" "You don't have access to create a {{trackedEntityName}} in the current " "selections" -msgstr "" +msgstr "Du har ikke tilgang til å lage en {{trackedEntityName}} her" msgid "Choose the {{missingCategories}} to start reporting" msgstr "Velg {{missingCategories}} for å starte rapportering" @@ -943,7 +934,7 @@ msgid "Edit event" msgstr "Rediger hendelse" msgid "View changelog" -msgstr "" +msgstr "Vis endringslogg" msgid "Event details" msgstr "Hendelsesdetaljer" @@ -999,8 +990,8 @@ msgstr "Søk etter attributter" msgid "Fill in at least {{count}} attribute to search" msgid_plural "Fill in at least {{count}} attribute to search" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Fyll inn minst {{count}}attributt for å søke" +msgstr[1] "Fyll inn minst {{count}} attributter for å søke" msgid "Could not retrieve metadata. Please try again later." msgstr "Kunne ikke hente metadata. Prøv igjen senere." @@ -1012,7 +1003,7 @@ msgid "Loading" msgstr "Laster" msgid "An error occurred while loading the form" -msgstr "" +msgstr "Det oppsto en feil ved åpning av skjemaet" msgid "Possible duplicates found" msgstr "Mulige duplikater funnet" @@ -1033,7 +1024,7 @@ msgid "No results found for " msgstr "Ingen resultater funnet for" msgid "Choose an organisation unit" -msgstr "" +msgstr "Velg en organisasjonsenhet" msgid "Clear selection" msgstr "Fjern valg" @@ -1045,7 +1036,7 @@ msgid "Search for a program" msgstr "Søk for et program" msgid "Some programs are being filtered by the chosen organisation unit" -msgstr "" +msgstr "Filtreringen av programmer påvirkes av valgt organisasjonsenhet" msgid "Show all programs" msgstr "Vis alle programmer" @@ -1098,8 +1089,8 @@ msgid "" "Fill in at least {{minAttributesRequiredToSearch}} of these fields to " "search{{escape}} {{searchableAttributes}}" msgstr "" -"Fyll ut minst {{minAttributesRequiredToSearch}} av disse feltene for å " -"søke{{escape}} {{searchableAttributes}}" +"Fyll ut minst {{minAttributesRequiredToSearch}} av disse feltene for å søke " +"{{escape}} {{searchableAttributes}}" msgid "Fill in this field to search{{escape}} {{searchableAttributes}}" msgstr "Fyll ut dette feltet for å søke {{escape}} {{searchableAttributes}}" @@ -1145,7 +1136,7 @@ msgid "Create saved list" msgstr "Lag lagret liste" msgid "Create new in another program" -msgstr "" +msgstr "Opprett ny i et annet program" msgid "Create new event" msgstr "Opprett ny hendelse" @@ -1154,7 +1145,7 @@ msgid "Search for a {{trackedEntityName}} in {{programName}}" msgstr "Søk etter {{trackedEntityName}} i {{programName}}" msgid "No tracked entity types available" -msgstr "" +msgstr "Det er ingen sporbare enhetstyper tilgjengelig" msgid "Assigned to" msgstr "Tildelt til" @@ -1238,10 +1229,10 @@ msgid "Mark for follow-up" msgstr "Merk for oppfølging" msgid "Transfer" -msgstr "" +msgstr "Overfør " msgid "An error occurred while transferring ownership" -msgstr "" +msgstr "En feil oppsto ved overføring av eierskapet " msgid "Existing dates for auto-generated events will not be updated." msgstr "" @@ -1276,19 +1267,25 @@ msgid "" "Transferring enrollment ownership from {{ownerOrgUnit}} to " "{{newOrgUnit}}{{escape}}" msgstr "" +"Overfør eierskapet til registreringen fra {{ownerOrgUnit}} til " +"{{newOrgUnit}} {{escape}}" msgid "" "You will lose access to the enrollment when transferring ownership to " "{{organisationUnit}}." msgstr "" +"Du vil miste tilgangen til hendelsen når eierskapet overføres til " +"{{organisationUnit}}." msgid "Transfer Ownership" -msgstr "" +msgstr "Overfør eierskap" msgid "" "Choose the organisation unit to which enrollment ownership should be " "transferred." msgstr "" +"Velg hvilke organisajonsenhet som skal overta eierskapet til denne " +"registreringen. " msgid "Enrollment date" msgstr "Registreringsdato" @@ -1302,12 +1299,6 @@ msgstr "Registreringsmodulen kunne ikke lastes inn. Prøv igjen senere" msgid "Follow-up" msgstr "Oppfølging" -msgid "Started at {{orgUnitName}}" -msgstr "Begynt på {{orgUnitName}}" - -msgid "Owned by {{ownerOrgUnit}}" -msgstr "Eid av {{ownerOrgUnit}}" - msgid "Cancelled" msgstr "Kansellert" @@ -1319,6 +1310,8 @@ msgstr "Legg til område" msgid "Please add or cancel the note before saving the event" msgstr "" +"Du må legge til eller avbryt registreringen i notatet før hendelsen kan " +"lagres. " msgid "organisation unit could not be retrieved. Please try again later." msgstr "organisasjonsenheten kunne ikke hentes. Prøv igjen senere." @@ -1330,13 +1323,13 @@ msgid "program or stage is invalid" msgstr "program eller fase er ugyldig" msgid "Notes about this enrollment" -msgstr "" +msgstr "Notater om denne registreringen" msgid "Write a note about this enrollment" -msgstr "" +msgstr "Skriv et notat om denne registreringen" msgid "This enrollment doesn't have any notes" -msgstr "" +msgstr "Denne registreringen har ingen notater" msgid "Error" msgstr "Feil" @@ -1362,17 +1355,20 @@ msgstr "Planlagt dato kan ikke endres for {{ eventStatus }} hendelser" msgid "Event completed" msgstr "Hendelse fullført" +msgid "The event cannot be edited after it has been completed" +msgstr "Hendelsen kan ikke redigeres etter at den er fullført" + msgid "Back to all stages and events" msgstr "Tilbake til alle faser og hendelser" msgid "Notes about this event" -msgstr "" +msgstr "Notater om denne hendelsen" msgid "Write a note about this event" -msgstr "" +msgstr "Skriv et notat om denne hendelsen" msgid "This event doesn't have any notes" -msgstr "" +msgstr "Denne hendelsen har ingen notater" msgid "Schedule date info" msgstr "Informasjon for planlagt dato" @@ -1419,10 +1415,10 @@ msgid "Schedule date / Due date" msgstr "Planlagt dato / Forfallsdato" msgid "Event notes" -msgstr "" +msgstr "Hendelsesnotater" msgid "Write a note about this scheduled event" -msgstr "" +msgstr "Skriv et notat om denne planlagte hendelsen" msgid "Save note" msgstr "Lagre notat" @@ -1461,57 +1457,62 @@ msgid "Fix errors in the form to continue." msgstr "Rett opp feil i skjemaet for å fortsette." msgid "You do not have access to delete this {{trackedEntityTypeName}}" -msgstr "" +msgstr "Du har ikke tilgang til å slette denne {{trackedEntityTypeName}}" msgid "Delete {{trackedEntityTypeName}}" -msgstr "" +msgstr "Slett {{trackedEntityTypeName}}" msgid "" "Are you sure you want to delete this {{trackedEntityTypeName}}? This will " "permanently remove the {{trackedEntityTypeName}} and all its associated " "enrollments and events in all programs." msgstr "" +"Er du sikker på at du vil slette {{trackedEntityTypeName}}? Sletting vil " +"permanent fjerne {{trackedEntityTypeName}} og alle tilhørende " +"registreringer og hendelser i alle programmer. " msgid "There was a problem deleting the {{trackedEntityTypeName}}" -msgstr "" +msgstr "Det oppsto et problem ved sletting av {{trackedEntityTypeName}}" msgid "Yes, delete {{trackedEntityTypeName}}" -msgstr "" +msgstr "Ja, slett {{trackedEntityTypeName}}" msgid "Profile widget could not be loaded. Please try again later" msgstr "Profil -widgeten kunne ikke lastes inn. Prøv igjen senere" msgid "{{trackedEntityTypeName}} profile" -msgstr "" +msgstr "{{trackedEntityTypeName}} profil" msgid "tracked entity instance" msgstr "Sporet enhetforekomst" msgid "Link to an existing {{linkableStageLabel}}" -msgstr "" +msgstr "Link til eksisterende {{linkableStageLabel}}" msgid "Choose a {{linkableStageLabel}}" -msgstr "" +msgstr "Velg en {{linkableStageLabel}}" msgid "{{ linkableStageLabel }} is not repeatable" -msgstr "" +msgstr "{{ linkableStageLabel }} er ikke repiterbar" msgid "{{ linkableStageLabel }} has no linkable events" -msgstr "" +msgstr "{{ linkableStageLabel }} har ingen hendelser som kan kobles til" msgid "Ambiguous relationships, contact system administrator" -msgstr "" +msgstr "Uklare relasjoner, kontakt din systemadministrator" msgid "" "Enter {{linkableStageLabel}} details in the next step after completing this " "{{currentStageLabel}}." msgstr "" +"Skriv inn {{linkableStageLabel}}detaljer i neste trinn etter du har fullført" +" dette {{currentStageLabel}}." msgid "Enter details now" -msgstr "" +msgstr "Skriv inn detaljer " msgid "Link to an existing" -msgstr "" +msgstr "Koble til en eksisterende" msgid "Scheduled date" msgstr "Planlagt dato" @@ -1520,33 +1521,53 @@ msgid "Report date" msgstr "Rapporteringsdato" msgid "Please select a valid event" +msgstr "Velg en gyldig hendelse" + +msgid "You do not have access to create events in this stage" msgstr "" +"Du har ikke rettigheter til å opprette en hendelse i dette programsteget. " + +msgid "This stage can only have one event" +msgstr "Denne fasen kan bare ha en hendelse" msgid "New {{ eventName }} event" msgstr "Ny {{ eventName }} hendelse" +msgid "An error occurred while deleting the event" +msgstr "Det oppstå en feil ved sletting av hendelsen. " + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" +"Sletting av hendelsen er permanent og kan ikke angres. Er du sikker på at du" +" vil slette denne hendelsen?" + +msgid "An error occurred when updating event status" +msgstr "En feil oppsto ved oppdatering av status på hendelsen. " + +msgid "Unskip" +msgstr "Ikke hoppe over" + +msgid "Skip" +msgstr "Hopp over" + msgid "To open this event, please wait until saving is complete" msgstr "For å åpne denne hendelsen, vennligst vent til lagringen er fullført" msgid "Show {{ rest }} more" msgstr "Vis {{ rest }} flere" -msgid "Reset list" -msgstr "Nullstill liste" - msgid "Go to full {{ eventName }}" msgstr "Gå til hele {{ eventName }}" -msgid "This stage can only have one event" -msgstr "Denne fasen kan bare ha en hendelse" - msgid "Events could not be retrieved. Please try again later." msgstr "Hendelser kunne ikke hentes. Prøv igjen senere." msgid "{{ count }} event" msgid_plural "{{ count }} event" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "{{ count }} hendelse" +msgstr[1] "{{count}} hendelse" msgid "{{ overdueEvents }} overdue" msgstr "{{ overdueEvents }} forfalt" @@ -1558,19 +1579,19 @@ msgid "Stages and Events" msgstr "Faser og hendelser" msgid "An error occurred while loading the widget." -msgstr "" +msgstr "En feil oppstå ved lasting av widget. " msgid "View linked event" -msgstr "" +msgstr "Vis knyttede hendelser" msgid "Scheduled" msgstr "Planlagt" msgid "Changelog" -msgstr "" +msgstr "Endringslogg" msgid "No changes to display" -msgstr "" +msgstr "Ingen endringer å vise" msgid "Created" msgstr "Opprettet" @@ -1588,10 +1609,10 @@ msgid "Data item" msgstr "Datapunkt" msgid "Change" -msgstr "" +msgstr "Endre" msgid "New {{trackedEntityTypeName}} relationship" -msgstr "Ny {{trackedEntityTypeName}}relasjon" +msgstr "Ny {{trackedEntityTypeName}} relasjon" msgid "Missing implementation step" msgstr "Manglende implementeringstrinn" @@ -1613,7 +1634,7 @@ msgid "" msgstr "Noe gikk galt under innlasting av relasjoner. Prøv igjen senere." msgid "{{trackedEntityTypeName}} relationships" -msgstr "{{trackedEntityTypeName}}-relasjoner" +msgstr "{{trackedEntityTypeName}} relasjoner" msgid "Delete relationship" msgstr "Slett relasjon" @@ -1622,12 +1643,14 @@ msgid "" "Deleting the relationship is permanent and cannot be undone. Are you sure " "you want to delete this relationship?" msgstr "" +"Sletting av relasjonen er permanent og kan ikke angres. Er du sikker på at " +"du vil slette relasjonen?" msgid "Yes, delete relationship" -msgstr "" +msgstr "Slett relasjon" msgid "An error occurred while deleting the relationship." -msgstr "" +msgstr "Det oppsto en feil ved sletting av relasjonen. " msgid "To open this relationship, please wait until saving is complete" msgstr "For å åpne denne relasjonen, vennligst vent til lagringen er fullført" diff --git a/i18n/nl.po b/i18n/nl.po index 1af9d52450..1ab637a352 100644 --- a/i18n/nl.po +++ b/i18n/nl.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" +"POT-Creation-Date: 2024-09-02T11:08:16.281Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Charel van den Elsen, 2024\n" "Language-Team: Dutch (https://app.transifex.com/hisp-uio/teams/100509/nl/)\n" @@ -1310,12 +1310,6 @@ msgstr "" msgid "Follow-up" msgstr "Opvolgen" -msgid "Started at {{orgUnitName}}" -msgstr "Gestart bij {{orgUnitName}}" - -msgid "Owned by {{ownerOrgUnit}}" -msgstr "Eigendom van {{ownerOrgUnit}}" - msgid "Cancelled" msgstr "Geannuleerd" @@ -1372,6 +1366,9 @@ msgstr "" msgid "Event completed" msgstr "Evenement voltooid" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "Terug naar alle stadium en evenementen" @@ -1545,15 +1542,29 @@ msgstr "Deze fase kan maar één evenement hebben" msgid "New {{ eventName }} event" msgstr "Nieuwe {{ eventName }} evenement" +msgid "An error occurred while deleting the event" +msgstr "" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" + +msgid "An error occurred when updating event status" +msgstr "" + +msgid "Unskip" +msgstr "" + +msgid "Skip" +msgstr "Overslaan" + msgid "To open this event, please wait until saving is complete" msgstr "Wacht tot het opslaan is voltooid om dit evenement te openen" msgid "Show {{ rest }} more" msgstr "Toon {{ rest }} meer" -msgid "Reset list" -msgstr "Lijst resetten" - msgid "Go to full {{ eventName }}" msgstr "Ga naar volledige {{ eventName }}" diff --git a/i18n/prs.po b/i18n/prs.po index 14e21b32d3..89f3234f12 100644 --- a/i18n/prs.po +++ b/i18n/prs.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-08T11:49:13.423Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Philip Larsen Donnelly, 2024\n" "Language-Team: Persian (Afghanistan) (https://app.transifex.com/hisp-uio/teams/100509/fa_AF/)\n" @@ -477,18 +477,6 @@ msgstr "" msgid "Yes" msgstr "بلی" -msgid "mm/dd/yyyy" -msgstr "" - -msgid "Years" -msgstr "سالانه" - -msgid "Months" -msgstr "ماه ها" - -msgid "Days" -msgstr "روزها" - msgid "Uploading file" msgstr "" @@ -1305,6 +1293,9 @@ msgstr "" msgid "Event completed" msgstr "" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1456,22 +1447,39 @@ msgstr "تاریخ گزارش" msgid "Please select a valid event" msgstr "" +msgid "You do not have access to create events in this stage" +msgstr "" + +msgid "This stage can only have one event" +msgstr "" + msgid "New {{ eventName }} event" msgstr "" -msgid "To open this event, please wait until saving is complete" +msgid "An error occurred while deleting the event" msgstr "" -msgid "Show {{ rest }} more" +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" msgstr "" -msgid "Reset list" +msgid "An error occurred when updating event status" msgstr "" -msgid "Go to full {{ eventName }}" +msgid "Unskip" msgstr "" -msgid "This stage can only have one event" +msgid "Skip" +msgstr "اسکیپ" + +msgid "To open this event, please wait until saving is complete" +msgstr "" + +msgid "Show {{ rest }} more" +msgstr "" + +msgid "Go to full {{ eventName }}" msgstr "" msgid "Events could not be retrieved. Please try again later." diff --git a/i18n/ps.po b/i18n/ps.po index 419cc4b400..31f1707af2 100644 --- a/i18n/ps.po +++ b/i18n/ps.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-08T11:49:13.423Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Viktor Varland , 2024\n" "Language-Team: Pashto (https://app.transifex.com/hisp-uio/teams/100509/ps/)\n" @@ -478,18 +478,6 @@ msgstr "" msgid "Yes" msgstr "هو [ درست ]" -msgid "mm/dd/yyyy" -msgstr "" - -msgid "Years" -msgstr "کلونه" - -msgid "Months" -msgstr "میاشت" - -msgid "Days" -msgstr "ورځې" - msgid "Uploading file" msgstr "" @@ -1306,6 +1294,9 @@ msgstr "" msgid "Event completed" msgstr "" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1457,22 +1448,39 @@ msgstr "د راپور نېټه" msgid "Please select a valid event" msgstr "" +msgid "You do not have access to create events in this stage" +msgstr "" + +msgid "This stage can only have one event" +msgstr "" + msgid "New {{ eventName }} event" msgstr "" -msgid "To open this event, please wait until saving is complete" +msgid "An error occurred while deleting the event" msgstr "" -msgid "Show {{ rest }} more" +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" msgstr "" -msgid "Reset list" +msgid "An error occurred when updating event status" msgstr "" -msgid "Go to full {{ eventName }}" +msgid "Unskip" msgstr "" -msgid "This stage can only have one event" +msgid "Skip" +msgstr "ترې تېر شئ" + +msgid "To open this event, please wait until saving is complete" +msgstr "" + +msgid "Show {{ rest }} more" +msgstr "" + +msgid "Go to full {{ eventName }}" msgstr "" msgid "Events could not be retrieved. Please try again later." diff --git a/i18n/pt.po b/i18n/pt.po index 81fb7ab3b9..7531dccfa4 100644 --- a/i18n/pt.po +++ b/i18n/pt.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-08T11:49:13.423Z\n" +"POT-Creation-Date: 2024-09-02T11:08:16.281Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Viktor Varland , 2024\n" "Language-Team: Portuguese (https://app.transifex.com/hisp-uio/teams/100509/pt/)\n" @@ -505,18 +505,6 @@ msgstr "Contém texto" msgid "Yes" msgstr "sim" -msgid "mm/dd/yyyy" -msgstr "mm/dd/aaaa" - -msgid "Years" -msgstr "Anos" - -msgid "Months" -msgstr "Meses" - -msgid "Days" -msgstr "Dias" - msgid "Uploading file" msgstr "Carregando arquivo" @@ -1318,12 +1306,6 @@ msgstr "" msgid "Follow-up" msgstr "Acompanhamento" -msgid "Started at {{orgUnitName}}" -msgstr "Iniciado em {{orgUnitName}}" - -msgid "Owned by {{ownerOrgUnit}}" -msgstr "Propriedade de {{ownerOrgUnit}}" - msgid "Cancelled" msgstr "Cancelado" @@ -1380,6 +1362,9 @@ msgstr "A data agendada não pode ser alterada para eventos {{ eventStatus }}" msgid "Event completed" msgstr "Evento concluído" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "Voltar para todos os palcos e eventos" @@ -1543,9 +1528,32 @@ msgstr "Data do relatório" msgid "Please select a valid event" msgstr "" +msgid "You do not have access to create events in this stage" +msgstr "" + +msgid "This stage can only have one event" +msgstr "Esta etapa só pode ter um evento" + msgid "New {{ eventName }} event" msgstr "Novo evento de {{ eventName }}" +msgid "An error occurred while deleting the event" +msgstr "" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" + +msgid "An error occurred when updating event status" +msgstr "" + +msgid "Unskip" +msgstr "" + +msgid "Skip" +msgstr "Saltar" + msgid "To open this event, please wait until saving is complete" msgstr "" "Para abrir este evento, aguarde até que o processo de gravar seja concluído" @@ -1553,15 +1561,9 @@ msgstr "" msgid "Show {{ rest }} more" msgstr "Mostrar mais {{ rest }}" -msgid "Reset list" -msgstr "Reiniciar lista" - msgid "Go to full {{ eventName }}" msgstr "Vá para o {{ eventName }} completo" -msgid "This stage can only have one event" -msgstr "Esta etapa só pode ter um evento" - msgid "Events could not be retrieved. Please try again later." msgstr "" "Os eventos não puderam ser recuperados. Por favor, tente novamente mais " diff --git a/i18n/pt_BR.po b/i18n/pt_BR.po index 59779dc49f..00cd51c882 100644 --- a/i18n/pt_BR.po +++ b/i18n/pt_BR.po @@ -2,15 +2,15 @@ # Translators: # Oscar Mesones Lapouble , 2021 # Philip Larsen Donnelly, 2024 -# Thiago Rocha, 2024 # Viktor Varland , 2024 +# Thiago Rocha, 2024 # msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-08T11:49:13.423Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" -"Last-Translator: Viktor Varland , 2024\n" +"Last-Translator: Thiago Rocha, 2024\n" "Language-Team: Portuguese (Brazil) (https://app.transifex.com/hisp-uio/teams/100509/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -481,18 +481,6 @@ msgstr "" msgid "Yes" msgstr "Sim" -msgid "mm/dd/yyyy" -msgstr "" - -msgid "Years" -msgstr "Anos" - -msgid "Months" -msgstr "Meses" - -msgid "Days" -msgstr "Dias" - msgid "Uploading file" msgstr "" @@ -1310,6 +1298,9 @@ msgstr "" msgid "Event completed" msgstr "" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1463,22 +1454,39 @@ msgstr "Data do relatório" msgid "Please select a valid event" msgstr "" +msgid "You do not have access to create events in this stage" +msgstr "" + +msgid "This stage can only have one event" +msgstr "" + msgid "New {{ eventName }} event" msgstr "" -msgid "To open this event, please wait until saving is complete" +msgid "An error occurred while deleting the event" msgstr "" -msgid "Show {{ rest }} more" +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" msgstr "" -msgid "Reset list" +msgid "An error occurred when updating event status" msgstr "" -msgid "Go to full {{ eventName }}" +msgid "Unskip" msgstr "" -msgid "This stage can only have one event" +msgid "Skip" +msgstr "Pular" + +msgid "To open this event, please wait until saving is complete" +msgstr "" + +msgid "Show {{ rest }} more" +msgstr "" + +msgid "Go to full {{ eventName }}" msgstr "" msgid "Events could not be retrieved. Please try again later." diff --git a/i18n/ro.po b/i18n/ro.po index 3b2ff70faf..5c64022113 100644 --- a/i18n/ro.po +++ b/i18n/ro.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" +"POT-Creation-Date: 2024-09-02T11:08:16.281Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Valeriu Plesca , 2024\n" "Language-Team: Romanian (https://app.transifex.com/hisp-uio/teams/100509/ro/)\n" @@ -1255,12 +1255,6 @@ msgstr "" msgid "Follow-up" msgstr "" -msgid "Started at {{orgUnitName}}" -msgstr "" - -msgid "Owned by {{ownerOrgUnit}}" -msgstr "Deținut de {{ownerOrgUnit}}" - msgid "Cancelled" msgstr "Anulat" @@ -1315,6 +1309,9 @@ msgstr "" msgid "Event completed" msgstr "Eveniment finalizat" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "Înapoi la toate etapele și evenimentele" @@ -1478,15 +1475,29 @@ msgstr "Această etapă poate avea un singur eveniment" msgid "New {{ eventName }} event" msgstr "Eveniment nou {{ eventName }}" +msgid "An error occurred while deleting the event" +msgstr "" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" + +msgid "An error occurred when updating event status" +msgstr "" + +msgid "Unskip" +msgstr "" + +msgid "Skip" +msgstr "" + msgid "To open this event, please wait until saving is complete" msgstr "" msgid "Show {{ rest }} more" msgstr "" -msgid "Reset list" -msgstr "Resetare listă" - msgid "Go to full {{ eventName }}" msgstr "Accesare {{ eventName }} complet" diff --git a/i18n/ru.po b/i18n/ru.po index 39bdd2d94b..01896cce66 100644 --- a/i18n/ru.po +++ b/i18n/ru.po @@ -3,15 +3,15 @@ # Ulanbek Abakirov , 2020 # Wanda , 2021 # Yury Rogachev , 2024 -# Philip Larsen Donnelly, 2024 # Viktor Varland , 2024 +# Philip Larsen Donnelly, 2024 # msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-08T11:49:13.423Z\n" +"POT-Creation-Date: 2024-09-02T11:08:16.281Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" -"Last-Translator: Viktor Varland , 2024\n" +"Last-Translator: Philip Larsen Donnelly, 2024\n" "Language-Team: Russian (https://app.transifex.com/hisp-uio/teams/100509/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -503,18 +503,6 @@ msgstr "Содержит текст" msgid "Yes" msgstr "Да" -msgid "mm/dd/yyyy" -msgstr "мм/дд/гггг" - -msgid "Years" -msgstr "Годы" - -msgid "Months" -msgstr "Месяцы" - -msgid "Days" -msgstr "Дни" - msgid "Uploading file" msgstr "Загрузка файла" @@ -1332,12 +1320,6 @@ msgstr "" msgid "Follow-up" msgstr "Наблюдать" -msgid "Started at {{orgUnitName}}" -msgstr "Первоначальная регистрация в {{orgUnitName}}" - -msgid "Owned by {{ownerOrgUnit}}" -msgstr "Принадлежит {{ownerOrgUnit}}" - msgid "Cancelled" msgstr "Отменен/а/о" @@ -1397,6 +1379,9 @@ msgstr "" msgid "Event completed" msgstr "Событие завершено" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "Обратно ко всем этапам и событиям" @@ -1578,24 +1563,41 @@ msgstr "Дата отчета" msgid "Please select a valid event" msgstr "Выберите действительное событие" +msgid "You do not have access to create events in this stage" +msgstr "" + +msgid "This stage can only have one event" +msgstr "Данный этап позволяет создать только одно событие" + msgid "New {{ eventName }} event" msgstr "Новое событие {{ eventName }} " +msgid "An error occurred while deleting the event" +msgstr "" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" + +msgid "An error occurred when updating event status" +msgstr "" + +msgid "Unskip" +msgstr "" + +msgid "Skip" +msgstr "Пропустить" + msgid "To open this event, please wait until saving is complete" msgstr "Чтобы открыть это событие, дождитесь завершения сохранения" msgid "Show {{ rest }} more" msgstr "Показать {{ rest }} подробнее" -msgid "Reset list" -msgstr "Сброс списка" - msgid "Go to full {{ eventName }}" msgstr "Перейти к полной версии события {{ eventName }}" -msgid "This stage can only have one event" -msgstr "Данный этап позволяет создать только одно событие" - msgid "Events could not be retrieved. Please try again later." msgstr "Не удалось загрузить события. Повторите попытку позже." diff --git a/i18n/sv.po b/i18n/sv.po index 9113f74852..62edd96eb5 100644 --- a/i18n/sv.po +++ b/i18n/sv.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-06-28T11:23:02.970Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Viktor Varland , 2024\n" "Language-Team: Swedish (https://app.transifex.com/hisp-uio/teams/100509/sv/)\n" @@ -39,6 +39,9 @@ msgid "" "again, but be aware that this will close other versions." msgstr "" +msgid "More" +msgstr "" + msgid "View {{programName}} dashboard" msgstr "" @@ -361,16 +364,10 @@ msgstr "" msgid "validation failed" msgstr "" -msgid "Errors" +msgid "No feedback for this event yet" msgstr "" -msgid "Feedback" -msgstr "Återkoppling" - -msgid "Indicators" -msgstr "indikatorer" - -msgid "Warnings" +msgid "No indicator output for this event yet" msgstr "" msgid "Generate new event" @@ -483,18 +480,6 @@ msgstr "" msgid "Yes" msgstr "Ja" -msgid "mm/dd/yyyy" -msgstr "" - -msgid "Years" -msgstr "År" - -msgid "Months" -msgstr "Månader" - -msgid "Days" -msgstr "Dagar" - msgid "Uploading file" msgstr "" @@ -561,6 +546,9 @@ msgstr "" msgid "Column" msgstr "" +msgid "Visible" +msgstr "" + msgid "Update" msgstr "Uppdatera" @@ -768,12 +756,6 @@ msgstr "" msgid "Choose an organisation unit to start reporting" msgstr "" -msgid "No feedback for this event yet" -msgstr "" - -msgid "No indicator output for this event yet" -msgstr "" - msgid "Program stage is invalid" msgstr "" @@ -804,6 +786,11 @@ msgstr "Skede" msgid "Registered events" msgstr "" +msgid "" +"The category option is not valid for the selected organisation unit. Please " +"select a valid combination." +msgstr "" + msgid "Please select {{category}}." msgstr "" @@ -917,6 +904,18 @@ msgid "" "relationship" msgstr "" +msgid "Errors" +msgstr "" + +msgid "Feedback" +msgstr "Återkoppling" + +msgid "Indicators" +msgstr "indikatorer" + +msgid "Warnings" +msgstr "" + msgid "Show all events" msgstr "" @@ -958,6 +957,12 @@ msgstr "" msgid "The enrollment event data could not be found" msgstr "" +msgid "Loading" +msgstr "" + +msgid "An error occurred while loading the form" +msgstr "" + msgid "Possible duplicates found" msgstr "" @@ -1237,9 +1242,6 @@ msgstr "" msgid "Owned by {{ownerOrgUnit}}" msgstr "" -msgid "Last updated {{date}}" -msgstr "" - msgid "Cancelled" msgstr "Avbruten" @@ -1294,6 +1296,9 @@ msgstr "" msgid "Event completed" msgstr "" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1445,22 +1450,22 @@ msgstr "Rapportdatum" msgid "Please select a valid event" msgstr "" -msgid "New {{ eventName }} event" +msgid "You do not have access to create events in this stage" msgstr "" -msgid "To open this event, please wait until saving is complete" +msgid "This stage can only have one event" msgstr "" -msgid "Show {{ rest }} more" +msgid "New {{ eventName }} event" msgstr "" -msgid "Reset list" +msgid "To open this event, please wait until saving is complete" msgstr "" -msgid "Go to full {{ eventName }}" +msgid "Show {{ rest }} more" msgstr "" -msgid "This stage can only have one event" +msgid "Go to full {{ eventName }}" msgstr "" msgid "Events could not be retrieved. Please try again later." @@ -1480,6 +1485,15 @@ msgstr "" msgid "Stages and Events" msgstr "" +msgid "An error occurred while loading the widget." +msgstr "" + +msgid "View linked event" +msgstr "" + +msgid "Scheduled" +msgstr "Schemalagd" + msgid "Changelog" msgstr "" @@ -1645,9 +1659,6 @@ msgstr "" msgid "Scheduled{{ escape }} due {{ time }}" msgstr "" -msgid "Scheduled" -msgstr "Schemalagd" - msgid "Overdue{{ escape }} due {{ time }}" msgstr "" diff --git a/i18n/tet.po b/i18n/tet.po index 844f679277..719938fd39 100644 --- a/i18n/tet.po +++ b/i18n/tet.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-06-28T11:23:02.970Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Philip Larsen Donnelly, 2024\n" "Language-Team: Tetum (Tetun) (https://app.transifex.com/hisp-uio/teams/100509/tet/)\n" @@ -37,6 +37,9 @@ msgid "" "again, but be aware that this will close other versions." msgstr "" +msgid "More" +msgstr "" + msgid "View {{programName}} dashboard" msgstr "" @@ -358,16 +361,10 @@ msgstr "" msgid "validation failed" msgstr "" -msgid "Errors" +msgid "No feedback for this event yet" msgstr "" -msgid "Feedback" -msgstr "Feedback" - -msgid "Indicators" -msgstr "Indikadores" - -msgid "Warnings" +msgid "No indicator output for this event yet" msgstr "" msgid "Generate new event" @@ -480,18 +477,6 @@ msgstr "" msgid "Yes" msgstr "Sim" -msgid "mm/dd/yyyy" -msgstr "" - -msgid "Years" -msgstr "Tinan" - -msgid "Months" -msgstr "Fulan" - -msgid "Days" -msgstr "" - msgid "Uploading file" msgstr "" @@ -558,6 +543,9 @@ msgstr "" msgid "Column" msgstr "Koluna" +msgid "Visible" +msgstr "" + msgid "Update" msgstr "Atualiza" @@ -765,12 +753,6 @@ msgstr "" msgid "Choose an organisation unit to start reporting" msgstr "" -msgid "No feedback for this event yet" -msgstr "" - -msgid "No indicator output for this event yet" -msgstr "" - msgid "Program stage is invalid" msgstr "" @@ -801,6 +783,11 @@ msgstr "" msgid "Registered events" msgstr "" +msgid "" +"The category option is not valid for the selected organisation unit. Please " +"select a valid combination." +msgstr "" + msgid "Please select {{category}}." msgstr "" @@ -914,6 +901,18 @@ msgid "" "relationship" msgstr "" +msgid "Errors" +msgstr "" + +msgid "Feedback" +msgstr "Feedback" + +msgid "Indicators" +msgstr "Indikadores" + +msgid "Warnings" +msgstr "" + msgid "Show all events" msgstr "" @@ -954,6 +953,12 @@ msgstr "" msgid "The enrollment event data could not be found" msgstr "" +msgid "Loading" +msgstr "" + +msgid "An error occurred while loading the form" +msgstr "" + msgid "Possible duplicates found" msgstr "" @@ -1233,9 +1238,6 @@ msgstr "" msgid "Owned by {{ownerOrgUnit}}" msgstr "" -msgid "Last updated {{date}}" -msgstr "" - msgid "Cancelled" msgstr "" @@ -1290,6 +1292,9 @@ msgstr "" msgid "Event completed" msgstr "" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1439,22 +1444,22 @@ msgstr "" msgid "Please select a valid event" msgstr "" -msgid "New {{ eventName }} event" +msgid "You do not have access to create events in this stage" msgstr "" -msgid "To open this event, please wait until saving is complete" +msgid "This stage can only have one event" msgstr "" -msgid "Show {{ rest }} more" +msgid "New {{ eventName }} event" msgstr "" -msgid "Reset list" +msgid "To open this event, please wait until saving is complete" msgstr "" -msgid "Go to full {{ eventName }}" +msgid "Show {{ rest }} more" msgstr "" -msgid "This stage can only have one event" +msgid "Go to full {{ eventName }}" msgstr "" msgid "Events could not be retrieved. Please try again later." @@ -1473,6 +1478,15 @@ msgstr "" msgid "Stages and Events" msgstr "" +msgid "An error occurred while loading the widget." +msgstr "" + +msgid "View linked event" +msgstr "" + +msgid "Scheduled" +msgstr "" + msgid "Changelog" msgstr "" @@ -1638,9 +1652,6 @@ msgstr "" msgid "Scheduled{{ escape }} due {{ time }}" msgstr "" -msgid "Scheduled" -msgstr "" - msgid "Overdue{{ escape }} due {{ time }}" msgstr "" diff --git a/i18n/tg.po b/i18n/tg.po index d3195081c7..1346766a62 100644 --- a/i18n/tg.po +++ b/i18n/tg.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-08T11:49:13.423Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Viktor Varland , 2024\n" "Language-Team: Tajik (https://app.transifex.com/hisp-uio/teams/100509/tg/)\n" @@ -478,18 +478,6 @@ msgstr "" msgid "Yes" msgstr "Ҳа" -msgid "mm/dd/yyyy" -msgstr "" - -msgid "Years" -msgstr "Солҳо" - -msgid "Months" -msgstr "Моҳҳо" - -msgid "Days" -msgstr "" - msgid "Uploading file" msgstr "" @@ -1306,6 +1294,9 @@ msgstr "" msgid "Event completed" msgstr "" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1457,22 +1448,22 @@ msgstr "Санаи ҳисобот" msgid "Please select a valid event" msgstr "" -msgid "New {{ eventName }} event" +msgid "You do not have access to create events in this stage" msgstr "" -msgid "To open this event, please wait until saving is complete" +msgid "This stage can only have one event" msgstr "" -msgid "Show {{ rest }} more" +msgid "New {{ eventName }} event" msgstr "" -msgid "Reset list" +msgid "To open this event, please wait until saving is complete" msgstr "" -msgid "Go to full {{ eventName }}" +msgid "Show {{ rest }} more" msgstr "" -msgid "This stage can only have one event" +msgid "Go to full {{ eventName }}" msgstr "" msgid "Events could not be retrieved. Please try again later." diff --git a/i18n/uk.po b/i18n/uk.po index 382b45618d..c51bff2210 100644 --- a/i18n/uk.po +++ b/i18n/uk.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-08T11:49:13.423Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Viktor Varland , 2024\n" "Language-Team: Ukrainian (https://app.transifex.com/hisp-uio/teams/100509/uk/)\n" @@ -483,18 +483,6 @@ msgstr "" msgid "Yes" msgstr "Так" -msgid "mm/dd/yyyy" -msgstr "" - -msgid "Years" -msgstr "Роки" - -msgid "Months" -msgstr "Місяці" - -msgid "Days" -msgstr "Дні" - msgid "Uploading file" msgstr "" @@ -1313,6 +1301,9 @@ msgstr "" msgid "Event completed" msgstr "" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1468,22 +1459,39 @@ msgstr "Дата звіту" msgid "Please select a valid event" msgstr "" +msgid "You do not have access to create events in this stage" +msgstr "" + +msgid "This stage can only have one event" +msgstr "" + msgid "New {{ eventName }} event" msgstr "" -msgid "To open this event, please wait until saving is complete" +msgid "An error occurred while deleting the event" msgstr "" -msgid "Show {{ rest }} more" +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" msgstr "" -msgid "Reset list" +msgid "An error occurred when updating event status" msgstr "" -msgid "Go to full {{ eventName }}" +msgid "Unskip" msgstr "" -msgid "This stage can only have one event" +msgid "Skip" +msgstr "Пропустити" + +msgid "To open this event, please wait until saving is complete" +msgstr "" + +msgid "Show {{ rest }} more" +msgstr "" + +msgid "Go to full {{ eventName }}" msgstr "" msgid "Events could not be retrieved. Please try again later." diff --git a/i18n/ur.po b/i18n/ur.po index 8e95fe396d..ce4b3021c3 100644 --- a/i18n/ur.po +++ b/i18n/ur.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-08T11:49:13.423Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Viktor Varland , 2024\n" "Language-Team: Urdu (https://app.transifex.com/hisp-uio/teams/100509/ur/)\n" @@ -478,18 +478,6 @@ msgstr "" msgid "Yes" msgstr "ہاں" -msgid "mm/dd/yyyy" -msgstr "" - -msgid "Years" -msgstr "سال" - -msgid "Months" -msgstr "مہینے" - -msgid "Days" -msgstr "دن" - msgid "Uploading file" msgstr "" @@ -1306,6 +1294,9 @@ msgstr "" msgid "Event completed" msgstr "" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1457,22 +1448,39 @@ msgstr "رپورٹ کی تاریخ" msgid "Please select a valid event" msgstr "" +msgid "You do not have access to create events in this stage" +msgstr "" + +msgid "This stage can only have one event" +msgstr "" + msgid "New {{ eventName }} event" msgstr "" -msgid "To open this event, please wait until saving is complete" +msgid "An error occurred while deleting the event" msgstr "" -msgid "Show {{ rest }} more" +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" msgstr "" -msgid "Reset list" +msgid "An error occurred when updating event status" msgstr "" -msgid "Go to full {{ eventName }}" +msgid "Unskip" msgstr "" -msgid "This stage can only have one event" +msgid "Skip" +msgstr "چھوڑ دو" + +msgid "To open this event, please wait until saving is complete" +msgstr "" + +msgid "Show {{ rest }} more" +msgstr "" + +msgid "Go to full {{ eventName }}" msgstr "" msgid "Events could not be retrieved. Please try again later." diff --git a/i18n/uz_UZ_Cyrl.po b/i18n/uz_UZ_Cyrl.po index cd49eaf87b..32a8d2e932 100644 --- a/i18n/uz_UZ_Cyrl.po +++ b/i18n/uz_UZ_Cyrl.po @@ -1,12 +1,11 @@ # # Translators: -# Philip Larsen Donnelly, 2024 # Khurshid Ibatov , 2024 # msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-08T11:49:13.423Z\n" +"POT-Creation-Date: 2024-09-02T11:08:16.281Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Khurshid Ibatov , 2024\n" "Language-Team: Uzbek (Cyrillic) (https://app.transifex.com/hisp-uio/teams/100509/uz@Cyrl/)\n" @@ -496,18 +495,6 @@ msgstr "Матнни ўз ичига олади" msgid "Yes" msgstr "Ҳа" -msgid "mm/dd/yyyy" -msgstr "кун/ой/йил" - -msgid "Years" -msgstr "Йиллар" - -msgid "Months" -msgstr "Ойлар" - -msgid "Days" -msgstr "Кунлар" - msgid "Uploading file" msgstr "Файл юкланмоқда" @@ -1281,12 +1268,6 @@ msgstr "" msgid "Follow-up" msgstr "Кузатиш" -msgid "Started at {{orgUnitName}}" -msgstr " {{orgUnitName}} да бошланган" - -msgid "Owned by {{ownerOrgUnit}}" -msgstr " {{ownerOrgUnit}} эгалиги асосида" - msgid "Cancelled" msgstr "Бекор қилинди" @@ -1341,6 +1322,9 @@ msgstr "" msgid "Event completed" msgstr "Ҳодиса/тадбир якунланди" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1491,22 +1475,39 @@ msgstr "Ҳисобот санаси" msgid "Please select a valid event" msgstr "" +msgid "You do not have access to create events in this stage" +msgstr "" + +msgid "This stage can only have one event" +msgstr "" + msgid "New {{ eventName }} event" msgstr "" -msgid "To open this event, please wait until saving is complete" +msgid "An error occurred while deleting the event" msgstr "" -msgid "Show {{ rest }} more" +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" msgstr "" -msgid "Reset list" +msgid "An error occurred when updating event status" msgstr "" -msgid "Go to full {{ eventName }}" +msgid "Unskip" msgstr "" -msgid "This stage can only have one event" +msgid "Skip" +msgstr "Ўтказиб юбориш" + +msgid "To open this event, please wait until saving is complete" +msgstr "" + +msgid "Show {{ rest }} more" +msgstr "" + +msgid "Go to full {{ eventName }}" msgstr "" msgid "Events could not be retrieved. Please try again later." diff --git a/i18n/uz_UZ_Latn.po b/i18n/uz_UZ_Latn.po index 3c876c6abd..0379eb17c6 100644 --- a/i18n/uz_UZ_Latn.po +++ b/i18n/uz_UZ_Latn.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-08T11:49:13.423Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Yury Rogachev , 2024\n" "Language-Team: Uzbek (Latin) (https://app.transifex.com/hisp-uio/teams/100509/uz@Latn/)\n" @@ -496,18 +496,6 @@ msgstr "Matnni oʼz ichiga oladi" msgid "Yes" msgstr "Ha" -msgid "mm/dd/yyyy" -msgstr "kun/oy/yil" - -msgid "Years" -msgstr "Yillar" - -msgid "Months" -msgstr "Oylar" - -msgid "Days" -msgstr "Kunlar" - msgid "Uploading file" msgstr "Fayl yuklanmoqda" @@ -1330,6 +1318,9 @@ msgstr "" msgid "Event completed" msgstr "" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1479,22 +1470,39 @@ msgstr "Hisobot sanasi" msgid "Please select a valid event" msgstr "" +msgid "You do not have access to create events in this stage" +msgstr "" + +msgid "This stage can only have one event" +msgstr "" + msgid "New {{ eventName }} event" msgstr "" -msgid "To open this event, please wait until saving is complete" +msgid "An error occurred while deleting the event" msgstr "" -msgid "Show {{ rest }} more" +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" msgstr "" -msgid "Reset list" +msgid "An error occurred when updating event status" msgstr "" -msgid "Go to full {{ eventName }}" +msgid "Unskip" msgstr "" -msgid "This stage can only have one event" +msgid "Skip" +msgstr "Oʼtkazib yuborish" + +msgid "To open this event, please wait until saving is complete" +msgstr "" + +msgid "Show {{ rest }} more" +msgstr "" + +msgid "Go to full {{ eventName }}" msgstr "" msgid "Events could not be retrieved. Please try again later." diff --git a/i18n/vi.po b/i18n/vi.po index f4fdf8ca07..10dc9f241e 100644 --- a/i18n/vi.po +++ b/i18n/vi.po @@ -2,15 +2,15 @@ # Translators: # Philip Larsen Donnelly, 2024 # Mai Nguyen , 2024 -# Thuy Nguyen , 2024 # Viktor Varland , 2024 +# Thuy Nguyen , 2024 # msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-08T11:49:13.423Z\n" +"POT-Creation-Date: 2024-09-02T11:08:16.281Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" -"Last-Translator: Viktor Varland , 2024\n" +"Last-Translator: Thuy Nguyen , 2024\n" "Language-Team: Vietnamese (https://app.transifex.com/hisp-uio/teams/100509/vi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -493,18 +493,6 @@ msgstr "Chứa văn bản" msgid "Yes" msgstr "Có" -msgid "mm/dd/yyyy" -msgstr "mm / dd / yyyy" - -msgid "Years" -msgstr "Năm" - -msgid "Months" -msgstr "Tháng" - -msgid "Days" -msgstr "Ngày" - msgid "Uploading file" msgstr "Đang tải tập tin lên" @@ -1268,12 +1256,6 @@ msgstr "" msgid "Follow-up" msgstr "Theo dõi sau" -msgid "Started at {{orgUnitName}}" -msgstr "" - -msgid "Owned by {{ownerOrgUnit}}" -msgstr "" - msgid "Cancelled" msgstr "Đã hủy" @@ -1326,6 +1308,9 @@ msgid "Scheduled date cannot be changed for {{ eventStatus }} events" msgstr "" msgid "Event completed" +msgstr "Sự kiện đã hoàn tất" + +msgid "The event cannot be edited after it has been completed" msgstr "" msgid "Back to all stages and events" @@ -1477,22 +1462,39 @@ msgstr "Ngày báo cáo" msgid "Please select a valid event" msgstr "" +msgid "You do not have access to create events in this stage" +msgstr "" + +msgid "This stage can only have one event" +msgstr "" + msgid "New {{ eventName }} event" msgstr "" -msgid "To open this event, please wait until saving is complete" +msgid "An error occurred while deleting the event" msgstr "" -msgid "Show {{ rest }} more" +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" msgstr "" -msgid "Reset list" +msgid "An error occurred when updating event status" msgstr "" -msgid "Go to full {{ eventName }}" +msgid "Unskip" msgstr "" -msgid "This stage can only have one event" +msgid "Skip" +msgstr "Bỏ qua" + +msgid "To open this event, please wait until saving is complete" +msgstr "" + +msgid "Show {{ rest }} more" +msgstr "" + +msgid "Go to full {{ eventName }}" msgstr "" msgid "Events could not be retrieved. Please try again later." diff --git a/i18n/zh.po b/i18n/zh.po index 8058b5a3eb..559372ca30 100644 --- a/i18n/zh.po +++ b/i18n/zh.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" +"POT-Creation-Date: 2024-09-02T11:08:16.281Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: easylin , 2024\n" "Language-Team: Chinese (https://app.transifex.com/hisp-uio/teams/100509/zh/)\n" @@ -1241,12 +1241,6 @@ msgstr "无法加载报名的小部件。请稍后再试" msgid "Follow-up" msgstr "后续" -msgid "Started at {{orgUnitName}}" -msgstr "始于{{orgUnitName}}" - -msgid "Owned by {{ownerOrgUnit}}" -msgstr "由{{ownerOrgUnit}}拥有" - msgid "Cancelled" msgstr "已取消" @@ -1301,6 +1295,9 @@ msgstr "无法更改 {{ eventStatus }} 事件的预定日期" msgid "Event completed" msgstr "事件完成" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "回到所有阶段和事件" @@ -1461,15 +1458,29 @@ msgstr "这个阶段只能有一个事件" msgid "New {{ eventName }} event" msgstr "新的 {{ eventName }} 事件" +msgid "An error occurred while deleting the event" +msgstr "" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" + +msgid "An error occurred when updating event status" +msgstr "" + +msgid "Unskip" +msgstr "" + +msgid "Skip" +msgstr "跳过" + msgid "To open this event, please wait until saving is complete" msgstr "要打开此活动,请等待保存完成" msgid "Show {{ rest }} more" msgstr "显示 {{ rest }} 更多" -msgid "Reset list" -msgstr "重置列表" - msgid "Go to full {{ eventName }}" msgstr "转到完整的{{ eventName }}" diff --git a/i18n/zh_CN.po b/i18n/zh_CN.po index 29a3101e26..d370cc02a6 100644 --- a/i18n/zh_CN.po +++ b/i18n/zh_CN.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-08T11:49:13.423Z\n" +"POT-Creation-Date: 2024-09-02T11:08:16.281Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: 晓东 林 <13981924470@126.com>, 2024\n" "Language-Team: Chinese (China) (https://app.transifex.com/hisp-uio/teams/100509/zh_CN/)\n" @@ -480,18 +480,6 @@ msgstr "包含文本" msgid "Yes" msgstr "是" -msgid "mm/dd/yyyy" -msgstr "mm/dd/yyyy" - -msgid "Years" -msgstr "年" - -msgid "Months" -msgstr "月" - -msgid "Days" -msgstr "天" - msgid "Uploading file" msgstr "上传文件" @@ -1252,12 +1240,6 @@ msgstr "无法加载报名的小部件。请稍后再试" msgid "Follow-up" msgstr "后续" -msgid "Started at {{orgUnitName}}" -msgstr "始于{{orgUnitName}}" - -msgid "Owned by {{ownerOrgUnit}}" -msgstr "由{{ownerOrgUnit}}拥有" - msgid "Cancelled" msgstr "已取消" @@ -1312,6 +1294,9 @@ msgstr "无法更改 {{ eventStatus }} 事件的预定日期" msgid "Event completed" msgstr "事件完成" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "回到所有阶段和事件" @@ -1461,24 +1446,41 @@ msgstr "报告日期" msgid "Please select a valid event" msgstr "" +msgid "You do not have access to create events in this stage" +msgstr "" + +msgid "This stage can only have one event" +msgstr "这个阶段只能有一个事件" + msgid "New {{ eventName }} event" msgstr "新的 {{ eventName }} 事件" +msgid "An error occurred while deleting the event" +msgstr "" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" + +msgid "An error occurred when updating event status" +msgstr "" + +msgid "Unskip" +msgstr "" + +msgid "Skip" +msgstr "跳过" + msgid "To open this event, please wait until saving is complete" msgstr "要打开此活动,请等待保存完成" msgid "Show {{ rest }} more" msgstr "显示 {{ rest }} 更多" -msgid "Reset list" -msgstr "重置列表" - msgid "Go to full {{ eventName }}" msgstr "转到完整的{{ eventName }}" -msgid "This stage can only have one event" -msgstr "这个阶段只能有一个事件" - msgid "Events could not be retrieved. Please try again later." msgstr "无法检索事件。请稍后再试。" diff --git a/package.json b/package.json index a8dc5d72ca..ffe44ffb82 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "capture-app", "homepage": ".", - "version": "101.3.1", + "version": "101.6.2", "cacheVersion": "7", "serverVersion": "38", "license": "BSD-3-Clause", @@ -10,7 +10,7 @@ "packages/rules-engine" ], "dependencies": { - "@dhis2/rules-engine-javascript": "101.3.1", + "@dhis2/rules-engine-javascript": "101.6.2", "@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 9ff5cf689d..d773ecb1fe 100644 --- a/packages/rules-engine/package.json +++ b/packages/rules-engine/package.json @@ -1,6 +1,6 @@ { "name": "@dhis2/rules-engine-javascript", - "version": "101.3.1", + "version": "101.6.2", "license": "BSD-3-Clause", "main": "./build/cjs/index.js", "scripts": { diff --git a/packages/rules-engine/src/services/VariableService/VariableService.js b/packages/rules-engine/src/services/VariableService/VariableService.js index 193de2677e..9b596a8190 100644 --- a/packages/rules-engine/src/services/VariableService/VariableService.js +++ b/packages/rules-engine/src/services/VariableService/VariableService.js @@ -85,7 +85,7 @@ export class VariableService { this.defaultValues = defaultValues; - this.structureEvents = getStructureEvents(dateUtils.compareDates); + this.structureEvents = getStructureEvents(dateUtils.compareDates, onProcessValue); } getVariables({ diff --git a/packages/rules-engine/src/services/VariableService/helpers/structureEvents.js b/packages/rules-engine/src/services/VariableService/helpers/structureEvents.js index 7c4fcab7f8..9660397845 100644 --- a/packages/rules-engine/src/services/VariableService/helpers/structureEvents.js +++ b/packages/rules-engine/src/services/VariableService/helpers/structureEvents.js @@ -1,9 +1,11 @@ // @flow +import { typeKeys } from '../../../constants'; import { eventStatuses } from '../constants'; import type { EventData, EventsData, CompareDates, + ProcessValue, } from '../variableService.types'; const createEventsContainer = (events: EventsData) => { @@ -16,20 +18,16 @@ const createEventsContainer = (events: EventsData) => { return { all: events, byStage: eventsDataByStage }; }; -export const getStructureEvents = (compareDates: CompareDates) => { - const compareEvents = (first: EventData, second: EventData): number => { - let result; - if (!first.occurredAt && !second.occurredAt) { - result = 0; - } else if (!first.occurredAt) { - result = 1; - } else if (!second.occurredAt) { - result = -1; - } else { - result = compareDates(first.occurredAt, second.occurredAt); - } - return result; - }; +export const getStructureEvents = (compareDates: CompareDates, processValue: ProcessValue) => { + const compareEvents = (first: EventData, second: EventData): number => + compareDates( + processValue(first.occurredAt, typeKeys.DATE), + processValue(second.occurredAt, typeKeys.DATE), + ) || + compareDates( + processValue(first.createdAt, typeKeys.DATETIME), + processValue(second.createdAt, typeKeys.DATETIME), + ); return (currentEvent: EventData = {}, otherEvents: EventsData = []) => { const otherEventsFiltered = otherEvents @@ -37,8 +35,8 @@ export const getStructureEvents = (compareDates: CompareDates) => { [eventStatuses.COMPLETED, eventStatuses.ACTIVE, eventStatuses.VISITED].includes(event.status) && event.eventId !== currentEvent.eventId, ); - - const events = Object.keys(currentEvent).length !== 0 ? otherEventsFiltered.concat(currentEvent) : otherEventsFiltered; + const events = Object.keys(currentEvent).length ? + otherEventsFiltered.concat(currentEvent) : otherEventsFiltered; const sortedEvents = events.sort(compareEvents); return createEventsContainer(sortedEvents); diff --git a/packages/rules-engine/src/services/VariableService/variableService.types.js b/packages/rules-engine/src/services/VariableService/variableService.types.js index f31caadc2f..9640354c46 100644 --- a/packages/rules-engine/src/services/VariableService/variableService.types.js +++ b/packages/rules-engine/src/services/VariableService/variableService.types.js @@ -1,4 +1,5 @@ // @flow +import { typeof typeKeys } from '../../constants'; import { typeof eventStatuses } from './constants'; import type { DataElements, TrackedEntityAttributes, OrgUnit } from '../../rulesEngine.types'; @@ -89,3 +90,5 @@ export type VariableServiceInput = {| |}; export type CompareDates = (firstRulesDate: ?string, secondRulesDate: ?string) => number; + +export type ProcessValue = (value: any, type: $Values) => any; diff --git a/src/core_modules/capture-core/components/Buttons/OverflowButton.component.js b/src/core_modules/capture-core/components/Buttons/OverflowButton.component.js index 5f20a47c92..57e99a125e 100644 --- a/src/core_modules/capture-core/components/Buttons/OverflowButton.component.js +++ b/src/core_modules/capture-core/components/Buttons/OverflowButton.component.js @@ -1,7 +1,7 @@ // @flow import * as React from 'react'; -import i18n from '@dhis2/d2-i18n'; import { useRef, useState } from 'react'; +import i18n from '@dhis2/d2-i18n'; import { Button, Layer, Popper } from '@dhis2/ui'; type Props = { @@ -15,6 +15,7 @@ type Props = { dataTest?: string, small?: boolean, large?: boolean, + disabled?: boolean, }; export const OverflowButton = ({ @@ -23,6 +24,7 @@ export const OverflowButton = ({ secondary, small, large, + disabled, onClick: handleClick, open: propsOpen, icon, @@ -43,10 +45,11 @@ export const OverflowButton = ({ return (
+ + + + + ); +}; diff --git a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/DeleteActionModal/index.js b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/DeleteActionModal/index.js new file mode 100644 index 0000000000..f288fff5b2 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/DeleteActionModal/index.js @@ -0,0 +1,3 @@ +// @flow + +export { DeleteActionModal } from './DeleteActionModal'; diff --git a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/EventRow.js b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/EventRow.js new file mode 100644 index 0000000000..1f8ba00e56 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/EventRow.js @@ -0,0 +1,111 @@ +// @flow +import React, { useState } from 'react'; +import { withStyles } from '@material-ui/core/'; +import { + DataTableCell, + DataTableRow, + FlyoutMenu, + IconMore16, +} from '@dhis2/ui'; +import { OverflowButton } from '../../../../../Buttons'; +import type { EventRowProps } from './EventRow.types'; +import { DeleteActionButton } from './DeleteActionButton'; +import { SkipAction } from './SkipAction'; +import { DeleteActionModal } from './DeleteActionModal'; + +const styles = { + row: { + maxWidth: '100%', + whiteSpace: 'nowrap', + cursor: 'pointer', + }, + rowDisabled: { + cursor: 'not-allowed', + opacity: 0.5, + }, +}; + +export const EventStatuses = { + ACTIVE: 'ACTIVE', + COMPLETED: 'COMPLETED', + SKIPPED: 'SKIPPED', + SCHEDULE: 'SCHEDULE', +}; + +const EventRowPlain = ({ + id, + pendingApiResponse, + eventDetails, + cells, + stageWriteAccess, + onDeleteEvent, + onRollbackDeleteEvent, + onUpdateEventStatus, + teiId, + programId, + enrollmentId, + classes, +}: EventRowProps) => { + const [actionsOpen, setActionsOpen] = useState(false); + const [deleteModalOpen, setDeleteModalOpen] = useState(false); + + return ( + + {cells} + + + <> + setActionsOpen(prev => !prev)} + dataTest={'overflow-button'} + secondary + small + icon={} + disabled={pendingApiResponse || !stageWriteAccess} + component={( + + {(eventDetails.status === EventStatuses.SCHEDULE || eventDetails.status === EventStatuses.SKIPPED) && ( + + )} + + + + )} + /> + + {deleteModalOpen && ( + + )} + + + + ); +}; + +export const EventRow = withStyles(styles)(EventRowPlain); diff --git a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/EventRow.types.js b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/EventRow.types.js new file mode 100644 index 0000000000..d47cc386fc --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/EventRow.types.js @@ -0,0 +1,17 @@ +// @flow + +export type EventRowProps = {| + id: string, + pendingApiResponse: boolean, + eventDetails: ApiEnrollmentEvent, + cells: Array>, + onEventClick: (id: string, options: ?Object) => void, + onDeleteEvent: (id: string) => void, + onUpdateEventStatus: (id: string, status: string) => void, + onRollbackDeleteEvent: (event: ApiEnrollmentEvent) => void, + stageWriteAccess: boolean, + teiId: string, + programId: string, + enrollmentId: string, + ...CssClasses, +|}; diff --git a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/SkipAction/SkipAction.js b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/SkipAction/SkipAction.js new file mode 100644 index 0000000000..70cd1068b4 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/SkipAction/SkipAction.js @@ -0,0 +1,89 @@ +// @flow +import React from 'react'; +import i18n from '@dhis2/d2-i18n'; +import log from 'loglevel'; +import { + MenuItem, + IconArrowRight16, IconRedo16, +} from '@dhis2/ui'; +import { useMutation } from 'react-query'; +import { useAlert, useDataEngine } from '@dhis2/app-runtime'; +import { EventStatuses } from '../EventRow'; +import { errorCreator } from '../../../../../../../../capture-core-utils'; + +type Props = {| + eventId: string, + eventDetails: ApiEnrollmentEvent, + pendingApiResponse: boolean, + onUpdateEventStatus: (eventId: string, status: string) => void, + setActionsOpen: (open: boolean) => void, +|} + +export const SkipAction = ({ + eventId, + eventDetails, + pendingApiResponse, + setActionsOpen, + onUpdateEventStatus, +}: Props) => { + const dataEngine = useDataEngine(); + const { show: showError } = useAlert( + ({ message }) => message, + { critical: true }, + ); + const { mutate: updateEventStatus } = useMutation( + ({ status }) => dataEngine.mutate({ + resource: 'tracker?async=false&importStrategy=UPDATE', + type: 'create', + data: { + events: [ + { + ...eventDetails, + event: eventId, + status, + }, + ], + }, + }), + { + onMutate: (payload) => { + const status = EventStatuses[payload.status]; + const previousStatus = eventDetails.status; + + status && onUpdateEventStatus(eventId, status); + + return { previousStatus }; + }, + onError: (error, payload, context) => { + showError({ message: i18n.t('An error occurred when updating event status') }); + log.error(errorCreator('An error occurred when updating event status')({ error, payload, context })); + context && onUpdateEventStatus(eventId, context.previousStatus); + }, + }, + ); + + const handleMenuItemClick = (status) => { + setActionsOpen(false); + !pendingApiResponse && updateEventStatus({ status }); + }; + + if (eventDetails.status === EventStatuses.SKIPPED) { + return ( + } + label={i18n.t('Unskip')} + onClick={() => handleMenuItemClick(EventStatuses.SCHEDULE)} + /> + ); + } + + return ( + } + label={i18n.t('Skip')} + onClick={() => handleMenuItemClick(EventStatuses.SKIPPED)} + /> + ); +}; diff --git a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/SkipAction/index.js b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/SkipAction/index.js new file mode 100644 index 0000000000..860c3a51f5 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/SkipAction/index.js @@ -0,0 +1,3 @@ +// @flow + +export { SkipAction } from './SkipAction'; diff --git a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/index.js b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/index.js new file mode 100644 index 0000000000..acea1793f8 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/index.js @@ -0,0 +1,3 @@ +// @flow + +export { EventRow } from './EventRow'; diff --git a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/StageDetail.component.js b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/StageDetail.component.js index 2d1f6dd06d..e36d5f4b16 100644 --- a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/StageDetail.component.js +++ b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/StageDetail.component.js @@ -18,12 +18,15 @@ import { Button, Tooltip, } from '@dhis2/ui'; +import log from 'loglevel'; import { sortDataFromEvent } from './hooks/sortFuntions'; import { StageCreateNewButton } from '../StageCreateNewButton'; import { useComputeDataFromEvent, useComputeHeaderColumn, formatRowForView } from './hooks/useEventList'; import { DEFAULT_NUMBER_OF_ROW, SORT_DIRECTION } from './hooks/constants'; import { getProgramAndStageForProgram } from '../../../../../metaData/helpers'; import type { Props } from './stageDetail.types'; +import { EventRow } from './EventRow'; +import { errorCreator } from '../../../../../../capture-core-utils'; const styles = { @@ -32,10 +35,6 @@ const styles = { whiteSpace: 'nowrap', cursor: 'pointer', }, - rowDisabled: { - cursor: 'not-allowed', - opacity: 0.5, - }, container: { display: 'flex', flexDirection: 'column', @@ -100,10 +99,14 @@ const StageDetailPlain = (props: Props) => { repeatable = false, enableUserAssignment = false, onEventClick, + onDeleteEvent, + onUpdateEventStatus, + onRollbackDeleteEvent, onViewAll, onCreateNew, hiddenProgramStage, - classes } = props; + classes, + } = props; const defaultSortState = { columnName: 'status', sortDirection: SORT_DIRECTION.DESC, @@ -158,6 +161,8 @@ const StageDetailPlain = (props: Props) => { className={classes.row} > {headerCells} + + ); } @@ -205,15 +210,28 @@ const StageDetailPlain = (props: Props) => { )} )); + const eventDetails = events.find(event => event.event === row.id); + if (!eventDetails) { + log.error(errorCreator('Event details not found')({ row })); + return null; + } return ( - - {cells} - + ); }); } diff --git a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/stageDetail.types.js b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/stageDetail.types.js index 31d8c79dea..d5a07514d3 100644 --- a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/stageDetail.types.js +++ b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/stageDetail.types.js @@ -1,7 +1,7 @@ // @flow import type { StageDataElement, StageCommonProps } from '../../../types/common.types'; - type ExtractedProps = {| +type ExtractedProps = {| events: Array, dataElements: Array, eventName: string, @@ -9,6 +9,10 @@ import type { StageDataElement, StageCommonProps } from '../../../types/common.t repeatable?: boolean, enableUserAssignment?: boolean, stageId: string, + onCreateNew: (stageId: string) => void, + onDeleteEvent: (eventId: string) => void, + onUpdateEventStatus: (eventId: string, status: string) => void, + onRollbackDeleteEvent: (eventId: ApiEnrollmentEvent) => void, hiddenProgramStage?: boolean, ...CssClasses, |}; diff --git a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/stage.types.js b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/stage.types.js index d8ce73c7e6..10be4ac00d 100644 --- a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/stage.types.js +++ b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/stage.types.js @@ -7,6 +7,9 @@ type ExtractedProps = {| events: Array, className?: string, onEventClick: (eventId: string) => void, + onDeleteEvent: (eventId: string) => void, + onUpdateEventStatus: (eventId: string, status: string) => void, + onRollbackDeleteEvent: (eventId: ApiEnrollmentEvent) => void, ...CssClasses, |}; diff --git a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/stages.types.js b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/stages.types.js index 82208aa356..c4ca0b8fd6 100644 --- a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/stages.types.js +++ b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/stages.types.js @@ -5,6 +5,9 @@ export type PlainProps = {| stages: Array, events: Array, onEventClick: (eventId: string) => void, + onDeleteEvent: (eventId: string) => void, + onUpdateEventStatus: (eventId: string, status: string) => void, + onRollbackDeleteEvent: (eventId: ApiEnrollmentEvent) => void, ...StageCommonProps, ...CssClasses, |}; @@ -13,5 +16,8 @@ export type InputProps = {| stages?: Array, events?: ?Array, onEventClick: (eventId: string) => void, + onDeleteEvent: (eventId: string) => void, + onUpdateEventStatus: (eventId: string, status: string) => void, + onRollbackDeleteEvent: (eventId: ApiEnrollmentEvent) => void, ...StageCommonProps, |}; diff --git a/src/core_modules/capture-core/components/WidgetStagesAndEvents/stagesAndEvents.types.js b/src/core_modules/capture-core/components/WidgetStagesAndEvents/stagesAndEvents.types.js index c7e2453f24..5dce9859fb 100644 --- a/src/core_modules/capture-core/components/WidgetStagesAndEvents/stagesAndEvents.types.js +++ b/src/core_modules/capture-core/components/WidgetStagesAndEvents/stagesAndEvents.types.js @@ -6,6 +6,9 @@ type ExtractedProps = {| stages?: Array, events: ?Array, onEventClick: (eventId: string) => void, + onDeleteEvent: (eventId: string) => void, + onUpdateEventStatus: (eventId: string, status: string) => void, + onRollbackDeleteEvent: (eventId: ApiEnrollmentEvent) => void, className?: string, |}; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/FlatListOrgUnitField/FlatListOrgUnitField.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/FlatListOrgUnitField/FlatListOrgUnitField.js index c8a1652a76..aaf3ffdf3c 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/FlatListOrgUnitField/FlatListOrgUnitField.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/FlatListOrgUnitField/FlatListOrgUnitField.js @@ -1,6 +1,6 @@ // @flow import React from 'react'; -import { useOrgUnitName } from '../../../metadataRetrieval/orgUnitName'; +import { useOrgUnitNameWithAncestors } from '../../../metadataRetrieval/orgUnitName'; type Props = { orgUnitId: string, @@ -9,7 +9,7 @@ type Props = { export const FlatListOrgUnitField = ({ orgUnitId, }: Props) => { - const { displayName } = useOrgUnitName(orgUnitId); + const { displayName } = useOrgUnitNameWithAncestors(orgUnitId); return ( diff --git a/src/core_modules/capture-core/converters/clientToView.js b/src/core_modules/capture-core/converters/clientToView.js index a1301e6836..115bcbeb69 100644 --- a/src/core_modules/capture-core/converters/clientToView.js +++ b/src/core_modules/capture-core/converters/clientToView.js @@ -7,36 +7,39 @@ import { dataElementTypes, type DataElement } from '../metaData'; import { convertMomentToDateFormatString } from '../utils/converters/date'; import { stringifyNumber } from './common/stringifyNumber'; import { MinimalCoordinates } from '../components/MinimalCoordinates'; +import { TooltipOrgUnit } from '../components/Tooltips/TooltipOrgUnit'; function convertDateForView(rawValue: string): string { const momentDate = moment(rawValue); return convertMomentToDateFormatString(momentDate); } - function convertDateTimeForView(rawValue: string): string { const momentDate = moment(rawValue); const dateString = convertMomentToDateFormatString(momentDate); const timeString = momentDate.format('HH:mm'); return `${dateString} ${timeString}`; } - function convertTimeForView(rawValue: string): string { const momentDate = moment(rawValue, 'HH:mm', true); return momentDate.format('HH:mm'); } - type FileClientValue = { name: string, url: string, value: string, }; - type ImageClientValue = { ...FileClientValue, previewUrl: string, }; +type OrgUnitClientValue = { + name: string, + ancestors?: Array, + tooltip?: string, +}; + function convertFileForDisplay(clientValue: FileClientValue) { return ( ; } +function convertOrgUnitForDisplay(clientValue: OrgUnitClientValue) { + return ( + + ); +} + const valueConvertersForType = { [dataElementTypes.NUMBER]: stringifyNumber, [dataElementTypes.INTEGER]: stringifyNumber, @@ -70,7 +83,7 @@ const valueConvertersForType = { [dataElementTypes.AGE]: convertDateForView, [dataElementTypes.FILE_RESOURCE]: convertFileForDisplay, [dataElementTypes.IMAGE]: convertImageForDisplay, - [dataElementTypes.ORGANISATION_UNIT]: (rawValue: Object) => rawValue.name, + [dataElementTypes.ORGANISATION_UNIT]: convertOrgUnitForDisplay, [dataElementTypes.POLYGON]: () => 'Polygon', }; @@ -78,18 +91,15 @@ export function convertValue(value: any, type: $Keys, d if (!value && value !== 0 && value !== false) { return value; } - if (dataElement && dataElement.optionSet) { if (dataElement.type === dataElementTypes.MULTI_TEXT) { return dataElement.optionSet.getMultiOptionsText(value); } return dataElement.optionSet.getOptionText(value); } - // $FlowFixMe dataElementTypes flow error return valueConvertersForType[type] ? valueConvertersForType[type](value) : value; } - export function convertDateWithTimeForView(rawValue?: ?string): string { if (!rawValue) { return ''; } if (!moment(rawValue).hours() && !moment(rawValue).minutes()) { diff --git a/src/core_modules/capture-core/metadataRetrieval/orgUnitName/index.js b/src/core_modules/capture-core/metadataRetrieval/orgUnitName/index.js index f254f83a12..21e8b84212 100644 --- a/src/core_modules/capture-core/metadataRetrieval/orgUnitName/index.js +++ b/src/core_modules/capture-core/metadataRetrieval/orgUnitName/index.js @@ -1,6 +1,6 @@ // @flow export { - useOrgUnitName, + useOrgUnitNameWithAncestors, useOrgUnitNames, getOrgUnitNames, getCachedOrgUnitName, diff --git a/src/core_modules/capture-core/metadataRetrieval/orgUnitName/orgUnitName.js b/src/core_modules/capture-core/metadataRetrieval/orgUnitName/orgUnitName.js index ca45d9de40..56d222c119 100644 --- a/src/core_modules/capture-core/metadataRetrieval/orgUnitName/orgUnitName.js +++ b/src/core_modules/capture-core/metadataRetrieval/orgUnitName/orgUnitName.js @@ -14,13 +14,43 @@ const displayNamesQuery = { organisationUnits: { resource: 'organisationUnits', params: ({ filter }) => ({ - fields: 'id,displayName', + fields: 'id,displayName,ancestors[id,displayName]', filter: `id:in:[${filter}]`, pageSize: maxBatchSize, }), }, }; +const updateCacheWithOrgUnits = (organisationUnits) => { + organisationUnits.forEach(({ id, displayName, ancestors }) => { + if (ancestors.length > 0) { + displayNameCache[id] = { + displayName, + ancestor: ancestors[ancestors.length - 1].id, + }; + + ancestors.findLast((ancestor, index) => { + if (displayNameCache[ancestor.id]) { + // Ancestors already cached + return true; + } else if (index > 0) { + // Add orgunit WITH ancestor to cache + displayNameCache[ancestor.id] = { + displayName: ancestor.displayName, + ancestor: ancestors[index - 1].id, + }; + return false; + } + // Add orgunit WITHOUT ancestor to cache + displayNameCache[ancestor.id] = { displayName: ancestor.displayName }; + return true; + }); + } else { + displayNameCache[id] = { displayName }; + } + }); +}; + const createBatches = (orgUnitIds: Array): Array> => { const reducedOrgUnitIds = Array.from(orgUnitIds .filter(id => id) @@ -39,6 +69,17 @@ const createBatches = (orgUnitIds: Array): Array> => { return batches; }; +const getAncestors = (orgUnitId) => { + const orgUnit = displayNameCache[orgUnitId]; + + if (!orgUnit) return []; + + const ancestors = getAncestors(orgUnit.ancestor); + ancestors.push(orgUnit.displayName); + + return ancestors; +}; + // Works best with memoized input arrays. export const useOrgUnitNames = (orgUnitIds: Array): { loading: boolean, @@ -54,28 +95,19 @@ export const useOrgUnitNames = (orgUnitIds: Array): { const ready = !fetching && orgUnitIds === requestedArray; - const batches = useMemo( - () => createBatches(orgUnitIds), - [orgUnitIds], - ); - const filter = useMemo( - () => (fetching ? currentBatches[completedBatches].join(',') : ''), - [fetching, currentBatches, completedBatches], - ); - const result = useMemo( - () => (ready ? orgUnitIds.reduce((acc, id) => { - acc[id] = displayNameCache[id]; - return acc; - }, {}) : null), - [ready, orgUnitIds], - ); + const batches = useMemo(() => createBatches(orgUnitIds), [orgUnitIds]); + const filter = useMemo(() => (fetching ? currentBatches[completedBatches].join(',') : ''), [fetching, currentBatches, completedBatches]); + const result = useMemo(() => (ready ? orgUnitIds.reduce((acc, id) => { + acc[id] = displayNameCache[id] ? displayNameCache[id].displayName : null; + return acc; + }, {}) : null), [ready, orgUnitIds]); const onComplete = useCallback(({ organisationUnits }) => { - for (const { id, displayName } of organisationUnits.organisationUnits) { - displayNameCache[id] = displayName; - } + updateCacheWithOrgUnits(organisationUnits.organisationUnits); + const completeCount = completedBatches + 1; setCompletedBatches(completeCount); + if (completeCount === currentBatches.length) { setFetching(false); } else { @@ -83,22 +115,17 @@ export const useOrgUnitNames = (orgUnitIds: Array): { } }, [completedBatches, setCompletedBatches, currentBatches, setFetching, setFetchNextBatch]); - const onError = useCallback( - (fetchError) => { - setFetching(false); - setError(fetchError); - }, - [setFetching, setError], - ); + const onError = useCallback((fetchError) => { + setFetching(false); + setError(fetchError); + }, [setFetching, setError]); - const { refetch } = useDataQuery( - displayNamesQuery, { - variables: { filter }, - onComplete, - onError, - lazy: true, - }, - ); + const { refetch } = useDataQuery(displayNamesQuery, { + variables: { filter }, + onComplete, + onError, + lazy: true, + }); useEffect(() => { if (!fetching && orgUnitIds !== requestedArray) { @@ -111,7 +138,7 @@ export const useOrgUnitNames = (orgUnitIds: Array): { setCompletedBatches(0); } } - }, [fetching, orgUnitIds, requestedArray, batches, setRequestedArray, setCurrentBatches, setCompletedBatches, setFetching, setError]); + }, [fetching, orgUnitIds, requestedArray, batches]); useEffect(() => { if (fetchNextBatch) { @@ -120,7 +147,7 @@ export const useOrgUnitNames = (orgUnitIds: Array): { refetch({ filter }); } } - }, [fetchNextBatch, setFetchNextBatch, completedBatches, currentBatches, refetch, filter]); + }, [fetchNextBatch, completedBatches, currentBatches, refetch, filter]); return { loading: !ready && !error, @@ -130,44 +157,57 @@ export const useOrgUnitNames = (orgUnitIds: Array): { }; export async function getOrgUnitNames(orgUnitIds: Array, querySingleResource: QuerySingleResource): Promise<{| - [orgUnitId: string]: {| - id: string, +[orgUnitId: string]: {| + id: string, displayName: string, |} |}> { await Promise.all(createBatches(orgUnitIds) .map(batch => querySingleResource(displayNamesQuery.organisationUnits, { filter: batch.join(',') }) .then(({ organisationUnits }) => { - for (const { id, displayName } of organisationUnits) { - displayNameCache[id] = displayName; - } - }))); + updateCacheWithOrgUnits(organisationUnits); + }), + ), + ); return orgUnitIds.reduce((acc, orgUnitId) => { acc[orgUnitId] = { id: orgUnitId, - name: displayNameCache[orgUnitId], + name: displayNameCache[orgUnitId]?.displayName, }; return acc; }, {}); } -export const useOrgUnitName = (orgUnitId: ?string): { +export const useOrgUnitNameWithAncestors = (orgUnitId: ?string): { displayName?: string, - error?: any, + ancestors?: Array, + error: any, } => { - const cachedOrgUnitName = orgUnitId && displayNameCache[orgUnitId]; - const fetchId = cachedOrgUnitName ? undefined : orgUnitId; - const { orgUnit, error } = useOrganisationUnit(fetchId, 'displayName'); - if (cachedOrgUnitName) { - return { displayName: cachedOrgUnitName }; - } else if (orgUnit && fetchId) { - displayNameCache[orgUnit.id] = orgUnit.displayName; - if (orgUnit.id === fetchId) { - return { displayName: orgUnit.displayName, error }; - } + const cachedOrgUnit = orgUnitId && displayNameCache[orgUnitId]; + const fetchId = cachedOrgUnit ? undefined : orgUnitId; + const { orgUnit: fetchedOrgUnit, error } = useOrganisationUnit(fetchId, 'displayName,ancestors[id,displayName]'); + + if (orgUnitId && cachedOrgUnit) { + const ancestors = getAncestors(cachedOrgUnit.ancestor); + + return { + displayName: cachedOrgUnit.displayName, + ancestors, + error, + }; + } else if (fetchedOrgUnit && fetchId) { + updateCacheWithOrgUnits([fetchedOrgUnit]); + const ancestors = fetchedOrgUnit.ancestors.map(ancestor => ancestor.displayName); + + return { + displayName: fetchedOrgUnit.displayName, + ancestors, + error, + }; } + return { error }; }; -export const getCachedOrgUnitName = (orgUnitId: string): ?string => displayNameCache[orgUnitId]; +export const getCachedOrgUnitName = (orgUnitId: string): ?string => displayNameCache[orgUnitId]?.displayName; diff --git a/src/core_modules/capture-core/reducers/descriptions/enrollmentDomain.reducerDescription.js b/src/core_modules/capture-core/reducers/descriptions/enrollmentDomain.reducerDescription.js index 2eecc8429a..f7ca795289 100644 --- a/src/core_modules/capture-core/reducers/descriptions/enrollmentDomain.reducerDescription.js +++ b/src/core_modules/capture-core/reducers/descriptions/enrollmentDomain.reducerDescription.js @@ -23,6 +23,8 @@ const { COMMIT_ENROLLMENT_EVENTS, ADD_PERSISTED_ENROLLMENT_EVENTS, COMMIT_ENROLLMENT_AND_EVENTS, + DELETE_ENROLLMENT_EVENT, + UPDATE_ENROLLMENT_EVENT_STATUS, } = enrollmentSiteActionTypes; const setAssignee = (state, action) => { @@ -98,6 +100,19 @@ export const enrollmentDomainDesc = createReducerDescription( return { ...state, enrollment: { ...state.enrollment, events } }; }, + [DELETE_ENROLLMENT_EVENT]: (state, { payload: { eventId } }) => { + const events = state.enrollment.events?.filter(event => event.event !== eventId); + return { ...state, enrollment: { ...state.enrollment, events } }; + }, + [UPDATE_ENROLLMENT_EVENT_STATUS]: (state, { payload: { eventId, status, updatedAt } }) => { + const events = state.enrollment.events?.map(event => + (event.event === eventId + ? { ...event, status, updatedAt } + : event), + ); + + return { ...state, enrollment: { ...state.enrollment, events } }; + }, [UPDATE_OR_ADD_ENROLLMENT_EVENTS]: ( state, { payload: { events } }, diff --git a/src/core_modules/capture-core/rules/converters/dateUtils.js b/src/core_modules/capture-core/rules/converters/dateUtils.js index 674d82bcfc..9d4398635f 100644 --- a/src/core_modules/capture-core/rules/converters/dateUtils.js +++ b/src/core_modules/capture-core/rules/converters/dateUtils.js @@ -51,16 +51,10 @@ export const dateUtils: IDateUtils = { return momentToRulesDate(newDateMoment); }, compareDates: (firstRulesDate: ?string, secondRulesDate: ?string): number => { - const diff = dateUtils.daysBetween(secondRulesDate, firstRulesDate); - if (!diff) { - return 0; - } - if (diff < 0) { - return -1; - } - if (diff > 0) { - return 1; - } - return 0; + // Empty input dates will be replaced by "MAX_SAFE_INTEGER" when creating the timestamp. + // This ensures empty input will be bigger than any actual date + const firstDateTimestamp = firstRulesDate ? moment(firstRulesDate).valueOf() : Number.MAX_SAFE_INTEGER; + const secondDateTimestamp = secondRulesDate ? moment(secondRulesDate).valueOf() : Number.MAX_SAFE_INTEGER; + return firstDateTimestamp - secondDateTimestamp; }, }; diff --git a/src/core_modules/capture-ui/FlatList/flatList.types.js b/src/core_modules/capture-ui/FlatList/flatList.types.js index 94dc5a5b47..4159c32e1d 100644 --- a/src/core_modules/capture-ui/FlatList/flatList.types.js +++ b/src/core_modules/capture-ui/FlatList/flatList.types.js @@ -1,8 +1,6 @@ // @flow -import { type Node } from 'react'; - export type Props = {| - list: { reactKey: string, key: string, value: Node }[], + list: { reactKey: string, key: string, value: Object, valueType?: string }[], dataTest?: string, ...CssClasses, |};