diff --git a/.tx/config b/.tx/config index b85af354a6..2b6c02f453 100644 --- a/.tx/config +++ b/.tx/config @@ -1,6 +1,6 @@ [main] host = https://www.transifex.com -lang_map = fa_AF: prs, uz@Cyrl: uz, uz@Latn: uz_Latn +lang_map = fa_AF: prs, uz@Cyrl: uz_UZ_Cyrl, uz@Latn: uz_UZ_Latn [o:hisp-uio:p:app-capture-app:r:en-pot] file_filter = i18n/.po diff --git a/CHANGELOG.md b/CHANGELOG.md index 6487c20723..d334b2bc70 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,24 @@ +## [100.39.1](https://github.com/dhis2/capture-app/compare/v100.39.0...v100.39.1) (2023-09-13) + + +### Bug Fixes + +* **translations:** sync translations from transifex (master) ([0fab0eb](https://github.com/dhis2/capture-app/commit/0fab0eba7b63cbfd080990913313fc6b6ff2d38f)) + +# [100.39.0](https://github.com/dhis2/capture-app/compare/v100.38.0...v100.39.0) (2023-09-07) + + +### Features + +* [DHIS2-13343] hidden program stage rule effect ([#3406](https://github.com/dhis2/capture-app/issues/3406)) ([4ef2973](https://github.com/dhis2/capture-app/commit/4ef2973b71d6376f99db07e70bc4d51facb8018e)) + +# [100.38.0](https://github.com/dhis2/capture-app/compare/v100.37.0...v100.38.0) (2023-09-06) + + +### Features + +* [DHIS2-14334] edit enrollment date ([#3350](https://github.com/dhis2/capture-app/issues/3350)) ([9dd1b6a](https://github.com/dhis2/capture-app/commit/9dd1b6a046e94021ae4e63a67a3d6b16a099212d)) + # [100.37.0](https://github.com/dhis2/capture-app/compare/v100.36.0...v100.37.0) (2023-08-22) diff --git a/cypress/integration/EnrollmentPage/HiddenProgramStage.feature b/cypress/integration/EnrollmentPage/HiddenProgramStage.feature new file mode 100644 index 0000000000..4e6e427e3e --- /dev/null +++ b/cypress/integration/EnrollmentPage/HiddenProgramStage.feature @@ -0,0 +1,7 @@ +Feature: Hidden program stage + + Scenario: The user cannot add an event in a hidden program stage + Given you add an enrollment event that will result in a rule effect to hide a program stage + Then the New Postpartum care visit event button is disabled in the stages and events widget + And and an error is show in the Postpartum care visit stage + And the Postpartum care visit button is disabled in the enrollmentEventNew page diff --git a/cypress/integration/EnrollmentPage/HiddenProgramStage/index.js b/cypress/integration/EnrollmentPage/HiddenProgramStage/index.js new file mode 100644 index 0000000000..edf6b833bd --- /dev/null +++ b/cypress/integration/EnrollmentPage/HiddenProgramStage/index.js @@ -0,0 +1,66 @@ +import moment from 'moment'; + +const cleanUpIfApplicable = () => { + cy.buildApiUrl( + 'tracker', + 'trackedEntities/uW8Y7AIcRKA?program=WSGAb5XwJ3Y&fields=enrollments', + ) + .then(url => cy.request(url)) + .then(({ body }) => { + const enrollment = body.enrollments?.find(e => e.enrollment === 'fmhIsWXVDmS'); + const event = enrollment?.events?.find(e => e.programStage === 'PFDfvmGpsR3'); + if (!event) { + return null; + } + return cy + .buildApiUrl('events', event.event) + .then(eventUrl => + cy.request('DELETE', eventUrl)); + }); +}; + +Given('you add an enrollment event that will result in a rule effect to hide a program stage', () => { + cleanUpIfApplicable(); + cy.visit( + '/#/enrollmentEventNew?enrollmentId=fmhIsWXVDmS&orgUnitId=s7SLtx8wmRA&programId=WSGAb5XwJ3Y&stageId=PFDfvmGpsR3&teiId=uW8Y7AIcRKA', + ); + + cy.get('[data-test="capture-ui-input"]') + .eq(0) + .type(moment().format('YYYY-MM-DD')) + .blur(); + + cy + .get('[data-test="virtualized-select"]') + .eq(6) + .click() + .contains('Termination of pregnancy') + .click(); + + cy.contains('[data-test="dhis2-uicore-button"]', 'Save without completing').click(); +}); + +Then('the New Postpartum care visit event button is disabled in the stages and events widget', () => { + cy.contains('[data-test="create-new-button"]', 'New Postpartum care visit event') + .should('be.disabled'); +}); + +Then('and an error is show in the Postpartum care visit stage', () => { + cy.visit( + '/#/enrollmentEventNew?enrollmentId=fmhIsWXVDmS&orgUnitId=s7SLtx8wmRA&programId=WSGAb5XwJ3Y&teiId=uW8Y7AIcRKA&stageId=bbKtnxRZKEP', + ); + cy.contains('[data-test="dhis2-uicore-button"]', 'Complete') + .should('be.disabled'); + cy.contains('[data-test="dhis2-uicore-button"]', 'Save without completing') + .should('be.disabled'); + cy.contains('[data-test="dhis2-uicore-noticebox-content"]', 'You can\'t add any more Postpartum care visit events') + .should('exist'); +}); + +Then('the Postpartum care visit button is disabled in the enrollmentEventNew page', () => { + cy.visit( + '/#/enrollmentEventNew?enrollmentId=fmhIsWXVDmS&orgUnitId=s7SLtx8wmRA&programId=WSGAb5XwJ3Y&teiId=uW8Y7AIcRKA', + ); + + cy.contains('[data-test="program-stage-selector-button"]', 'Postpartum care visit').should('be.disabled'); +}); diff --git a/cypress/integration/WidgetsForEnrollmentPages/WidgetEnrollment/index.js b/cypress/integration/WidgetsForEnrollmentPages/WidgetEnrollment/index.js index 26146624d7..4584e1ba2a 100644 --- a/cypress/integration/WidgetsForEnrollmentPages/WidgetEnrollment/index.js +++ b/cypress/integration/WidgetsForEnrollmentPages/WidgetEnrollment/index.js @@ -19,18 +19,18 @@ Then('the enrollment widget should be opened', () => { }); Then('the user sees the enrollment date', () => { - cy.get('[data-test="widget-enrollment"]').within(() => { + cy.get('[data-test="widget-enrollment-enrollment-date"]').within(() => { cy.get('[data-test="widget-enrollment-icon-calendar"]').should('exist'); - cy.get('[data-test="widget-enrollment-enrollment-date"]') - .contains(`Date of enrollment ${getCurrentYear()}-08-01`) + cy.get('[data-test="widget-enrollment-date"]') + .contains(`Date of enrollment: ${getCurrentYear()}-08-01`) .should('exist'); }); }); Then('the user sees the incident date', () => { - cy.get('[data-test="widget-enrollment"]').within(() => { - cy.get('[data-test="widget-enrollment-incident-date"]') - .contains(`Date of birth ${getCurrentYear()}-08-01`) + cy.get('[data-test="widget-enrollment-incident-date"]').within(() => { + cy.get('[data-test="widget-enrollment-date"]') + .contains(`Date of birth: ${getCurrentYear()}-08-01`) .should('exist'); }); }); diff --git a/i18n/ar.po b/i18n/ar.po index f8e252c635..5960f8ec4d 100644 --- a/i18n/ar.po +++ b/i18n/ar.po @@ -1,14 +1,14 @@ # # Translators: # KRG HIS , 2020 -# phil_dhis2, 2022 +# Philip Larsen Donnelly, 2022 # Viktor Varland , 2023 # Hamza Assada <7amza.it@gmail.com>, 2023 # msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2023-06-27T06:20:33.460Z\n" +"POT-Creation-Date: 2023-09-04T07:07:59.195Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Hamza Assada <7amza.it@gmail.com>, 2023\n" "Language-Team: Arabic (https://app.transifex.com/hisp-uio/teams/100509/ar/)\n" @@ -75,6 +75,16 @@ msgstr "تاريخ التسجيل" msgid "Last updated" msgstr "آخر تحديث" +msgid "error encountered during field validation" +msgstr "حدث خطأ أثناء التحقق من صحة الحقل" + +msgid "error" +msgstr "خطأ" + +msgid "" +"Plugins are not yet available - Please contact your system administrator" +msgstr "" + msgid "This value is validating" msgstr "يتم التحقق من القيمة" @@ -368,9 +378,6 @@ msgstr "لا تزال بعض العمليات قيد التشغيل. يرجى ا msgid "Operations running" msgstr "العمليات الجارية" -msgid "Sort" -msgstr "فرز" - msgid "" "This event has unsaved changes. Leaving this page without saving will lose " "these changes. Are you sure you want to discard unsaved changes?" @@ -755,7 +762,7 @@ msgstr "المجدولة زمنياً" msgid "Refer" msgstr "" -msgid "You can’t add any more {{ programStageName }} events" +msgid "You can't add any more {{ programStageName }} events" msgstr "" msgid "Cancel without saving" @@ -819,6 +826,9 @@ msgstr "" msgid "New Enrollment in program{{escape}} {{programName}}" msgstr "" +msgid "Save {{trackedEntityTypeName}}" +msgstr "" + msgid "Save {{trackedEntityName}}" msgstr "" @@ -972,15 +982,6 @@ msgstr "يمكنك أيضًا اختيار برنامج من الشريط الع msgid "Choose a type to start searching" msgstr "اختر نوعًا لبدء البحث" -msgid "Fill in at least {{count}} attribute to search" -msgid_plural "Fill in at least {{count}} attribute to search" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" -msgstr[4] "" -msgstr[5] "" - msgid "Search {{name}}" msgstr "البحث عن {{name}}" @@ -1135,6 +1136,9 @@ msgstr "" msgid "Mark for follow-up" msgstr "اشر من أجل الملحق" +msgid "Existing dates for auto-generated events will not be updated." +msgstr "" + msgid "Enrollment date" msgstr "تاريخ التسجيل" @@ -1223,32 +1227,12 @@ msgid "" "The scheduled date matches the suggested date, but can be changed if needed." msgstr "" -msgid "The scheduled date is {{count}} days {{position}} the suggested date." -msgid_plural "" -"The scheduled date is {{count}} days {{position}} the suggested date." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" -msgstr[4] "" -msgstr[5] "" - msgid "after" msgstr "بعد" msgid "before" msgstr "قبل" -msgid "There are {{count}} scheduled event in {{orgUnitName}} on this day." -msgid_plural "" -"There are {{count}} scheduled event in {{orgUnitName}} on this day." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" -msgstr[4] "" -msgstr[5] "" - msgid "" "Scheduling an event in {{stageName}} for {{programName}} in {{orgUnitName}}" msgstr "" @@ -1496,9 +1480,6 @@ msgstr "" msgid "Set coordinate" msgstr "ضبط الإحداثية" -msgid "Page {{currentPage}}" -msgstr "صفحة {{currentPage}}" - msgid "Date" msgstr "التاريخ" @@ -1517,11 +1498,8 @@ msgstr "حتى تاريخ" msgid "To time" msgstr "إلى وقت" -msgid "error encountered during field validation" -msgstr "حدث خطأ أثناء التحقق من صحة الحقل" - -msgid "error" -msgstr "خطأ" +msgid "Page {{currentPage}}" +msgstr "صفحة {{currentPage}}" msgid "Delete polygon" msgstr "حذف المضلع" diff --git a/i18n/cs.po b/i18n/cs.po index dfa8f49095..e85d26ac5f 100644 --- a/i18n/cs.po +++ b/i18n/cs.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2023-06-01T08:11:59.116Z\n" +"POT-Creation-Date: 2023-09-04T07:07:59.195Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Jiří Podhorecký, 2023\n" "Language-Team: Czech (https://app.transifex.com/hisp-uio/teams/100509/cs/)\n" @@ -379,9 +379,6 @@ msgstr "Některé operace stále běží. Prosím, čekejte.." msgid "Operations running" msgstr "Provoz běží" -msgid "Sort" -msgstr "Třídit" - msgid "" "This event has unsaved changes. Leaving this page without saving will lose " "these changes. Are you sure you want to discard unsaved changes?" @@ -773,7 +770,7 @@ msgstr "Plán" msgid "Refer" msgstr "Odkazovat" -msgid "You can’t add any more {{ programStageName }} events" +msgid "You can't add any more {{ programStageName }} events" msgstr "" msgid "Cancel without saving" @@ -1159,6 +1156,9 @@ msgstr "Odstranit značku pro další sledování" msgid "Mark for follow-up" msgstr "Označit pro další sledování" +msgid "Existing dates for auto-generated events will not be updated." +msgstr "" + msgid "Enrollment date" msgstr "Datum zápisu" @@ -1506,9 +1506,6 @@ msgstr "Chyba při úpravě události, provedené změny nebyly uloženy" msgid "Set coordinate" msgstr "Nastavit souřadnice" -msgid "Page {{currentPage}}" -msgstr "Stránka {{currentPage}}" - msgid "Date" msgstr "datum" @@ -1527,6 +1524,9 @@ msgstr "K datu" msgid "To time" msgstr "Na čas" +msgid "Page {{currentPage}}" +msgstr "Stránka {{currentPage}}" + msgid "Delete polygon" msgstr "Smazat polygon" diff --git a/i18n/en.pot b/i18n/en.pot index b3c7223c6d..3f6b48ef4b 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: 2023-09-08T10:24:43.998Z\n" -"PO-Revision-Date: 2023-09-08T10:24:43.998Z\n" +"POT-Creation-Date: 2023-09-04T07:07:59.195Z\n" +"PO-Revision-Date: 2023-09-04T07:07:59.195Z\n" msgid "Choose one or more dates..." msgstr "Choose one or more dates..." @@ -1158,6 +1158,9 @@ msgstr "Remove mark for follow-up" msgid "Mark for follow-up" msgstr "Mark for follow-up" +msgid "Existing dates for auto-generated events will not be updated." +msgstr "Existing dates for auto-generated events will not be updated." + msgid "Enrollment date" msgstr "Enrollment date" diff --git a/i18n/es.po b/i18n/es.po index 836149c137..b74921f8ef 100644 --- a/i18n/es.po +++ b/i18n/es.po @@ -3,22 +3,23 @@ # Sergio Valenzuela , 2020 # ericbp , 2021 # Jaime Bosque , 2021 -# phil_dhis2, 2022 +# Philip Larsen Donnelly, 2022 # Gabriela Rodriguez , 2022 # Marta Vila , 2022 # Pablo Pajuelo Cabezas , 2022 -# Enzo Nicolas Rossi , 2023 # Viktor Varland , 2023 # Alison Andrade , 2023 # Janeth Cruz, 2023 # Prabhjot Singh, 2023 +# Christian Atavillos, 2023 +# Enzo Nicolas Rossi , 2023 # msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2023-06-01T08:11:59.116Z\n" +"POT-Creation-Date: 2023-09-04T07:07:59.195Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" -"Last-Translator: Prabhjot Singh, 2023\n" +"Last-Translator: Enzo Nicolas Rossi , 2023\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" @@ -93,6 +94,8 @@ msgstr "error" msgid "" "Plugins are not yet available - Please contact your system administrator" msgstr "" +"Los complementos plugin aún no están disponibles. Comuníquese con el " +"administrador del sistema." msgid "This value is validating" msgstr "Este valor está siendo validado" @@ -396,13 +399,13 @@ msgstr "Algunas operaciones aún se están ejecutando. Espere por favor.." msgid "Operations running" msgstr "Operaciones en ejecución" -msgid "Sort" -msgstr "Organizar" - msgid "" "This event has unsaved changes. Leaving this page without saving will lose " "these changes. Are you sure you want to discard unsaved changes?" msgstr "" +"Este evento tiene cambios no guardados. Si abandona esta página sin guardar," +" se perderán estos cambios. ¿Está seguro de que desea descartar los cambios " +"no guardados?" msgid "No events to display" msgstr "No hay eventos para mostrar" @@ -617,13 +620,13 @@ msgid "Write comment" msgstr "Escribir comentario" msgid "was blanked out and hidden by your last action" -msgstr "" +msgstr "fue borrado y oculto por tu última acción" msgid "Notice" -msgstr "" +msgstr "Aviso" msgid "Close the notice" -msgstr "" +msgstr "cerrar el aviso" msgid "Use new Enrollment dashboard for {{programName}}" msgstr "Usar el nuevo panel de inscripción para {{programName}}" @@ -639,18 +642,30 @@ msgid "" "functionality in Capture is ongoing and will be added in upcoming app " "releases." msgstr "" +"Al hacer clic en registrarse a continuación, comenzará a utilizar el nuevo " +"panel de inscripción en la aplicación Capture para este programa. Por el " +"momento, hay ciertas funciones de la Tracker Capture que aún no se han " +"agregado, incluida la función de relación y referencia. El trabajo para " +"incluir esta funcionalidad Tracker en Capture está en curso y se agregará en" +" próximos lanzamientos de la aplicación." msgid "" "The core team appreciates any feedback on this new functionality which is " "currently being beta tested, please report any issues and feedback in the " "DHIS2 JIRA project." msgstr "" +"El equipo de desarrollo agradece cualquier comentario sobre esta nueva " +"funcionalidad que actualmente se está probando en versión beta. Informe " +"cualquier problema y comentario en el proyecto de JIRA de DHIS2" msgid "" "Click the button below to opt-in to the new enrollment dashboard " "functionality in the Capture app (beta) for this Tracker program for all " "users." msgstr "" +"Haga clic en el botón de abajo para optar por la nueva funcionalidad del " +"panel de inscripción en la aplicación Capture (beta) para este programa " +"Tracker para todos los usuarios." msgid "Yes, opt in" msgstr "Sí, aceptar" @@ -796,8 +811,8 @@ msgstr "Programado" msgid "Refer" msgstr "Referir" -msgid "You can’t add any more {{ programStageName }} events" -msgstr "Nos e pueden agregar más eventos de {{ programStageName }}" +msgid "You can't add any more {{ programStageName }} events" +msgstr "" msgid "Cancel without saving" msgstr "Cancelar sin guardar" @@ -809,7 +824,7 @@ msgid "Program Stages could not be loaded" msgstr "No se pudieron cargar las etapas del programa" msgid "Stage" -msgstr "Fase" +msgstr "Etapa" msgid "Enrollment{{escape}} View Event" msgstr "Inscripción {{escape}} Ver evento" @@ -863,7 +878,7 @@ msgid "New Enrollment in program{{escape}} {{programName}}" msgstr "Nueva inscripción en el programa{{escape}} {{programName}}" msgid "Save {{trackedEntityTypeName}}" -msgstr "" +msgstr "Guardar {{trackedEntityTypeName}}" msgid "Save {{trackedEntityName}}" msgstr "Guardar {{trackedEntityName}}" @@ -1009,7 +1024,7 @@ msgid "Choose a program" msgstr "Elija un programa" msgid "Search for {{titleText}}" -msgstr "Buscar para {{titleText}}" +msgstr "Buscar por {{titleText}}" msgid "Search for" msgstr "Buscar por" @@ -1030,7 +1045,7 @@ msgid "Search by {{name}}" msgstr "Buscar por {{name}}" msgid "Search by attributes" -msgstr "Buscar por atributos" +msgstr "Buscar por atributos de {{trackedEntityName}}" msgid "all programs" msgstr "todos los programas" @@ -1119,7 +1134,7 @@ msgid "New {{trackedEntityName}} in {{programName}}" msgstr "Nuevo {{trackedEntityName}} en {{programName}}" msgid "Search for a {{trackedEntityName}} in {{programName}}" -msgstr "Buscar un {{trackedEntityName}} en {{programName}}" +msgstr "Buscar un(a) {{trackedEntityName}} en {{programName}}" msgid "To work with the selected program," msgstr "Para trabajar con el programa seleccionado," @@ -1193,6 +1208,9 @@ msgstr "Elimina la marca para el seguimiento" msgid "Mark for follow-up" msgstr "Marcar para seguimiento" +msgid "Existing dates for auto-generated events will not be updated." +msgstr "" + msgid "Enrollment date" msgstr "Fecha de inscripción" @@ -1365,7 +1383,7 @@ msgid "New {{ eventName }} event" msgstr "Nuevo evento {{ eventName }}" msgid "To open this event, please wait until saving is complete" -msgstr "" +msgstr "Para abrir este evento, espere hasta que se complete el guardado." msgid "Show {{ rest }} more" msgstr "Mostrar más {{ resto }} " @@ -1433,13 +1451,13 @@ msgid "Choose a program stage to filter by {{label}}" msgstr "Elija una etapa del programa para filtrar por {{label}}" msgid "Active enrollments" -msgstr "" +msgstr "Inscripciones activas" msgid "Completed enrollments" -msgstr "" +msgstr "Inscripciónes completadas" msgid "Cancelled enrollments" -msgstr "" +msgstr "Inscripciones canceladas " msgid "Working list could not be updated" msgstr "No se pudo actualizar la lista de trabajo" @@ -1554,9 +1572,6 @@ msgstr "Error al editar el evento, no se guardaron los cambios realizados" msgid "Set coordinate" msgstr "Establecer coordenadas" -msgid "Page {{currentPage}}" -msgstr "Página {{currentPage}}" - msgid "Date" msgstr "Fecha" @@ -1575,6 +1590,9 @@ msgstr "A la fecha" msgid "To time" msgstr "Hasta la hora" +msgid "Page {{currentPage}}" +msgstr "Página {{currentPage}}" + msgid "Delete polygon" msgstr "Eliminar polígono" @@ -1582,7 +1600,7 @@ msgid "Set area" msgstr "Establecer área" msgid "Area on map saved" -msgstr "" +msgstr "Área en el mapa guardada" msgid "Compatibility mode" msgstr "Modo de compatibilidad" diff --git a/i18n/es_419.po b/i18n/es_419.po index 737f30c127..42247a9fcb 100644 --- a/i18n/es_419.po +++ b/i18n/es_419.po @@ -1,14 +1,14 @@ # # Translators: -# Enzo Nicolas Rossi , 2023 # Jaime Bosque , 2023 +# Enzo Nicolas Rossi , 2023 # msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2023-06-27T06:20:33.460Z\n" +"POT-Creation-Date: 2023-09-04T07:07:59.195Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" -"Last-Translator: Jaime Bosque , 2023\n" +"Last-Translator: Enzo Nicolas Rossi , 2023\n" "Language-Team: Spanish (Latin America) (https://app.transifex.com/hisp-uio/teams/100509/es_419/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -75,6 +75,16 @@ msgstr "Fecha de inscripción" msgid "Last updated" msgstr "Última actualización" +msgid "error encountered during field validation" +msgstr "" + +msgid "error" +msgstr "" + +msgid "" +"Plugins are not yet available - Please contact your system administrator" +msgstr "" + msgid "This value is validating" msgstr "Este valor está siendo validado" @@ -267,7 +277,7 @@ msgid "Go back to event without saving relationship" msgstr "Volver al evento sin guardar la relación" msgid "Discard unsaved changes?" -msgstr "" +msgstr "¿Descartar los cambios no guardados?" msgid "" "Leaving this page will discard the selections you made for a new " @@ -379,9 +389,6 @@ msgstr "Algunas operaciones aún se están ejecutando. Espere por favor.." msgid "Operations running" msgstr "Operaciones en ejecución" -msgid "Sort" -msgstr "Clasificar" - msgid "" "This event has unsaved changes. Leaving this page without saving will lose " "these changes. Are you sure you want to discard unsaved changes?" @@ -495,6 +502,12 @@ msgstr "Cargando imagen" msgid "Select image" msgstr "Seleccionar imagen" +msgid "Type to filter options" +msgstr "" + +msgid "No match found" +msgstr "" + msgid "Search" msgstr "Buscar" @@ -770,7 +783,7 @@ msgstr "Programado" msgid "Refer" msgstr "Referir" -msgid "You can’t add any more {{ programStageName }} events" +msgid "You can't add any more {{ programStageName }} events" msgstr "" msgid "Cancel without saving" @@ -836,6 +849,9 @@ msgstr "" msgid "New Enrollment in program{{escape}} {{programName}}" msgstr "Nueva inscripción en el programa{{escape}} {{programName}}" +msgid "Save {{trackedEntityTypeName}}" +msgstr "" + msgid "Save {{trackedEntityName}}" msgstr "Guardar {{trackedEntityName}}" @@ -989,12 +1005,6 @@ msgstr "" msgid "Choose a type to start searching" msgstr "" -msgid "Fill in at least {{count}} attribute to search" -msgid_plural "Fill in at least {{count}} attribute to search" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - msgid "Search {{name}}" msgstr "" @@ -1147,6 +1157,9 @@ msgstr "" msgid "Mark for follow-up" msgstr "" +msgid "Existing dates for auto-generated events will not be updated." +msgstr "" + msgid "Enrollment date" msgstr "Fecha de inscripción" @@ -1235,26 +1248,12 @@ msgid "" "The scheduled date matches the suggested date, but can be changed if needed." msgstr "" -msgid "The scheduled date is {{count}} days {{position}} the suggested date." -msgid_plural "" -"The scheduled date is {{count}} days {{position}} the suggested date." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - msgid "after" msgstr "" msgid "before" msgstr "" -msgid "There are {{count}} scheduled event in {{orgUnitName}} on this day." -msgid_plural "" -"There are {{count}} scheduled event in {{orgUnitName}} on this day." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - msgid "" "Scheduling an event in {{stageName}} for {{programName}} in {{orgUnitName}}" msgstr "" @@ -1298,9 +1297,6 @@ msgstr "" msgid "Try again or contact your system administrator for support" msgstr "" -msgid "tracked entity instance" -msgstr "" - msgid "Fix errors in the form to continue." msgstr "" @@ -1313,6 +1309,9 @@ msgstr "Perfil de {{TETName}} " msgid "Edit" msgstr "" +msgid "tracked entity instance" +msgstr "" + msgid "New {{ eventName }} event" msgstr "Nuevo evento {{ eventName }}" @@ -1502,9 +1501,6 @@ msgstr "" msgid "Set coordinate" msgstr "" -msgid "Page {{currentPage}}" -msgstr "" - msgid "Date" msgstr "Fecha" @@ -1523,10 +1519,7 @@ msgstr "" msgid "To time" msgstr "" -msgid "error encountered during field validation" -msgstr "" - -msgid "error" +msgid "Page {{currentPage}}" msgstr "" msgid "Delete polygon" diff --git a/i18n/fr.po b/i18n/fr.po index 5ef57aa537..c0ce1365e1 100644 --- a/i18n/fr.po +++ b/i18n/fr.po @@ -1,7 +1,7 @@ # # Translators: # Edem Kossi , 2022 -# phil_dhis2, 2022 +# Philip Larsen Donnelly, 2022 # Karoline Tufte Lien , 2022 # tx_e2f_fr r25 , 2022 # Bram Piot , 2022 @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2023-06-01T08:11:59.116Z\n" +"POT-Creation-Date: 2023-09-04T07:07:59.195Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Yayra Gomado , 2023\n" "Language-Team: French (https://app.transifex.com/hisp-uio/teams/100509/fr/)\n" @@ -402,9 +402,6 @@ msgstr "Certaines opérations sont encore en cours. Veuillez patienter..." msgid "Operations running" msgstr "Opérations en cours" -msgid "Sort" -msgstr "Trier" - msgid "" "This event has unsaved changes. Leaving this page without saving will lose " "these changes. Are you sure you want to discard unsaved changes?" @@ -804,7 +801,7 @@ msgstr "Planning" msgid "Refer" msgstr "Référer" -msgid "You can’t add any more {{ programStageName }} events" +msgid "You can't add any more {{ programStageName }} events" msgstr "" msgid "Cancel without saving" @@ -1198,6 +1195,9 @@ msgstr "Supprimer le marquage pour suivi" msgid "Mark for follow-up" msgstr "Marquer pour suivi" +msgid "Existing dates for auto-generated events will not be updated." +msgstr "" + msgid "Enrollment date" msgstr "Date d'enrôlement" @@ -1559,9 +1559,6 @@ msgstr "" msgid "Set coordinate" msgstr "Définir les coordonnées" -msgid "Page {{currentPage}}" -msgstr "Page {{page en cours}}" - msgid "Date" msgstr "Date" @@ -1580,6 +1577,9 @@ msgstr "Date de fin" msgid "To time" msgstr "À" +msgid "Page {{currentPage}}" +msgstr "Page {{page en cours}}" + msgid "Delete polygon" msgstr "Supprimer polygone" diff --git a/i18n/id.po b/i18n/id.po index d370e1398a..c8da75e732 100644 --- a/i18n/id.po +++ b/i18n/id.po @@ -5,7 +5,7 @@ # Guardian Sanjaya , 2022 # Viktor Varland , 2022 # Untoro Dwi Raharjo , 2023 -# phil_dhis2, 2023 +# Philip Larsen Donnelly, 2023 # Aprisa Chrysantina , 2023 # Raja Fathurrahim, 2023 # Farida Sibuea , 2023 @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2023-06-27T06:20:33.460Z\n" +"POT-Creation-Date: 2023-09-04T07:07:59.195Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Farida Sibuea , 2023\n" "Language-Team: Indonesian (https://app.transifex.com/hisp-uio/teams/100509/id/)\n" @@ -81,6 +81,16 @@ msgstr "Tanggal pendaftaran" msgid "Last updated" msgstr "Terakhir diperbarui" +msgid "error encountered during field validation" +msgstr "kesalahan yang ditemui selama validasi bidang" + +msgid "error" +msgstr "kesalahan" + +msgid "" +"Plugins are not yet available - Please contact your system administrator" +msgstr "" + msgid "This value is validating" msgstr "Nilai ini memvalidasi" @@ -379,9 +389,6 @@ msgstr "Beberapa operasi masih berjalan. Mohon tunggu.." msgid "Operations running" msgstr "Operasi berjalan" -msgid "Sort" -msgstr "Urutkan" - msgid "" "This event has unsaved changes. Leaving this page without saving will lose " "these changes. Are you sure you want to discard unsaved changes?" @@ -773,7 +780,7 @@ msgstr "Jadwal" msgid "Refer" msgstr "Merujuk" -msgid "You can’t add any more {{ programStageName }} events" +msgid "You can't add any more {{ programStageName }} events" msgstr "" msgid "Cancel without saving" @@ -838,6 +845,9 @@ msgstr "" msgid "New Enrollment in program{{escape}} {{programName}}" msgstr "" +msgid "Save {{trackedEntityTypeName}}" +msgstr "" + msgid "Save {{trackedEntityName}}" msgstr "" @@ -995,10 +1005,6 @@ msgstr "" msgid "Choose a type to start searching" msgstr "Pilih jenis untuk mulai mencari" -msgid "Fill in at least {{count}} attribute to search" -msgid_plural "Fill in at least {{count}} attribute to search" -msgstr[0] "" - msgid "Search {{name}}" msgstr "Telusuri {{nama}}" @@ -1157,6 +1163,9 @@ msgstr "Hapus tanda untuk ditindaklanjuti" msgid "Mark for follow-up" msgstr "Tandai untuk follow up" +msgid "Existing dates for auto-generated events will not be updated." +msgstr "" + msgid "Enrollment date" msgstr "Tanggal pendaftaran" @@ -1245,22 +1254,12 @@ msgid "" "The scheduled date matches the suggested date, but can be changed if needed." msgstr "" -msgid "The scheduled date is {{count}} days {{position}} the suggested date." -msgid_plural "" -"The scheduled date is {{count}} days {{position}} the suggested date." -msgstr[0] "" - msgid "after" msgstr "Setelah" msgid "before" msgstr "Sebelum" -msgid "There are {{count}} scheduled event in {{orgUnitName}} on this day." -msgid_plural "" -"There are {{count}} scheduled event in {{orgUnitName}} on this day." -msgstr[0] "" - msgid "" "Scheduling an event in {{stageName}} for {{programName}} in {{orgUnitName}}" msgstr "" @@ -1508,9 +1507,6 @@ msgstr "" msgid "Set coordinate" msgstr "Tentukan koordinat" -msgid "Page {{currentPage}}" -msgstr "Halaman {{Halaman saat ini}}" - msgid "Date" msgstr "Tanggal" @@ -1529,11 +1525,8 @@ msgstr "Ke tanggal" msgid "To time" msgstr "Ke waktu" -msgid "error encountered during field validation" -msgstr "kesalahan yang ditemui selama validasi bidang" - -msgid "error" -msgstr "kesalahan" +msgid "Page {{currentPage}}" +msgstr "Halaman {{Halaman saat ini}}" msgid "Delete polygon" msgstr "Hapus poligon" diff --git a/i18n/km.po b/i18n/km.po index 410c983e2d..a36bcf4e1a 100644 --- a/i18n/km.po +++ b/i18n/km.po @@ -1,13 +1,13 @@ # # Translators: -# phil_dhis2, 2022 +# Philip Larsen Donnelly, 2022 # Viktor Varland , 2022 # channara rin, 2023 # msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2023-06-27T06:20:33.460Z\n" +"POT-Creation-Date: 2023-09-04T07:07:59.195Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: channara rin, 2023\n" "Language-Team: Khmer (https://app.transifex.com/hisp-uio/teams/100509/km/)\n" @@ -68,6 +68,16 @@ msgstr "" msgid "Last updated" msgstr "បាន​ធ្វើ​បច្ចុប្បន្នភាព​ចុងក្រោយ" +msgid "error encountered during field validation" +msgstr "" + +msgid "error" +msgstr "" + +msgid "" +"Plugins are not yet available - Please contact your system administrator" +msgstr "" + msgid "This value is validating" msgstr "" @@ -357,9 +367,6 @@ msgstr "" msgid "Operations running" msgstr "" -msgid "Sort" -msgstr "តម្រៀប" - msgid "" "This event has unsaved changes. Leaving this page without saving will lose " "these changes. Are you sure you want to discard unsaved changes?" @@ -744,7 +751,7 @@ msgstr "" msgid "Refer" msgstr "" -msgid "You can’t add any more {{ programStageName }} events" +msgid "You can't add any more {{ programStageName }} events" msgstr "" msgid "Cancel without saving" @@ -808,6 +815,9 @@ msgstr "" msgid "New Enrollment in program{{escape}} {{programName}}" msgstr "" +msgid "Save {{trackedEntityTypeName}}" +msgstr "" + msgid "Save {{trackedEntityName}}" msgstr "" @@ -961,10 +971,6 @@ msgstr "" msgid "Choose a type to start searching" msgstr "" -msgid "Fill in at least {{count}} attribute to search" -msgid_plural "Fill in at least {{count}} attribute to search" -msgstr[0] "" - msgid "Search {{name}}" msgstr "" @@ -1117,6 +1123,9 @@ msgstr "" msgid "Mark for follow-up" msgstr "" +msgid "Existing dates for auto-generated events will not be updated." +msgstr "" + msgid "Enrollment date" msgstr "ថ្ងៃខែឆ្នាំចុះឈ្មោះ" @@ -1205,22 +1214,12 @@ msgid "" "The scheduled date matches the suggested date, but can be changed if needed." msgstr "" -msgid "The scheduled date is {{count}} days {{position}} the suggested date." -msgid_plural "" -"The scheduled date is {{count}} days {{position}} the suggested date." -msgstr[0] "" - msgid "after" msgstr "" msgid "before" msgstr "" -msgid "There are {{count}} scheduled event in {{orgUnitName}} on this day." -msgid_plural "" -"There are {{count}} scheduled event in {{orgUnitName}} on this day." -msgstr[0] "" - msgid "" "Scheduling an event in {{stageName}} for {{programName}} in {{orgUnitName}}" msgstr "" @@ -1468,9 +1467,6 @@ msgstr "" msgid "Set coordinate" msgstr "" -msgid "Page {{currentPage}}" -msgstr "" - msgid "Date" msgstr "កាលបរិច្ឆេទ" @@ -1489,10 +1485,7 @@ msgstr "" msgid "To time" msgstr "" -msgid "error encountered during field validation" -msgstr "" - -msgid "error" +msgid "Page {{currentPage}}" msgstr "" msgid "Delete polygon" diff --git a/i18n/lo.po b/i18n/lo.po index 768265b14c..96a462426d 100644 --- a/i18n/lo.po +++ b/i18n/lo.po @@ -1,6 +1,6 @@ # # Translators: -# phil_dhis2, 2022 +# Philip Larsen Donnelly, 2022 # Thuy Nguyen , 2022 # Viktor Varland , 2023 # Saysamone Sibounma, 2023 @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2023-06-01T08:11:59.116Z\n" +"POT-Creation-Date: 2023-09-04T07:07:59.195Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Saysamone Sibounma, 2023\n" "Language-Team: Lao (https://app.transifex.com/hisp-uio/teams/100509/lo/)\n" @@ -368,9 +368,6 @@ msgstr "" msgid "Operations running" msgstr "" -msgid "Sort" -msgstr "Sort" - msgid "" "This event has unsaved changes. Leaving this page without saving will lose " "these changes. Are you sure you want to discard unsaved changes?" @@ -755,7 +752,7 @@ msgstr "ກຳນົດເວລາ" msgid "Refer" msgstr "" -msgid "You can’t add any more {{ programStageName }} events" +msgid "You can't add any more {{ programStageName }} events" msgstr "" msgid "Cancel without saving" @@ -1127,6 +1124,9 @@ msgstr "" msgid "Mark for follow-up" msgstr "ໝາຍໄວ້ເພື່ອຕິດຕາມ" +msgid "Existing dates for auto-generated events will not be updated." +msgstr "" + msgid "Enrollment date" msgstr "ວັນທີ່ລົງທະບຽນ" @@ -1468,9 +1468,6 @@ msgstr "" msgid "Set coordinate" msgstr "ຕັ້ງຄ່າເສັ້ນສະແດງ" -msgid "Page {{currentPage}}" -msgstr "" - msgid "Date" msgstr "ວັນທີ່" @@ -1489,6 +1486,9 @@ msgstr "ເຖີງວັນທີ່" msgid "To time" msgstr "" +msgid "Page {{currentPage}}" +msgstr "" + msgid "Delete polygon" msgstr "" diff --git a/i18n/my.po b/i18n/my.po index e9c710e301..370b8a7761 100644 --- a/i18n/my.po +++ b/i18n/my.po @@ -3,14 +3,14 @@ # Aung Kyi Min , 2019 # Viktor Varland , 2021 # Wanda , 2021 -# phil_dhis2, 2022 +# Philip Larsen Donnelly, 2022 # msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2023-05-15T10:06:53.276Z\n" +"POT-Creation-Date: 2023-09-04T07:07:59.195Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" -"Last-Translator: phil_dhis2, 2022\n" +"Last-Translator: Philip Larsen Donnelly, 2022\n" "Language-Team: Burmese (https://app.transifex.com/hisp-uio/teams/100509/my/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -69,6 +69,16 @@ msgstr "" msgid "Last updated" msgstr "နောက်ဆုံး အသစ်ဆက်ဆက်" +msgid "error encountered during field validation" +msgstr "" + +msgid "error" +msgstr "" + +msgid "" +"Plugins are not yet available - Please contact your system administrator" +msgstr "" + msgid "This value is validating" msgstr "" @@ -253,7 +263,7 @@ msgstr "" msgid "Go back to event without saving relationship" msgstr "" -msgid "Unsaved changes" +msgid "Discard unsaved changes?" msgstr "" msgid "" @@ -261,10 +271,10 @@ msgid "" "relationship" msgstr "" -msgid "Yes, discard" +msgid "Yes, discard changes" msgstr "" -msgid "No, stay here" +msgid "No, cancel" msgstr "" msgid "New event" @@ -334,21 +344,9 @@ msgstr "" msgid "Do you want to create another event?" msgstr "" -msgid "No, cancel" -msgstr "" - msgid "Yes, create new event" msgstr "" -msgid "Leaving this page will discard the changes you made to this event." -msgstr "" - -msgid "Warnings found" -msgstr "" - -msgid "Abort" -msgstr "" - msgid "Back to form" msgstr "" @@ -370,8 +368,10 @@ msgstr "" msgid "Operations running" msgstr "" -msgid "Sort" -msgstr "မျိုးတူခြင်း စုပေါင်းသည်။" +msgid "" +"This event has unsaved changes. Leaving this page without saving will lose " +"these changes. Are you sure you want to discard unsaved changes?" +msgstr "" msgid "No events to display" msgstr "" @@ -481,6 +481,12 @@ msgstr "" msgid "Select image" msgstr "" +msgid "Type to filter options" +msgstr "" + +msgid "No match found" +msgstr "" + msgid "Search" msgstr "" @@ -577,12 +583,42 @@ msgstr "" msgid "Write comment" msgstr "" +msgid "was blanked out and hidden by your last action" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Close the notice" +msgstr "" + msgid "Use new Enrollment dashboard for {{programName}}" msgstr "" msgid "Opt in for {{programName}}" msgstr "" +msgid "" +"By clicking opt-in below, you will start using the new enrollment dashboard " +"in the Capture app for this Tracker program. At the moment, there is certain" +" functionality from Tracker Capture that has not yet been added, including " +"relationship and referral functionality. The work on including this Tracker " +"functionality in Capture is ongoing and will be added in upcoming app " +"releases." +msgstr "" + +msgid "" +"The core team appreciates any feedback on this new functionality which is " +"currently being beta tested, please report any issues and feedback in the " +"DHIS2 JIRA project." +msgstr "" + +msgid "" +"Click the button below to opt-in to the new enrollment dashboard " +"functionality in the Capture app (beta) for this Tracker program for all " +"users." +msgstr "" + msgid "Yes, opt in" msgstr "" @@ -716,7 +752,7 @@ msgstr "" msgid "Refer" msgstr "" -msgid "You can’t add any more {{ programStageName }} events" +msgid "You can't add any more {{ programStageName }} events" msgstr "" msgid "Cancel without saving" @@ -780,6 +816,9 @@ msgstr "" msgid "New Enrollment in program{{escape}} {{programName}}" msgstr "" +msgid "Save {{trackedEntityTypeName}}" +msgstr "" + msgid "Save {{trackedEntityName}}" msgstr "" @@ -828,196 +867,189 @@ msgstr "" msgid "Register" msgstr "" -msgid "" -"Fill in at least {{minAttributesRequiredToSearch}} attributes to search" +msgid "Back" +msgstr "‌နောက်သို့ပြန်သွားသည်" + +msgid "events" msgstr "" -msgid "Search {{name}}" +msgid "event" msgstr "" -msgid "Search by {{name}}" +msgid "You don't have access to edit this event" msgstr "" -msgid "Search by attributes" +msgid "Edit event" msgstr "" -msgid "Fill in these fields to search{{escape}} {{ searchableAttributes }}" +msgid "Event details" msgstr "" msgid "" -"Fill in at least {{minAttributesRequiredToSearch}} of these fields to " -"search{{escape}} {{searchableAttributes}}" +"Leaving this page will discard any selections you made for a new " +"relationship" msgstr "" -msgid "Fill in this field to search{{escape}} {{searchableAttributes}}" +msgid "No one is assigned to this event" msgstr "" -msgid "No results found" -msgstr "No results found" - -msgid "" -"You can change your search terms and search again to find what you are " -"looking for." +msgid "Assign" msgstr "" -msgid "Register a user" +msgid "Event assigned to {{name}}" msgstr "" -msgid "Back to search" +msgid "Feedbacks" msgstr "" -msgid "An error has occurred" +msgid "Show all events" msgstr "" -msgid "Too many results" +msgid "Event could not be loaded. Are you sure it exists?" msgstr "" -msgid "Cannot search in all programs" +msgid "Event could not be loaded" msgstr "" -msgid "Back" -msgstr "‌နောက်သို့ပြန်သွားသည်" - -msgid "Search for {{titleText}}" +msgid "Organisation unit could not be loaded" msgstr "" -msgid "Search for" +msgid "Possible duplicates found" msgstr "" -msgid "" -"You can also choose a program from the top bar and search in that program" -msgstr "" +msgid "No results found" +msgstr "No results found" -msgid "Choose a type to start searching" +msgid "An error occurred loading possible duplicates" msgstr "" -msgid "all programs" +msgid "You don't have access to delete this relationship" msgstr "" -msgid "" -"Not finding the results you were looking for? Try to search all programs " -"that use type " +msgid "You don't have access to create any relationships" msgstr "" -msgid "Search in all programs" +msgid "Add relationship" msgstr "" -msgid "If none of search results match, you can create a new " +msgid "No results found for " msgstr "" -msgid "Create new" +msgid "Registering unit" msgstr "" -msgid "Saved lists in this program" +msgid "Choose a registering unit" msgstr "" -msgid "Saved lists offer quick access to your most used views in a program." +msgid "Clear selection" msgstr "" -msgid "" -"There are no saved lists in this program yet, create one using the button " -"below." +msgid "No programs available." msgstr "" -msgid "Create saved list" +msgid "Search for a program" msgstr "" -msgid "events" +msgid "Some programs are being filtered by the chosen registering unit" msgstr "" -msgid "event" +msgid "Show all programs" msgstr "" -msgid "You don't have access to edit this event" +msgid "Choose a program" msgstr "" -msgid "Edit event" +msgid "Search for {{titleText}}" msgstr "" -msgid "Event details" +msgid "Search for" msgstr "" msgid "" -"Leaving this page will discard any selections you made for a new " -"relationship" -msgstr "" - -msgid "No one is assigned to this event" +"You can also choose a program from the top bar and search in that program" msgstr "" -msgid "Assign" +msgid "Choose a type to start searching" msgstr "" -msgid "Event assigned to {{name}}" +msgid "Search {{name}}" msgstr "" -msgid "Feedbacks" +msgid "Search by {{name}}" msgstr "" -msgid "Show all events" +msgid "Search by attributes" msgstr "" -msgid "Event could not be loaded. Are you sure it exists?" +msgid "all programs" msgstr "" -msgid "Event could not be loaded" +msgid "" +"Not finding the results you were looking for? Try to search all programs " +"that use type " msgstr "" -msgid "Organisation unit could not be loaded" +msgid "Search in all programs" msgstr "" -msgid "Possible duplicates found" +msgid "If none of search results match, you can create a new " msgstr "" -msgid "An error occurred loading possible duplicates" +msgid "Create new" msgstr "" -msgid "You don't have access to delete this relationship" +msgid "Fill in these fields to search{{escape}} {{ searchableAttributes }}" msgstr "" -msgid "You don't have access to create any relationships" +msgid "" +"Fill in at least {{minAttributesRequiredToSearch}} of these fields to " +"search{{escape}} {{searchableAttributes}}" msgstr "" -msgid "Add relationship" +msgid "Fill in this field to search{{escape}} {{searchableAttributes}}" msgstr "" -msgid "No results found for " +msgid "" +"You can change your search terms and search again to find what you are " +"looking for." msgstr "" -msgid "Registering unit" +msgid "Back to search" msgstr "" -msgid "Choose a registering unit" +msgid "An error has occurred" msgstr "" -msgid "Clear selection" +msgid "Too many results" msgstr "" -msgid "No programs available." +msgid "Cannot search in all programs" msgstr "" -msgid "Search for a program" +msgid "Missing search criteria" msgstr "" -msgid "Some programs are being filtered by the chosen registering unit" +msgid "Results found" msgstr "" -msgid "Show all programs" +msgid "Selected program" msgstr "" -msgid "Choose a program" +msgid "Search {{uniqueAttrName}}" msgstr "" -msgid "Results found" +msgid "Saved lists in this program" msgstr "" -msgid "Selected program" +msgid "Saved lists offer quick access to your most used views in a program." msgstr "" -msgid "Search {{uniqueAttrName}}" +msgid "" +"There are no saved lists in this program yet, create one using the button " +"below." msgstr "" -msgid "Fill in at least {{minAttributesRequired}} attributes to search" +msgid "Create saved list" msgstr "" msgid "New {{trackedEntityName}} in {{programName}}" @@ -1092,6 +1124,9 @@ msgstr "" msgid "Mark for follow-up" msgstr "" +msgid "Existing dates for auto-generated events will not be updated." +msgstr "" + msgid "Enrollment date" msgstr "Дата зачисления" @@ -1180,22 +1215,12 @@ msgid "" "The scheduled date matches the suggested date, but can be changed if needed." msgstr "" -msgid "The scheduled date is {{count}} days {{position}} the suggested date." -msgid_plural "" -"The scheduled date is {{count}} days {{position}} the suggested date." -msgstr[0] "" - msgid "after" msgstr "" msgid "before" msgstr "" -msgid "There are {{count}} scheduled event in {{orgUnitName}} on this day." -msgid_plural "" -"There are {{count}} scheduled event in {{orgUnitName}} on this day." -msgstr[0] "" - msgid "" "Scheduling an event in {{stageName}} for {{programName}} in {{orgUnitName}}" msgstr "" @@ -1239,9 +1264,6 @@ msgstr "" msgid "Try again or contact your system administrator for support" msgstr "" -msgid "tracked entity instance" -msgstr "" - msgid "Fix errors in the form to continue." msgstr "" @@ -1254,10 +1276,13 @@ msgstr "" msgid "Edit" msgstr "တည်းဖြတ်သည်" +msgid "tracked entity instance" +msgstr "" + msgid "New {{ eventName }} event" msgstr "" -msgid "This event is not yet preserved and cannot be edited" +msgid "To open this event, please wait until saving is complete" msgstr "" msgid "Show {{ rest }} more" @@ -1308,6 +1333,9 @@ msgstr "" msgid "an error occurred loading working lists" msgstr "" +msgid "Assigned to" +msgstr "" + msgid "Registration Date" msgstr "စာရင်းသွင်းသော နေ့စွဲ" @@ -1317,10 +1345,16 @@ msgstr "" msgid "Enrollment status" msgstr "" -msgid "Assigned to" +msgid "Choose a program stage to filter by {{label}}" msgstr "" -msgid "Choose a program stage to filter by {{label}}" +msgid "Active enrollments" +msgstr "" + +msgid "Completed enrollments" +msgstr "" + +msgid "Cancelled enrollments" msgstr "" msgid "Working list could not be updated" @@ -1434,9 +1468,6 @@ msgstr "" msgid "Set coordinate" msgstr "" -msgid "Page {{currentPage}}" -msgstr "" - msgid "Date" msgstr "ရက်စွဲ" @@ -1455,10 +1486,7 @@ msgstr "နေ့စွဲ သို့" msgid "To time" msgstr "" -msgid "error encountered during field validation" -msgstr "" - -msgid "error" +msgid "Page {{currentPage}}" msgstr "" msgid "Delete polygon" @@ -1467,5 +1495,8 @@ msgstr "" msgid "Set area" msgstr "" +msgid "Area on map saved" +msgstr "" + msgid "Compatibility mode" msgstr "" diff --git a/i18n/nb.po b/i18n/nb.po index 8839054d57..036767eb33 100644 --- a/i18n/nb.po +++ b/i18n/nb.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2023-06-01T08:11:59.116Z\n" +"POT-Creation-Date: 2023-09-04T07:07:59.195Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Karoline Tufte Lien , 2023\n" "Language-Team: Norwegian Bokmål (https://app.transifex.com/hisp-uio/teams/100509/nb/)\n" @@ -381,9 +381,6 @@ msgstr "Noen operasjoner kjører fortsatt. Vennligst vent.." msgid "Operations running" msgstr "Operasjoner kjører" -msgid "Sort" -msgstr "Sorter" - msgid "" "This event has unsaved changes. Leaving this page without saving will lose " "these changes. Are you sure you want to discard unsaved changes?" @@ -776,7 +773,7 @@ msgstr "Planlegg" msgid "Refer" msgstr "Henvis" -msgid "You can’t add any more {{ programStageName }} events" +msgid "You can't add any more {{ programStageName }} events" msgstr "" msgid "Cancel without saving" @@ -1160,6 +1157,9 @@ msgstr "Fjern merk for oppfølging" msgid "Mark for follow-up" msgstr "Merk for oppfølging" +msgid "Existing dates for auto-generated events will not be updated." +msgstr "" + msgid "Enrollment date" msgstr "Registreringsdato" @@ -1507,9 +1507,6 @@ msgstr "Feil under redigering av hendelsen, endringer ble ikke lagret" msgid "Set coordinate" msgstr "Sett koordinater" -msgid "Page {{currentPage}}" -msgstr "Side {{currentPage}}" - msgid "Date" msgstr "Dato" @@ -1528,6 +1525,9 @@ msgstr "Til dato" msgid "To time" msgstr "Til klokkeslett" +msgid "Page {{currentPage}}" +msgstr "Side {{currentPage}}" + msgid "Delete polygon" msgstr "Slett polygon" diff --git a/i18n/nl.po b/i18n/nl.po index 6d1c23709e..a8a6c3ffe5 100644 --- a/i18n/nl.po +++ b/i18n/nl.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2023-06-01T08:11:59.116Z\n" +"POT-Creation-Date: 2023-09-04T07:07:59.195Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Charel van den Elsen, 2023\n" "Language-Team: Dutch (https://app.transifex.com/hisp-uio/teams/100509/nl/)\n" @@ -391,9 +391,6 @@ msgstr "Sommige operaties lopen nog. Even geduld aub.." msgid "Operations running" msgstr "Operaties lopen" -msgid "Sort" -msgstr "Soort" - msgid "" "This event has unsaved changes. Leaving this page without saving will lose " "these changes. Are you sure you want to discard unsaved changes?" @@ -808,8 +805,8 @@ msgstr "Schema" msgid "Refer" msgstr "Refereren" -msgid "You can’t add any more {{ programStageName }} events" -msgstr "Je kunt geen {{ programStageNaam }} evenementen meer toevoegen" +msgid "You can't add any more {{ programStageName }} events" +msgstr "" msgid "Cancel without saving" msgstr "Annuleer zonder op te slaan" @@ -1205,6 +1202,9 @@ msgstr "Markering verwijderen voor vervolg" msgid "Mark for follow-up" msgstr "Markeer voor vervolg" +msgid "Existing dates for auto-generated events will not be updated." +msgstr "" + msgid "Enrollment date" msgstr "Inschrijvingsdatum" @@ -1563,9 +1563,6 @@ msgstr "" msgid "Set coordinate" msgstr "Coördinaat instellen" -msgid "Page {{currentPage}}" -msgstr "Pagina {{huidigePagina}}" - msgid "Date" msgstr "Datum" @@ -1584,6 +1581,9 @@ msgstr "Daten" msgid "To time" msgstr "Timen" +msgid "Page {{currentPage}}" +msgstr "Pagina {{huidigePagina}}" + msgid "Delete polygon" msgstr "Polygoon verwijderen" diff --git a/i18n/pt.po b/i18n/pt.po index 5fa7e96cad..eb4e766806 100644 --- a/i18n/pt.po +++ b/i18n/pt.po @@ -1,7 +1,7 @@ # # Translators: # David Júnior , 2021 -# phil_dhis2, 2022 +# Philip Larsen Donnelly, 2022 # Ge Joao , 2022 # Gabriela Rodriguez , 2022 # Viktor Varland , 2023 @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2023-06-01T08:11:59.116Z\n" +"POT-Creation-Date: 2023-09-04T07:07:59.195Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Sheila André , 2023\n" "Language-Team: Portuguese (https://app.transifex.com/hisp-uio/teams/100509/pt/)\n" @@ -389,9 +389,6 @@ msgstr "Algumas operações ainda estão em execução. Por favor, espere.." msgid "Operations running" msgstr "Operações em execução" -msgid "Sort" -msgstr "Ordenar" - msgid "" "This event has unsaved changes. Leaving this page without saving will lose " "these changes. Are you sure you want to discard unsaved changes?" @@ -801,8 +798,8 @@ msgstr "Cronograma" msgid "Refer" msgstr "Referir" -msgid "You can’t add any more {{ programStageName }} events" -msgstr "Não pode adicionar mais eventos {{ programStageName }}" +msgid "You can't add any more {{ programStageName }} events" +msgstr "" msgid "Cancel without saving" msgstr "Cancelar sem gravar" @@ -1196,6 +1193,9 @@ msgstr "Remova a marca para acompanhamento" msgid "Mark for follow-up" msgstr "Marcar para acompanhamento" +msgid "Existing dates for auto-generated events will not be updated." +msgstr "" + msgid "Enrollment date" msgstr "Data de inscrição" @@ -1555,9 +1555,6 @@ msgstr "Erro ao editar o evento, as alterações feitas não foram gravadas" msgid "Set coordinate" msgstr "Definir coordenada" -msgid "Page {{currentPage}}" -msgstr "Página {{currentPage}}" - msgid "Date" msgstr "Encontro" @@ -1576,6 +1573,9 @@ msgstr "Até à data" msgid "To time" msgstr "Para o tempo" +msgid "Page {{currentPage}}" +msgstr "Página {{currentPage}}" + msgid "Delete polygon" msgstr "Excluir polígono" diff --git a/i18n/pt_BR.po b/i18n/pt_BR.po index b87666a42c..0ec8fcac15 100644 --- a/i18n/pt_BR.po +++ b/i18n/pt_BR.po @@ -2,14 +2,14 @@ # Translators: # Oscar Mesones Lapouble , 2021 # Viktor Varland , 2021 -# phil_dhis2, 2022 +# Philip Larsen Donnelly, 2022 # msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2023-05-15T10:06:53.276Z\n" +"POT-Creation-Date: 2023-09-04T07:07:59.195Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" -"Last-Translator: phil_dhis2, 2022\n" +"Last-Translator: Philip Larsen Donnelly, 2022\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" @@ -68,6 +68,16 @@ msgstr "Data de Inscrição" msgid "Last updated" msgstr "Última actualização" +msgid "error encountered during field validation" +msgstr "" + +msgid "error" +msgstr "" + +msgid "" +"Plugins are not yet available - Please contact your system administrator" +msgstr "" + msgid "This value is validating" msgstr "" @@ -252,7 +262,7 @@ msgstr "" msgid "Go back to event without saving relationship" msgstr "" -msgid "Unsaved changes" +msgid "Discard unsaved changes?" msgstr "" msgid "" @@ -260,10 +270,10 @@ msgid "" "relationship" msgstr "" -msgid "Yes, discard" +msgid "Yes, discard changes" msgstr "" -msgid "No, stay here" +msgid "No, cancel" msgstr "" msgid "New event" @@ -333,21 +343,9 @@ msgstr "" msgid "Do you want to create another event?" msgstr "" -msgid "No, cancel" -msgstr "" - msgid "Yes, create new event" msgstr "" -msgid "Leaving this page will discard the changes you made to this event." -msgstr "" - -msgid "Warnings found" -msgstr "" - -msgid "Abort" -msgstr "" - msgid "Back to form" msgstr "" @@ -369,8 +367,10 @@ msgstr "" msgid "Operations running" msgstr "" -msgid "Sort" -msgstr "Ordenar" +msgid "" +"This event has unsaved changes. Leaving this page without saving will lose " +"these changes. Are you sure you want to discard unsaved changes?" +msgstr "" msgid "No events to display" msgstr "" @@ -480,6 +480,12 @@ msgstr "" msgid "Select image" msgstr "" +msgid "Type to filter options" +msgstr "" + +msgid "No match found" +msgstr "" + msgid "Search" msgstr "Pesquisar" @@ -576,12 +582,42 @@ msgstr "" msgid "Write comment" msgstr "" +msgid "was blanked out and hidden by your last action" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Close the notice" +msgstr "" + msgid "Use new Enrollment dashboard for {{programName}}" msgstr "" msgid "Opt in for {{programName}}" msgstr "" +msgid "" +"By clicking opt-in below, you will start using the new enrollment dashboard " +"in the Capture app for this Tracker program. At the moment, there is certain" +" functionality from Tracker Capture that has not yet been added, including " +"relationship and referral functionality. The work on including this Tracker " +"functionality in Capture is ongoing and will be added in upcoming app " +"releases." +msgstr "" + +msgid "" +"The core team appreciates any feedback on this new functionality which is " +"currently being beta tested, please report any issues and feedback in the " +"DHIS2 JIRA project." +msgstr "" + +msgid "" +"Click the button below to opt-in to the new enrollment dashboard " +"functionality in the Capture app (beta) for this Tracker program for all " +"users." +msgstr "" + msgid "Yes, opt in" msgstr "" @@ -715,7 +751,7 @@ msgstr "Programar" msgid "Refer" msgstr "" -msgid "You can’t add any more {{ programStageName }} events" +msgid "You can't add any more {{ programStageName }} events" msgstr "" msgid "Cancel without saving" @@ -779,6 +815,9 @@ msgstr "" msgid "New Enrollment in program{{escape}} {{programName}}" msgstr "" +msgid "Save {{trackedEntityTypeName}}" +msgstr "" + msgid "Save {{trackedEntityName}}" msgstr "" @@ -827,196 +866,189 @@ msgstr "" msgid "Register" msgstr "" -msgid "" -"Fill in at least {{minAttributesRequiredToSearch}} attributes to search" -msgstr "" +msgid "Back" +msgstr "Voltar" -msgid "Search {{name}}" +msgid "events" msgstr "" -msgid "Search by {{name}}" +msgid "event" msgstr "" -msgid "Search by attributes" +msgid "You don't have access to edit this event" msgstr "" -msgid "Fill in these fields to search{{escape}} {{ searchableAttributes }}" +msgid "Edit event" msgstr "" -msgid "" -"Fill in at least {{minAttributesRequiredToSearch}} of these fields to " -"search{{escape}} {{searchableAttributes}}" +msgid "Event details" msgstr "" -msgid "Fill in this field to search{{escape}} {{searchableAttributes}}" +msgid "" +"Leaving this page will discard any selections you made for a new " +"relationship" msgstr "" -msgid "No results found" +msgid "No one is assigned to this event" msgstr "" -msgid "" -"You can change your search terms and search again to find what you are " -"looking for." -msgstr "" +msgid "Assign" +msgstr "Atribuir" -msgid "Register a user" +msgid "Event assigned to {{name}}" msgstr "" -msgid "Back to search" +msgid "Feedbacks" msgstr "" -msgid "An error has occurred" +msgid "Show all events" msgstr "" -msgid "Too many results" +msgid "Event could not be loaded. Are you sure it exists?" msgstr "" -msgid "Cannot search in all programs" +msgid "Event could not be loaded" msgstr "" -msgid "Back" -msgstr "Voltar" - -msgid "Search for {{titleText}}" +msgid "Organisation unit could not be loaded" msgstr "" -msgid "Search for" +msgid "Possible duplicates found" msgstr "" -msgid "" -"You can also choose a program from the top bar and search in that program" +msgid "No results found" msgstr "" -msgid "Choose a type to start searching" +msgid "An error occurred loading possible duplicates" msgstr "" -msgid "all programs" +msgid "You don't have access to delete this relationship" msgstr "" -msgid "" -"Not finding the results you were looking for? Try to search all programs " -"that use type " +msgid "You don't have access to create any relationships" msgstr "" -msgid "Search in all programs" +msgid "Add relationship" msgstr "" -msgid "If none of search results match, you can create a new " +msgid "No results found for " msgstr "" -msgid "Create new" +msgid "Registering unit" msgstr "" -msgid "Saved lists in this program" +msgid "Choose a registering unit" msgstr "" -msgid "Saved lists offer quick access to your most used views in a program." +msgid "Clear selection" msgstr "" -msgid "" -"There are no saved lists in this program yet, create one using the button " -"below." +msgid "No programs available." msgstr "" -msgid "Create saved list" +msgid "Search for a program" msgstr "" -msgid "events" +msgid "Some programs are being filtered by the chosen registering unit" msgstr "" -msgid "event" +msgid "Show all programs" msgstr "" -msgid "You don't have access to edit this event" +msgid "Choose a program" msgstr "" -msgid "Edit event" +msgid "Search for {{titleText}}" msgstr "" -msgid "Event details" +msgid "Search for" msgstr "" msgid "" -"Leaving this page will discard any selections you made for a new " -"relationship" +"You can also choose a program from the top bar and search in that program" msgstr "" -msgid "No one is assigned to this event" +msgid "Choose a type to start searching" msgstr "" -msgid "Assign" -msgstr "Atribuir" - -msgid "Event assigned to {{name}}" +msgid "Search {{name}}" msgstr "" -msgid "Feedbacks" +msgid "Search by {{name}}" msgstr "" -msgid "Show all events" +msgid "Search by attributes" msgstr "" -msgid "Event could not be loaded. Are you sure it exists?" +msgid "all programs" msgstr "" -msgid "Event could not be loaded" +msgid "" +"Not finding the results you were looking for? Try to search all programs " +"that use type " msgstr "" -msgid "Organisation unit could not be loaded" +msgid "Search in all programs" msgstr "" -msgid "Possible duplicates found" +msgid "If none of search results match, you can create a new " msgstr "" -msgid "An error occurred loading possible duplicates" +msgid "Create new" msgstr "" -msgid "You don't have access to delete this relationship" +msgid "Fill in these fields to search{{escape}} {{ searchableAttributes }}" msgstr "" -msgid "You don't have access to create any relationships" +msgid "" +"Fill in at least {{minAttributesRequiredToSearch}} of these fields to " +"search{{escape}} {{searchableAttributes}}" msgstr "" -msgid "Add relationship" +msgid "Fill in this field to search{{escape}} {{searchableAttributes}}" msgstr "" -msgid "No results found for " +msgid "" +"You can change your search terms and search again to find what you are " +"looking for." msgstr "" -msgid "Registering unit" +msgid "Back to search" msgstr "" -msgid "Choose a registering unit" +msgid "An error has occurred" msgstr "" -msgid "Clear selection" +msgid "Too many results" msgstr "" -msgid "No programs available." +msgid "Cannot search in all programs" msgstr "" -msgid "Search for a program" +msgid "Missing search criteria" msgstr "" -msgid "Some programs are being filtered by the chosen registering unit" +msgid "Results found" msgstr "" -msgid "Show all programs" +msgid "Selected program" msgstr "" -msgid "Choose a program" +msgid "Search {{uniqueAttrName}}" msgstr "" -msgid "Results found" +msgid "Saved lists in this program" msgstr "" -msgid "Selected program" +msgid "Saved lists offer quick access to your most used views in a program." msgstr "" -msgid "Search {{uniqueAttrName}}" +msgid "" +"There are no saved lists in this program yet, create one using the button " +"below." msgstr "" -msgid "Fill in at least {{minAttributesRequired}} attributes to search" +msgid "Create saved list" msgstr "" msgid "New {{trackedEntityName}} in {{programName}}" @@ -1091,6 +1123,9 @@ msgstr "" msgid "Mark for follow-up" msgstr "" +msgid "Existing dates for auto-generated events will not be updated." +msgstr "" + msgid "Enrollment date" msgstr "" @@ -1179,26 +1214,12 @@ msgid "" "The scheduled date matches the suggested date, but can be changed if needed." msgstr "" -msgid "The scheduled date is {{count}} days {{position}} the suggested date." -msgid_plural "" -"The scheduled date is {{count}} days {{position}} the suggested date." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - msgid "after" msgstr "" msgid "before" msgstr "" -msgid "There are {{count}} scheduled event in {{orgUnitName}} on this day." -msgid_plural "" -"There are {{count}} scheduled event in {{orgUnitName}} on this day." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - msgid "" "Scheduling an event in {{stageName}} for {{programName}} in {{orgUnitName}}" msgstr "" @@ -1242,9 +1263,6 @@ msgstr "" msgid "Try again or contact your system administrator for support" msgstr "" -msgid "tracked entity instance" -msgstr "" - msgid "Fix errors in the form to continue." msgstr "" @@ -1257,10 +1275,13 @@ msgstr "" msgid "Edit" msgstr "Editar" +msgid "tracked entity instance" +msgstr "" + msgid "New {{ eventName }} event" msgstr "" -msgid "This event is not yet preserved and cannot be edited" +msgid "To open this event, please wait until saving is complete" msgstr "" msgid "Show {{ rest }} more" @@ -1311,6 +1332,9 @@ msgstr "" msgid "an error occurred loading working lists" msgstr "" +msgid "Assigned to" +msgstr "Atribuido a" + msgid "Registration Date" msgstr "Data do Registo" @@ -1320,12 +1344,18 @@ msgstr "" msgid "Enrollment status" msgstr "" -msgid "Assigned to" -msgstr "Atribuido a" - msgid "Choose a program stage to filter by {{label}}" msgstr "" +msgid "Active enrollments" +msgstr "" + +msgid "Completed enrollments" +msgstr "" + +msgid "Cancelled enrollments" +msgstr "" + msgid "Working list could not be updated" msgstr "" @@ -1437,9 +1467,6 @@ msgstr "" msgid "Set coordinate" msgstr "" -msgid "Page {{currentPage}}" -msgstr "" - msgid "Date" msgstr "Data" @@ -1458,10 +1485,7 @@ msgstr "Até à data" msgid "To time" msgstr "" -msgid "error encountered during field validation" -msgstr "" - -msgid "error" +msgid "Page {{currentPage}}" msgstr "" msgid "Delete polygon" @@ -1470,5 +1494,8 @@ msgstr "" msgid "Set area" msgstr "" +msgid "Area on map saved" +msgstr "" + msgid "Compatibility mode" msgstr "" diff --git a/i18n/ro.po b/i18n/ro.po index 369ff6f464..c0eda2217d 100644 --- a/i18n/ro.po +++ b/i18n/ro.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2023-06-27T06:20:33.460Z\n" +"POT-Creation-Date: 2023-09-04T07:07:59.195Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Valeriu Plesca , 2022\n" "Language-Team: Romanian (https://app.transifex.com/hisp-uio/teams/100509/ro/)\n" @@ -73,6 +73,16 @@ msgstr "Data înrolării" msgid "Last updated" msgstr "Ultima actualizare" +msgid "error encountered during field validation" +msgstr "eroare întâlnită în timpul validării câmpului" + +msgid "error" +msgstr "eroare" + +msgid "" +"Plugins are not yet available - Please contact your system administrator" +msgstr "" + msgid "This value is validating" msgstr "Această valoare se validează" @@ -370,9 +380,6 @@ msgstr "Unele operațiuni sunt încă în desfășurare. Așteptați.." msgid "Operations running" msgstr "Operațiuni în derulare" -msgid "Sort" -msgstr "Sortare" - msgid "" "This event has unsaved changes. Leaving this page without saving will lose " "these changes. Are you sure you want to discard unsaved changes?" @@ -486,6 +493,12 @@ msgstr "Încărcare imagine" msgid "Select image" msgstr "Selectați imaginea" +msgid "Type to filter options" +msgstr "" + +msgid "No match found" +msgstr "" + msgid "Search" msgstr "Căutare" @@ -751,7 +764,7 @@ msgstr "" msgid "Refer" msgstr "" -msgid "You can’t add any more {{ programStageName }} events" +msgid "You can't add any more {{ programStageName }} events" msgstr "" msgid "Cancel without saving" @@ -817,6 +830,9 @@ msgstr "" msgid "New Enrollment in program{{escape}} {{programName}}" msgstr "" +msgid "Save {{trackedEntityTypeName}}" +msgstr "" + msgid "Save {{trackedEntityName}}" msgstr "" @@ -972,12 +988,6 @@ msgstr "" msgid "Choose a type to start searching" msgstr "" -msgid "Fill in at least {{count}} attribute to search" -msgid_plural "Fill in at least {{count}} attribute to search" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - msgid "Search {{name}}" msgstr "Căutare {{name}}" @@ -1132,6 +1142,9 @@ msgstr "" msgid "Mark for follow-up" msgstr "" +msgid "Existing dates for auto-generated events will not be updated." +msgstr "" + msgid "Enrollment date" msgstr "Data înrolării" @@ -1220,26 +1233,12 @@ msgid "" "The scheduled date matches the suggested date, but can be changed if needed." msgstr "" -msgid "The scheduled date is {{count}} days {{position}} the suggested date." -msgid_plural "" -"The scheduled date is {{count}} days {{position}} the suggested date." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - msgid "after" msgstr "după" msgid "before" msgstr "pînă la" -msgid "There are {{count}} scheduled event in {{orgUnitName}} on this day." -msgid_plural "" -"There are {{count}} scheduled event in {{orgUnitName}} on this day." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - msgid "" "Scheduling an event in {{stageName}} for {{programName}} in {{orgUnitName}}" msgstr "" @@ -1284,9 +1283,6 @@ msgid "Try again or contact your system administrator for support" msgstr "" "Încercați din nou sau contactați administratorul de sistem pentru asistență" -msgid "tracked entity instance" -msgstr "" - msgid "Fix errors in the form to continue." msgstr "Corectați erorile din formular pentru a continua." @@ -1299,6 +1295,9 @@ msgstr "" msgid "Edit" msgstr "Editare" +msgid "tracked entity instance" +msgstr "" + msgid "New {{ eventName }} event" msgstr "Eveniment nou {{ eventName }}" @@ -1488,9 +1487,6 @@ msgstr "" msgid "Set coordinate" msgstr "Setarea coordonatelor" -msgid "Page {{currentPage}}" -msgstr "Pagina {{currentPage}}" - msgid "Date" msgstr "Data" @@ -1509,11 +1505,8 @@ msgstr "Până la data" msgid "To time" msgstr "Pînă la ora" -msgid "error encountered during field validation" -msgstr "eroare întâlnită în timpul validării câmpului" - -msgid "error" -msgstr "eroare" +msgid "Page {{currentPage}}" +msgstr "Pagina {{currentPage}}" msgid "Delete polygon" msgstr "Lichidare poligon" diff --git a/i18n/ru.po b/i18n/ru.po index fed0935162..fd40060b7b 100644 --- a/i18n/ru.po +++ b/i18n/ru.po @@ -2,14 +2,14 @@ # Translators: # Ulanbek Abakirov , 2020 # Wanda , 2021 -# phil_dhis2, 2022 +# Philip Larsen Donnelly, 2022 # Valeriu Plesca , 2022 # Viktor Varland , 2023 # msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2023-06-27T06:20:33.460Z\n" +"POT-Creation-Date: 2023-09-04T07:07:59.195Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Viktor Varland , 2023\n" "Language-Team: Russian (https://app.transifex.com/hisp-uio/teams/100509/ru/)\n" @@ -77,6 +77,16 @@ msgstr "Дата включения" msgid "Last updated" msgstr "Последнее обновление" +msgid "error encountered during field validation" +msgstr "Произошла ошибка во время валидации поля" + +msgid "error" +msgstr "ошибка" + +msgid "" +"Plugins are not yet available - Please contact your system administrator" +msgstr "" + msgid "This value is validating" msgstr "Идет валидация значения" @@ -378,9 +388,6 @@ msgstr "Некоторые операции еще не заверщены. По msgid "Operations running" msgstr "Операции запущены..." -msgid "Sort" -msgstr "Сортировать" - msgid "" "This event has unsaved changes. Leaving this page without saving will lose " "these changes. Are you sure you want to discard unsaved changes?" @@ -494,6 +501,12 @@ msgstr "Передача изображения" msgid "Select image" msgstr "Выберите изображение" +msgid "Type to filter options" +msgstr "" + +msgid "No match found" +msgstr "" + msgid "Search" msgstr "Поиск" @@ -760,7 +773,7 @@ msgstr "Расписание" msgid "Refer" msgstr "" -msgid "You can’t add any more {{ programStageName }} events" +msgid "You can't add any more {{ programStageName }} events" msgstr "" msgid "Cancel without saving" @@ -824,6 +837,9 @@ msgstr "" msgid "New Enrollment in program{{escape}} {{programName}}" msgstr "" +msgid "Save {{trackedEntityTypeName}}" +msgstr "" + msgid "Save {{trackedEntityName}}" msgstr "" @@ -979,13 +995,6 @@ msgstr "" msgid "Choose a type to start searching" msgstr "" -msgid "Fill in at least {{count}} attribute to search" -msgid_plural "Fill in at least {{count}} attribute to search" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - msgid "Search {{name}}" msgstr "Искать {{name}}" @@ -1138,6 +1147,9 @@ msgstr "" msgid "Mark for follow-up" msgstr "Отметить для последующего наблюдения" +msgid "Existing dates for auto-generated events will not be updated." +msgstr "" + msgid "Enrollment date" msgstr "Дата зачисления" @@ -1226,28 +1238,12 @@ msgid "" "The scheduled date matches the suggested date, but can be changed if needed." msgstr "" -msgid "The scheduled date is {{count}} days {{position}} the suggested date." -msgid_plural "" -"The scheduled date is {{count}} days {{position}} the suggested date." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - msgid "after" msgstr "после" msgid "before" msgstr "до" -msgid "There are {{count}} scheduled event in {{orgUnitName}} on this day." -msgid_plural "" -"There are {{count}} scheduled event in {{orgUnitName}} on this day." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - msgid "" "Scheduling an event in {{stageName}} for {{programName}} in {{orgUnitName}}" msgstr "" @@ -1291,9 +1287,6 @@ msgstr "" msgid "Try again or contact your system administrator for support" msgstr "" -msgid "tracked entity instance" -msgstr "Элемент отслеживаемого объекта" - msgid "Fix errors in the form to continue." msgstr "" @@ -1306,6 +1299,9 @@ msgstr "" msgid "Edit" msgstr "Редактировать" +msgid "tracked entity instance" +msgstr "Элемент отслеживаемого объекта" + msgid "New {{ eventName }} event" msgstr "" @@ -1495,9 +1491,6 @@ msgstr "" msgid "Set coordinate" msgstr "Выставить координату" -msgid "Page {{currentPage}}" -msgstr "Страница {{currentPage}}" - msgid "Date" msgstr "Дата" @@ -1516,11 +1509,8 @@ msgstr "До даты" msgid "To time" msgstr "ко времени" -msgid "error encountered during field validation" -msgstr "Произошла ошибка во время валидации поля" - -msgid "error" -msgstr "ошибка" +msgid "Page {{currentPage}}" +msgstr "Страница {{currentPage}}" msgid "Delete polygon" msgstr "Удалить полигон" diff --git a/i18n/si.po b/i18n/si.po index cd630b70ec..13abf7e784 100644 --- a/i18n/si.po +++ b/i18n/si.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2023-06-27T06:20:33.460Z\n" +"POT-Creation-Date: 2023-09-04T07:07:59.195Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Malinda Wijeratne, 2023\n" "Language-Team: Sinhala (https://app.transifex.com/hisp-uio/teams/100509/si/)\n" @@ -66,6 +66,16 @@ msgstr "" msgid "Last updated" msgstr "" +msgid "error encountered during field validation" +msgstr "" + +msgid "error" +msgstr "" + +msgid "" +"Plugins are not yet available - Please contact your system administrator" +msgstr "" + msgid "This value is validating" msgstr "" @@ -355,9 +365,6 @@ msgstr "" msgid "Operations running" msgstr "" -msgid "Sort" -msgstr "පෙළ ගස්වන්න" - msgid "" "This event has unsaved changes. Leaving this page without saving will lose " "these changes. Are you sure you want to discard unsaved changes?" @@ -471,6 +478,12 @@ msgstr "" msgid "Select image" msgstr "" +msgid "Type to filter options" +msgstr "" + +msgid "No match found" +msgstr "" + msgid "Search" msgstr "සොයන්න" @@ -736,7 +749,7 @@ msgstr "" msgid "Refer" msgstr "" -msgid "You can’t add any more {{ programStageName }} events" +msgid "You can't add any more {{ programStageName }} events" msgstr "" msgid "Cancel without saving" @@ -800,6 +813,9 @@ msgstr "" msgid "New Enrollment in program{{escape}} {{programName}}" msgstr "" +msgid "Save {{trackedEntityTypeName}}" +msgstr "" + msgid "Save {{trackedEntityName}}" msgstr "" @@ -953,11 +969,6 @@ msgstr "" msgid "Choose a type to start searching" msgstr "" -msgid "Fill in at least {{count}} attribute to search" -msgid_plural "Fill in at least {{count}} attribute to search" -msgstr[0] "" -msgstr[1] "" - msgid "Search {{name}}" msgstr "" @@ -1110,6 +1121,9 @@ msgstr "" msgid "Mark for follow-up" msgstr "" +msgid "Existing dates for auto-generated events will not be updated." +msgstr "" + msgid "Enrollment date" msgstr "" @@ -1198,24 +1212,12 @@ msgid "" "The scheduled date matches the suggested date, but can be changed if needed." msgstr "" -msgid "The scheduled date is {{count}} days {{position}} the suggested date." -msgid_plural "" -"The scheduled date is {{count}} days {{position}} the suggested date." -msgstr[0] "" -msgstr[1] "" - msgid "after" msgstr "" msgid "before" msgstr "" -msgid "There are {{count}} scheduled event in {{orgUnitName}} on this day." -msgid_plural "" -"There are {{count}} scheduled event in {{orgUnitName}} on this day." -msgstr[0] "" -msgstr[1] "" - msgid "" "Scheduling an event in {{stageName}} for {{programName}} in {{orgUnitName}}" msgstr "" @@ -1259,9 +1261,6 @@ msgstr "" msgid "Try again or contact your system administrator for support" msgstr "" -msgid "tracked entity instance" -msgstr "" - msgid "Fix errors in the form to continue." msgstr "" @@ -1274,6 +1273,9 @@ msgstr "" msgid "Edit" msgstr "වෙනස් කරන්න" +msgid "tracked entity instance" +msgstr "" + msgid "New {{ eventName }} event" msgstr "" @@ -1463,9 +1465,6 @@ msgstr "" msgid "Set coordinate" msgstr "" -msgid "Page {{currentPage}}" -msgstr "" - msgid "Date" msgstr "දිනය" @@ -1484,10 +1483,7 @@ msgstr "" msgid "To time" msgstr "" -msgid "error encountered during field validation" -msgstr "" - -msgid "error" +msgid "Page {{currentPage}}" msgstr "" msgid "Delete polygon" diff --git a/i18n/sv.po b/i18n/sv.po index a7adbe92ff..095c7c794d 100644 --- a/i18n/sv.po +++ b/i18n/sv.po @@ -1,14 +1,15 @@ # # Translators: -# phil_dhis2, 2022 +# Philip Larsen Donnelly, 2022 # Viktor Varland , 2023 +# Jason Pickering , 2023 # msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2023-06-27T06:20:33.460Z\n" +"POT-Creation-Date: 2023-09-04T07:07:59.195Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" -"Last-Translator: Viktor Varland , 2023\n" +"Last-Translator: Jason Pickering , 2023\n" "Language-Team: Swedish (https://app.transifex.com/hisp-uio/teams/100509/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -67,6 +68,16 @@ msgstr "" msgid "Last updated" msgstr "" +msgid "error encountered during field validation" +msgstr "" + +msgid "error" +msgstr "" + +msgid "" +"Plugins are not yet available - Please contact your system administrator" +msgstr "" + msgid "This value is validating" msgstr "" @@ -356,9 +367,6 @@ msgstr "" msgid "Operations running" msgstr "" -msgid "Sort" -msgstr "" - msgid "" "This event has unsaved changes. Leaving this page without saving will lose " "these changes. Are you sure you want to discard unsaved changes?" @@ -472,6 +480,12 @@ msgstr "" msgid "Select image" msgstr "" +msgid "Type to filter options" +msgstr "" + +msgid "No match found" +msgstr "ingen matchning hittad" + msgid "Search" msgstr "Sök" @@ -737,7 +751,7 @@ msgstr "" msgid "Refer" msgstr "" -msgid "You can’t add any more {{ programStageName }} events" +msgid "You can't add any more {{ programStageName }} events" msgstr "" msgid "Cancel without saving" @@ -801,6 +815,9 @@ msgstr "" msgid "New Enrollment in program{{escape}} {{programName}}" msgstr "" +msgid "Save {{trackedEntityTypeName}}" +msgstr "" + msgid "Save {{trackedEntityName}}" msgstr "" @@ -954,11 +971,6 @@ msgstr "" msgid "Choose a type to start searching" msgstr "" -msgid "Fill in at least {{count}} attribute to search" -msgid_plural "Fill in at least {{count}} attribute to search" -msgstr[0] "" -msgstr[1] "" - msgid "Search {{name}}" msgstr "" @@ -1111,6 +1123,9 @@ msgstr "" msgid "Mark for follow-up" msgstr "" +msgid "Existing dates for auto-generated events will not be updated." +msgstr "" + msgid "Enrollment date" msgstr "inskrivning datum" @@ -1199,24 +1214,12 @@ msgid "" "The scheduled date matches the suggested date, but can be changed if needed." msgstr "" -msgid "The scheduled date is {{count}} days {{position}} the suggested date." -msgid_plural "" -"The scheduled date is {{count}} days {{position}} the suggested date." -msgstr[0] "" -msgstr[1] "" - msgid "after" msgstr "" msgid "before" msgstr "" -msgid "There are {{count}} scheduled event in {{orgUnitName}} on this day." -msgid_plural "" -"There are {{count}} scheduled event in {{orgUnitName}} on this day." -msgstr[0] "" -msgstr[1] "" - msgid "" "Scheduling an event in {{stageName}} for {{programName}} in {{orgUnitName}}" msgstr "" @@ -1260,9 +1263,6 @@ msgstr "" msgid "Try again or contact your system administrator for support" msgstr "" -msgid "tracked entity instance" -msgstr "" - msgid "Fix errors in the form to continue." msgstr "" @@ -1275,6 +1275,9 @@ msgstr "" msgid "Edit" msgstr "Redigera" +msgid "tracked entity instance" +msgstr "" + msgid "New {{ eventName }} event" msgstr "" @@ -1318,7 +1321,7 @@ msgid "Download as XML" msgstr "" msgid "Download as CSV" -msgstr "" +msgstr "Ladda ner som CSV" msgid "Download with current filters" msgstr "" @@ -1464,9 +1467,6 @@ msgstr "" msgid "Set coordinate" msgstr "" -msgid "Page {{currentPage}}" -msgstr "" - msgid "Date" msgstr "Datum" @@ -1485,10 +1485,7 @@ msgstr "" msgid "To time" msgstr "" -msgid "error encountered during field validation" -msgstr "" - -msgid "error" +msgid "Page {{currentPage}}" msgstr "" msgid "Delete polygon" diff --git a/i18n/tg.po b/i18n/tg.po index d92074a42d..6280c6636c 100644 --- a/i18n/tg.po +++ b/i18n/tg.po @@ -1,14 +1,14 @@ # # Translators: # Viktor Varland , 2022 -# phil_dhis2, 2022 +# Philip Larsen Donnelly, 2022 # msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2023-05-15T10:06:53.276Z\n" +"POT-Creation-Date: 2023-09-04T07:07:59.195Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" -"Last-Translator: phil_dhis2, 2022\n" +"Last-Translator: Philip Larsen Donnelly, 2022\n" "Language-Team: Tajik (https://app.transifex.com/hisp-uio/teams/100509/tg/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -67,6 +67,16 @@ msgstr "Санаи номнавис" msgid "Last updated" msgstr "Навсозии охирин" +msgid "error encountered during field validation" +msgstr "" + +msgid "error" +msgstr "" + +msgid "" +"Plugins are not yet available - Please contact your system administrator" +msgstr "" + msgid "This value is validating" msgstr "" @@ -251,7 +261,7 @@ msgstr "" msgid "Go back to event without saving relationship" msgstr "" -msgid "Unsaved changes" +msgid "Discard unsaved changes?" msgstr "" msgid "" @@ -259,10 +269,10 @@ msgid "" "relationship" msgstr "" -msgid "Yes, discard" +msgid "Yes, discard changes" msgstr "" -msgid "No, stay here" +msgid "No, cancel" msgstr "" msgid "New event" @@ -332,21 +342,9 @@ msgstr "" msgid "Do you want to create another event?" msgstr "" -msgid "No, cancel" -msgstr "" - msgid "Yes, create new event" msgstr "" -msgid "Leaving this page will discard the changes you made to this event." -msgstr "" - -msgid "Warnings found" -msgstr "" - -msgid "Abort" -msgstr "" - msgid "Back to form" msgstr "" @@ -368,8 +366,10 @@ msgstr "" msgid "Operations running" msgstr "" -msgid "Sort" -msgstr "Ҷудокунӣ" +msgid "" +"This event has unsaved changes. Leaving this page without saving will lose " +"these changes. Are you sure you want to discard unsaved changes?" +msgstr "" msgid "No events to display" msgstr "" @@ -479,6 +479,12 @@ msgstr "" msgid "Select image" msgstr "" +msgid "Type to filter options" +msgstr "" + +msgid "No match found" +msgstr "" + msgid "Search" msgstr "Ҷустуҷӯ" @@ -575,12 +581,42 @@ msgstr "" msgid "Write comment" msgstr "" +msgid "was blanked out and hidden by your last action" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Close the notice" +msgstr "" + msgid "Use new Enrollment dashboard for {{programName}}" msgstr "" msgid "Opt in for {{programName}}" msgstr "" +msgid "" +"By clicking opt-in below, you will start using the new enrollment dashboard " +"in the Capture app for this Tracker program. At the moment, there is certain" +" functionality from Tracker Capture that has not yet been added, including " +"relationship and referral functionality. The work on including this Tracker " +"functionality in Capture is ongoing and will be added in upcoming app " +"releases." +msgstr "" + +msgid "" +"The core team appreciates any feedback on this new functionality which is " +"currently being beta tested, please report any issues and feedback in the " +"DHIS2 JIRA project." +msgstr "" + +msgid "" +"Click the button below to opt-in to the new enrollment dashboard " +"functionality in the Capture app (beta) for this Tracker program for all " +"users." +msgstr "" + msgid "Yes, opt in" msgstr "" @@ -714,7 +750,7 @@ msgstr "Ҷадвал" msgid "Refer" msgstr "" -msgid "You can’t add any more {{ programStageName }} events" +msgid "You can't add any more {{ programStageName }} events" msgstr "" msgid "Cancel without saving" @@ -778,6 +814,9 @@ msgstr "" msgid "New Enrollment in program{{escape}} {{programName}}" msgstr "" +msgid "Save {{trackedEntityTypeName}}" +msgstr "" + msgid "Save {{trackedEntityName}}" msgstr "" @@ -826,196 +865,189 @@ msgstr "" msgid "Register" msgstr "" -msgid "" -"Fill in at least {{minAttributesRequiredToSearch}} attributes to search" -msgstr "" +msgid "Back" +msgstr "Ба қафо" -msgid "Search {{name}}" +msgid "events" msgstr "" -msgid "Search by {{name}}" +msgid "event" msgstr "" -msgid "Search by attributes" +msgid "You don't have access to edit this event" msgstr "" -msgid "Fill in these fields to search{{escape}} {{ searchableAttributes }}" +msgid "Edit event" msgstr "" -msgid "" -"Fill in at least {{minAttributesRequiredToSearch}} of these fields to " -"search{{escape}} {{searchableAttributes}}" +msgid "Event details" msgstr "" -msgid "Fill in this field to search{{escape}} {{searchableAttributes}}" +msgid "" +"Leaving this page will discard any selections you made for a new " +"relationship" msgstr "" -msgid "No results found" +msgid "No one is assigned to this event" msgstr "" -msgid "" -"You can change your search terms and search again to find what you are " -"looking for." -msgstr "" +msgid "Assign" +msgstr "Таъин" -msgid "Register a user" +msgid "Event assigned to {{name}}" msgstr "" -msgid "Back to search" +msgid "Feedbacks" msgstr "" -msgid "An error has occurred" +msgid "Show all events" msgstr "" -msgid "Too many results" +msgid "Event could not be loaded. Are you sure it exists?" msgstr "" -msgid "Cannot search in all programs" +msgid "Event could not be loaded" msgstr "" -msgid "Back" -msgstr "Ба қафо" - -msgid "Search for {{titleText}}" +msgid "Organisation unit could not be loaded" msgstr "" -msgid "Search for" +msgid "Possible duplicates found" msgstr "" -msgid "" -"You can also choose a program from the top bar and search in that program" +msgid "No results found" msgstr "" -msgid "Choose a type to start searching" +msgid "An error occurred loading possible duplicates" msgstr "" -msgid "all programs" +msgid "You don't have access to delete this relationship" msgstr "" -msgid "" -"Not finding the results you were looking for? Try to search all programs " -"that use type " +msgid "You don't have access to create any relationships" msgstr "" -msgid "Search in all programs" +msgid "Add relationship" msgstr "" -msgid "If none of search results match, you can create a new " +msgid "No results found for " msgstr "" -msgid "Create new" +msgid "Registering unit" msgstr "" -msgid "Saved lists in this program" +msgid "Choose a registering unit" msgstr "" -msgid "Saved lists offer quick access to your most used views in a program." +msgid "Clear selection" msgstr "" -msgid "" -"There are no saved lists in this program yet, create one using the button " -"below." +msgid "No programs available." msgstr "" -msgid "Create saved list" +msgid "Search for a program" msgstr "" -msgid "events" +msgid "Some programs are being filtered by the chosen registering unit" msgstr "" -msgid "event" +msgid "Show all programs" msgstr "" -msgid "You don't have access to edit this event" +msgid "Choose a program" msgstr "" -msgid "Edit event" +msgid "Search for {{titleText}}" msgstr "" -msgid "Event details" +msgid "Search for" msgstr "" msgid "" -"Leaving this page will discard any selections you made for a new " -"relationship" +"You can also choose a program from the top bar and search in that program" msgstr "" -msgid "No one is assigned to this event" +msgid "Choose a type to start searching" msgstr "" -msgid "Assign" -msgstr "Таъин" - -msgid "Event assigned to {{name}}" +msgid "Search {{name}}" msgstr "" -msgid "Feedbacks" +msgid "Search by {{name}}" msgstr "" -msgid "Show all events" +msgid "Search by attributes" msgstr "" -msgid "Event could not be loaded. Are you sure it exists?" +msgid "all programs" msgstr "" -msgid "Event could not be loaded" +msgid "" +"Not finding the results you were looking for? Try to search all programs " +"that use type " msgstr "" -msgid "Organisation unit could not be loaded" +msgid "Search in all programs" msgstr "" -msgid "Possible duplicates found" +msgid "If none of search results match, you can create a new " msgstr "" -msgid "An error occurred loading possible duplicates" +msgid "Create new" msgstr "" -msgid "You don't have access to delete this relationship" +msgid "Fill in these fields to search{{escape}} {{ searchableAttributes }}" msgstr "" -msgid "You don't have access to create any relationships" +msgid "" +"Fill in at least {{minAttributesRequiredToSearch}} of these fields to " +"search{{escape}} {{searchableAttributes}}" msgstr "" -msgid "Add relationship" +msgid "Fill in this field to search{{escape}} {{searchableAttributes}}" msgstr "" -msgid "No results found for " +msgid "" +"You can change your search terms and search again to find what you are " +"looking for." msgstr "" -msgid "Registering unit" +msgid "Back to search" msgstr "" -msgid "Choose a registering unit" +msgid "An error has occurred" msgstr "" -msgid "Clear selection" +msgid "Too many results" msgstr "" -msgid "No programs available." +msgid "Cannot search in all programs" msgstr "" -msgid "Search for a program" +msgid "Missing search criteria" msgstr "" -msgid "Some programs are being filtered by the chosen registering unit" +msgid "Results found" msgstr "" -msgid "Show all programs" +msgid "Selected program" msgstr "" -msgid "Choose a program" +msgid "Search {{uniqueAttrName}}" msgstr "" -msgid "Results found" +msgid "Saved lists in this program" msgstr "" -msgid "Selected program" +msgid "Saved lists offer quick access to your most used views in a program." msgstr "" -msgid "Search {{uniqueAttrName}}" +msgid "" +"There are no saved lists in this program yet, create one using the button " +"below." msgstr "" -msgid "Fill in at least {{minAttributesRequired}} attributes to search" +msgid "Create saved list" msgstr "" msgid "New {{trackedEntityName}} in {{programName}}" @@ -1090,6 +1122,9 @@ msgstr "" msgid "Mark for follow-up" msgstr "" +msgid "Existing dates for auto-generated events will not be updated." +msgstr "" + msgid "Enrollment date" msgstr "Санаи номнавис" @@ -1178,24 +1213,12 @@ msgid "" "The scheduled date matches the suggested date, but can be changed if needed." msgstr "" -msgid "The scheduled date is {{count}} days {{position}} the suggested date." -msgid_plural "" -"The scheduled date is {{count}} days {{position}} the suggested date." -msgstr[0] "" -msgstr[1] "" - msgid "after" msgstr "" msgid "before" msgstr "" -msgid "There are {{count}} scheduled event in {{orgUnitName}} on this day." -msgid_plural "" -"There are {{count}} scheduled event in {{orgUnitName}} on this day." -msgstr[0] "" -msgstr[1] "" - msgid "" "Scheduling an event in {{stageName}} for {{programName}} in {{orgUnitName}}" msgstr "" @@ -1239,9 +1262,6 @@ msgstr "" msgid "Try again or contact your system administrator for support" msgstr "" -msgid "tracked entity instance" -msgstr "" - msgid "Fix errors in the form to continue." msgstr "" @@ -1254,10 +1274,13 @@ msgstr "" msgid "Edit" msgstr "Таҳрир" +msgid "tracked entity instance" +msgstr "" + msgid "New {{ eventName }} event" msgstr "" -msgid "This event is not yet preserved and cannot be edited" +msgid "To open this event, please wait until saving is complete" msgstr "" msgid "Show {{ rest }} more" @@ -1308,6 +1331,9 @@ msgstr "" msgid "an error occurred loading working lists" msgstr "" +msgid "Assigned to" +msgstr "таъиншуда ба" + msgid "Registration Date" msgstr "Санаи бақайдгирӣ" @@ -1317,12 +1343,18 @@ msgstr "" msgid "Enrollment status" msgstr "" -msgid "Assigned to" -msgstr "таъиншуда ба" - msgid "Choose a program stage to filter by {{label}}" msgstr "" +msgid "Active enrollments" +msgstr "" + +msgid "Completed enrollments" +msgstr "" + +msgid "Cancelled enrollments" +msgstr "" + msgid "Working list could not be updated" msgstr "" @@ -1434,9 +1466,6 @@ msgstr "" msgid "Set coordinate" msgstr "" -msgid "Page {{currentPage}}" -msgstr "" - msgid "Date" msgstr "Сана" @@ -1455,10 +1484,7 @@ msgstr "То санаи" msgid "To time" msgstr "" -msgid "error encountered during field validation" -msgstr "" - -msgid "error" +msgid "Page {{currentPage}}" msgstr "" msgid "Delete polygon" @@ -1467,5 +1493,8 @@ msgstr "" msgid "Set area" msgstr "" +msgid "Area on map saved" +msgstr "" + msgid "Compatibility mode" msgstr "" diff --git a/i18n/ur.po b/i18n/ur.po index e9b20d7c34..1165076415 100644 --- a/i18n/ur.po +++ b/i18n/ur.po @@ -1,12 +1,12 @@ # # Translators: -# phil_dhis2, 2022 +# Philip Larsen Donnelly, 2022 # Viktor Varland , 2023 # msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2023-06-27T06:20:33.460Z\n" +"POT-Creation-Date: 2023-09-04T07:07:59.195Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Viktor Varland , 2023\n" "Language-Team: Urdu (https://app.transifex.com/hisp-uio/teams/100509/ur/)\n" @@ -67,6 +67,16 @@ msgstr "اندراج کی تاریخ" msgid "Last updated" msgstr "آخری اپ ڈیٹ" +msgid "error encountered during field validation" +msgstr "" + +msgid "error" +msgstr "" + +msgid "" +"Plugins are not yet available - Please contact your system administrator" +msgstr "" + msgid "This value is validating" msgstr "" @@ -356,9 +366,6 @@ msgstr "" msgid "Operations running" msgstr "" -msgid "Sort" -msgstr "ترتیب دیں" - msgid "" "This event has unsaved changes. Leaving this page without saving will lose " "these changes. Are you sure you want to discard unsaved changes?" @@ -472,6 +479,12 @@ msgstr "" msgid "Select image" msgstr "" +msgid "Type to filter options" +msgstr "" + +msgid "No match found" +msgstr "" + msgid "Search" msgstr "تلاش کریں" @@ -737,7 +750,7 @@ msgstr "شیڈول" msgid "Refer" msgstr "" -msgid "You can’t add any more {{ programStageName }} events" +msgid "You can't add any more {{ programStageName }} events" msgstr "" msgid "Cancel without saving" @@ -801,6 +814,9 @@ msgstr "" msgid "New Enrollment in program{{escape}} {{programName}}" msgstr "" +msgid "Save {{trackedEntityTypeName}}" +msgstr "" + msgid "Save {{trackedEntityName}}" msgstr "" @@ -954,11 +970,6 @@ msgstr "" msgid "Choose a type to start searching" msgstr "" -msgid "Fill in at least {{count}} attribute to search" -msgid_plural "Fill in at least {{count}} attribute to search" -msgstr[0] "" -msgstr[1] "" - msgid "Search {{name}}" msgstr "" @@ -1111,6 +1122,9 @@ msgstr "" msgid "Mark for follow-up" msgstr "اپ کے لئے نشان زد کریں" +msgid "Existing dates for auto-generated events will not be updated." +msgstr "" + msgid "Enrollment date" msgstr "اندراج کی تاریخ" @@ -1199,24 +1213,12 @@ msgid "" "The scheduled date matches the suggested date, but can be changed if needed." msgstr "" -msgid "The scheduled date is {{count}} days {{position}} the suggested date." -msgid_plural "" -"The scheduled date is {{count}} days {{position}} the suggested date." -msgstr[0] "" -msgstr[1] "" - msgid "after" msgstr "کے بعد" msgid "before" msgstr "پہلے" -msgid "There are {{count}} scheduled event in {{orgUnitName}} on this day." -msgid_plural "" -"There are {{count}} scheduled event in {{orgUnitName}} on this day." -msgstr[0] "" -msgstr[1] "" - msgid "" "Scheduling an event in {{stageName}} for {{programName}} in {{orgUnitName}}" msgstr "" @@ -1260,9 +1262,6 @@ msgstr "" msgid "Try again or contact your system administrator for support" msgstr "" -msgid "tracked entity instance" -msgstr "" - msgid "Fix errors in the form to continue." msgstr "" @@ -1275,6 +1274,9 @@ msgstr "" msgid "Edit" msgstr "ترمیم" +msgid "tracked entity instance" +msgstr "" + msgid "New {{ eventName }} event" msgstr "" @@ -1464,9 +1466,6 @@ msgstr "" msgid "Set coordinate" msgstr "ہم آہنگی مقرر کریں" -msgid "Page {{currentPage}}" -msgstr "" - msgid "Date" msgstr "تاریخ" @@ -1485,10 +1484,7 @@ msgstr "تاریخ تک" msgid "To time" msgstr "" -msgid "error encountered during field validation" -msgstr "" - -msgid "error" +msgid "Page {{currentPage}}" msgstr "" msgid "Delete polygon" diff --git a/i18n/uz.po b/i18n/uz_UZ_Cyrl.po similarity index 99% rename from i18n/uz.po rename to i18n/uz_UZ_Cyrl.po index 2165735667..3c0495f761 100644 --- a/i18n/uz.po +++ b/i18n/uz_UZ_Cyrl.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2023-06-01T08:11:59.116Z\n" +"POT-Creation-Date: 2023-09-04T07:07:59.195Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Ibatov , 2023\n" "Language-Team: Uzbek (Cyrillic) (https://app.transifex.com/hisp-uio/teams/100509/uz@Cyrl/)\n" @@ -383,9 +383,6 @@ msgstr "Баъзи операциялар ҳали ҳам бажарилмоқд msgid "Operations running" msgstr "Амалиётлар бажарилмоқда" -msgid "Sort" -msgstr "Саралаш" - msgid "" "This event has unsaved changes. Leaving this page without saving will lose " "these changes. Are you sure you want to discard unsaved changes?" @@ -777,7 +774,7 @@ msgstr "Режа" msgid "Refer" msgstr "" -msgid "You can’t add any more {{ programStageName }} events" +msgid "You can't add any more {{ programStageName }} events" msgstr "" msgid "Cancel without saving" @@ -1159,6 +1156,9 @@ msgstr "" msgid "Mark for follow-up" msgstr "Кузатув учун белгиланг" +msgid "Existing dates for auto-generated events will not be updated." +msgstr "" + msgid "Enrollment date" msgstr "Қайд этилган сана" @@ -1502,9 +1502,6 @@ msgstr "" msgid "Set coordinate" msgstr "Координатани ўрнатинг" -msgid "Page {{currentPage}}" -msgstr "{{currentPage}} саҳифаси" - msgid "Date" msgstr "Сана" @@ -1523,6 +1520,9 @@ msgstr "Шу кунгача" msgid "To time" msgstr "Шу вақтгача" +msgid "Page {{currentPage}}" +msgstr "{{currentPage}} саҳифаси" + msgid "Delete polygon" msgstr "Полигон (кўпбурчак) ни ўчириб ташлаш" diff --git a/i18n/uz_UZ_Latn.po b/i18n/uz_UZ_Latn.po new file mode 100644 index 0000000000..76fee00b45 --- /dev/null +++ b/i18n/uz_UZ_Latn.po @@ -0,0 +1,1529 @@ +# +# Translators: +# Yury Rogachev , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"POT-Creation-Date: 2023-09-04T07:07:59.195Z\n" +"PO-Revision-Date: 2019-06-27 07:31+0000\n" +"Last-Translator: Yury Rogachev , 2023\n" +"Language-Team: Uzbek (Latin) (https://app.transifex.com/hisp-uio/teams/100509/uz@Latn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uz@Latn\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Choose one or more dates..." +msgstr "Bir yoki bir necha sanalarni tanlang..." + +msgid "Choose a date..." +msgstr "Sanani tanlang ..." + +msgid "Today" +msgstr "Bugun" + +msgid "" +"A possible reason for this is that the browser or mode (e.g. privacy mode) " +"is not supported. See log for details." +msgstr "" +"Buning mumkin boʼlgan sabablari quyidagilar; brauzer yoki rejim (masalan, " +"maxfiylik rejimi) qoʼllab quvvatlanmasligi. Tafsilotlar uchun jurnalga " +"qarang." + +msgid "" +"You opened another version of the Capture App in the same domain. Currently," +" the Capture App only supports running one version concurrently (in the same" +" domain). Please refresh this page if you would like to use this version " +"again, but be aware that this will close other versions." +msgstr "" +"Siz ayni shu domenda Nazorat Ilovasining boshqa versiyasini ochdingiz. " +"Hozirda Nazorat Ilovasi faqat bitta versiyani bir vaqtda (bir xil " +"ddomendagi) ishlashini qoʼllab quvvatlaydi. Ushbu versiyani qayta " +"ishlatmoqchi boʼlsangiz, Iltimos, sahifani yangilang, ammo boshqa versiyalar" +" yopilishini unutmang." + +msgid "View {{programName}} dashboard" +msgstr "" + +msgid "View dashboard" +msgstr "Boshqaruv panelini koʼrish" + +msgid "View active enrollment" +msgstr "Faol roʼyxatdan oʼtayotganlarni koʼrish" + +msgid "Re-enroll" +msgstr "Qayta roʼyxatdan oʼtish" + +msgid "in" +msgstr "ichida" + +msgid "Enrolled" +msgstr "Roʼyxatga kiritilgan" + +msgid "Previously enrolled" +msgstr "Ilgari roʼyxatga kiritilgan" + +msgid "Organisation unit" +msgstr "Tashkiliy birlik" + +msgid "Date of enrollment" +msgstr "Roʼyxatga kiritilgan sana" + +msgid "Last updated" +msgstr "Oxirgi yangilangan" + +msgid "error encountered during field validation" +msgstr "maydonni tekshirish vaqtida xatolik yuz berdi" + +msgid "error" +msgstr "xato" + +msgid "" +"Plugins are not yet available - Please contact your system administrator" +msgstr "" + +msgid "This value is validating" +msgstr "Ushbu qiymat tasdiqlanmoqda" + +msgid "Async field update failed" +msgstr "Аsinxron maydon yangilanishi amalga oshmadi" + +msgid "A value is required" +msgstr "Qiymat talab qilinadi" + +msgid "Please provide a valid number" +msgstr "Iltimos, toʼgʼri raqamni koʼrsating" + +msgid "Please provide a valid integer" +msgstr "Iltimos, toʼgʼri butun sonni koʼrsating" + +msgid "Please provide a positive integer" +msgstr "Iltimos, butun musbat sonni koʼrsating" + +msgid "Please provide zero or a positive integer" +msgstr "Iltimos, Nol yoki butun musbat sonni koʼrsating" + +msgid "Please provide a negative integer" +msgstr "Iltimos, butun manfiy sonni koʼrsating" + +msgid "Please provide a valid date" +msgstr "Iltimos, toʼgʼri sanani koʼrsating" + +msgid "A date in the future is not allowed" +msgstr "Kelajakdagi sana qabul qilinmaydi" + +msgid "Please provide a valid date and time" +msgstr "Iltimos, tegishli sana va vaqtni koʼrsating" + +msgid "Please provide a valid time" +msgstr "Iltimos, toʼgʼri vaqtni koʼrsating" + +msgid "Please provide an integer between 0 and 100" +msgstr "" + +msgid "Please provide a valid url" +msgstr "Iltimos, haqiqiy URL manzilni koʼrsating" + +msgid "Please provide a valid email address" +msgstr "Iltimos, amaldagi ye-pochta manzilini koʼrsating" + +msgid "Please provide a valid age" +msgstr "Iltimos, toʼgʼri yoshni koʼrsating" + +msgid "Please provide a valid phone number" +msgstr "Iltimos, toʼgʼri telefon raqamini koʼrsating" + +msgid "Please provide a valid organisation unit" +msgstr "Iltimos, toʼgʼri tashkiliy boʼlimni koʼrsating" + +msgid "Please provide valid coordinates" +msgstr "Iltimos, toʼgʼri koordinatalarni koʼrsating" + +msgid "This value already exists" +msgstr "Bu qiymat allaqachon mavjud" + +msgid "\"From\" cannot be greater than \"To\"" +msgstr "Sana \"gacha\" katta boʼlishi mumkin emas sana \"dan\"" + +msgid "Checking..." +msgstr "Tekshirilmoqda..." + +msgid "Area" +msgstr "Maydon" + +msgid "Coordinate" +msgstr "Muvofiqlashtirish" + +msgid "Enrollment" +msgstr "Roʼyxatga olish" + +msgid "Please select {{categoryName}}" +msgstr "" + +msgid "A future date is not allowed" +msgstr "Kelajakdagi sana tanloviga ruxsat berilmaydi" + +msgid "Saving a new enrollment in {{programName}} in {{orgUnitName}}." +msgstr "" + +msgid "Saving a {{trackedEntityName}} in {{programName}} in {{orgUnitName}}." +msgstr "" + +msgid "Cancel" +msgstr "Bekor qilish" + +msgid "Metadata error. see log for details" +msgstr "MetaMaʼlumotda xatolik. Tafsilotlar uchun jurnalga qarang." + +msgid "Assigned user" +msgstr "Tavsiya etilgan foydalanuvchi" + +msgid "Search for user" +msgstr "Foydalanuvchini izlash" + +msgid "Complete event" +msgstr "" + +msgid "Basic info" +msgstr "Аsosiy maʼlumot" + +msgid "Status" +msgstr "Status" + +msgid "Comments" +msgstr "Izohlar" + +msgid "Relationships" +msgstr "Oʼzaro aloqalar" + +msgid "Assignee" +msgstr "Vakolat berilgan shaxs" + +msgid "Saving to {{programName}} in {{orgUnitName}}" +msgstr "" + +msgid "" +"This is not an event program or the metadata is corrupt. See log for " +"details." +msgstr "" +"Bu hodisa/tadbir dasturi emas yoki metamaʼlumotlar buzilgan. Tafsilotlar " +"uchun jurnalga qarang." + +msgid "This event" +msgstr "Ushbu hodisa/tadbir" + +msgid "" +"Relationship of type {{relationshipTypeName}} to {{entityName}} already " +"exists" +msgstr "" +"{{relationshipTypeName}} turining {{entityName}} bilan aloqasi allaqachon " +"mavjud" + +msgid "Active" +msgstr "Faol" + +msgid "Completed" +msgstr "Toʼldirildi" + +msgid "Please add or cancel comment before saving the event" +msgstr "" +"Iltimos, hodisa/tadbirni saqlashdan oldin sharh yozing yoki bekor qiling" + +msgid "Save and add another" +msgstr "Saqlash va boshqasini qoʼshish" + +msgid "Save and exit" +msgstr "Saqlash va chiqish" + +msgid "Finish" +msgstr "Tugatish" + +msgid "Save without completing" +msgstr "" + +msgid "Complete" +msgstr "Toʼldirish" + +msgid "No write access" +msgstr "Yozuv kiritish uchun ruxsat yoʼq" + +msgid "New {{titleText}}" +msgstr "" + +msgid "Switch to form view" +msgstr "Shakl koʼrinishiga oʼtish" + +msgid "Switch to row view" +msgstr "Jadval koʼrinishiga oʼtish" + +msgid "events added" +msgstr "hodisa/tadbirlar qoʼshildi" + +msgid "No events added" +msgstr "Hech qanday hodisa/tadbir qoʼshilmagan" + +msgid "New event relationship" +msgstr "Yangi hodisa/tadbir munosabatlari" + +msgid "Adding relationship to event." +msgstr "Hodisa/tadbirga aloqa-munosabatlar qoʼshish" + +msgid "Go back to event without saving relationship" +msgstr "Аloqa-munosabatlarni saqlamasdan hodisa/tadbirga qaytish" + +msgid "Discard unsaved changes?" +msgstr "Saqlanmagan oʼzgarishlar bekor qilinsinmi?" + +msgid "" +"Leaving this page will discard the selections you made for a new " +"relationship" +msgstr "" +"Ushbu sahifani tark etsangiz, yangi munosabatlar uchun qilgan tanlovingiz " +"bekor qilinadi." + +msgid "Yes, discard changes" +msgstr "" + +msgid "No, cancel" +msgstr "Yoʼq, bekor qiling" + +msgid "New event" +msgstr "Yangi hodisa" + +msgid "You don't have access to create an event in the current selections" +msgstr "" + +msgid "Save" +msgstr "Saqlash" + +msgid "Saving a {{trackedEntityName}}" +msgstr "" + +msgid "without" +msgstr "" + +msgid "enrollment" +msgstr "" + +msgid "Enroll in a program by selecting a program from the top bar." +msgstr "" + +msgid "An error has occurred. See log for details" +msgstr "Xatolik yuz berdi. Tafsilotlar uchun jurnalga qarang" + +msgid "A duplicate exists (but there were some errors, see log for details" +msgstr "" +"Ikki nusxasi mavjud (lekin xatolar boʼlgan, batafsil maʼlumot uchun jurnalga" +" qarang" + +msgid "" +"An item with this {{attributeName}} is already registered, but you don't " +"have access to it" +msgstr "" +"Ushbu {{attributeName}} element allaqachon roʼyxatdan oʼtgan, ammo siz unga " +"kirish huquqiga ega emassiz" + +msgid "You have already registered this {{attributeName}}" +msgstr "Siz allaqachon {{attributeName}} da roʼyxatdan oʼtgansiz" + +msgid "" +"A {{trackedEntityTypeName}} with this {{attributeName}} is already " +"registered" +msgstr "" +"{{trackedEntityTypeName}} ushbu {{attributeName}} bilan allaqachon " +"roʼyxatdan oʼtgan" + +msgid "Show registered {{trackedEntityTypeName}}" +msgstr "Roʼyxatdan oʼtgan {{trackedEntityTypeName}} ni koʼrsatish" + +msgid "Registered person" +msgstr "Roʼyxatdan oʼtgan shaxs" + +msgid "validation failed" +msgstr "Tasdiqlash amalga oshmadi" + +msgid "Errors" +msgstr "Xatoliklar" + +msgid "Feedback" +msgstr "Qayta aloqa" + +msgid "Indicators" +msgstr "Indikatorlar" + +msgid "Warnings" +msgstr "Ogohlantirishlar" + +msgid "Generate new event" +msgstr "Yangi hodisa/tadbir yaratish" + +msgid "Do you want to create another event?" +msgstr "Haqiqatdan ham boshqa hodisa/tadbir yaratmoqchimisiz?" + +msgid "Yes, create new event" +msgstr "" + +msgid "Back to form" +msgstr "Shaklga qaytish" + +msgid "Save anyway" +msgstr "Nima boʼlganda ham saqlash" + +msgid "Validation errors and warnings" +msgstr "Tasdiqlash xatoliklari va ogohlantirishlari" + +msgid "Validation errors" +msgstr "Tasdiqlashda xatoliklar" + +msgid "Validation warnings" +msgstr "Tasdiqlash toʼgʼrisida ogohlantirishlar" + +msgid "Some operations are still runnning. Please wait.." +msgstr "Baʼzi operatsiyalar hali ham bajarilmoqda. Iltimos, kuting ..." + +msgid "Operations running" +msgstr "Аmaliyotlar bajarilmoqda" + +msgid "" +"This event has unsaved changes. Leaving this page without saving will lose " +"these changes. Are you sure you want to discard unsaved changes?" +msgstr "" + +msgid "No events to display" +msgstr "Koʼrsatiladigan hech qanday hodisa/tadbir yoʼq" + +msgid "Data for offline list not present" +msgstr "Offlayn roʼyxat uchun maʼlumotlar mavjud emas" + +msgid "Close" +msgstr "Yopmoq" + +msgid "Please select the user" +msgstr "Iltimos, foydalanuvchini tanlang" + +msgid "Me" +msgstr "Men" + +msgid "Anyone" +msgstr "Kimdir" + +msgid "None" +msgstr "Yoʼq" + +msgid "Select user" +msgstr "Foydalanuvchini tanlang" + +msgid "to" +msgstr "ga" + +msgid "Days in the future" +msgstr "" + +msgid "From" +msgstr "Dan" + +msgid "Days in the past" +msgstr "" + +msgid "To" +msgstr "Kimga" + +msgid "This week" +msgstr "Ushbu hafta" + +msgid "This month" +msgstr "Ushbu oy" + +msgid "This Year" +msgstr "" + +msgid "Last week" +msgstr "Oxirgi hafta" + +msgid "Last month" +msgstr "Oxirgi oy" + +msgid "Last 3 months" +msgstr "Oxirgi 3 oy" + +msgid "Absolute range" +msgstr "" + +msgid "Relative range" +msgstr "" + +msgid "Max" +msgstr "Maksimum" + +msgid "Min" +msgstr "Minimum" + +msgid "Contains text" +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" + +msgid "selected" +msgstr "tanlangan" + +msgid "Delete" +msgstr "Oʼchirib tashlash" + +msgid "Select file" +msgstr "Faylni tanlash" + +msgid "No" +msgstr "Yoʼq" + +msgid "Uploading image" +msgstr "Rasm yuklanmoqda" + +msgid "Select image" +msgstr "Rasmni tanlang" + +msgid "Type to filter options" +msgstr "" + +msgid "No match found" +msgstr "" + +msgid "Search" +msgstr "Izlash" + +msgid "Clear" +msgstr "Tozalash" + +msgid "No results" +msgstr "Natija yoʼq" + +msgid "Description" +msgstr "Tavsif" + +msgid "URL" +msgstr "URL" + +msgid "Icon for {{field}}" +msgstr "" + +msgid "start typing to search" +msgstr "qidirish uchun yozishni boshlang" + +msgid "suggestions could not be retrieved" +msgstr "takliflar qabul qilinmadi" + +msgid "No items to display" +msgstr "Koʼrsatiladigan axborot yoʼq" + +msgid "Select columns" +msgstr "Ustunlarni tanlang" + +msgid "Columns to show in table" +msgstr "Jadvalda koʼrsatiladigan ustunlar" + +msgid "Column" +msgstr "Ustun" + +msgid "Update" +msgstr "Янгилаш" + +msgid "Reset filter" +msgstr "" + +msgid "Remove filter" +msgstr "Filtrni olib tashlash" + +msgid "{{fromDate}} to {{toDate}}" +msgstr "{{fromDate}} dan {{toDate}} ga" + +msgid "after or equal to {{date}}" +msgstr "{{date}} dan keyin yoki unga teng" + +msgid "before or equal to {{date}}" +msgstr "{{date}} dan oldin yoki unga teng" + +msgid "greater than or equal to" +msgstr "dan katta yoki teng" + +msgid "less than or equal to" +msgstr "dan kam yoki teng" + +msgid "More filters" +msgstr "Koʼproq Filtr" + +msgid "Stage filters" +msgstr "" + +msgid "Rows per page" +msgstr "Sahifada qatorlar" + +msgid "Could not get organisation unit" +msgstr "Tashkiliy boʼlimni olib boʼlmadi" + +msgid "Program doesn't exist" +msgstr "Dastur mavjud emas" + +msgid "Selected program is invalid for selected registering unit" +msgstr "" +"Tanlangan dastur tanlangan roʼyxatdan olinadigan boʼlim uchun yaroqsiz" + +msgid "Online" +msgstr "Onlayn" + +msgid "Offline" +msgstr "Offlayn" + +msgid "Syncing" +msgstr "Sinxronlashmoqda" + +msgid "Add comment" +msgstr "Izoh qoʼshish" + +msgid "You don't have access to write comments" +msgstr "" + +msgid "Write comment" +msgstr "Fikr yozing" + +msgid "was blanked out and hidden by your last action" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Close the notice" +msgstr "" + +msgid "Use new Enrollment dashboard for {{programName}}" +msgstr "" + +msgid "Opt in for {{programName}}" +msgstr "" + +msgid "" +"By clicking opt-in below, you will start using the new enrollment dashboard " +"in the Capture app for this Tracker program. At the moment, there is certain" +" functionality from Tracker Capture that has not yet been added, including " +"relationship and referral functionality. The work on including this Tracker " +"functionality in Capture is ongoing and will be added in upcoming app " +"releases." +msgstr "" + +msgid "" +"The core team appreciates any feedback on this new functionality which is " +"currently being beta tested, please report any issues and feedback in the " +"DHIS2 JIRA project." +msgstr "" + +msgid "" +"Click the button below to opt-in to the new enrollment dashboard " +"functionality in the Capture app (beta) for this Tracker program for all " +"users." +msgstr "" + +msgid "Yes, opt in" +msgstr "" + +msgid "Stop using new Enrollment dashboard for {{programName}}" +msgstr "" + +msgid "Opt out for {{programName}}" +msgstr "" + +msgid "Tracked entity instance with id \"{{teiId}}\" does not exist" +msgstr "" + +msgid "" +"There is an error while opening this enrollment. Please enter a valid url." +msgstr "" + +msgid "" +"An error occurred while fetching enrollments. Please enter a valid url." +msgstr "" + +msgid "Enrollment Dashboard" +msgstr "" + +msgid "No indicator output for this enrollment yet" +msgstr "" + +msgid "No feedback for this enrollment yet" +msgstr "" + +msgid "Quick actions" +msgstr "" + +msgid "New Event" +msgstr "" + +msgid "Schedule an event" +msgstr "" + +msgid "Make referral" +msgstr "Yoʼnalish yarating" + +msgid "No available program stages" +msgstr "" + +msgid "Program stage not found" +msgstr "" + +msgid "" +"Choose a program to add new or see existing enrollments for " +"{{teiDisplayName}}" +msgstr "" + +msgid "" +"{{programName}} has categories. Choose all categories to view dashboard." +msgstr "" + +msgid "Invalid enrollment id {{enrollmentId}}." +msgstr "" + +msgid "Choose an enrollment to view the dashboard." +msgstr "" + +msgid "There are no active enrollments." +msgstr "" + +msgid "Add new enrollment for {{teiDisplayName}} in this program." +msgstr "" + +msgid "No access to program owner." +msgstr "" + +msgid "{{teiDisplayName}} is not enrolled in this program." +msgstr "" + +msgid "Enroll {{teiDisplayName}} in this program." +msgstr "" + +msgid "" +"{{teiDisplayName}} is a {{tetName}} and cannot be enrolled in the " +"{{programName}}. Choose another program that allows {{tetName}} enrollment. " +msgstr "" + +msgid "Enroll a new {{selectedTetName}} in this program." +msgstr "" + +msgid "{{programName}} is an event program and does not have enrollments." +msgstr "" + +msgid "Create a new event in this program." +msgstr "" + +msgid "View working list in this program." +msgstr "" + +msgid "Page is missing required values from URL" +msgstr "" + +msgid "Program is not valid" +msgstr "" + +msgid "Org unit is not valid with current program" +msgstr "" + +msgid "There was an error opening the Page" +msgstr "" + +msgid "Enrollment{{escape}} New Event" +msgstr "" + +msgid "There was an error loading the page" +msgstr "" + +msgid "Choose a registering unit to start reporting" +msgstr "Xisobot boshlash uchun roʼyxatdan oʼtishni tanlang" + +msgid "There are no feedbacks for this event" +msgstr "" + +msgid "There are no indicators for this event" +msgstr "" + +msgid "Program stage is invalid" +msgstr "" + +msgid "Report" +msgstr "Hisobot" + +msgid "Schedule" +msgstr "Reja" + +msgid "Refer" +msgstr "" + +msgid "You can't add any more {{ programStageName }} events" +msgstr "" + +msgid "Cancel without saving" +msgstr "" + +msgid "Choose a stage for a new event" +msgstr "" + +msgid "Program Stages could not be loaded" +msgstr "" + +msgid "Stage" +msgstr "Босқич" + +msgid "Enrollment{{escape}} View Event" +msgstr "" + +msgid "Enrollment{{escape}} Edit Event" +msgstr "" + +msgid "The enrollment event data could not be found" +msgstr "" + +msgid "There are no feedback for this event" +msgstr "" + +msgid "Registered events" +msgstr "Roʼyxatdan oʼtgan hodisa/tadbirlar" + +msgid "Please select {{category}}." +msgstr "" + +msgid "Or see all records accessible to you in {{program}} " +msgstr "" + +msgid "Or see all events accessible to you in {{program}}" +msgstr "" + +msgid "Please select an organisation unit." +msgstr "" + +msgid "New" +msgstr "Yangi" + +msgid "Choose the {{missingCategories}} to start reporting" +msgstr "" + +msgid "Save as new" +msgstr "" + +msgid "View enrollment" +msgstr "" + +msgid "Create for" +msgstr "" + +msgid "" +"You can also choose a program from the top bar and create in that program" +msgstr "" + +msgid "New Enrollment in program{{escape}} {{programName}}" +msgstr "" + +msgid "Save {{trackedEntityTypeName}}" +msgstr "" + +msgid "Save {{trackedEntityName}}" +msgstr "" + +msgid "Save new {{trackedEntityTypeName}} and link" +msgstr "" + +msgid "Link" +msgstr "Havola" + +msgid "Save as new {{trackedEntityName}}" +msgstr "" + +msgid "Some programs are being filtered." +msgstr "Baʼzi dasturlar Filtrlanmoqda." + +msgid "Show all" +msgstr "Barchaga koʼrsatish" + +msgid "Program" +msgstr "Programma" + +msgid "Organisation Unit" +msgstr "Tashkiliy birlik" + +msgid "Registration" +msgstr "Roʼyxatdan oʼtish" + +msgid "Search results" +msgstr "Qidiruv natijalari" + +msgid "No {{trackedEntityTypeName}} found." +msgstr "Hech qanday {{trackedEntityTypeName}} topilmadi" + +msgid "New search" +msgstr "Yangi qidiruv" + +msgid "Edit search" +msgstr "Qidiruvni tahrirlash" + +msgid "Link to an existing {{trackedEntityType}}" +msgstr "Mavjud {{trackedEntityType}} ga havola" + +msgid "Create new {{trackedEntityType}}" +msgstr "Yangi {{trackedEntityType}} yaratish" + +msgid "Register" +msgstr "Roʼyxatga olish" + +msgid "Back" +msgstr "Orqaga" + +msgid "events" +msgstr "" + +msgid "event" +msgstr "" + +msgid "You don't have access to edit this event" +msgstr "" + +msgid "Edit event" +msgstr "Hodisa/tadbirni tahrirlang" + +msgid "Event details" +msgstr "" + +msgid "" +"Leaving this page will discard any selections you made for a new " +"relationship" +msgstr "" +"Ushbu sahifani tark etsangiz, yangi aloqa-munosabatlar uchun qilingan barcha" +" tanlovlar bekor qilinadi" + +msgid "No one is assigned to this event" +msgstr "Ushbu hodisa/tadbirga hech kim biriktirilmagan" + +msgid "Assign" +msgstr "Tayinlangan" + +msgid "Event assigned to {{name}}" +msgstr "Hodisa/tadbir {{name}} ga biriktirildi" + +msgid "Feedbacks" +msgstr "Qayta aloqalar" + +msgid "Show all events" +msgstr "Barcha hodisa/tadbirlarni koʼrsatish" + +msgid "Event could not be loaded. Are you sure it exists?" +msgstr "" +"Hodisa/tadbirni yuklab boʼlmadi. Uning mavjudligiga ishonchingiz komilmi?" + +msgid "Event could not be loaded" +msgstr "Hodisa/tadbirni yuklab boʼlmadi" + +msgid "Organisation unit could not be loaded" +msgstr "Tashkiliy boʼlimni yuklab boʼlmadi" + +msgid "Possible duplicates found" +msgstr "Boʼlishi mumkin boʼlgan nusxalar topildi" + +msgid "No results found" +msgstr "Hech qanday natija topilmadi" + +msgid "An error occurred loading possible duplicates" +msgstr "" + +msgid "You don't have access to delete this relationship" +msgstr "" + +msgid "You don't have access to create any relationships" +msgstr "" + +msgid "Add relationship" +msgstr "Oʼzaro aloqa kiritish" + +msgid "No results found for " +msgstr "" + +msgid "Registering unit" +msgstr "Roʼyxatga olish muassasasi" + +msgid "Choose a registering unit" +msgstr "" + +msgid "Clear selection" +msgstr "" + +msgid "No programs available." +msgstr "Hech qanday dastur mavjud emas." + +msgid "Search for a program" +msgstr "" + +msgid "Some programs are being filtered by the chosen registering unit" +msgstr "" + +msgid "Show all programs" +msgstr "" + +msgid "Choose a program" +msgstr "" + +msgid "Search for {{titleText}}" +msgstr "" + +msgid "Search for" +msgstr "Qidirish" + +msgid "" +"You can also choose a program from the top bar and search in that program" +msgstr "" +"Bundan tashqari, yuqori satrda dasturni tanlashingiz va ushbu dastur ichida " +"qidirishingiz mumkin" + +msgid "Choose a type to start searching" +msgstr "Qidiruv turini tanlang va qidirishni boshlang" + +msgid "Search {{name}}" +msgstr "{{name}} orqali qidirish" + +msgid "Search by {{name}}" +msgstr "" + +msgid "Search by attributes" +msgstr "Аtribut orqali qidirish" + +msgid "all programs" +msgstr "" + +msgid "" +"Not finding the results you were looking for? Try to search all programs " +"that use type " +msgstr "" + +msgid "Search in all programs" +msgstr "Barcha dasturlarda qidirish" + +msgid "If none of search results match, you can create a new " +msgstr "" + +msgid "Create new" +msgstr "Yangisini yaratish" + +msgid "Fill in these fields to search{{escape}} {{ searchableAttributes }}" +msgstr "" + +msgid "" +"Fill in at least {{minAttributesRequiredToSearch}} of these fields to " +"search{{escape}} {{searchableAttributes}}" +msgstr "" + +msgid "Fill in this field to search{{escape}} {{searchableAttributes}}" +msgstr "" + +msgid "" +"You can change your search terms and search again to find what you are " +"looking for." +msgstr "" +"Qidiruv soʼzlarini oʼzgartirib, qidirilayotgan axborotni qayta qidiruvga " +"topshirishingiz mumkin." + +msgid "Back to search" +msgstr "Qidiruvga qaytish" + +msgid "An error has occurred" +msgstr "Xatolik yuz berdi" + +msgid "Too many results" +msgstr "Natija juda koʼp" + +msgid "Cannot search in all programs" +msgstr "" + +msgid "Missing search criteria" +msgstr "" + +msgid "Results found" +msgstr "Natijalar topildi" + +msgid "Selected program" +msgstr "Tanlangan dastur" + +msgid "Search {{uniqueAttrName}}" +msgstr "{{uniqueAttrName}} orqali qidirish" + +msgid "Saved lists in this program" +msgstr "" + +msgid "Saved lists offer quick access to your most used views in a program." +msgstr "" + +msgid "" +"There are no saved lists in this program yet, create one using the button " +"below." +msgstr "" + +msgid "Create saved list" +msgstr "" + +msgid "New {{trackedEntityName}} in {{programName}}" +msgstr "" + +msgid "Search for a {{trackedEntityName}} in {{programName}}" +msgstr "" + +msgid "To work with the selected program," +msgstr "Tanlangan dastur bilan ishlash uchun," + +msgid "open the Tracker Capture app" +msgstr "Kuzatuv-Nazorat dasturini oching" + +msgid "This program is protected" +msgstr "" + +msgid "Reason to check for enrollments" +msgstr "" + +msgid "" +"Describe the reason you are checking for enrollments in this protected " +"program" +msgstr "" + +msgid "Check for enrollments" +msgstr "" + +msgid "" +"You must provide a reason to check for enrollments in this protected " +"program. All activity will be logged." +msgstr "" + +msgid "Save comment" +msgstr "Fikr/izohni saqlang" + +msgid "Enrollment actions" +msgstr "" + +msgid "We are processing your request." +msgstr "" + +msgid "Only one enrollment per {{tetName}} is allowed in this program" +msgstr "" + +msgid "Add new" +msgstr "Янгисини қўшиш" + +msgid "Reactivate" +msgstr "" + +msgid "Mark as cancelled" +msgstr "" + +msgid "Mark incomplete" +msgstr "" + +msgid "Delete enrollment" +msgstr "Roʼyxatdan oʼtkazish oʼchirilsin" + +msgid "" +"Are you sure you want to delete this enrollment? This will permanently " +"remove the current enrollment." +msgstr "" + +msgid "Yes, delete enrollment." +msgstr "" + +msgid "Remove mark for follow-up" +msgstr "" + +msgid "Mark for follow-up" +msgstr "Kuzatuv uchun belgilang" + +msgid "Existing dates for auto-generated events will not be updated." +msgstr "" + +msgid "Enrollment date" +msgstr "Qayd qilingan sana" + +msgid "Incident date" +msgstr "Hodisa sanasi" + +msgid "Enrollment widget could not be loaded. Please try again later" +msgstr "" + +msgid "Follow-up" +msgstr "Kuzatish" + +msgid "Started at {{orgUnitName}}" +msgstr "" + +msgid "Owned by {{ownerOrgUnit}}" +msgstr "" + +msgid "Last updated {{date}}" +msgstr "" + +msgid "Cancelled" +msgstr "Bekor qilindi" + +msgid "Comments about this enrollment" +msgstr "" + +msgid "Write a comment about this enrollment" +msgstr "" + +msgid "This enrollment doesn't have any comments" +msgstr "" + +msgid "organisation unit could not be retrieved. Please try again later." +msgstr "" + +msgid "Saving to {{stageName}} for {{programName}} in {{orgUnitName}}" +msgstr "" + +msgid "program or stage is invalid" +msgstr "" + +msgid "Error" +msgstr "Xatolik" + +msgid "Warning" +msgstr "Ogohlantirish" + +msgid "Comments about this event" +msgstr "" + +msgid "Write a comment about this event" +msgstr "" + +msgid "This event doesn't have any comments" +msgstr "" + +msgid "stage not found in rules execution" +msgstr "" + +msgid "Delete event" +msgstr "Hodisa/tadbirni oʼchirib tashlash" + +msgid "Yes, delete event" +msgstr "" + +msgid "Go to “Schedule” tab to reschedule this event" +msgstr "" + +msgid "Scheduled date cannot be changed for {{ eventStatus }} events" +msgstr "" + +msgid "Event completed" +msgstr "" + +msgid "Back to all stages and events" +msgstr "" + +msgid "Schedule date info" +msgstr "" + +msgid "Scheduled automatically for {{suggestedScheduleDate}}" +msgstr "" + +msgid "" +"The scheduled date matches the suggested date, but can be changed if needed." +msgstr "" + +msgid "after" +msgstr "" + +msgid "before" +msgstr "" + +msgid "" +"Scheduling an event in {{stageName}} for {{programName}} in {{orgUnitName}}" +msgstr "" + +msgid "Schedule info" +msgstr "" + +msgid "Schedule date / Due date" +msgstr "" + +msgid "Event comments" +msgstr "" + +msgid "Write a comment about this scheduled event" +msgstr "" + +msgid "" +"Change information about this {{trackedEntityName}} here. To change " +"information about this enrollment, use the Edit button in the in the " +"Enrollment box on this dashboard" +msgstr "" + +msgid " Loading..." +msgstr "" + +msgid "Save changes" +msgstr "Oʼzgartirishni saqlash" + +msgid "Profile" +msgstr "Profil" + +msgid "There is a problem with this form" +msgstr "" + +msgid "There are warnings in this form" +msgstr "" + +msgid "There was a problem saving changes" +msgstr "" + +msgid "Try again or contact your system administrator for support" +msgstr "" + +msgid "Fix errors in the form to continue." +msgstr "" + +msgid "Profile widget could not be loaded. Please try again later" +msgstr "" + +msgid "{{TETName}} profile" +msgstr "" + +msgid "Edit" +msgstr "Tahrirlash" + +msgid "tracked entity instance" +msgstr "kuzatilayotgan obʼekt namunasi" + +msgid "New {{ eventName }} event" +msgstr "" + +msgid "To open this event, please wait until saving is complete" +msgstr "" + +msgid "Show {{ rest }} more" +msgstr "" + +msgid "Reset list" +msgstr "" + +msgid "Go to full {{ eventName }}" +msgstr "" + +msgid "This stage can only have one event" +msgstr "" + +msgid "Events could not be retrieved. Please try again later." +msgstr "" + +msgid "{{ totalEvents }} events" +msgstr "" + +msgid "{{ overdueEvents }} overdue" +msgstr "" + +msgid "{{ scheduledEvents }} scheduled" +msgstr "" + +msgid "Stages and Events" +msgstr "" + +msgid "Working list could not be loaded" +msgstr "Ishchi roʼyxatni yuklab boʼlmadi" + +msgid "Download as JSON" +msgstr "JSON sifatida yuklash" + +msgid "Download as XML" +msgstr "XML sifatida yuklash" + +msgid "Download as CSV" +msgstr "CSV sifatida yuklang" + +msgid "Download with current filters" +msgstr "Joriy Filtrlar asosida yuklash" + +msgid "Download data..." +msgstr "Maʼlumotlarni yuklab olish ..." + +msgid "an error occurred loading working lists" +msgstr "ishchi roʼyxatni yuklashda xatolik yuz berdi" + +msgid "Assigned to" +msgstr "" + +msgid "Registration Date" +msgstr "Roʼyxatga olingan sana" + +msgid "Inactive" +msgstr "Faol emas" + +msgid "Enrollment status" +msgstr "Roʼyxatga olish holati" + +msgid "Choose a program stage to filter by {{label}}" +msgstr "" + +msgid "Active enrollments" +msgstr "" + +msgid "Completed enrollments" +msgstr "" + +msgid "Cancelled enrollments" +msgstr "" + +msgid "Working list could not be updated" +msgstr "" + +msgid "an error occurred loading the working lists" +msgstr "" + +msgid "an error occurred loading Tracked entity instance lists" +msgstr "" + +msgid "Update view" +msgstr "Yangilangan koʼrinish" + +msgid "Save current view..." +msgstr "Joriy koʼrinishni saqlash ..." + +msgid "Save current view as..." +msgstr "Ushbu joriy koʼrinish sifatida saqlash" + +msgid "Delete view" +msgstr "Koʼzdan kechirishni oʼchirib tashlash" + +msgid "Share view..." +msgstr "Koʼrinish bilan boʼlishish ..." + +msgid "Do you really want to delete the '{{templateName}}' view?" +msgstr "" +"Haqiqatdan ham '{{templateName}}' koʼrinishini oʼchirib tashlamoqchimisiz?" + +msgid "Confirm" +msgstr "Tasdiqlang" + +msgid "Save As view" +msgstr "Ushbu koʼrinish sifatida saqlash" + +msgid "View name" +msgstr "Ismini koʼrish" + +msgid "Show Less" +msgstr "" + +msgid "Show All" +msgstr "Barchasini koʼrsatish" + +msgid "An error has occured. See log for details" +msgstr "Xatolik yuz berdi. Tafsilotlarni jurnaldan koʼring." + +msgid "Scheduled{{ escape }} due {{ time }}" +msgstr "" + +msgid "Scheduled" +msgstr "Reja boʼyicha" + +msgid "Overdue{{ escape }} due {{ time }}" +msgstr "" + +msgid "Overdue" +msgstr "Muddat oʼtgan" + +msgid "Skipped" +msgstr "Oʼtkazib yuborildi" + +msgid "Visited" +msgstr "Tashrif buyurdi" + +msgid "{{trackedEntityName}} in program{{escape}} {{programName}}" +msgstr "" + +msgid "Program not found" +msgstr "Dastur topilmadi" + +msgid "Program is not a tracker program" +msgstr "Dastur kuzatuv dasturi emas" + +msgid "Error saving event" +msgstr "Hodisa/tadbirni saqlashda xato" + +msgid "Could not save event" +msgstr "" + +msgid "Could not delete event" +msgstr "Hodisa/tadbirni oʼchirib tashlab boʼlmadi" + +msgid "Could not save working list" +msgstr "Ishchi roʼyxat saqlanmadi" + +msgid "Could not add working list" +msgstr "Ishchi roʼyxatni qoʼshib boʼlmadi" + +msgid "Could not delete working list" +msgstr "Ishchi roʼyxatni oʼchirib tashlab boʼlmadi" + +msgid "Organisation unit search failed." +msgstr "" + +msgid "Error saving tracked entity instance" +msgstr "" + +msgid "Error saving enrollment" +msgstr "" + +msgid "Error saving the enrollment event" +msgstr "" + +msgid "Error deleting the enrollment event" +msgstr "" + +msgid "Error editing the event, the changes made were not saved" +msgstr "" + +msgid "Set coordinate" +msgstr "Koordinatani oʼrnating" + +msgid "Date" +msgstr "Sana" + +msgid "Time" +msgstr "Vaqt" + +msgid "From date" +msgstr "Sanadan boshlab" + +msgid "From time" +msgstr "Vaqtdan boshlab" + +msgid "To date" +msgstr "Shu kungacha" + +msgid "To time" +msgstr "Shu vaqtgacha" + +msgid "Page {{currentPage}}" +msgstr "{{currentPage}} sahifasi" + +msgid "Delete polygon" +msgstr "Poligon (koʼpburchak) ni oʼchirib tashlash" + +msgid "Set area" +msgstr "Hududni belgilang" + +msgid "Area on map saved" +msgstr "" + +msgid "Compatibility mode" +msgstr "Muvofiqlik rejimi" diff --git a/i18n/vi.po b/i18n/vi.po index 754ecf982e..83fb30e45c 100644 --- a/i18n/vi.po +++ b/i18n/vi.po @@ -1,6 +1,6 @@ # # Translators: -# phil_dhis2, 2022 +# Philip Larsen Donnelly, 2022 # Mai Nguyen , 2022 # Thuy Nguyen , 2023 # Viktor Varland , 2023 @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2023-06-27T06:20:33.460Z\n" +"POT-Creation-Date: 2023-09-04T07:07:59.195Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Viktor Varland , 2023\n" "Language-Team: Vietnamese (https://app.transifex.com/hisp-uio/teams/100509/vi/)\n" @@ -75,6 +75,16 @@ msgstr "Ngày đăng ký" msgid "Last updated" msgstr "Lần cập nhật cuối" +msgid "error encountered during field validation" +msgstr "gặp lỗi trong quá trình xác thực trường" + +msgid "error" +msgstr "lỗi" + +msgid "" +"Plugins are not yet available - Please contact your system administrator" +msgstr "" + msgid "This value is validating" msgstr "Giá trị này đang xác thực" @@ -372,9 +382,6 @@ msgstr "Một số hoạt động vẫn đang chạy. Vui lòng đợi .." msgid "Operations running" msgstr "Hoạt động đang chạy" -msgid "Sort" -msgstr "Sắp xếp" - msgid "" "This event has unsaved changes. Leaving this page without saving will lose " "these changes. Are you sure you want to discard unsaved changes?" @@ -488,6 +495,12 @@ msgstr "Đang tải ảnh lên" msgid "Select image" msgstr "Chọn ảnh" +msgid "Type to filter options" +msgstr "" + +msgid "No match found" +msgstr "" + msgid "Search" msgstr "Tìm kiếm" @@ -753,7 +766,7 @@ msgstr "Lịch biểu" msgid "Refer" msgstr "" -msgid "You can’t add any more {{ programStageName }} events" +msgid "You can't add any more {{ programStageName }} events" msgstr "" msgid "Cancel without saving" @@ -817,6 +830,9 @@ msgstr "" msgid "New Enrollment in program{{escape}} {{programName}}" msgstr "" +msgid "Save {{trackedEntityTypeName}}" +msgstr "" + msgid "Save {{trackedEntityName}}" msgstr "" @@ -974,10 +990,6 @@ msgstr "" msgid "Choose a type to start searching" msgstr "Chọn một loại để bắt đầu tìm kiếm" -msgid "Fill in at least {{count}} attribute to search" -msgid_plural "Fill in at least {{count}} attribute to search" -msgstr[0] "" - msgid "Search {{name}}" msgstr "Tim kiêm {{name}}" @@ -1134,6 +1146,9 @@ msgstr "" msgid "Mark for follow-up" msgstr "Đánh dấu để theo-dõi" +msgid "Existing dates for auto-generated events will not be updated." +msgstr "" + msgid "Enrollment date" msgstr "Ngày ghi vào" @@ -1222,22 +1237,12 @@ msgid "" "The scheduled date matches the suggested date, but can be changed if needed." msgstr "" -msgid "The scheduled date is {{count}} days {{position}} the suggested date." -msgid_plural "" -"The scheduled date is {{count}} days {{position}} the suggested date." -msgstr[0] "" - msgid "after" msgstr "" msgid "before" msgstr "" -msgid "There are {{count}} scheduled event in {{orgUnitName}} on this day." -msgid_plural "" -"There are {{count}} scheduled event in {{orgUnitName}} on this day." -msgstr[0] "" - msgid "" "Scheduling an event in {{stageName}} for {{programName}} in {{orgUnitName}}" msgstr "" @@ -1281,9 +1286,6 @@ msgstr "" msgid "Try again or contact your system administrator for support" msgstr "" -msgid "tracked entity instance" -msgstr "thực thể được theo dõi" - msgid "Fix errors in the form to continue." msgstr "" @@ -1296,6 +1298,9 @@ msgstr "" msgid "Edit" msgstr "Chỉnh sửa" +msgid "tracked entity instance" +msgstr "thực thể được theo dõi" + msgid "New {{ eventName }} event" msgstr "" @@ -1485,9 +1490,6 @@ msgstr "" msgid "Set coordinate" msgstr "Đặt tọa độ" -msgid "Page {{currentPage}}" -msgstr "Trang {{currentPage}}" - msgid "Date" msgstr "Ngày" @@ -1506,11 +1508,8 @@ msgstr "Đến ngày" msgid "To time" msgstr "Đến " -msgid "error encountered during field validation" -msgstr "gặp lỗi trong quá trình xác thực trường" - -msgid "error" -msgstr "lỗi" +msgid "Page {{currentPage}}" +msgstr "Trang {{currentPage}}" msgid "Delete polygon" msgstr "Xóa đa giác" diff --git a/i18n/zh_CN.po b/i18n/zh_CN.po index ada7c7ad4f..a489a00929 100644 --- a/i18n/zh_CN.po +++ b/i18n/zh_CN.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2023-06-01T08:11:59.116Z\n" +"POT-Creation-Date: 2023-09-04T07:07:59.195Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: 晓东 林 <13981924470@126.com>, 2023\n" "Language-Team: Chinese (China) (https://app.transifex.com/hisp-uio/teams/100509/zh_CN/)\n" @@ -368,9 +368,6 @@ msgstr "有些操作一直在运行,请等待" msgid "Operations running" msgstr "运作中" -msgid "Sort" -msgstr "排序" - msgid "" "This event has unsaved changes. Leaving this page without saving will lose " "these changes. Are you sure you want to discard unsaved changes?" @@ -758,8 +755,8 @@ msgstr "调度" msgid "Refer" msgstr "转诊" -msgid "You can’t add any more {{ programStageName }} events" -msgstr "您不能再添加 {{ programStageName }} 事件" +msgid "You can't add any more {{ programStageName }} events" +msgstr "" msgid "Cancel without saving" msgstr "取消而不保存" @@ -1132,6 +1129,9 @@ msgstr "删除标记以进行后续操作" msgid "Mark for follow-up" msgstr "后续标记" +msgid "Existing dates for auto-generated events will not be updated." +msgstr "" + msgid "Enrollment date" msgstr "报名日期" @@ -1473,9 +1473,6 @@ msgstr "编辑事件时出错,所做的更改未保存" msgid "Set coordinate" msgstr "设置坐标" -msgid "Page {{currentPage}}" -msgstr "第{{currentPage}}页" - msgid "Date" msgstr "日期" @@ -1494,6 +1491,9 @@ msgstr "到目前为止" msgid "To time" msgstr "到时间" +msgid "Page {{currentPage}}" +msgstr "第{{currentPage}}页" + msgid "Delete polygon" msgstr "删除多边形" diff --git a/package.json b/package.json index 6f9a6db16c..c2b86be22b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "capture-app", "homepage": ".", - "version": "100.37.0", + "version": "100.39.1", "cacheVersion": "5", "serverVersion": "38", "license": "BSD-3-Clause", @@ -10,7 +10,7 @@ "packages/rules-engine" ], "dependencies": { - "@dhis2/rules-engine-javascript": "100.37.0", + "@dhis2/rules-engine-javascript": "100.39.1", "@dhis2/app-runtime": "^3.9.3", "@dhis2/d2-i18n": "^1.1.0", "@dhis2/d2-icons": "^1.0.1", @@ -131,6 +131,7 @@ }, "resolutions": { "@babel/preset-react": "7.16.7", + "@js-temporal/polyfill": "0.4.3", "core-js": "2.5.7" }, "browserslist": { diff --git a/packages/rules-engine/package.json b/packages/rules-engine/package.json index 7e57d9d6a2..477534c5fc 100644 --- a/packages/rules-engine/package.json +++ b/packages/rules-engine/package.json @@ -1,6 +1,6 @@ { "name": "@dhis2/rules-engine-javascript", - "version": "100.37.0", + "version": "100.39.1", "license": "BSD-3-Clause", "main": "./build/cjs/index.js", "scripts": { diff --git a/packages/rules-engine/src/processors/rulesEffectsProcessor/rulesEffectsProcessor.js b/packages/rules-engine/src/processors/rulesEffectsProcessor/rulesEffectsProcessor.js index da59fe6d94..15951dbc57 100644 --- a/packages/rules-engine/src/processors/rulesEffectsProcessor/rulesEffectsProcessor.js +++ b/packages/rules-engine/src/processors/rulesEffectsProcessor/rulesEffectsProcessor.js @@ -12,6 +12,7 @@ import type { IConvertOutputRulesEffectsValue, AssignOutputEffect, HideOutputEffect, + HideProgramStageEffect, MessageEffect, GeneralErrorEffect, GeneralWarningEffect, @@ -207,6 +208,17 @@ export function getRulesEffectsProcessor( }; } + function processHideProgramStage(effect: ProgramRuleEffect): ?HideProgramStageEffect { + if (!effect.programStageId) { + return null; + } + + return { + type: effectActions.HIDE_PROGRAM_STAGE, + id: effect.programStageId, + }; + } + function processMakeCompulsory(effect: ProgramRuleEffect): Array { return createEffectsForConfiguredDataTypes(effect, () => ({ type: effectActions.MAKE_COMPULSORY, @@ -267,6 +279,7 @@ export function getRulesEffectsProcessor( [effectActions.SHOW_WARNING]: processShowWarning, [effectActions.SHOW_ERROR_ONCOMPLETE]: processShowErrorOnComplete, [effectActions.SHOW_WARNING_ONCOMPLETE]: processShowWarningOnComplete, + [effectActions.HIDE_PROGRAM_STAGE]: processHideProgramStage, [effectActions.HIDE_SECTION]: processHideSection, [effectActions.MAKE_COMPULSORY]: processMakeCompulsory, [effectActions.DISPLAY_TEXT]: processDisplayText, diff --git a/packages/rules-engine/src/rulesEngine.types.js b/packages/rules-engine/src/rulesEngine.types.js index e2edca905b..decb2154a0 100644 --- a/packages/rules-engine/src/rulesEngine.types.js +++ b/packages/rules-engine/src/rulesEngine.types.js @@ -30,6 +30,10 @@ export type HideOutputEffect = OutputEffect & { }; +export type HideProgramStageEffect = OutputEffect & { + +}; + export type MessageEffect = OutputEffect & { message: string, }; diff --git a/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPage.actions.js b/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPage.actions.js index a1f8c3250a..5f29c4daac 100644 --- a/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPage.actions.js +++ b/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPage.actions.js @@ -22,6 +22,7 @@ export const enrollmentPageActionTypes = { DELETE_ENROLLMENT: 'EnrollmentPage.DeleteEnrollment', UPDATE_TEI_DISPLAY_NAME: 'EnrollmentPage.UpdateTeiDisplayName', + UPDATE_ENROLLMENT_DATE: 'EnrollmentPage.UpdateEnrollmentDate', }; export const fetchEnrollmentPageInformation = () => @@ -73,3 +74,6 @@ export const updateTeiDisplayName = (teiDisplayName: string) => actionCreator(enrollmentPageActionTypes.UPDATE_TEI_DISPLAY_NAME)({ teiDisplayName, }); + +export const updateEnrollmentDate = ({ enrollmentId, enrollmentDate }: { enrollmentId: string, enrollmentDate: string }) => + actionCreator(enrollmentPageActionTypes.UPDATE_ENROLLMENT_DATE)({ enrollmentId, enrollmentDate }); diff --git a/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/EnrollmentPageDefault.component.js b/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/EnrollmentPageDefault.component.js index d2b5b6f091..0759fcd558 100644 --- a/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/EnrollmentPageDefault.component.js +++ b/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/EnrollmentPageDefault.component.js @@ -60,7 +60,10 @@ export const EnrollmentPageDefaultPlain = ({ classes, onEventClick, onUpdateTeiAttributeValues, + onUpdateEnrollmentDate, + onUpdateIncidentDate, onEnrollmentError, + ruleEffects, }: PlainProps) => ( <>
{i18n.t('Enrollment Dashboard')}
@@ -69,6 +72,7 @@ export const EnrollmentPageDefaultPlain = ({
@@ -108,6 +113,8 @@ export const EnrollmentPageDefaultPlain = ({ programId={program.id} onDelete={onDelete} onAddNew={onAddNew} + onUpdateEnrollmentDate={onUpdateEnrollmentDate} + onUpdateIncidentDate={onUpdateIncidentDate} onError={onEnrollmentError} />}
diff --git a/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/EnrollmentPageDefault.container.js b/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/EnrollmentPageDefault.container.js index 976e03492a..2e7b8da1bc 100644 --- a/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/EnrollmentPageDefault.container.js +++ b/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/EnrollmentPageDefault.container.js @@ -7,9 +7,17 @@ import { useDispatch } from 'react-redux'; import { useHistory } from 'react-router-dom'; import { useCommonEnrollmentDomainData, + useRuleEffects, updateEnrollmentAttributeValues, + updateEnrollmentDate, + updateIncidentDate, showEnrollmentError, } from '../../common/EnrollmentOverviewDomain'; +import { + updateEnrollmentDate as updateTopBarEnrollmentDate, + deleteEnrollment, + updateTeiDisplayName, +} from '../EnrollmentPage.actions'; import { useTrackerProgram } from '../../../../hooks/useTrackerProgram'; import { useRulesEngineOrgUnit } from '../../../../hooks/useRulesEngineOrgUnit'; import { EnrollmentPageDefaultComponent } from './EnrollmentPageDefault.component'; @@ -17,10 +25,8 @@ import { useProgramMetadata, useHideWidgetByRuleLocations, useProgramStages, - useRuleEffects, } from './hooks'; import { buildUrlQueryString, useLocationQuery } from '../../../../utils/routing'; -import { deleteEnrollment, updateTeiDisplayName } from '../EnrollmentPage.actions'; import { useFilteredWidgetData } from './hooks/useFilteredWidgetData'; export const EnrollmentPageDefault = () => { @@ -74,6 +80,7 @@ export const EnrollmentPageDefault = () => { const onEventClick = (eventId: string) => { history.push(`/enrollmentEventEdit?${buildUrlQueryString({ orgUnitId, eventId })}`); }; + const onUpdateTeiAttributeValues = useCallback((updatedAttributeValues, teiDisplayName) => { dispatch(updateEnrollmentAttributeValues(updatedAttributeValues .map(({ attribute, value }) => ({ id: attribute, value })), @@ -81,6 +88,15 @@ export const EnrollmentPageDefault = () => { dispatch(updateTeiDisplayName(teiDisplayName)); }, [dispatch]); + const onUpdateEnrollmentDate = useCallback((enrollmentDate) => { + dispatch(updateEnrollmentDate(enrollmentDate)); + dispatch(updateTopBarEnrollmentDate({ enrollmentId, enrollmentDate })); + }, [dispatch, enrollmentId]); + + const onUpdateIncidentDate = useCallback((incidentDate) => { + dispatch(updateIncidentDate(incidentDate)); + }, [dispatch]); + const onAddNew = () => { history.push(`/new?${buildUrlQueryString({ orgUnitId, programId, teiId })}`); }; @@ -107,7 +123,10 @@ export const EnrollmentPageDefault = () => { hideWidgets={hideWidgets} onEventClick={onEventClick} onUpdateTeiAttributeValues={onUpdateTeiAttributeValues} + onUpdateEnrollmentDate={onUpdateEnrollmentDate} + onUpdateIncidentDate={onUpdateIncidentDate} onEnrollmentError={onEnrollmentError} + ruleEffects={ruleEffects} /> ); }; diff --git a/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/EnrollmentPageDefault.types.js b/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/EnrollmentPageDefault.types.js index 3822b286a0..4e88f4a39b 100644 --- a/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/EnrollmentPageDefault.types.js +++ b/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/EnrollmentPageDefault.types.js @@ -1,4 +1,5 @@ // @flow +import { typeof effectActions } from '@dhis2/rules-engine-javascript'; import type { Program } from 'capture-core/metaData'; import type { Stage } from 'capture-core/components/WidgetStagesAndEvents/types/common.types'; import type { WidgetEffects, HideWidgets } from '../../common/EnrollmentOverviewDomain'; @@ -19,7 +20,10 @@ export type Props = {| onCreateNew: (stageId: string) => void, onEventClick: (eventId: string) => void, onUpdateTeiAttributeValues: (attributes: Array<{ [key: string]: string }>, teiDisplayName: string) => void, + onUpdateEnrollmentDate: (enrollmentDate: string) => void, + onUpdateIncidentDate: (incidentDate: string) => void, onEnrollmentError: (message: string) => void, + ruleEffects?: Array<{id: string, type: $Values}>; |}; export type PlainProps = {| diff --git a/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/EnrollmentQuickActions/EnrollmentQuickActions.component.js b/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/EnrollmentQuickActions/EnrollmentQuickActions.component.js index 2853c9986e..e5621d7449 100644 --- a/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/EnrollmentQuickActions/EnrollmentQuickActions.component.js +++ b/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/EnrollmentQuickActions/EnrollmentQuickActions.component.js @@ -19,7 +19,7 @@ const styles = { }; -const EnrollmentQuickActionsComponent = ({ stages, events, classes }) => { +const EnrollmentQuickActionsComponent = ({ stages, events, ruleEffects, classes }) => { const [open, setOpen] = useState(true); const history = useHistory(); const { enrollmentId, programId, teiId, orgUnitId } = useLocationQuery(); @@ -33,10 +33,20 @@ const EnrollmentQuickActionsComponent = ({ stages, events, classes }) => { return mutatedStage; }), [events, stages]); + const hiddenProgramStageRuleEffects = useMemo( + () => ruleEffects?.filter(ruleEffect => ruleEffect.type === 'HIDEPROGRAMSTAGE'), + [ruleEffects], + ); + const noStageAvailable = useMemo( - () => stagesWithEventCount.every(programStage => - (!programStage.repeatable && programStage.eventCount > 0), - ), [stagesWithEventCount]); + () => + stagesWithEventCount.every( + programStage => + (!programStage.repeatable && programStage.eventCount > 0) || + hiddenProgramStageRuleEffects?.find(ruleEffect => ruleEffect.id === programStage.id), + ), + [stagesWithEventCount, hiddenProgramStageRuleEffects], + ); const onNavigationFromQuickActions = (tab: string) => { history.push(`/enrollmentEventNew?${buildUrlQueryString({ programId, teiId, enrollmentId, orgUnitId, tab })}`); diff --git a/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/hooks/index.js b/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/hooks/index.js index 3b0cdd75eb..049aa3b303 100644 --- a/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/hooks/index.js +++ b/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/hooks/index.js @@ -3,5 +3,4 @@ export { useTeiAttributes } from './useTeiAttributes'; export { useProgramMetadata } from './useProgramMetadata'; export { useHideWidgetByRuleLocations } from './useHideWidgetByRuleLocations'; export { useProgramStages } from './useProgramStages'; -export { useRuleEffects } from './useRuleEffects'; -export type { UseRuleEffectsInput } from './useRuleEffects.types'; + diff --git a/src/core_modules/capture-core/components/Pages/EnrollmentAddEvent/EnrollmentAddEventPageDefault/EnrollmentAddEventPageDefault.component.js b/src/core_modules/capture-core/components/Pages/EnrollmentAddEvent/EnrollmentAddEventPageDefault/EnrollmentAddEventPageDefault.component.js index e741014b20..f7abac3990 100644 --- a/src/core_modules/capture-core/components/Pages/EnrollmentAddEvent/EnrollmentAddEventPageDefault/EnrollmentAddEventPageDefault.component.js +++ b/src/core_modules/capture-core/components/Pages/EnrollmentAddEvent/EnrollmentAddEventPageDefault/EnrollmentAddEventPageDefault.component.js @@ -126,6 +126,7 @@ const EnrollmentAddEventPagePain = ({ teiId={teiId} enrollmentId={enrollmentId} programId={programId} + readOnlyMode onDelete={onDelete} onAddNew={onAddNew} onError={onEnrollmentError} diff --git a/src/core_modules/capture-core/components/Pages/EnrollmentAddEvent/ProgramStageSelector/ProgramStageSelector.component.js b/src/core_modules/capture-core/components/Pages/EnrollmentAddEvent/ProgramStageSelector/ProgramStageSelector.component.js index 20f5b1b8dd..092ddf13f6 100644 --- a/src/core_modules/capture-core/components/Pages/EnrollmentAddEvent/ProgramStageSelector/ProgramStageSelector.component.js +++ b/src/core_modules/capture-core/components/Pages/EnrollmentAddEvent/ProgramStageSelector/ProgramStageSelector.component.js @@ -26,7 +26,8 @@ const styles = { const ProgramStageSelectorComponentPlain = ({ programStages, onSelectProgramStage, onCancel, classes }) => (
{programStages.map((programStage) => { - const disableStage = !programStage.repeatable && programStage.eventCount > 0; + const disableStage = + (!programStage.repeatable && programStage.eventCount > 0) || programStage.hiddenProgramStage; return (
{ const history = useHistory(); const { tab } = useLocationQuery(); - const { error: enrollmentsError, enrollment } = useCommonEnrollmentDomainData(teiId, enrollmentId, programId); + const { error: enrollmentsError, enrollment, attributeValues } = useCommonEnrollmentDomainData(teiId, enrollmentId, programId); const { program, isLoading: programLoading, isError: programError, } = useProgramFromIndexedDB(programId); + const { orgUnit } = useRulesEngineOrgUnit(orgUnitId); + const programRules = useTrackerProgram(programId); + + const ruleEffects = useRuleEffects({ + orgUnit, + program: programRules, + apiEnrollment: enrollment, + apiAttributeValues: attributeValues, + }); useEffect(() => { if (enrollmentsError || programError) { @@ -42,9 +53,12 @@ export const ProgramStageSelector = ({ programId, orgUnitId, teiId, enrollmentId displayName: currentStage.displayName, style: currentStage.style, repeatable: currentStage.repeatable, + hiddenProgramStage: ruleEffects?.find( + ruleEffect => ruleEffect.type === 'HIDEPROGRAMSTAGE' && ruleEffect.id === currentStage.id, + ), }); return accStage; - }, []), [enrollment?.events, program?.programStages, programLoading]); + }, []), [enrollment?.events, program?.programStages, programLoading, ruleEffects]); const onSelectProgramStage = (newStageId: string) => history.push(`enrollmentEventNew?${buildUrlQueryString({ diff --git a/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/EnrollmentEditEventPage.component.js b/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/EnrollmentEditEventPage.component.js index 82b06c5bfc..c251de808f 100644 --- a/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/EnrollmentEditEventPage.component.js +++ b/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/EnrollmentEditEventPage.component.js @@ -148,6 +148,7 @@ const EnrollmentEditEventPagePain = ({ teiId={teiId} enrollmentId={enrollmentId} programId={programId} + readOnlyMode onDelete={onDelete} onAddNew={onAddNew} onError={onEnrollmentError} diff --git a/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/enrollment.actions.js b/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/enrollment.actions.js index 6cdbe894ba..beb3832f89 100644 --- a/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/enrollment.actions.js +++ b/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/enrollment.actions.js @@ -4,6 +4,8 @@ import { actionCreator } from '../../../../actions/actions.utils'; export const enrollmentSiteActionTypes = { COMMON_ENROLLMENT_SITE_DATA_SET: 'EnrollmentSite.SetCommonData', + UPDATE_ENROLLMENT_DATE: 'Enrollment.UpdateEnrollmentDate', + UPDATE_INCIDENT_DATE: 'Enrollment.UpdateIncidentDate', UPDATE_ENROLLMENT_EVENTS: 'Enrollment.UpdateEnrollmentEvents', UPDATE_ENROLLMENT_EVENTS_WITHOUT_ID: 'Enrollment.UpdateEnrollmentEventsWithoutId', UPDATE_ENROLLMENT_ATTRIBUTE_VALUES: 'Enrollment.UpdateEnrollmentAttributeValues', @@ -18,6 +20,16 @@ export const enrollmentSiteActionTypes = { export const setCommonEnrollmentSiteData = (enrollment: ApiEnrollment, attributeValues: ApiAttributeValues) => actionCreator(enrollmentSiteActionTypes.COMMON_ENROLLMENT_SITE_DATA_SET)({ enrollment, attributeValues }); +export const updateEnrollmentDate = (enrollmentDate: string) => + actionCreator(enrollmentSiteActionTypes.UPDATE_ENROLLMENT_DATE)({ + enrollmentDate, + }); + +export const updateIncidentDate = (incidentDate: string) => + actionCreator(enrollmentSiteActionTypes.UPDATE_INCIDENT_DATE)({ + incidentDate, + }); + export const updateEnrollmentEvents = (eventId: string, eventData: Object) => actionCreator(enrollmentSiteActionTypes.UPDATE_ENROLLMENT_EVENTS)({ eventId, diff --git a/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/index.js b/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/index.js index e7a9b66f5b..067f6b41cd 100644 --- a/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/index.js +++ b/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/index.js @@ -2,6 +2,8 @@ export type { HideWidgets, WidgetEffects } from './enrollmentOverviewDomain.types'; export { enrollmentSiteActionTypes, + updateEnrollmentDate, + updateIncidentDate, updateEnrollmentEvents, commitEnrollmentEvent, rollbackEnrollmentEvent, @@ -10,3 +12,4 @@ export { showEnrollmentError, } from './enrollment.actions'; export { useCommonEnrollmentDomainData } from './useCommonEnrollmentDomainData'; +export { useRuleEffects } from './useRuleEffects'; diff --git a/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/useRuleEffects/index.js b/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/useRuleEffects/index.js new file mode 100644 index 0000000000..b8f1e7545a --- /dev/null +++ b/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/useRuleEffects/index.js @@ -0,0 +1,3 @@ +// @flow +export { useRuleEffects } from './useRuleEffects'; +export type * from './useRuleEffects.types'; diff --git a/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/hooks/useRuleEffects.js b/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/useRuleEffects/useRuleEffects.js similarity index 94% rename from src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/hooks/useRuleEffects.js rename to src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/useRuleEffects/useRuleEffects.js index bc38ec206c..74f6a96735 100644 --- a/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/hooks/useRuleEffects.js +++ b/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/useRuleEffects/useRuleEffects.js @@ -79,13 +79,16 @@ export const useRuleEffects = ({ orgUnit, program, apiEnrollment, apiAttributeVa useEffect(() => { if (orgUnit && attributeValues && enrollmentData && otherEvents) { - setRuleEffects(getApplicableRuleEffectsForTrackerProgram({ + const effects = getApplicableRuleEffectsForTrackerProgram({ program, orgUnit, otherEvents, attributeValues, enrollmentData, - }, true)); + }, true); + if (Array.isArray(effects)) { + setRuleEffects(effects); + } } }, [attributeValues, enrollmentData, orgUnit, otherEvents, program]); diff --git a/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/hooks/useRuleEffects.types.js b/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/useRuleEffects/useRuleEffects.types.js similarity index 81% rename from src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/hooks/useRuleEffects.types.js rename to src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/useRuleEffects/useRuleEffects.types.js index e2a28b85f3..3ce69affc9 100644 --- a/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/hooks/useRuleEffects.types.js +++ b/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/useRuleEffects/useRuleEffects.types.js @@ -4,7 +4,7 @@ import type { TrackerProgram } from 'capture-core/metaData'; import type { EnrollmentData, AttributeValue, -} from '../../../common/EnrollmentOverviewDomain/useCommonEnrollmentDomainData'; +} from '../useCommonEnrollmentDomainData'; export type UseRuleEffectsInput = {| orgUnit?: ?OrgUnit, diff --git a/src/core_modules/capture-core/components/WidgetEnrollment/Actions/Actions.container.js b/src/core_modules/capture-core/components/WidgetEnrollment/Actions/Actions.container.js index e83fdfda17..2ce98fcb38 100644 --- a/src/core_modules/capture-core/components/WidgetEnrollment/Actions/Actions.container.js +++ b/src/core_modules/capture-core/components/WidgetEnrollment/Actions/Actions.container.js @@ -3,6 +3,7 @@ import { useDataMutation } from '@dhis2/app-runtime'; import React from 'react'; import { ActionsComponent } from './Actions.component'; import type { Props } from './actions.types'; +import { processErrorReports } from '../processErrorReports'; const enrollmentUpdate = { resource: 'tracker?async=false&importStrategy=UPDATE', @@ -18,13 +19,6 @@ const enrollmentDelete = { enrollments: [enrollment], }), }; -const processErrorReports = (error) => { - // $FlowFixMe[prop-missing] - const errorReports = error?.details?.validationReport?.errorReports; - return errorReports?.length > 0 - ? errorReports.reduce((acc, errorReport) => `${acc} ${errorReport.message}`, '') - : error.message; -}; export const Actions = ({ enrollment = {}, diff --git a/src/core_modules/capture-core/components/WidgetEnrollment/Date/Date.component.js b/src/core_modules/capture-core/components/WidgetEnrollment/Date/Date.component.js new file mode 100644 index 0000000000..f3c7f36617 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetEnrollment/Date/Date.component.js @@ -0,0 +1,151 @@ +// @flow +import React, { useState, useCallback } from 'react'; +import moment from 'moment'; +import { + Button, + CalendarInput, + IconCalendar16, + IconEdit16, + colors, + spacersNum, +} from '@dhis2/ui'; +import i18n from '@dhis2/d2-i18n'; +import { withStyles } from '@material-ui/core'; +import { convertValue as convertValueClientToView } from '../../../converters/clientToView'; +import { dataElementTypes } from '../../../metaData'; + +type Props = { + date: string, + dateLabel: string, + editEnabled: boolean, + displayAutoGeneratedEventWarning: boolean, + onSave: (string) => void, + ...CssClasses, +} + +const styles = { + editButton: { + display: 'inline-flex', + alignItems: 'center', + justifyContent: 'center', + flexShrink: 0, + cursor: 'pointer', + border: 'none', + borderRadius: '3px', + background: 'transparent', + color: colors.grey600, + padding: 0, + marginLeft: '2px', + '&:focus': { + outline: 'none', + background: colors.grey200, + color: colors.grey800, + }, + '&:hover': { + background: colors.grey200, + color: colors.grey800, + }, + }, + calendar: { + paddingTop: '6px', + }, + inputField: { + maxWidth: '200px', + }, + buttonStrip: { + display: 'flex', + gap: `${spacersNum.dp4}px`, + margin: `${spacersNum.dp4}px 0`, + }, + note: { + fontSize: '12px', + color: colors.grey700, + }, +}; + +const DateComponentPlain = ({ + date, + dateLabel, + editEnabled, + displayAutoGeneratedEventWarning, + onSave, + classes, +}: Props) => { + const [editMode, setEditMode] = useState(false); + const [selectedDate, setSelectedDate] = useState(); + const dateChangeHandler = useCallback(({ calendarDateString }) => { + setSelectedDate(calendarDateString); + }, [setSelectedDate]); + const displayDate = String(convertValueClientToView(date, dataElementTypes.DATE)); + + const onOpenEdit = () => { + // CalendarInput component only supports the YYYY-MM-DD format + setSelectedDate(moment(date).format('YYYY-MM-DD')); + setEditMode(true); + }; + const saveHandler = () => { + // CalendarInput component only supports the YYYY-MM-DD format + if (selectedDate) { + const newDate = moment.utc(selectedDate, 'YYYY-MM-DD').format('YYYY-MM-DDTHH:mm:ss.SSS'); + if (newDate !== date) { + onSave(newDate); + } + } + setEditMode(false); + }; + + return editMode ? ( +
+
+ +
+
+ + +
+ {displayAutoGeneratedEventWarning && ( +
+ {i18n.t('Existing dates for auto-generated events will not be updated.')} +
+ )} +
+ ) : ( +
+ + + + {dateLabel}{': '} + {displayDate} + {editEnabled && + + } +
+ ); +}; + +export const Date = withStyles(styles)(DateComponentPlain); diff --git a/src/core_modules/capture-core/components/WidgetEnrollment/Date/index.js b/src/core_modules/capture-core/components/WidgetEnrollment/Date/index.js new file mode 100644 index 0000000000..5fc124daa8 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetEnrollment/Date/index.js @@ -0,0 +1,2 @@ +// @flow +export { Date } from './Date.component'; diff --git a/src/core_modules/capture-core/components/WidgetEnrollment/WidgetEnrollment.component.js b/src/core_modules/capture-core/components/WidgetEnrollment/WidgetEnrollment.component.js index 977793676c..15ebdb7c41 100644 --- a/src/core_modules/capture-core/components/WidgetEnrollment/WidgetEnrollment.component.js +++ b/src/core_modules/capture-core/components/WidgetEnrollment/WidgetEnrollment.component.js @@ -4,7 +4,6 @@ import moment from 'moment'; import { IconClock16, IconDimensionOrgUnit16, - IconCalendar16, IconLocation16, colors, Tag, @@ -20,6 +19,7 @@ import { Status } from './Status'; import { convertValue as convertValueServerToClient } from '../../converters/serverToClient'; import { convertValue as convertValueClientToView } from '../../converters/clientToView'; import { dataElementTypes } from '../../metaData'; +import { Date } from './Date'; import { Actions } from './Actions'; const styles = { @@ -52,11 +52,15 @@ export const WidgetEnrollmentPlain = ({ ownerOrgUnit = {}, refetchEnrollment, refetchTEI, - error, + initError, loading, canAddNew, + editDateEnabled, + displayAutoGeneratedEventWarning, onDelete, onAddNew, + updateEnrollmentDate, + updateIncidentDate, onError, onSuccess, }: PlainProps) => { @@ -72,13 +76,13 @@ export const WidgetEnrollmentPlain = ({ onClose={useCallback(() => setOpenStatus(false), [setOpenStatus])} open={open} > - {error && ( + {initError && (
{i18n.t('Enrollment widget could not be loaded. Please try again later')}
)} {loading && } - {!error && !loading && ( + {!initError && !loading && (
{enrollment.followUp && ( @@ -89,28 +93,28 @@ export const WidgetEnrollmentPlain = ({
-
- - - - {getEnrollmentDateLabel(program)}{' '} - {convertValueClientToView( - convertValueServerToClient(enrollment.enrolledAt, dataElementTypes.DATE), - dataElementTypes.DATE, - )} -
+ + + {program.displayIncidentDate && ( -
- - - - {getIncidentDateLabel(program)}{' '} - {convertValueClientToView( - convertValueServerToClient(enrollment.occurredAt, dataElementTypes.DATE), - dataElementTypes.DATE, - )} -
+ + + )}
diff --git a/src/core_modules/capture-core/components/WidgetEnrollment/WidgetEnrollment.container.js b/src/core_modules/capture-core/components/WidgetEnrollment/WidgetEnrollment.container.js index 8660f704f4..38296cfa32 100644 --- a/src/core_modules/capture-core/components/WidgetEnrollment/WidgetEnrollment.container.js +++ b/src/core_modules/capture-core/components/WidgetEnrollment/WidgetEnrollment.container.js @@ -10,8 +10,30 @@ import { useProgram } from './hooks/useProgram'; import type { Props } from './enrollment.types'; import { plainStatus } from './constants/status.const'; -export const WidgetEnrollment = ({ teiId, enrollmentId, programId, onDelete, onAddNew, onError, onSuccess }: Props) => { - const { error: errorEnrollment, enrollment, refetch: refetchEnrollment } = useEnrollment(enrollmentId); +export const WidgetEnrollment = ({ + teiId, + enrollmentId, + programId, + readOnlyMode = false, + onDelete, + onAddNew, + onUpdateEnrollmentDate, + onUpdateIncidentDate, + onError, + onSuccess, +}: Props) => { + const { + enrollment, + updateEnrollmentDate, + updateIncidentDate, + error: errorEnrollment, + refetch: refetchEnrollment, + } = useEnrollment({ + enrollmentId, + onUpdateEnrollmentDate, + onUpdateIncidentDate, + onError, + }); const { error: errorProgram, program } = useProgram(programId); const { error: errorOwnerOrgUnit, @@ -23,6 +45,7 @@ export const WidgetEnrollment = ({ teiId, enrollmentId, programId, onDelete, onA const canAddNew = enrollments .filter(item => item.program === programId) .every(item => item.status !== plainStatus.ACTIVE); + const containsAutoGeneratedEvent = program && program.programStages.some(({ autoGenerateEvent }) => autoGenerateEvent); const error = errorEnrollment || errorProgram || errorOwnerOrgUnit || errorOrgUnit; if (error) { @@ -33,6 +56,8 @@ export const WidgetEnrollment = ({ teiId, enrollmentId, programId, onDelete, onA diff --git a/src/core_modules/capture-core/components/WidgetEnrollment/enrollment.types.js b/src/core_modules/capture-core/components/WidgetEnrollment/enrollment.types.js index a3eacd0fdb..d4e14794b8 100644 --- a/src/core_modules/capture-core/components/WidgetEnrollment/enrollment.types.js +++ b/src/core_modules/capture-core/components/WidgetEnrollment/enrollment.types.js @@ -5,8 +5,11 @@ export type Props = {| teiId: string, enrollmentId: string, programId: string, + readOnlyMode?: boolean, onDelete: () => void, onAddNew: () => void, + onUpdateEnrollmentDate?: (enrollmentDate: string) => void, + onUpdateIncidentDate?: (enrollmentDate: string) => void, onError?: (message: string) => void, onSuccess?: () => void, |}; @@ -17,9 +20,13 @@ export type PlainProps = {| ownerOrgUnit: Object, refetchEnrollment: QueryRefetchFunction, refetchTEI: QueryRefetchFunction, - error?: FetchError, + initError?: FetchError, loading: boolean, canAddNew: boolean, + editDateEnabled: boolean, + displayAutoGeneratedEventWarning: boolean, + updateEnrollmentDate: (enrollmentDate: string) => void, + updateIncidentDate: (incidentDate: string) => void, onDelete: () => void, onAddNew: () => void, onError?: (message: string) => void, diff --git a/src/core_modules/capture-core/components/WidgetEnrollment/hooks/useEnrollment.js b/src/core_modules/capture-core/components/WidgetEnrollment/hooks/useEnrollment.js index 87ae5120c4..e9b2d305fd 100644 --- a/src/core_modules/capture-core/components/WidgetEnrollment/hooks/useEnrollment.js +++ b/src/core_modules/capture-core/components/WidgetEnrollment/hooks/useEnrollment.js @@ -1,8 +1,23 @@ // @flow -import { useMemo, useEffect } from 'react'; +import { useMemo, useEffect, useState } from 'react'; import { useDataQuery } from '@dhis2/app-runtime'; +import { useUpdateEnrollment } from './useUpdateEnrollment'; + +type Props = { + enrollmentId: string, + onUpdateEnrollmentDate?: (date: string) => void, + onUpdateIncidentDate?: (date: string) => void, + onError?: (error: any) => void, +} + +export const useEnrollment = ({ + enrollmentId, + onUpdateEnrollmentDate, + onUpdateIncidentDate, + onError, +}: Props) => { + const [enrollment, setEnrollment] = useState(); -export const useEnrollment = (enrollmentId: string) => { const { error, loading, data, refetch } = useDataQuery( useMemo( () => ({ @@ -20,5 +35,33 @@ export const useEnrollment = (enrollmentId: string) => { enrollmentId && refetch({ variables: { enrollmentId } }); }, [refetch, enrollmentId]); - return { error, refetch, enrollment: !loading && data?.enrollment }; + useEffect(() => { + if (data) { + setEnrollment(data.enrollment); + } + }, [setEnrollment, data]); + + const updateEnrollmentDate = useUpdateEnrollment({ + enrollment, + setEnrollment, + propertyName: 'enrolledAt', + updateHandler: onUpdateEnrollmentDate, + onError, + }); + + const updateIncidentDate = useUpdateEnrollment({ + enrollment, + setEnrollment, + propertyName: 'occurredAt', + updateHandler: onUpdateIncidentDate, + onError, + }); + + return { + error, + refetch, + enrollment: !loading && enrollment, + updateEnrollmentDate, + updateIncidentDate, + }; }; diff --git a/src/core_modules/capture-core/components/WidgetEnrollment/hooks/useProgram.js b/src/core_modules/capture-core/components/WidgetEnrollment/hooks/useProgram.js index 937f5644c6..fec7939f6d 100644 --- a/src/core_modules/capture-core/components/WidgetEnrollment/hooks/useProgram.js +++ b/src/core_modules/capture-core/components/WidgetEnrollment/hooks/useProgram.js @@ -10,7 +10,7 @@ export const useProgram = (programId: string) => { resource: `programs/${programId}`, params: { fields: [ - 'displayIncidentDate,incidentDateLabel,enrollmentDateLabel,onlyEnrollOnce,trackedEntityType[displayName]', + 'displayIncidentDate,incidentDateLabel,enrollmentDateLabel,onlyEnrollOnce,trackedEntityType[displayName],programStages[autoGenerateEvent],access', ], }, }, diff --git a/src/core_modules/capture-core/components/WidgetEnrollment/hooks/useUpdateEnrollment.js b/src/core_modules/capture-core/components/WidgetEnrollment/hooks/useUpdateEnrollment.js new file mode 100644 index 0000000000..fd7c96f827 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetEnrollment/hooks/useUpdateEnrollment.js @@ -0,0 +1,42 @@ +// @flow +import { useCallback } from 'react'; +import { useDataMutation } from '@dhis2/app-runtime'; +import { processErrorReports } from '../processErrorReports'; + +const enrollmentUpdate = { + resource: 'tracker?async=false&importStrategy=UPDATE', + type: 'create', + data: enrollment => ({ + enrollments: [enrollment], + }), +}; + +export const useUpdateEnrollment = ({ + enrollment, + setEnrollment, + propertyName, + updateHandler, + onError, +}: { + enrollment: any, + setEnrollment: (enrollment: any) => void, + propertyName: string, + updateHandler?: (value: any) => void, + onError?: (error: any) => void, +}) => { + const [updateEnrollmentMutation] = useDataMutation(enrollmentUpdate, { + onError: (e) => { + setEnrollment(enrollment); + updateHandler && updateHandler(enrollment[propertyName]); + onError && onError(processErrorReports(e)); + }, + }); + + return useCallback((value: string) => { + const updatedEnrollment = { ...enrollment }; + updatedEnrollment[propertyName] = value; + setEnrollment(updatedEnrollment); + updateEnrollmentMutation(updatedEnrollment); + updateHandler && updateHandler(value); + }, [enrollment, setEnrollment, propertyName, updateHandler, updateEnrollmentMutation]); +}; diff --git a/src/core_modules/capture-core/components/WidgetEnrollment/processErrorReports.js b/src/core_modules/capture-core/components/WidgetEnrollment/processErrorReports.js new file mode 100644 index 0000000000..d60fa40b31 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetEnrollment/processErrorReports.js @@ -0,0 +1,8 @@ +// @flow +export const processErrorReports = (error: any) => { + // $FlowFixMe[prop-missing] + const errorReports = error?.details?.validationReport?.errorReports; + return errorReports?.length > 0 + ? errorReports.reduce((acc, errorReport) => `${acc} ${errorReport.message}`, '') + : error.message; +}; diff --git a/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/ErrorText/ErrorText.component.js b/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/ErrorText/ErrorText.component.js new file mode 100644 index 0000000000..a885a48a6d --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/ErrorText/ErrorText.component.js @@ -0,0 +1,20 @@ +// @flow +import React from 'react'; +import i18n from '@dhis2/d2-i18n'; +import { NoticeBox } from '@dhis2/ui'; +import type { Props } from './ErrorText.types'; + +export const ErrorText = ({ stageName }: Props) => ( + <> +
+ + + {i18n.t("You can't add any more {{ programStageName }} events", { + programStageName: stageName, + interpolation: { escapeValue: false }, + })} + + +
+ +); diff --git a/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/ErrorText/ErrorText.types.js b/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/ErrorText/ErrorText.types.js new file mode 100644 index 0000000000..07785c7e1a --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/ErrorText/ErrorText.types.js @@ -0,0 +1,5 @@ +// @flow + +export type Props = {| + stageName: string, +|}; diff --git a/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/ErrorText/index.js b/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/ErrorText/index.js new file mode 100644 index 0000000000..2b26086840 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/ErrorText/index.js @@ -0,0 +1,2 @@ +// @flow +export { ErrorText } from './ErrorText.component'; diff --git a/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/FinishButtons/FinishButtons.component.js b/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/FinishButtons/FinishButtons.component.js index ae5f972510..1c0a36c1c8 100644 --- a/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/FinishButtons/FinishButtons.component.js +++ b/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/FinishButtons/FinishButtons.component.js @@ -3,6 +3,7 @@ import React, { type ComponentType } from 'react'; import i18n from '@dhis2/d2-i18n'; import { withStyles } from '@material-ui/core'; import { Button, spacersNum } from '@dhis2/ui'; +import { ConditionalTooltip } from 'capture-core/components/ConditionalTooltip'; import { withCancelButton } from '../../DataEntry/withCancelButton'; import { addEventSaveTypes } from '../DataEntry/addEventSaveTypes'; import type { InputProps, Props } from './finishButtons.types'; @@ -17,26 +18,43 @@ const styles = { }, }; -const FinishButtonsPlain = ({ onSave, cancelButton, classes }: Props) => ( +const FinishButtonsPlain = ({ onSave, cancelButton, hiddenProgramStage, stageName, classes }: Props) => (
- + +
- + +
{cancelButton}
); -export const FinishButtons: ComponentType = - withCancelButton()(withStyles(styles)(FinishButtonsPlain)); +export const FinishButtons: ComponentType = withCancelButton()(withStyles(styles)(FinishButtonsPlain)); diff --git a/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/FinishButtons/finishButtons.types.js b/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/FinishButtons/finishButtons.types.js index dd3acb8e32..079708e30a 100644 --- a/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/FinishButtons/finishButtons.types.js +++ b/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/FinishButtons/finishButtons.types.js @@ -6,10 +6,14 @@ export type InputProps = {| onSave: (saveType: $Keys) => void, onCancel: () => void, id: string, + hiddenProgramStage: boolean, + stageName: string, |}; export type Props = {| onSave: (saveType: $Keys) => void, cancelButton: Element, + hiddenProgramStage: boolean, + stageName: string, ...CssClasses, |}; diff --git a/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/Validated/Validated.component.js b/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/Validated/Validated.component.js index ed59d6dc4e..4f784d2b9a 100644 --- a/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/Validated/Validated.component.js +++ b/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/Validated/Validated.component.js @@ -6,6 +6,7 @@ import { Widget } from '../../Widget'; import { DataEntry } from '../DataEntry'; import { FinishButtons } from '../FinishButtons'; import { SavingText } from '../SavingText'; +import { ErrorText } from '../ErrorText'; import type { Props } from './validated.types'; const styles = () => ({ @@ -23,6 +24,7 @@ const ValidatedPlain = ({ onSave, onCancel, orgUnit, + hiddenProgramStage, id, ...passOnProps }: Props) => ( @@ -46,12 +48,14 @@ const ValidatedPlain = ({ onSave={onSave} onCancel={onCancel} id={id} - /> - + {hiddenProgramStage ? ( + + ) : ( + + )}
)} diff --git a/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/Validated/Validated.container.js b/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/Validated/Validated.container.js index 3d85e67cbf..c0245b477f 100644 --- a/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/Validated/Validated.container.js +++ b/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/Validated/Validated.container.js @@ -1,6 +1,6 @@ // @flow import React, { useCallback } from 'react'; -import { useDispatch } from 'react-redux'; +import { useDispatch, useSelector } from 'react-redux'; import { withAskToCreateNew, withSaveHandler } from '../../DataEntry'; import { useLifecycle } from './useLifecycle'; import { useClientFormattedRulesExecutionDependencies } from './useClientFormattedRulesExecutionDependencies'; @@ -29,6 +29,11 @@ export const Validated = ({ }: ContainerProps) => { const dataEntryId = 'enrollmentEvent'; const itemId = 'newEvent'; + const rulesEffectsHiddenProgram = useSelector( + ({ rulesEffectsHiddenProgramStageDesc }) => + rulesEffectsHiddenProgramStageDesc && rulesEffectsHiddenProgramStageDesc[`${dataEntryId}-${itemId}`], + ); + const hiddenProgramStage = rulesEffectsHiddenProgram && rulesEffectsHiddenProgram[stage.id]; const rulesExecutionDependenciesClientFormatted = useClientFormattedRulesExecutionDependencies(rulesExecutionDependencies, program); @@ -127,6 +132,7 @@ export const Validated = ({ programName={program.name} orgUnit={orgUnit} rulesExecutionDependenciesClientFormatted={rulesExecutionDependenciesClientFormatted} + hiddenProgramStage={hiddenProgramStage} /> ); }; diff --git a/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/Validated/validated.types.js b/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/Validated/validated.types.js index a5194d88af..932e61a6d8 100644 --- a/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/Validated/validated.types.js +++ b/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/Validated/validated.types.js @@ -25,5 +25,6 @@ export type Props = {| formRef: (formInstance: any) => void, dataEntryFieldRef: (instance: any, id: string) => void, rulesExecutionDependenciesClientFormatted: RulesExecutionDependenciesClientFormatted, + hiddenProgramStage: boolean, ...CssClasses, |}; diff --git a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/Stage.component.js b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/Stage.component.js index b50d0134a2..f8a8908b20 100644 --- a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/Stage.component.js +++ b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/Stage.component.js @@ -4,6 +4,7 @@ import cx from 'classnames'; import i18n from '@dhis2/d2-i18n'; import { withStyles } from '@material-ui/core'; import { spacersNum, colors, IconAdd16, Button } from '@dhis2/ui'; +import { ConditionalTooltip } from 'capture-core/components/ConditionalTooltip'; import { StageOverview } from './StageOverview'; import type { Props } from './stage.types'; import { Widget } from '../../../Widget'; @@ -23,11 +24,15 @@ const styles = { alignItems: 'center', }, }; +const hideProgramStage = (ruleEffects, stageId) => ( + Boolean(ruleEffects?.find(ruleEffect => ruleEffect.type === 'HIDEPROGRAMSTAGE' && ruleEffect.id === stageId)) +); - -export const StagePlain = ({ stage, events, classes, className, onCreateNew, ...passOnProps }: Props) => { +export const StagePlain = ({ stage, events, classes, className, onCreateNew, ruleEffects, ...passOnProps }: Props) => { const [open, setOpenStatus] = useState(true); const { id, name, icon, description, dataElements, hideDueDate, repeatable } = stage; + const hiddenProgramStage = hideProgramStage(ruleEffects, id); + return (
: } + /> : ( + + + + )}
); 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 5b45f31d6f..6d5da181fa 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 @@ -69,6 +69,7 @@ const StageDetailPlain = (props: Props) => { onEventClick, onViewAll, onCreateNew, + hiddenProgramStage, classes } = props; const defaultSortState = { columnName: 'status', @@ -214,11 +215,18 @@ const StageDetailPlain = (props: Props) => { >{i18n.t('Go to full {{ eventName }}', { eventName, interpolation: { escapeValue: false } })} : null); const renderCreateNewButton = () => { - const shouldDisableCreateNew = !repeatable && events.length > 0; + const shouldDisableCreateNew = (!repeatable && events.length > 0) || hiddenProgramStage; + + const tooltipContent = hiddenProgramStage + ? i18n.t("You can't add any more {{ programStageName }} events", { + programStageName: eventName, + interpolation: { escapeValue: false }, + }) + : i18n.t('This stage can only have one event'); return ( 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 ac5c02c897..a5edeeab75 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 @@ -8,6 +8,7 @@ import type { StageDataElement, StageCommonProps } from '../../../types/common.t hideDueDate?: boolean, repeatable?: boolean, stageId: string, + hiddenProgramStage?: boolean, ...CssClasses, |}; diff --git a/src/core_modules/capture-core/components/WidgetStagesAndEvents/types/common.types.js b/src/core_modules/capture-core/components/WidgetStagesAndEvents/types/common.types.js index fdd9db8a0e..e852ecb0d0 100644 --- a/src/core_modules/capture-core/components/WidgetStagesAndEvents/types/common.types.js +++ b/src/core_modules/capture-core/components/WidgetStagesAndEvents/types/common.types.js @@ -1,4 +1,5 @@ // @flow +import { typeof effectActions } from '@dhis2/rules-engine-javascript'; import type { Icon } from 'capture-core/metaData'; import { dataElementTypes, Option } from '../../../metaData'; @@ -29,7 +30,8 @@ export type StageCommonProps = {| programId: string, onViewAll: (stageId: string) => void, onCreateNew: (stageId: string) => void, - onEventClick: (eventId: string) => void + onEventClick: (eventId: string) => void, + ruleEffects?: Array<{id: string, type: $Values}>, |} export type DataValue = { 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 ee276e1be6..9c24892223 100644 --- a/src/core_modules/capture-core/reducers/descriptions/enrollmentDomain.reducerDescription.js +++ b/src/core_modules/capture-core/reducers/descriptions/enrollmentDomain.reducerDescription.js @@ -9,6 +9,8 @@ import { assigneeSectionActionTypes } from '../../components/WidgetAssignee'; const initialReducerValue = {}; const { COMMON_ENROLLMENT_SITE_DATA_SET, + UPDATE_ENROLLMENT_DATE, + UPDATE_INCIDENT_DATE, UPDATE_ENROLLMENT_EVENTS, UPDATE_ENROLLMENT_EVENTS_WITHOUT_ID, UPDATE_ENROLLMENT_ATTRIBUTE_VALUES, @@ -26,6 +28,20 @@ export const enrollmentDomainDesc = createReducerDescription( attributeValues, enrollmentId: enrollment?.enrollment, }), + [UPDATE_ENROLLMENT_DATE]: (state, { payload: { enrollmentDate } }) => ({ + ...state, + enrollment: { + ...state.enrollment, + enrolledAt: enrollmentDate, + }, + }), + [UPDATE_INCIDENT_DATE]: (state, { payload: { incidentDate } }) => ({ + ...state, + enrollment: { + ...state.enrollment, + occurredAt: incidentDate, + }, + }), [UPDATE_ENROLLMENT_EVENTS]: ( state, { payload: { eventId, eventData } }, diff --git a/src/core_modules/capture-core/reducers/descriptions/enrollmentPage.reducerDescription.js b/src/core_modules/capture-core/reducers/descriptions/enrollmentPage.reducerDescription.js index bfff16fabb..87827640b1 100644 --- a/src/core_modules/capture-core/reducers/descriptions/enrollmentPage.reducerDescription.js +++ b/src/core_modules/capture-core/reducers/descriptions/enrollmentPage.reducerDescription.js @@ -20,6 +20,7 @@ const { MISSING_MESSAGE_VIEW, DELETE_ENROLLMENT, UPDATE_TEI_DISPLAY_NAME, + UPDATE_ENROLLMENT_DATE, } = enrollmentPageActionTypes; export const enrollmentPageDesc = createReducerDescription({ @@ -73,6 +74,16 @@ export const enrollmentPageDesc = createReducerDescription({ ...state, teiDisplayName, }), + [UPDATE_ENROLLMENT_DATE]: + (state, { payload: { enrollmentId, enrollmentDate } }) => ({ + ...state, + enrollments: state.enrollments.map((enrollment) => { + if (enrollment.enrollment === enrollmentId) { + enrollment.enrolledAt = enrollmentDate; + } + return enrollment; + }), + }), [PAGE_CLEAN]: () => initialReducerValue, [DELETE_ENROLLMENT]: (state, { payload: { enrollmentId } }) => ({ ...state, diff --git a/src/core_modules/capture-core/reducers/descriptions/rulesEffects.reducerDescription.js b/src/core_modules/capture-core/reducers/descriptions/rulesEffects.reducerDescription.js index 1a3493638c..becca6ede0 100644 --- a/src/core_modules/capture-core/reducers/descriptions/rulesEffects.reducerDescription.js +++ b/src/core_modules/capture-core/reducers/descriptions/rulesEffects.reducerDescription.js @@ -64,6 +64,23 @@ export const rulesEffectsHiddenSectionsDesc = createReducerDescription({ }, }, 'rulesEffectsHiddenSections'); +export const rulesEffectsHiddenProgramStageDesc = createReducerDescription({ + [rulesEffectsActionTypes.UPDATE_RULES_EFFECTS]: (state, action) => { + const newState = { ...state }; + + const hideEffects: { [id: string]: Array } = action.payload.rulesEffects && action.payload.rulesEffects[effectActions.HIDE_PROGRAM_STAGE]; + newState[action.payload.formId] = hideEffects ? + Object.keys(hideEffects).reduce((accState, key) => { + accState[key] = true; + return accState; + }, {}) : + null; + + return newState; + }, +}, 'rulesEffectsHiddenProgramStageDesc'); + + const mapMessageEffectTypeToStateKey = { [effectActions.SHOW_ERROR]: messageStateKeys.ERROR, [effectActions.SHOW_WARNING]: messageStateKeys.WARNING, diff --git a/src/core_modules/capture-core/rules/__tests__/rulesEffectsForTrackerProgram.test.js b/src/core_modules/capture-core/rules/__tests__/rulesEffectsForTrackerProgram.test.js index c0990a714d..bbd2514ae8 100644 --- a/src/core_modules/capture-core/rules/__tests__/rulesEffectsForTrackerProgram.test.js +++ b/src/core_modules/capture-core/rules/__tests__/rulesEffectsForTrackerProgram.test.js @@ -31,6 +31,7 @@ test('expressions with d2Functions in tracker program', () => { { id: 'Tx4gHcLselM', displayContent: 'd2:oizp( 10000000 ) = ', data: 'd2:oizp( 10000000 )', location: 'feedback', programRuleActionType: 'DISPLAYTEXT' }, { id: 'f3MrrcCf1z2', displayContent: 'd2:modulus( 12 , 100 ) = ', data: 'd2:modulus( 12 , 100 )', location: 'feedback', programRuleActionType: 'DISPLAYTEXT' }, { id: 'Eeb7Ixr4Pv6', displayContent: 'd2:floor((5+5) / 2) = ', data: 'd2:floor((5+5) / 2)', location: 'feedback', programRuleActionType: 'DISPLAYTEXT' }, + { id: 'nKNmayYigcy', programStageId: 'PUZaKR0Jh2k', programRuleActionType: 'HIDEPROGRAMSTAGE' }, ], }]; const programRulesVariables = []; @@ -72,5 +73,6 @@ test('expressions with d2Functions in tracker program', () => { { type: 'DISPLAYTEXT', id: 'feedback', displayText: { id: 'Tx4gHcLselM', message: 'd2:oizp( 10000000 ) = 1' } }, { type: 'DISPLAYTEXT', id: 'feedback', displayText: { id: 'f3MrrcCf1z2', message: 'd2:modulus( 12 , 100 ) = 12' } }, { type: 'DISPLAYTEXT', id: 'feedback', displayText: { id: 'Eeb7Ixr4Pv6', message: 'd2:floor((5+5) / 2) = 5' } }, // check double parentheses + { type: 'HIDEPROGRAMSTAGE', id: 'PUZaKR0Jh2k' }, ]); }); diff --git a/src/reducers/descriptions/trackerCapture.reducerDescriptions.js b/src/reducers/descriptions/trackerCapture.reducerDescriptions.js index 057daf6d81..720ed088fb 100644 --- a/src/reducers/descriptions/trackerCapture.reducerDescriptions.js +++ b/src/reducers/descriptions/trackerCapture.reducerDescriptions.js @@ -20,6 +20,7 @@ import { rulesEffectsHiddenFieldsDesc, rulesEffectsErrorMessagesDesc, rulesEffectsHiddenSectionsDesc, + rulesEffectsHiddenProgramStageDesc, rulesEffectsCompulsoryFieldsDesc, rulesEffectsFeedbackDesc, rulesEffectsIndicatorsDesc, @@ -116,6 +117,7 @@ export const reducerDescriptions = [ rulesEffectsHiddenFieldsDesc, rulesEffectsErrorMessagesDesc, rulesEffectsHiddenSectionsDesc, + rulesEffectsHiddenProgramStageDesc, rulesEffectsCompulsoryFieldsDesc, rulesEffectsFeedbackDesc, rulesEffectsIndicatorsDesc, diff --git a/yarn.lock b/yarn.lock index 0c0d33e902..983b457b91 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2948,7 +2948,7 @@ "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" -"@js-temporal/polyfill@^0.4.2": +"@js-temporal/polyfill@0.4.3", "@js-temporal/polyfill@^0.4.2": version "0.4.3" resolved "https://registry.yarnpkg.com/@js-temporal/polyfill/-/polyfill-0.4.3.tgz#e8f8cf86745eb5050679c46a5ebedb9a9cc1f09b" integrity sha512-6Fmjo/HlkyVCmJzAPnvtEWlcbQUSRhi8qlN9EtJA/wP7FqXsevLLrlojR44kzNzrRkpf7eDJ+z7b4xQD/Ycypw==