diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2787ac6de51..abb30cfb268 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,7 +6,7 @@ name: Java CI with Maven env: - JAVA: 11 + JAVA: 17 PRIVILEGED_RUN: ${{ (github.event_name == 'push' && github.ref == 'refs/heads/development') || github.event.pull_request.head.repo.full_name == github.repository }} CODEQL_LANGUAGES: 'java' # FIXME(@JonasCir) add 'javascript' diff --git a/.github/workflows/sormas_app_ci.yml b/.github/workflows/sormas_app_ci.yml index ee58a8bd961..f9975e8ae34 100644 --- a/.github/workflows/sormas_app_ci.yml +++ b/.github/workflows/sormas_app_ci.yml @@ -7,7 +7,7 @@ name: Java CI with Gradle env: - JAVA: 11 + JAVA: 17 PRIVILEGED_RUN: ${{ (github.event_name == 'push' && github.ref == 'refs/heads/development') || github.event.pull_request.head.repo.full_name == github.repository }} diff --git a/docs/DEVELOPMENT_ENVIRONMENT.md b/docs/DEVELOPMENT_ENVIRONMENT.md index 212148a3345..b6588e29482 100644 --- a/docs/DEVELOPMENT_ENVIRONMENT.md +++ b/docs/DEVELOPMENT_ENVIRONMENT.md @@ -7,14 +7,17 @@ This step-by-step guide explains how to set up your development environment, usi ## Step 1: Check Out the SORMAS Repository - [Download and install the latest Git version](https://git-scm.com/downloads) for your operating system -- *Optional:* Install a Git client such as [TortoiseGit](https://tortoisegit.org/) or [GitHub Desktop](https://desktop.github.com/) if you don't want to handle version control from the command line or within your IDE +- *Optional:* Install a Git client such as [TortoiseGit](https://tortoisegit.org/) or [GitHub Desktop](https://desktop.github.com/) if you don't want to handle version control from the command-line or within your IDE - *Optional:* Clone the SORMAS-Project repository with `git clone https://github.com/hzi-braunschweig/SORMAS-Project.git`; if you want to use Git from within your IDE, you can also clone the repository in Step 4 - Open Git Bash and execute the following command to ensure that rebase is used when pulling the development branch rather than merge: `git config --global branch.development.rebase true` ## Step 2: Install Java -Download and install the **Java 11 JDK** (not JRE) for your operating system. +Download and install the **Java 11 JDK** (not JRE) for your operating system, which is also needed for the [Server Setup](SERVER_SETUP.md). We suggest using [Zulu OpenJDK](https://www.azul.com/downloads/?version=java-11-lts&package=jdk). If you're running Linux, please refer to the [official documentation](https://docs.azul.com/zulu/zuludocs/ZuluUserGuide/PrepareZuluPlatform/AttachAPTRepositoryUbuntuOrDebianSys.htm) on how to install Zulu OpenJDK on your system. -If you plan to work on the Android App as well, you will also need the **Java 8 JDK** to use with Android Studio. + +Note: To work with the Android app JDK 17 is needed for the gradle build. The needed JDK is part of Android Studio, thus there is no need to manually install it. + +The SORMAS CI is using JDK 17 to build all modules. The only known difference though are slight differences in the Java time API that affect unit tests, so again there is no need to setup two JDKs on your local system. ## Step 3: Install Maven & Ant Download and install Maven for your operating system, see [binaries](https://dlcdn.apache.org/maven/maven-3/3.6.3/binaries/) @@ -134,10 +137,10 @@ Optional, but strongly recommended: 7. For eclipse formatted plugin, there is an issue for Idea: - `cannot save settings Path to custom eclipse folder is not valid` - it works only when settings were saved from down to up. And not vice versa. If something is still not working: - -> Stop the payara domain, run Ant deploy-serverlibs to update libs - -> clean up (delete all from domains/sormas/autodeploy, domains/sormas/applications, domains/sormas/generated, and domains/sormas/osgi-cache) try to build again by executing `mvn clean install -DskipTests` on the `sormas-base` module - -> start the domain and deploy again - + -> Stop the payara domain, run Ant deploy-serverlibs to update libs + -> clean up (delete all from domains/sormas/autodeploy, domains/sormas/applications, domains/sormas/generated, and domains/sormas/osgi-cache) try to build again by executing `mvn clean install -DskipTests` on the `sormas-base` module + -> start the domain and deploy again + ## Avoid redeployment problems **Problem**: Due to currently a not mitigated problem, it is only possible to deploy the `sormas-ear.ear` (contains `sormas-backend`) once without problems. If you undeploy it and deploy `sormas-ear.ear` again, the other artifacts `sormas-ui`and `sormas-rest` cannot successfully call the backend. diff --git a/docs/SERVER_SETUP.md b/docs/SERVER_SETUP.md index 65ebc9e93ab..2521f2af1f8 100644 --- a/docs/SERVER_SETUP.md +++ b/docs/SERVER_SETUP.md @@ -60,7 +60,7 @@ You can check your Java version from the shell/command line using: ``java -versi ### Postgres Database -* Install PostgreSQL (currently 9.5, 9.6 or 10) on your system (manuals for all OS can be found here: ) +* Install PostgreSQL (currently 9.5, 9.6 or 10 to 15) on your system (manuals for all OS can be found here: ) * Set **max_connections = 288** and **max_prepared_transactions = 256** (at least, sum of all connection pools) in ``postgresql.conf`` (e.g. ``/etc/postgresql/10.0/main/postgresql.conf``; ``C:/Program Files/PostgreSQL/10.0/data``) - make sure the property is uncommented and restart the service to apply the changes. * Install the "temporal tables" extension for Postgres () * **Windows**: Download the latest version for your Postgres version: diff --git a/sormas-api/pom.xml b/sormas-api/pom.xml index 3bfc6eb5a1c..7430bd7c384 100644 --- a/sormas-api/pom.xml +++ b/sormas-api/pom.xml @@ -2,7 +2,7 @@ de.symeda.sormas sormas-base - 1.83.1 + 1.84.0 ../sormas-base 4.0.0 @@ -19,12 +19,6 @@ - - - 1.8 - 1.8 - - @@ -94,8 +88,6 @@ uk.co.jemos.podam podam - 7.2.8.RELEASE - test diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/caze/CaseFacade.java b/sormas-api/src/main/java/de/symeda/sormas/api/caze/CaseFacade.java index 911a9f906c8..30be56fbc46 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/caze/CaseFacade.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/caze/CaseFacade.java @@ -50,7 +50,6 @@ import de.symeda.sormas.api.messaging.MessageType; import de.symeda.sormas.api.person.PersonReferenceDto; import de.symeda.sormas.api.sample.PathogenTestDto; -import de.symeda.sormas.api.utils.BulkOperationResults; import de.symeda.sormas.api.utils.DataHelper.Pair; import de.symeda.sormas.api.utils.SortProperty; import de.symeda.sormas.api.utils.ValidationRuntimeException; @@ -90,6 +89,8 @@ List getExportList( CaseDataDto updateFollowUpComment(@Valid @NotNull CaseDataDto dto) throws ValidationRuntimeException; + void updateVaccinationStatus(CaseReferenceDto caseRef, VaccinationStatus status); + CaseDataDto save(@Valid @NotNull CaseDataDto dto, boolean systemSave) throws ValidationRuntimeException; CoreAndPersonDto save(@Valid @NotNull CoreAndPersonDto dto) throws ValidationRuntimeException; @@ -184,7 +185,7 @@ Page getCaseFollowUpIndexPage( List getUuidsNotShareableWithExternalReportingTools(List caseUuids); - BulkOperationResults saveBulkCase( + Integer saveBulkCase( List caseUuidList, @Valid CaseBulkEditData updatedCaseBulkEditData, boolean diseaseChange, @@ -193,7 +194,7 @@ BulkOperationResults saveBulkCase( boolean outcomeChange, boolean surveillanceOfficerChange); - BulkOperationResults saveBulkEditWithFacilities( + Integer saveBulkEditWithFacilities( List caseUuidList, @Valid CaseBulkEditData updatedCaseBulkEditData, boolean diseaseChange, @@ -234,5 +235,4 @@ BulkOperationResults saveBulkEditWithFacilities( boolean hasOtherValidVaccination(CaseDataDto caze, String vaccinationUuid); Pair getRegionAndDistrictRefsOf(CaseReferenceDto caze); - } diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/caze/classification/ClassificationHtmlRenderer.java b/sormas-api/src/main/java/de/symeda/sormas/api/caze/classification/ClassificationHtmlRenderer.java index af421ec0885..16a20f000c4 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/caze/classification/ClassificationHtmlRenderer.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/caze/classification/ClassificationHtmlRenderer.java @@ -21,12 +21,11 @@ import java.util.List; import org.apache.commons.lang3.StringUtils; -import org.jsoup.safety.Whitelist; +import org.jsoup.safety.Safelist; import de.symeda.sormas.api.ConfigFacade; import de.symeda.sormas.api.CountryHelper; import de.symeda.sormas.api.Disease; -import de.symeda.sormas.api.FacadeProvider; import de.symeda.sormas.api.Language; import de.symeda.sormas.api.caze.classification.ClassificationXOfCriteriaDto.ClassificationXOfSubCriteriaDto; import de.symeda.sormas.api.i18n.I18nProperties; @@ -292,7 +291,7 @@ private static String buildSubCriteriaDiv( for (ClassificationCriteriaDto subCriteria : ((ClassificationCollectiveCriteria) criteria).getSubCriteria()) { if (!(subCriteria instanceof ClassificationCollectiveCriteria) || subCriteria instanceof ClassificationCompactCriteria) { // For non-collective or compact collective criteria, add the description as a list item - subCriteriaSb.append("- " + HtmlHelper.cleanHtml(subCriteria.buildDescription(), Whitelist.basic()) + "
"); + subCriteriaSb.append("- " + HtmlHelper.cleanHtml(subCriteria.buildDescription(), Safelist.basic()) + "
"); } else if (subCriteria instanceof ClassificationCollectiveCriteria && !(subCriteria instanceof ClassificationAllOfCriteriaDto) && !(subCriteria.getClass() == ClassificationXOfCriteriaDto.class)) { @@ -338,7 +337,7 @@ private static String createHeadlineDiv(String headline) { //@formatter:off return "
" - + HtmlHelper.cleanHtml(headline, Whitelist.basic()) + + HtmlHelper.cleanHtml(headline, Safelist.basic()) + "
"; //@formatter:on } @@ -384,7 +383,7 @@ private static String createSubCriteriaSurroundingDiv(String content) { * Specific tags are allowed to be contained in i18n strings and are thus unescaped */ private static String createCriteriaItemDiv(String text) { - return (HtmlHelper.cleanHtml(text, Whitelist.basic()) + "
"); + return (HtmlHelper.cleanHtml(text, Safelist.basic()) + "
"); } private enum ClassificationCriteriaType { diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/contact/ContactFacade.java b/sormas-api/src/main/java/de/symeda/sormas/api/contact/ContactFacade.java index a5599792e41..6773b707afa 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/contact/ContactFacade.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/contact/ContactFacade.java @@ -41,7 +41,6 @@ import de.symeda.sormas.api.importexport.ExportConfigurationDto; import de.symeda.sormas.api.infrastructure.district.DistrictReferenceDto; import de.symeda.sormas.api.infrastructure.region.RegionReferenceDto; -import de.symeda.sormas.api.utils.BulkOperationResults; import de.symeda.sormas.api.utils.SortProperty; import de.symeda.sormas.api.utils.ValidationRuntimeException; import de.symeda.sormas.api.visit.VisitSummaryExportDto; @@ -155,7 +154,7 @@ List getContactsForDuplicateMerging( void updateExternalData(@Valid List externalData) throws ExternalDataUpdateException; - BulkOperationResults saveBulkContacts( + Integer saveBulkContacts( List contactUuidlist, @Valid ContactBulkEditData updatedContacBulkEditData, boolean classificationChange, diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/event/EventFacade.java b/sormas-api/src/main/java/de/symeda/sormas/api/event/EventFacade.java index c741940fbfb..eef99e27a3c 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/event/EventFacade.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/event/EventFacade.java @@ -33,7 +33,6 @@ import de.symeda.sormas.api.externaldata.ExternalDataDto; import de.symeda.sormas.api.externaldata.ExternalDataUpdateException; import de.symeda.sormas.api.infrastructure.region.RegionReferenceDto; -import de.symeda.sormas.api.utils.BulkOperationResults; import de.symeda.sormas.api.utils.SortProperty; @Remote @@ -81,7 +80,7 @@ public interface EventFacade extends CoreFacade saveBulkEvents( + Integer saveBulkEvents( List eventUuidList, EventDto updatedTempEvent, boolean eventStatusChange, diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/i18n/Captions.java b/sormas-api/src/main/java/de/symeda/sormas/api/i18n/Captions.java index 7835457f59c..5f1c0b97b50 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/i18n/Captions.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/i18n/Captions.java @@ -54,6 +54,7 @@ public interface Captions { String actionClose = "actionClose"; String actionCompare = "actionCompare"; String actionConfirm = "actionConfirm"; + String actionConfirmAction = "actionConfirmAction"; String actionConfirmFilters = "actionConfirmFilters"; String actionContinue = "actionContinue"; String actionCreate = "actionCreate"; @@ -214,6 +215,7 @@ public interface Captions { String bulkCaseClassification = "bulkCaseClassification"; String bulkCaseOutcome = "bulkCaseOutcome"; String bulkCaseShareWithReportingTool = "bulkCaseShareWithReportingTool"; + String bulkCompleted = "bulkCompleted"; String bulkContactClassification = "bulkContactClassification"; String bulkContactOfficer = "bulkContactOfficer"; String bulkDelete = "bulkDelete"; @@ -230,6 +232,8 @@ public interface Captions { String bulkLinkToEvent = "bulkLinkToEvent"; String bulkLostToFollowUp = "bulkLostToFollowUp"; String bulkRestore = "bulkRestore"; + String bulkSkipped = "bulkSkipped"; + String bulkSuccessful = "bulkSuccessful"; String bulkSurveillanceOfficer = "bulkSurveillanceOfficer"; String bulkTaskAssignee = "bulkTaskAssignee"; String bulkTaskPriority = "bulkTaskPriority"; @@ -2480,6 +2484,7 @@ public interface Captions { String User_userName = "User.userName"; String User_userRoles = "User.userRoles"; String User_uuid = "User.uuid"; + String userMyUserId = "userMyUserId"; String userNewUser = "userNewUser"; String userResetPassword = "userResetPassword"; String userRight = "userRight"; diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/i18n/Strings.java b/sormas-api/src/main/java/de/symeda/sormas/api/i18n/Strings.java index f28ab396305..80ff33fa076 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/i18n/Strings.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/i18n/Strings.java @@ -86,6 +86,7 @@ public interface Strings { String confirmationArchiveTask = "confirmationArchiveTask"; String confirmationArchiveTasks = "confirmationArchiveTasks"; String confirmationArchiveTravelEntry = "confirmationArchiveTravelEntry"; + String confirmationCancelBulkAction = "confirmationCancelBulkAction"; String confirmationCancelExternalFollowUpPopup = "confirmationCancelExternalFollowUpPopup"; String confirmationCancelFollowUp = "confirmationCancelFollowUp"; String confirmationChangeCaseDisease = "confirmationChangeCaseDisease"; @@ -317,6 +318,7 @@ public interface Strings { String errorNoPopulationDataLocations = "errorNoPopulationDataLocations"; String errorNoRightsForChangingField = "errorNoRightsForChangingField"; String errorNoRightsForChangingMultipleFields = "errorNoRightsForChangingMultipleFields"; + String errorNotFound = "errorNotFound"; String errorNotifyingExternalSurveillanceTool = "errorNotifyingExternalSurveillanceTool"; String errorNotRequiredRights = "errorNotRequiredRights"; String errorOccurred = "errorOccurred"; @@ -347,6 +349,7 @@ public interface Strings { String errorSormasToSormasShare = "errorSormasToSormasShare"; String errorSormasToSormasShareContactWithoutCase = "errorSormasToSormasShareContactWithoutCase"; String errorSormasToSormasShareContactWithUnsharedSourceCase = "errorSormasToSormasShareContactWithUnsharedSourceCase"; + String errorSormasToSormasSharequestNotFound = "errorSormasToSormasSharequestNotFound"; String errorSurveillanceReportNotEditable = "errorSurveillanceReportNotEditable"; String errorTemplateFileCorrupt = "errorTemplateFileCorrupt"; String errorViewNotFound = "errorViewNotFound"; @@ -528,6 +531,7 @@ public interface Strings { String headingEditTask = "headingEditTask"; String headingEditTreatment = "headingEditTreatment"; String headingEditUser = "headingEditUser"; + String headingEditVaccination = "headingEditVaccination"; String headingEditVisit = "headingEditVisit"; String headingEnvironmentalExposure = "headingEnvironmentalExposure"; String headingEpiCurve = "headingEpiCurve"; @@ -720,6 +724,7 @@ public interface Strings { String headingSormasToSormasCanAcceptContactsWithoutCase = "headingSormasToSormasCanAcceptContactsWithoutCase"; String headingSormasToSormasCantShareContactWithoutCase = "headingSormasToSormasCantShareContactWithoutCase"; String headingSormasToSormasDuplicateDetection = "headingSormasToSormasDuplicateDetection"; + String headingSormasToSormasShareRequestNotFound = "headingSormasToSormasShareRequestNotFound"; String headingStoppedFollowUp = "headingStoppedFollowUp"; String headingSurveillanceReports = "headingSurveillanceReports"; String headingSymptomJournalAccountCreation = "headingSymptomJournalAccountCreation"; @@ -751,10 +756,14 @@ public interface Strings { String headingUserSettings = "headingUserSettings"; String headingVaccination = "headingVaccination"; String headingViewAdditionalTest = "headingViewAdditionalTest"; + String headingViewClinicalVisit = "headingViewClinicalVisit"; String headingViewNotFound = "headingViewNotFound"; String headingViewPathogenTestResult = "headingViewPathogenTestResult"; + String headingViewPrescription = "headingViewPrescription"; String headingViewSurveillanceReport = "headingViewSurveillanceReport"; String headingViewTask = "headingViewTask"; + String headingViewTreatment = "headingViewTreatment"; + String headingViewVaccination = "headingViewVaccination"; String headingViewVisit = "headingViewVisit"; String headingVisits = "headingVisits"; String headingVisitsDeleted = "headingVisitsDeleted"; @@ -780,6 +789,11 @@ public interface Strings { String infoAutomaticDeletionTooltipYears = "infoAutomaticDeletionTooltipYears"; String infoBAGExport = "infoBAGExport"; String infoBasicExport = "infoBasicExport"; + String infoBulkProcess = "infoBulkProcess"; + String infoBulkProcessCancelled = "infoBulkProcessCancelled"; + String infoBulkProcessFinished = "infoBulkProcessFinished"; + String infoBulkProcessFinishedWithSkips = "infoBulkProcessFinishedWithSkips"; + String infoBulkUnresponsiveWindowHint = "infoBulkUnresponsiveWindowHint"; String infoCalculateCompleteness = "infoCalculateCompleteness"; String infoCampaignsDashboard = "infoCampaignsDashboard"; String infoCanceledBy = "infoCanceledBy"; @@ -994,8 +1008,6 @@ public interface Strings { String messageBulkContactsWithDifferentDiseasesSelected = "messageBulkContactsWithDifferentDiseasesSelected"; String messageBulkDontShareWithReportingToolWarning = "messageBulkDontShareWithReportingToolWarning"; String messageBulkLinkEventHint = "messageBulkLinkEventHint"; - String messageBulkOperationEntryLimitReached = "messageBulkOperationEntryLimitReached"; - String messageBulkOperationTimeLimitReached = "messageBulkOperationTimeLimitReached"; String messageCampaignArchived = "messageCampaignArchived"; String messageCampaignCreated = "messageCampaignCreated"; String messageCampaignDearchived = "messageCampaignDearchived"; @@ -1142,8 +1154,6 @@ public interface Strings { String messageEventSaved = "messageEventSaved"; String messageEventsDearchived = "messageEventsDearchived"; String messageEventsDeleted = "messageEventsDeleted"; - String messageEventsEdited = "messageEventsEdited"; - String messageEventsEditedExceptArchived = "messageEventsEditedExceptArchived"; String messageEventsNotDeletedReason = "messageEventsNotDeletedReason"; String messageEventsNotDeletedReasonExternalSurveillanceTool = "messageEventsNotDeletedReasonExternalSurveillanceTool"; String messageEventsRestored = "messageEventsRestored"; diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/sormastosormas/share/ShareRequestIndexDto.java b/sormas-api/src/main/java/de/symeda/sormas/api/sormastosormas/share/ShareRequestIndexDto.java index b340fabb2f3..1889b70e816 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/sormastosormas/share/ShareRequestIndexDto.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/sormastosormas/share/ShareRequestIndexDto.java @@ -64,6 +64,19 @@ public ShareRequestIndexDto( this.comment = comment; } + public ShareRequestIndexDto( + String uuid, + Date creationDate, + ShareRequestDataType dataType, + ShareRequestStatus status, + String organizationId, + String senderFirstName, + String senderLastName, + boolean ownershipHandedOver, + String comment) { + this(uuid, creationDate, dataType, status, organizationId, senderFirstName + " " + senderLastName, ownershipHandedOver, comment); + } + public Date getCreationDate() { return creationDate; } diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/task/TaskFacade.java b/sormas-api/src/main/java/de/symeda/sormas/api/task/TaskFacade.java index 76027315b9d..e086fbbbf60 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/task/TaskFacade.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/task/TaskFacade.java @@ -30,7 +30,6 @@ import de.symeda.sormas.api.common.Page; import de.symeda.sormas.api.contact.ContactReferenceDto; import de.symeda.sormas.api.event.EventReferenceDto; -import de.symeda.sormas.api.utils.BulkOperationResults; import de.symeda.sormas.api.utils.SortProperty; @Remote @@ -88,7 +87,7 @@ public interface TaskFacade { EditPermissionType getEditPermissionType(String uuid); - BulkOperationResults saveBulkTasks( + Integer saveBulkTasks( List taskUuidList, TaskDto updatedTempTask, boolean priorityChange, diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/user/UserFacade.java b/sormas-api/src/main/java/de/symeda/sormas/api/user/UserFacade.java index 4cfbafefff1..7b8cc23ad6e 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/user/UserFacade.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/user/UserFacade.java @@ -149,4 +149,14 @@ List getUserRefsByInfrastructure( long getUserCountHavingRole(UserRoleReferenceDto userRoleRef); List getUsersHavingOnlyRole(UserRoleReferenceDto userRoleRef); + + /** + * Retrieves the user rights of the user specified by the passed UUID, or those of the current user if no UUID is specified. + * Requesting the user rights of another user without the rights to view users and user roles results in an AccessDeniedException. + * + * @param userUuid + * The UUID of the user to request the user rights for + * @return A set containing the user rights associated to all user roles assigned to the user + */ + List getUserRights(String userUuid); } diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/utils/BulkOperationResults.java b/sormas-api/src/main/java/de/symeda/sormas/api/utils/BulkOperationResults.java deleted file mode 100644 index e721084b23a..00000000000 --- a/sormas-api/src/main/java/de/symeda/sormas/api/utils/BulkOperationResults.java +++ /dev/null @@ -1,40 +0,0 @@ -package de.symeda.sormas.api.utils; - -import java.io.Serializable; -import java.util.List; - -import de.symeda.sormas.api.audit.AuditedClass; - -@AuditedClass -public class BulkOperationResults implements Serializable { - - private final int processedEntries; - private final long elapsedTime; - private final List remainingEntries; - - public BulkOperationResults(int processedEntries, long elapsedTime, List remainingUuids) { - this.processedEntries = processedEntries; - this.elapsedTime = elapsedTime; - this.remainingEntries = remainingUuids; - } - - public int getProcessedEntries() { - return processedEntries; - } - - public long getElapsedTime() { - return elapsedTime; - } - - public List getRemainingEntries() { - return remainingEntries; - } - - public boolean hasReachedTimeLimit() { - return elapsedTime >= DataHelper.BULK_EDIT_TIME_LIMIT; - } - - public boolean hasReachedEntryLimit() { - return processedEntries >= DataHelper.BULK_EDIT_ENTRY_LIMIT; - } -} diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/utils/CSVUtils.java b/sormas-api/src/main/java/de/symeda/sormas/api/utils/CSVUtils.java index f8046e6cc6d..48257bdf62d 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/utils/CSVUtils.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/utils/CSVUtils.java @@ -17,11 +17,17 @@ *******************************************************************************/ package de.symeda.sormas.api.utils; +import java.io.BufferedReader; import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; import java.io.Reader; import java.io.Writer; +import java.nio.charset.CharsetDecoder; +import java.nio.charset.StandardCharsets; import java.util.regex.Pattern; +import org.apache.commons.io.input.BOMInputStream; import org.apache.commons.lang3.ArrayUtils; import com.opencsv.CSVParserBuilder; @@ -36,18 +42,31 @@ private CSVUtils() { // Hide Utility Class Constructor } - public static CSVReader createCSVReader(Reader reader, char separator, LineValidator ...lineValidators) { + public static CSVReader createCSVReader(Reader reader, char separator, LineValidator... lineValidators) { final CSVReaderBuilder builder = new CSVReaderBuilder(reader).withCSVParser(new CSVParserBuilder().withSeparator(separator).build()); if (ArrayUtils.isNotEmpty(lineValidators)) { - for(LineValidator lineValidator: lineValidators) { + for (LineValidator lineValidator : lineValidators) { builder.withLineValidator(lineValidator); } } return builder.build(); } + public static CSVReader createBomCsvReader(InputStream inputStream) { + CharsetDecoder decoder = StandardCharsets.UTF_8.newDecoder(); + BOMInputStream bomInputStream = new BOMInputStream(inputStream); + Reader reader = new InputStreamReader(bomInputStream, decoder); + BufferedReader bufferedReader = new BufferedReader(reader); + return CSVUtils.createCSVReader(bufferedReader, ','); + } + public static CSVWriter createCSVWriter(Writer writer, char separator) { - return new SafeCSVWriter(writer, separator, CSVWriter.DEFAULT_QUOTE_CHARACTER, CSVWriter.DEFAULT_ESCAPE_CHARACTER, CSVWriter.DEFAULT_LINE_END); + return new SafeCSVWriter( + writer, + separator, + CSVWriter.DEFAULT_QUOTE_CHARACTER, + CSVWriter.DEFAULT_ESCAPE_CHARACTER, + CSVWriter.DEFAULT_LINE_END); } /** @@ -89,7 +108,7 @@ public void writeNext(String[] nextLine, boolean applyQuotesToAll, Appendable ap appendQuoteCharacterIfNeeded(applyQuotesToAll, appendable, stringContainsSpecialCharacters); // begin code change from parent code - if(formulaPattern.matcher(nextElement).matches()) { + if (formulaPattern.matcher(nextElement).matches()) { appendable.append(FORMULA_PREFIX); } // end @@ -108,7 +127,8 @@ public void writeNext(String[] nextLine, boolean applyQuotesToAll, Appendable ap } // Copied from the parent class since it's access modifier was private - private void appendQuoteCharacterIfNeeded(boolean applyQuotesToAll, Appendable appendable, Boolean stringContainsSpecialCharacters) throws IOException { + private void appendQuoteCharacterIfNeeded(boolean applyQuotesToAll, Appendable appendable, Boolean stringContainsSpecialCharacters) + throws IOException { if ((applyQuotesToAll || stringContainsSpecialCharacters) && quotechar != NO_QUOTE_CHARACTER) { appendable.append(quotechar); } diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/utils/DataHelper.java b/sormas-api/src/main/java/de/symeda/sormas/api/utils/DataHelper.java index 84a1d345324..a169ad7ad3b 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/utils/DataHelper.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/utils/DataHelper.java @@ -60,8 +60,6 @@ public final class DataHelper { public static final String VALID_EMAIL_REGEX = "^([a-zA-Z0-9_\\.\\-+])+@[a-zA-Z0-9-.]+\\.[a-zA-Z0-9-]{2,}$"; public static final String NOT_A_VALID_PHONE_NUMBER_REGEX = ".*[a-zA-Z].*"; - public static final int BULK_EDIT_ENTRY_LIMIT = 500; - public static final int BULK_EDIT_TIME_LIMIT = 180000; // milliseconds private DataHelper() { // Hide Utility Class Constructor diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/utils/HtmlHelper.java b/sormas-api/src/main/java/de/symeda/sormas/api/utils/HtmlHelper.java index 256221a6285..1a2397d1335 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/utils/HtmlHelper.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/utils/HtmlHelper.java @@ -18,23 +18,23 @@ package de.symeda.sormas.api.utils; import org.jsoup.Jsoup; -import org.jsoup.safety.Whitelist; +import org.jsoup.safety.Safelist; // This class provides general XSS-Prevention methods using Jsoup.clean public class HtmlHelper { - public static final Whitelist EVENTACTION_WHITELIST = - Whitelist.relaxed().addTags("hr", "font").addAttributes("font", "size", "face", "color").addAttributes("div", "align"); + public static final Safelist EVENTACTION_WHITELIST = + Safelist.relaxed().addTags("hr", "font").addAttributes("font", "size", "face", "color").addAttributes("div", "align"); private static final String HYPERLINK_TAG = "a"; private static final String SPAN_TAG = "span"; private static final String TITLE_ATTRIBUTE = "title"; public static String cleanHtml(String string) { - return (string == null) ? "" : Jsoup.clean(string, Whitelist.none()); + return (string == null) ? "" : Jsoup.clean(string, Safelist.none()); } - public static String cleanHtml(String string, Whitelist whitelist) { + public static String cleanHtml(String string, Safelist whitelist) { return (string == null) ? "" : Jsoup.clean(string, whitelist); } @@ -52,11 +52,11 @@ public static String cleanHtmlAttribute(String attributeKey, String attributeVal // this method should be used for i18n-strings and captions so that custom whitelist rules can be added when needed public static String cleanI18nString(String string) { - return (string == null) ? "" : Jsoup.clean(string, Whitelist.basic()); + return (string == null) ? "" : Jsoup.clean(string, Safelist.basic()); } public static String cleanHtmlRelaxed(String string) { - return (string == null) ? "" : Jsoup.clean(string, Whitelist.relaxed()); + return (string == null) ? "" : Jsoup.clean(string, Safelist.relaxed()); } /** @@ -80,7 +80,7 @@ private static String buildTitle(String tag, String title, String caption) { String result = String.format("<%s %s>%s", tag, cleanHtmlAttribute(TITLE_ATTRIBUTE, title), HtmlHelper.cleanHtml(caption), tag); // Prevent breakout in tag attributes: only allow the intended tag attribute - result = Jsoup.clean(result, Whitelist.none().addTags(tag).addAttributes(tag, TITLE_ATTRIBUTE)); + result = Jsoup.clean(result, Safelist.none().addTags(tag).addAttributes(tag, TITLE_ATTRIBUTE)); return result; } } diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/utils/jurisdiction/JurisdictionValidator.java b/sormas-api/src/main/java/de/symeda/sormas/api/utils/jurisdiction/JurisdictionValidator.java index 1a1345aa293..d3dd839a003 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/utils/jurisdiction/JurisdictionValidator.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/utils/jurisdiction/JurisdictionValidator.java @@ -22,45 +22,57 @@ public abstract class JurisdictionValidator { - private List> associatedJurisdictionValidators; + protected List> associatedJurisdictionValidators; public JurisdictionValidator(List> associatedJurisdictionValidators) { this.associatedJurisdictionValidators = associatedJurisdictionValidators; } + // disease restriction overrules entity ownership public T inJurisdictionOrOwned() { + T rootInJurisdictionOrOwned = isRootInJurisdictionOrOwned(); + T rootHasLimitedDisease = hasUserLimitedDisease(); if (associatedJurisdictionValidators != null && !associatedJurisdictionValidators.isEmpty()) { final List jurisdictionTypes = new ArrayList<>(); - jurisdictionTypes.add(isInJurisdictionOrOwned()); + jurisdictionTypes.add(and(rootInJurisdictionOrOwned, rootHasLimitedDisease)); for (JurisdictionValidator jurisdictionValidator : associatedJurisdictionValidators) { if (jurisdictionValidator != null) { - jurisdictionTypes.add(jurisdictionValidator.isInJurisdictionOrOwned()); + T associatedInJurisdictionOrOwned = jurisdictionValidator.isRootInJurisdictionOrOwned(); + T associatedHasLimitedDisease = jurisdictionValidator.hasUserLimitedDisease(); + jurisdictionTypes.add(and(associatedInJurisdictionOrOwned, associatedHasLimitedDisease)); } } return or(jurisdictionTypes); } else { - return isInJurisdictionOrOwned(); + return and(rootInJurisdictionOrOwned, rootHasLimitedDisease); } } + // disease restriction overrules entity ownership public T inJurisdiction() { + T rootInJurisdiction = isRootInJurisdiction(); + T rootHasLimitedDisease = hasUserLimitedDisease(); if (associatedJurisdictionValidators != null && !associatedJurisdictionValidators.isEmpty()) { final List jurisdictionTypes = new ArrayList<>(); - jurisdictionTypes.add(isInJurisdiction()); + jurisdictionTypes.add(and(rootInJurisdiction, rootHasLimitedDisease)); for (JurisdictionValidator jurisdictionValidator : associatedJurisdictionValidators) { if (jurisdictionValidator != null) { - jurisdictionTypes.add(jurisdictionValidator.isInJurisdiction()); + T associatedInJurisdiction = jurisdictionValidator.isRootInJurisdiction(); + T associatedHasLimitedDisease = jurisdictionValidator.hasUserLimitedDisease(); + jurisdictionTypes.add(and(associatedInJurisdiction, associatedHasLimitedDisease)); } } return or(jurisdictionTypes); } else { - return isInJurisdiction(); + return and(rootInJurisdiction, rootHasLimitedDisease); } } - protected abstract T isInJurisdiction(); + public abstract T isRootInJurisdiction(); - protected abstract T isInJurisdictionOrOwned(); + public abstract T isRootInJurisdictionOrOwned(); + + public abstract T hasUserLimitedDisease(); protected T isInJurisdictionByJurisdictionLevel(JurisdictionLevel jurisdictionLevel) { @@ -88,6 +100,8 @@ protected T isInJurisdictionByJurisdictionLevel(JurisdictionLevel jurisdictionLe } } + protected abstract T and(T condition1, T condition2); + protected abstract T or(List jurisdictionTypes); protected abstract T whenNotAllowed(); diff --git a/sormas-api/src/main/resources/captions.properties b/sormas-api/src/main/resources/captions.properties index 77e3560f54c..0298bc44023 100644 --- a/sormas-api/src/main/resources/captions.properties +++ b/sormas-api/src/main/resources/captions.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Okay, and continue to contact actionOkAndGoToPersonDirectory = Okay, and continue to person directory actionExecuteAutomaticDeletion = Execute automatic deletion actionDone = Done +actionConfirmAction = Confirm action activityAsCaseFlightNumber=Flight number ActivityAsCase=Activity as case ActivityAsCase.startDate=Start of activity @@ -295,6 +296,9 @@ bulkTaskStatus=Change task status bulkTaskAssignee=Change assignee bulkTaskPriority=Change priority bulkRestore=Restore +bulkCompleted=%d/%d Completed +bulkSkipped=%d Skipped +bulkSuccessful=%d Successful # Campaign campaignActiveCampaigns=Active campaigns campaignAllCampaigns=All campaigns @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=Case ID TreatmentExport.caseName=Case name # User userNewUser=New user +userMyUserId=My user ID userResetPassword=Create new password userUpdatePasswordConfirmation=Really update password? sync=Sync diff --git a/sormas-api/src/main/resources/captions_ar-SA.properties b/sormas-api/src/main/resources/captions_ar-SA.properties index 4f9365b863b..4b7682d5a55 100644 --- a/sormas-api/src/main/resources/captions_ar-SA.properties +++ b/sormas-api/src/main/resources/captions_ar-SA.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Okay, and continue to contact actionOkAndGoToPersonDirectory = Okay, and continue to person directory actionExecuteAutomaticDeletion = Execute automatic deletion actionDone = Done +actionConfirmAction = Confirm action activityAsCaseFlightNumber=Flight number ActivityAsCase=Activity as case ActivityAsCase.startDate=Start of activity @@ -295,6 +296,9 @@ bulkTaskStatus=Change task status bulkTaskAssignee=Change assignee bulkTaskPriority=Change priority bulkRestore=Restore +bulkCompleted=%d/%d Completed +bulkSkipped=%d Skipped +bulkSuccessful=%d Successful # Campaign campaignActiveCampaigns=Active campaigns campaignAllCampaigns=All campaigns @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=Case ID TreatmentExport.caseName=Case name # User userNewUser=New user +userMyUserId=My user ID userResetPassword=Create new password userUpdatePasswordConfirmation=Really update password? sync=Sync diff --git a/sormas-api/src/main/resources/captions_cs-CZ.properties b/sormas-api/src/main/resources/captions_cs-CZ.properties index f684e855f8e..b271d260d79 100644 --- a/sormas-api/src/main/resources/captions_cs-CZ.properties +++ b/sormas-api/src/main/resources/captions_cs-CZ.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Dobře a pokračovat v kontaktu actionOkAndGoToPersonDirectory = Dobře, a pokračovat v osobním adresáři actionExecuteAutomaticDeletion = Spustit automatické smazání actionDone = Hotovo +actionConfirmAction = Potvrdit akci activityAsCaseFlightNumber=Číslo letu ActivityAsCase=Aktivita jako případ ActivityAsCase.startDate=Začátek aktivity @@ -295,6 +296,9 @@ bulkTaskStatus=Změnit stav úlohy bulkTaskAssignee=Změnit pověřenou osobu bulkTaskPriority=Změnit prioritu bulkRestore=Obnovit +bulkCompleted=%d/%d Dokončeno +bulkSkipped=%d přeskočeno +bulkSuccessful=%d úspěšný # Campaign campaignActiveCampaigns=Aktivní kampaně campaignAllCampaigns=Všechny kampaně @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=ID případu TreatmentExport.caseName=Název případu # User userNewUser=Nový uživatel +userMyUserId=Moje uživatelské ID userResetPassword=Vytvořit nové heslo userUpdatePasswordConfirmation=Opravdu aktualizovat heslo? sync=Synchronizovat diff --git a/sormas-api/src/main/resources/captions_de-CH.properties b/sormas-api/src/main/resources/captions_de-CH.properties index 9386a5d76be..b99cda88d65 100644 --- a/sormas-api/src/main/resources/captions_de-CH.properties +++ b/sormas-api/src/main/resources/captions_de-CH.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Okay, weiter zum Kontakt actionOkAndGoToPersonDirectory = Okay, und weiter zum Personenverzeichnis actionExecuteAutomaticDeletion = Automatisches Löschen ausführen actionDone = Erledigt +actionConfirmAction = Confirm action activityAsCaseFlightNumber=Flugnummer ActivityAsCase=Betreuung/Unterbringung/Tätigkeit in Einrichtung ActivityAsCase.startDate=Start der Aktivität @@ -295,6 +296,9 @@ bulkTaskStatus=Aufgabenstatus ändern bulkTaskAssignee=Zuweisung ändern bulkTaskPriority=Priorität ändern bulkRestore=Restore +bulkCompleted=%d/%d Completed +bulkSkipped=%d Skipped +bulkSuccessful=%d Successful # Campaign campaignActiveCampaigns=Aktive Kampagnen campaignAllCampaigns=Alle Kampagnen @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=Fall-ID TreatmentExport.caseName=Fall Name # User userNewUser=Neuer Nutzer +userMyUserId=My user ID userResetPassword=Neues Passwort erstellen userUpdatePasswordConfirmation=Passwort wirklich erneuern? sync=Synchronisieren diff --git a/sormas-api/src/main/resources/captions_de-DE.properties b/sormas-api/src/main/resources/captions_de-DE.properties index 5b8f0258b38..df24f10b45e 100644 --- a/sormas-api/src/main/resources/captions_de-DE.properties +++ b/sormas-api/src/main/resources/captions_de-DE.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Okay, weiter zum Kontakt actionOkAndGoToPersonDirectory = Okay, weiter zum Personenverzeichnis actionExecuteAutomaticDeletion = Automatisches Löschen ausführen actionDone = Erledigt +actionConfirmAction = Vorgang bestätigen activityAsCaseFlightNumber=Flugnummer ActivityAsCase=Betreuung/Unterbringung/Tätigkeit in Einrichtung ActivityAsCase.startDate=Start der Aktivität @@ -295,6 +296,9 @@ bulkTaskStatus=Aufgabenstatus ändern bulkTaskAssignee=Zuweisung ändern bulkTaskPriority=Priorität ändern bulkRestore=Wiederherstellen +bulkCompleted=%d/%d abgeschlossen +bulkSkipped=%d übersprungen +bulkSuccessful=%d Erfolgreich # Campaign campaignActiveCampaigns=Aktive Kampagnen campaignAllCampaigns=Alle Kampagnen @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=Fall-ID TreatmentExport.caseName=Fall Name # User userNewUser=Neuer Nutzer +userMyUserId=Meine Benutzer-ID userResetPassword=Neues Passwort erstellen userUpdatePasswordConfirmation=Passwort wirklich erneuern? sync=Sync diff --git a/sormas-api/src/main/resources/captions_en-AF.properties b/sormas-api/src/main/resources/captions_en-AF.properties index 527f8e6f1b9..274ce006bca 100644 --- a/sormas-api/src/main/resources/captions_en-AF.properties +++ b/sormas-api/src/main/resources/captions_en-AF.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Okay, and continue to contact actionOkAndGoToPersonDirectory = Okay, and continue to person directory actionExecuteAutomaticDeletion = Execute automatic deletion actionDone = Done +actionConfirmAction = Confirm action activityAsCaseFlightNumber=Flight number ActivityAsCase=Activity as case ActivityAsCase.startDate=Start of activity @@ -295,6 +296,9 @@ bulkTaskStatus=Change task status bulkTaskAssignee=Change assignee bulkTaskPriority=Change priority bulkRestore=Restore +bulkCompleted=%d/%d Completed +bulkSkipped=%d Skipped +bulkSuccessful=%d Successful # Campaign campaignActiveCampaigns=Active campaigns campaignAllCampaigns=All campaigns @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=Case ID TreatmentExport.caseName=Case name # User userNewUser=New user +userMyUserId=My user ID userResetPassword=Create new password userUpdatePasswordConfirmation=Really update password? sync=Sync diff --git a/sormas-api/src/main/resources/captions_en-GH.properties b/sormas-api/src/main/resources/captions_en-GH.properties index 48b2d8a7f45..87202c2d490 100644 --- a/sormas-api/src/main/resources/captions_en-GH.properties +++ b/sormas-api/src/main/resources/captions_en-GH.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Okay, and continue to contact actionOkAndGoToPersonDirectory = Okay, and continue to person directory actionExecuteAutomaticDeletion = Execute automatic deletion actionDone = Done +actionConfirmAction = Confirm action activityAsCaseFlightNumber=Flight number ActivityAsCase=Activity as case ActivityAsCase.startDate=Start of activity @@ -295,6 +296,9 @@ bulkTaskStatus=Change task status bulkTaskAssignee=Change assignee bulkTaskPriority=Change priority bulkRestore=Restore +bulkCompleted=%d/%d Completed +bulkSkipped=%d Skipped +bulkSuccessful=%d Successful # Campaign campaignActiveCampaigns=Active campaigns campaignAllCampaigns=All campaigns @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=Case ID TreatmentExport.caseName=Case name # User userNewUser=New user +userMyUserId=My user ID userResetPassword=Create new password userUpdatePasswordConfirmation=Really update password? sync=Sync diff --git a/sormas-api/src/main/resources/captions_en-NG.properties b/sormas-api/src/main/resources/captions_en-NG.properties index f581598d99d..56ed61a30df 100644 --- a/sormas-api/src/main/resources/captions_en-NG.properties +++ b/sormas-api/src/main/resources/captions_en-NG.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Okay, and continue to contact actionOkAndGoToPersonDirectory = Okay, and continue to person directory actionExecuteAutomaticDeletion = Execute automatic deletion actionDone = Done +actionConfirmAction = Confirm action activityAsCaseFlightNumber=Flight number ActivityAsCase=Activity as case ActivityAsCase.startDate=Start of activity @@ -295,6 +296,9 @@ bulkTaskStatus=Change task status bulkTaskAssignee=Change assignee bulkTaskPriority=Change priority bulkRestore=Restore +bulkCompleted=%d/%d Completed +bulkSkipped=%d Skipped +bulkSuccessful=%d Successful # Campaign campaignActiveCampaigns=Active campaigns campaignAllCampaigns=All campaigns @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=Case ID TreatmentExport.caseName=Case name # User userNewUser=New user +userMyUserId=My user ID userResetPassword=Create new password userUpdatePasswordConfirmation=Really update password? sync=Sync diff --git a/sormas-api/src/main/resources/captions_es-CU.properties b/sormas-api/src/main/resources/captions_es-CU.properties index 0bfd6f581a9..27680113a4a 100644 --- a/sormas-api/src/main/resources/captions_es-CU.properties +++ b/sormas-api/src/main/resources/captions_es-CU.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Aceptar y abrir el contacto actionOkAndGoToPersonDirectory = Aceptar y abrir el directorio de personas actionExecuteAutomaticDeletion = Ejecutar eliminación automática actionDone = Hecho +actionConfirmAction = Confirmar acción activityAsCaseFlightNumber=Número de vuelo ActivityAsCase=Actividad como caso ActivityAsCase.startDate=Inicio de la actividad @@ -295,6 +296,9 @@ bulkTaskStatus=Cambiar estado de tarea bulkTaskAssignee=Cambiar encargado bulkTaskPriority=Cambiar prioridad bulkRestore=Restaurar +bulkCompleted=%d/%d completado +bulkSkipped=%d omitido +bulkSuccessful=%d exitoso # Campaign campaignActiveCampaigns=Campañas activas campaignAllCampaigns=Todas las campañas @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=ID del caso TreatmentExport.caseName=Nombre del caso # User userNewUser=Nuevo usuario +userMyUserId=Mi ID de usuario userResetPassword=Crear nueva contraseña userUpdatePasswordConfirmation=¿Realmente actualizar la contraseña? sync=Sincronizar diff --git a/sormas-api/src/main/resources/captions_es-ES.properties b/sormas-api/src/main/resources/captions_es-ES.properties index b4e81f9ae57..972e51f6d2c 100644 --- a/sormas-api/src/main/resources/captions_es-ES.properties +++ b/sormas-api/src/main/resources/captions_es-ES.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Okay, and continue to contact actionOkAndGoToPersonDirectory = Okay, and continue to person directory actionExecuteAutomaticDeletion = Execute automatic deletion actionDone = Done +actionConfirmAction = Confirm action activityAsCaseFlightNumber=Flight number ActivityAsCase=Activity as case ActivityAsCase.startDate=Start of activity @@ -295,6 +296,9 @@ bulkTaskStatus=Change task status bulkTaskAssignee=Change assignee bulkTaskPriority=Change priority bulkRestore=Restore +bulkCompleted=%d/%d Completed +bulkSkipped=%d Skipped +bulkSuccessful=%d Successful # Campaign campaignActiveCampaigns=Active campaigns campaignAllCampaigns=All campaigns @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=Case ID TreatmentExport.caseName=Case name # User userNewUser=New user +userMyUserId=My user ID userResetPassword=Create new password userUpdatePasswordConfirmation=Really update password? sync=Sync diff --git a/sormas-api/src/main/resources/captions_fa-AF.properties b/sormas-api/src/main/resources/captions_fa-AF.properties index 1655316f516..f40f7059f96 100644 --- a/sormas-api/src/main/resources/captions_fa-AF.properties +++ b/sormas-api/src/main/resources/captions_fa-AF.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Okay, and continue to contact actionOkAndGoToPersonDirectory = Okay, and continue to person directory actionExecuteAutomaticDeletion = Execute automatic deletion actionDone = Done +actionConfirmAction = Confirm action activityAsCaseFlightNumber=Flight number ActivityAsCase=Activity as case ActivityAsCase.startDate=Start of activity @@ -295,6 +296,9 @@ bulkTaskStatus=Change task status bulkTaskAssignee=Change assignee bulkTaskPriority=Change priority bulkRestore=Restore +bulkCompleted=%d/%d Completed +bulkSkipped=%d Skipped +bulkSuccessful=%d Successful # Campaign campaignActiveCampaigns=کمپاین های فعال campaignAllCampaigns=همه کمپاین ها @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=Case ID TreatmentExport.caseName=Case name # User userNewUser=استعمال کننده جدید +userMyUserId=My user ID userResetPassword=تجدید کردن رمز userUpdatePasswordConfirmation=تآیید کردن رمز جدید sync=Sync diff --git a/sormas-api/src/main/resources/captions_fi-FI.properties b/sormas-api/src/main/resources/captions_fi-FI.properties index 013cd43e0ee..279f9486762 100644 --- a/sormas-api/src/main/resources/captions_fi-FI.properties +++ b/sormas-api/src/main/resources/captions_fi-FI.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Okay, and continue to contact actionOkAndGoToPersonDirectory = Okay, and continue to person directory actionExecuteAutomaticDeletion = Execute automatic deletion actionDone = Done +actionConfirmAction = Confirm action activityAsCaseFlightNumber=Flight number ActivityAsCase=Activity as case ActivityAsCase.startDate=Start of activity @@ -295,6 +296,9 @@ bulkTaskStatus=Change task status bulkTaskAssignee=Change assignee bulkTaskPriority=Change priority bulkRestore=Restore +bulkCompleted=%d/%d Completed +bulkSkipped=%d Skipped +bulkSuccessful=%d Successful # Campaign campaignActiveCampaigns=Aktiiviset kampanjat campaignAllCampaigns=Kaikka kampanjat @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=Potilas ID TreatmentExport.caseName=Potilaan nimi # User userNewUser=Uusi käyttäjä +userMyUserId=My user ID userResetPassword=Luo uusi salasana userUpdatePasswordConfirmation=Haluatko varmasti muuttaa salasanan? sync=Sync diff --git a/sormas-api/src/main/resources/captions_fil-PH.properties b/sormas-api/src/main/resources/captions_fil-PH.properties index 94174e3b778..5228d7ceb03 100644 --- a/sormas-api/src/main/resources/captions_fil-PH.properties +++ b/sormas-api/src/main/resources/captions_fil-PH.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Okay, and continue to contact actionOkAndGoToPersonDirectory = Okay, and continue to person directory actionExecuteAutomaticDeletion = Execute automatic deletion actionDone = Done +actionConfirmAction = Confirm action activityAsCaseFlightNumber=Flight number ActivityAsCase=Activity as case ActivityAsCase.startDate=Start of activity @@ -295,6 +296,9 @@ bulkTaskStatus=Change task status bulkTaskAssignee=Change assignee bulkTaskPriority=Change priority bulkRestore=Restore +bulkCompleted=%d/%d Completed +bulkSkipped=%d Skipped +bulkSuccessful=%d Successful # Campaign campaignActiveCampaigns=Active campaigns campaignAllCampaigns=All campaigns @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=Case ID TreatmentExport.caseName=Case name # User userNewUser=New user +userMyUserId=My user ID userResetPassword=Create new password userUpdatePasswordConfirmation=Really update password? sync=Sync diff --git a/sormas-api/src/main/resources/captions_fj-FJ.properties b/sormas-api/src/main/resources/captions_fj-FJ.properties index 94174e3b778..5228d7ceb03 100644 --- a/sormas-api/src/main/resources/captions_fj-FJ.properties +++ b/sormas-api/src/main/resources/captions_fj-FJ.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Okay, and continue to contact actionOkAndGoToPersonDirectory = Okay, and continue to person directory actionExecuteAutomaticDeletion = Execute automatic deletion actionDone = Done +actionConfirmAction = Confirm action activityAsCaseFlightNumber=Flight number ActivityAsCase=Activity as case ActivityAsCase.startDate=Start of activity @@ -295,6 +296,9 @@ bulkTaskStatus=Change task status bulkTaskAssignee=Change assignee bulkTaskPriority=Change priority bulkRestore=Restore +bulkCompleted=%d/%d Completed +bulkSkipped=%d Skipped +bulkSuccessful=%d Successful # Campaign campaignActiveCampaigns=Active campaigns campaignAllCampaigns=All campaigns @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=Case ID TreatmentExport.caseName=Case name # User userNewUser=New user +userMyUserId=My user ID userResetPassword=Create new password userUpdatePasswordConfirmation=Really update password? sync=Sync diff --git a/sormas-api/src/main/resources/captions_fr-CD.properties b/sormas-api/src/main/resources/captions_fr-CD.properties index 4512091ada2..1a6fe1b165a 100644 --- a/sormas-api/src/main/resources/captions_fr-CD.properties +++ b/sormas-api/src/main/resources/captions_fr-CD.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Okay, and continue to contact actionOkAndGoToPersonDirectory = Okay, and continue to person directory actionExecuteAutomaticDeletion = Execute automatic deletion actionDone = Done +actionConfirmAction = Confirm action activityAsCaseFlightNumber=Flight number ActivityAsCase=Activity as case ActivityAsCase.startDate=Start of activity @@ -295,6 +296,9 @@ bulkTaskStatus=Change task status bulkTaskAssignee=Change assignee bulkTaskPriority=Change priority bulkRestore=Restore +bulkCompleted=%d/%d Completed +bulkSkipped=%d Skipped +bulkSuccessful=%d Successful # Campaign campaignActiveCampaigns=Active campaigns campaignAllCampaigns=All campaigns @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=Case ID TreatmentExport.caseName=Case name # User userNewUser=New user +userMyUserId=My user ID userResetPassword=Create new password userUpdatePasswordConfirmation=Really update password? sync=Sync diff --git a/sormas-api/src/main/resources/captions_fr-CH.properties b/sormas-api/src/main/resources/captions_fr-CH.properties index 7878173b7c3..0281d8f05ad 100644 --- a/sormas-api/src/main/resources/captions_fr-CH.properties +++ b/sormas-api/src/main/resources/captions_fr-CH.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Okay, and continue to contact actionOkAndGoToPersonDirectory = Okay, and continue to person directory actionExecuteAutomaticDeletion = Execute automatic deletion actionDone = Done +actionConfirmAction = Confirm action activityAsCaseFlightNumber=Numéro de vol ActivityAsCase=Activity as case ActivityAsCase.startDate=Début de l'activité @@ -295,6 +296,9 @@ bulkTaskStatus=Changer le statut de la tâche bulkTaskAssignee=Changer le destinataire bulkTaskPriority=Changer le niveau de priorité bulkRestore=Restore +bulkCompleted=%d/%d Completed +bulkSkipped=%d Skipped +bulkSuccessful=%d Successful # Campaign campaignActiveCampaigns=Campagnes actives campaignAllCampaigns=Toutes les campagnes @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=ID de cas TreatmentExport.caseName=Nom du cas # User userNewUser=Nouvel utilisateur +userMyUserId=My user ID userResetPassword=Créer un nouveau mot de passe userUpdatePasswordConfirmation=Mise à jour de mot de passe vraiment ? sync=Sync diff --git a/sormas-api/src/main/resources/captions_fr-FR.properties b/sormas-api/src/main/resources/captions_fr-FR.properties index a0d0570e5bf..7cd292b309d 100644 --- a/sormas-api/src/main/resources/captions_fr-FR.properties +++ b/sormas-api/src/main/resources/captions_fr-FR.properties @@ -126,7 +126,7 @@ actionCreate=Créer actionDearchiveInfrastructure=Désarchiver actionDearchiveCoreEntity=Désarchiver actionDelete=Effacer -actionRestore=Restore +actionRestore=Restaurer actionDeselectAll=Tout déselectionner actionDeselectAndContinue=Désélectionner et continuer actionDisable=Désactiver @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = D'accord et continuer à contacter actionOkAndGoToPersonDirectory = D'accord et continuer vers le répertoire des personnes actionExecuteAutomaticDeletion = Exécuter la suppression automatique actionDone = Fait +actionConfirmAction = Confirmer activityAsCaseFlightNumber=Numéro de vol ActivityAsCase=Activité comme cas ActivityAsCase.startDate=Début de l'activité @@ -294,7 +295,10 @@ bulkSurveillanceOfficer=Modifier l'agent de surveillance bulkTaskStatus=Changer le statut de la tâche bulkTaskAssignee=Changer le destinataire bulkTaskPriority=Changer le niveau de priorité -bulkRestore=Restore +bulkRestore=Restaurer +bulkCompleted=%d/%d Effectué +bulkSkipped=%d Ignoré +bulkSuccessful=%d Succès # Campaign campaignActiveCampaigns=Campagnes actives campaignAllCampaigns=Toutes les campagnes @@ -327,7 +331,7 @@ Campaign.otherDeletionReason=Détails sur la raison de la suppression Campaign.open=Ouvrir Campaign.edit=Modifier Campaign.area=Zone -Campaign.region=Région +Campaign.region=Gouvernorat de résidence permanente Campaign.district=Département Campaign.community=Commune Campaign.grouping=Regroupement @@ -460,7 +464,7 @@ CaseData.postpartum=Postpartum CaseData.pregnant=Grossesse CaseData.previousQuarantineTo=Fin de quarantaine précédente CaseData.quarantineChangeComment=Commentaire de changement de quarantaine -CaseData.region=Région +CaseData.region=Gouvernorat CaseData.regionLevelDate=Date de réception au niveau régional CaseData.reportDate=Date du signalement CaseData.reportingUser=Signalé par @@ -890,7 +894,7 @@ dashboardHideOtherCountries=Masquer les autres pays dashboardHideOverview=Masquer l'aperçu dashboardHigh=Élevée dashboardIndeterminate=Indéterminé -dashboardNotDone=Not done +dashboardNotDone=Non traité dashboardInvestigated=Examiné dashboardLastVisitGt48=Dernière visite > 48H ou pas de visite dashboardLastVisitLt24=Dernière visite < 24h @@ -909,7 +913,7 @@ dashboardNeverVisited=Sans visite dashboardNew=Nouveau dashboardNewCases=Nouveaux cas dashboardNewEvents=Nouveaux évènements  -dashboardNewFinalLaboratoryResults=Final Laboratory Results +dashboardNewFinalLaboratoryResults=Résultats du laboratoire définitifs dashboardNoPopulationData=Aucune donnée de population disponible dashboardNormal=Normal dashboardNotACase=Pas un cas @@ -921,7 +925,7 @@ dashboardNotYetClassified=Non classé dashboardNotYetClassifiedOnly=Cas non classés exclusivement dashboardNumberOfCases=Nombre de cas dashboardNumberOfContacts=Nombre de contacts -dashboardNumberOfSamples=Number of Samples +dashboardNumberOfSamples=Nombre de prélèvements dashboardOneDay=1 Jour dashboardOutbreak=Epidémie dashboardPending=En cours @@ -977,8 +981,8 @@ dashboardProportion=Proportion (%) dashboardViewAsColumnChart=Voir comme Histogramme dashboardViewAsBarChart=Voir comme Diagramme à barres #SampleDashboard -sampleDashboardAllSamples=All Samples -sampleDashboardFinalLabResults=Final Laboratory Results +sampleDashboardAllSamples=Tous les échantillons +sampleDashboardFinalLabResults=Résultats du laboratoire définitifs sampleDashboardSamplePurpose=Purpose of Sample sampleDashboardSpecimenCondition=Specimen Condition sampleDashboardShipmentStatus=Shipment Status @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=ID du cas TreatmentExport.caseName=Nom du cas # User userNewUser=Nouvel utilisateur +userMyUserId=My user ID userResetPassword=Créer un nouveau mot de passe userUpdatePasswordConfirmation=Voulez-vous vraiment mettre à jour le mot de passe? sync=Synchroniser diff --git a/sormas-api/src/main/resources/captions_fr-TN.properties b/sormas-api/src/main/resources/captions_fr-TN.properties index a0d0570e5bf..1f8cfec8d4c 100644 --- a/sormas-api/src/main/resources/captions_fr-TN.properties +++ b/sormas-api/src/main/resources/captions_fr-TN.properties @@ -42,7 +42,7 @@ menu=Menu moreActions=Plus name=Nom options=Paramètres -regionName=Région +regionName=Gouvernorat de résidence permanente system=Système to=À total=Total @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = D'accord et continuer à contacter actionOkAndGoToPersonDirectory = D'accord et continuer vers le répertoire des personnes actionExecuteAutomaticDeletion = Exécuter la suppression automatique actionDone = Fait +actionConfirmAction = Confirm action activityAsCaseFlightNumber=Numéro de vol ActivityAsCase=Activité comme cas ActivityAsCase.startDate=Début de l'activité @@ -295,6 +296,9 @@ bulkTaskStatus=Changer le statut de la tâche bulkTaskAssignee=Changer le destinataire bulkTaskPriority=Changer le niveau de priorité bulkRestore=Restore +bulkCompleted=%d/%d Completed +bulkSkipped=%d Skipped +bulkSuccessful=%d Successful # Campaign campaignActiveCampaigns=Campagnes actives campaignAllCampaigns=Toutes les campagnes @@ -327,7 +331,7 @@ Campaign.otherDeletionReason=Détails sur la raison de la suppression Campaign.open=Ouvrir Campaign.edit=Modifier Campaign.area=Zone -Campaign.region=Région +Campaign.region=Gouvernorat Campaign.district=Département Campaign.community=Commune Campaign.grouping=Regroupement @@ -349,7 +353,7 @@ caseEventsResetDateFilter=Réinitialiser le filtre de date caseFilterWithoutGeo=Cas sans coordonnées géo. excl. caseFilterPortHealthWithoutFacility=Seulement les cas de santé du port sans établissement caseFilterCasesWithCaseManagementData=Cas ayant des données de gestion excl. -caseFilterWithDifferentRegion=Afficher les doublons avec des régions différentes +caseFilterWithDifferentRegion=Afficher les doublons avec des gouvernorats différentes caseFilterExcludeSharedCases=Exclure les cas partagés par d'autres juridictions caseFilterWithoutResponsibleUser=Seuls cas sans agent responsable caseFilterWithExtendedQuarantine=Seuls les cas avec une quarantaine prolongée @@ -460,7 +464,7 @@ CaseData.postpartum=Postpartum CaseData.pregnant=Grossesse CaseData.previousQuarantineTo=Fin de quarantaine précédente CaseData.quarantineChangeComment=Commentaire de changement de quarantaine -CaseData.region=Région +CaseData.region=Gouvernorat CaseData.regionLevelDate=Date de réception au niveau régional CaseData.reportDate=Date du signalement CaseData.reportingUser=Signalé par @@ -551,7 +555,7 @@ CaseData.responsibleCommunity=Communauté responsable CaseData.dontShareWithReportingTool=Ne pas partager ce cas avec l'outil de rapport externe CaseData.responsibleDistrictName=Département responsable CaseData.caseReferenceDefinition=Définition de référence -CaseData.pointOfEntryRegion=Point d'entrée - région +CaseData.pointOfEntryRegion=Point d'entrée - gouvernorat CaseData.pointOfEntryDistrict=Point d'entrée - département CaseData.externalData=Données externes CaseData.reinfectionStatus=Statut de réinfection @@ -559,7 +563,7 @@ CaseData.changeDate=Date de dernière modification CaseData.creationDate=Date de création # CaseExport CaseExport.address=Adresse -CaseExport.addressRegion=Région +CaseExport.addressRegion=Gouvernorat CaseExport.addressDistrict=Département de l'adresse CaseExport.addressCommunity=Communauté d'adresses CaseExport.addressGpsCoordinates=Coordonnées GPS de l'adresse @@ -633,7 +637,7 @@ CasePreviousHospitalization.admissionDate=Date d'admission CasePreviousHospitalization.description=Description CasePreviousHospitalization.dischargeDate=Date de sortie ou transfert CasePreviousHospitalization.editColumn=Modifier -CasePreviousHospitalization.region=Région +CasePreviousHospitalization.region=Gouvernorat CasePreviousHospitalization.district=Département CasePreviousHospitalization.community=Commune CasePreviousHospitalization.healthFacility=Hôpital @@ -667,7 +671,7 @@ columnVaccineManufacturer=Fabricant du vaccin Community=Commune Community.archived=Archivé Community.externalID=ID externe -Community.region=Région +Community.region=Gouvernorat Community.district=Département communityActiveCommunities=Communautés actives communityArchivedCommunities=Communautés archivées @@ -940,7 +944,7 @@ dashboardShowContacts=Afficher les contacts dashboardShowEvents=Afficher les événements dashboardShowFirstDiseases=Afficher les 6 premières maladies dashboardShowMinimumEntries=Toujours afficher au moins 7 entrées -dashboardShowRegions=Afficher les régions +dashboardShowRegions=Afficher les gouvernorats dashboardShowUnconfirmedContacts=Afficher les contacts non confirmés dashboardSuspect=Suspect dashboardSymptomatic=Symptomatique @@ -1062,7 +1066,7 @@ District.epidCode=Code epid District.growthRate=Taux de croissance District.population=Population District.externalID=ID externe -District.region=Région +District.region=Gouvernorat epiDataNoSourceContacts=Aucun contact source n'a été créé pour ce cas EpiData=Données épidémiologiques EpiData.areaInfectedAnimals=Résidence, travail ou voyage dans une région où les animaux infectés ont été confirmés @@ -1216,7 +1220,7 @@ Event.internalToken=Token interne Event.eventGroups=Groupes Event.latestEventGroup=Dernier groupe d'évènement Event.eventGroupCount=Nombre de groupes d'événements -Event.region=Région +Event.region=Gouvernorat Event.district=Département Event.community=Commune Event.changeDate=Date de dernière modification @@ -1263,7 +1267,7 @@ EventParticipant.caseUuid=ID du cas EventParticipant.approximateAge=Âge EventParticipant.name=Nom EventParticipant.sex=Sexe -EventParticipant.responsibleRegion=Région responsable +EventParticipant.responsibleRegion=Gouvernorat responsable EventParticipant.responsibleDistrict=Département responsable EventParticipant.personUuid=ID de la personne EventParticipant.involvementDescription=Description de la participation @@ -1405,7 +1409,7 @@ Facility.postalCode=Code postal Facility.street=Rue  Facility.name=Nom Facility.publicOwnership=Propriété publique -Facility.region=Région +Facility.region=Gouvernorat Facility.type=Type d'établissement Facility.typeGroup=Catégorie de l'établissement Facility.contactPersonFirstName=Prénom de la personne de contact @@ -1552,7 +1556,7 @@ Location.postalCode=Code postal Location.continent=Continent Location.subcontinent=Sous-continent Location.country=Pays -Location.region=Région +Location.region=Gouvernorat Location.district=Département Location.community=Commune Location.street=Rue @@ -1619,7 +1623,7 @@ MaternalHistory.rubellaOnset=Date d'apparition MaternalHistory.rashExposure=Eruption cutanée pendant la grossesse MaternalHistory.rashExposureDate=Date d'apparition MaternalHistory.rashExposureMonth=Mois de grossesse -MaternalHistory.rashExposureRegion=Région +MaternalHistory.rashExposureRegion=Gouvernorat MaternalHistory.rashExposureDistrict=Département MaternalHistory.rashExposureCommunity=Communauté MaternalHistory.otherComplications=Autres complications @@ -1781,7 +1785,7 @@ PointOfEntry.latitude=Latitude PointOfEntry.longitude=Longitude PointOfEntry.externalID=ID externe PointOfEntry.archived=Archivé -PointOfEntry.region=Région +PointOfEntry.region=Gouvernorat PointOfEntry.district=Région populationDataMaleTotal=Total masculin populationDataFemaleTotal=Total féminin @@ -1868,7 +1872,7 @@ Country.subcontinent=Sous-continent regionActiveRegions=Régions actives regionArchivedRegions=Régions archivées regionAllRegions=Toutes les régions -Region=Région +Region=Gouvernorat Region.archived=Archivé Region.epidCode=Code Epid Region.growthRate=Taux de croissance @@ -1913,7 +1917,7 @@ Sample.associatedEventParticipant=Participant à l'événement associé Sample.caseClassification=Classification de cas Sample.caseDistrict=Département Sample.casePersonName=Personne correspondante -Sample.caseRegion=Région +Sample.caseRegion=Gouvernorat Sample.comment=Commentaire Sample.diseaseShort=Maladie Sample.lab=Laboratoire @@ -2378,7 +2382,7 @@ TravelEntry.responsibleDistrict=Responsable province TravelEntry.responsibleCommunity=Responsable des aires de santés TravelEntry.differentPointOfEntryJurisdiction=Point of entry jurisdiction differs from responsible jurisdiction TravelEntry.pointOfEntry=Point of entry -TravelEntry.pointOfEntryRegion=Région +TravelEntry.pointOfEntryRegion=Gouvernorat TravelEntry.pointOfEntryDistrict=District TravelEntry.pointOfEntryDetails=Détails du point d'entrée TravelEntry.quarantine=Quarantine @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=ID du cas TreatmentExport.caseName=Nom du cas # User userNewUser=Nouvel utilisateur +userMyUserId=My user ID userResetPassword=Créer un nouveau mot de passe userUpdatePasswordConfirmation=Voulez-vous vraiment mettre à jour le mot de passe? sync=Synchroniser @@ -2448,7 +2453,7 @@ User.userName=Nom d’utilisateur User.userRoles=Rôles d’utilisateur User.address=Adresse User.uuid=UUID -User.region=Région +User.region=Gouvernorat User.district=District User.community=Community # Vaccination diff --git a/sormas-api/src/main/resources/captions_hi-IN.properties b/sormas-api/src/main/resources/captions_hi-IN.properties index 94174e3b778..5228d7ceb03 100644 --- a/sormas-api/src/main/resources/captions_hi-IN.properties +++ b/sormas-api/src/main/resources/captions_hi-IN.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Okay, and continue to contact actionOkAndGoToPersonDirectory = Okay, and continue to person directory actionExecuteAutomaticDeletion = Execute automatic deletion actionDone = Done +actionConfirmAction = Confirm action activityAsCaseFlightNumber=Flight number ActivityAsCase=Activity as case ActivityAsCase.startDate=Start of activity @@ -295,6 +296,9 @@ bulkTaskStatus=Change task status bulkTaskAssignee=Change assignee bulkTaskPriority=Change priority bulkRestore=Restore +bulkCompleted=%d/%d Completed +bulkSkipped=%d Skipped +bulkSuccessful=%d Successful # Campaign campaignActiveCampaigns=Active campaigns campaignAllCampaigns=All campaigns @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=Case ID TreatmentExport.caseName=Case name # User userNewUser=New user +userMyUserId=My user ID userResetPassword=Create new password userUpdatePasswordConfirmation=Really update password? sync=Sync diff --git a/sormas-api/src/main/resources/captions_hr-HR.properties b/sormas-api/src/main/resources/captions_hr-HR.properties index 94174e3b778..5228d7ceb03 100644 --- a/sormas-api/src/main/resources/captions_hr-HR.properties +++ b/sormas-api/src/main/resources/captions_hr-HR.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Okay, and continue to contact actionOkAndGoToPersonDirectory = Okay, and continue to person directory actionExecuteAutomaticDeletion = Execute automatic deletion actionDone = Done +actionConfirmAction = Confirm action activityAsCaseFlightNumber=Flight number ActivityAsCase=Activity as case ActivityAsCase.startDate=Start of activity @@ -295,6 +296,9 @@ bulkTaskStatus=Change task status bulkTaskAssignee=Change assignee bulkTaskPriority=Change priority bulkRestore=Restore +bulkCompleted=%d/%d Completed +bulkSkipped=%d Skipped +bulkSuccessful=%d Successful # Campaign campaignActiveCampaigns=Active campaigns campaignAllCampaigns=All campaigns @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=Case ID TreatmentExport.caseName=Case name # User userNewUser=New user +userMyUserId=My user ID userResetPassword=Create new password userUpdatePasswordConfirmation=Really update password? sync=Sync diff --git a/sormas-api/src/main/resources/captions_it-CH.properties b/sormas-api/src/main/resources/captions_it-CH.properties index aa34f77fc6b..ea5dfdf4852 100644 --- a/sormas-api/src/main/resources/captions_it-CH.properties +++ b/sormas-api/src/main/resources/captions_it-CH.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Okay, and continue to contact actionOkAndGoToPersonDirectory = Okay, and continue to person directory actionExecuteAutomaticDeletion = Execute automatic deletion actionDone = Done +actionConfirmAction = Confirm action activityAsCaseFlightNumber=Flight number ActivityAsCase=Activity as case ActivityAsCase.startDate=Start of activity @@ -295,6 +296,9 @@ bulkTaskStatus=Change task status bulkTaskAssignee=Change assignee bulkTaskPriority=Change priority bulkRestore=Restore +bulkCompleted=%d/%d Completed +bulkSkipped=%d Skipped +bulkSuccessful=%d Successful # Campaign campaignActiveCampaigns=Campagne attive campaignAllCampaigns=Tutte le campagne @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=ID caso TreatmentExport.caseName=Nome caso # User userNewUser=Nuovo utente +userMyUserId=My user ID userResetPassword=Crea una nuova password userUpdatePasswordConfirmation=Aggiornare veramente la password? sync=Sync diff --git a/sormas-api/src/main/resources/captions_it-IT.properties b/sormas-api/src/main/resources/captions_it-IT.properties index a142424403d..1bd581886be 100644 --- a/sormas-api/src/main/resources/captions_it-IT.properties +++ b/sormas-api/src/main/resources/captions_it-IT.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Okay, and continue to contact actionOkAndGoToPersonDirectory = Okay, and continue to person directory actionExecuteAutomaticDeletion = Execute automatic deletion actionDone = Done +actionConfirmAction = Confirm action activityAsCaseFlightNumber=Flight number ActivityAsCase=Activity as case ActivityAsCase.startDate=Start of activity @@ -295,6 +296,9 @@ bulkTaskStatus=Change task status bulkTaskAssignee=Change assignee bulkTaskPriority=Change priority bulkRestore=Restore +bulkCompleted=%d/%d Completed +bulkSkipped=%d Skipped +bulkSuccessful=%d Successful # Campaign campaignActiveCampaigns=Campagne attive campaignAllCampaigns=Tutte le campagne @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=ID caso TreatmentExport.caseName=Nome caso # User userNewUser=Nuovo utente +userMyUserId=My user ID userResetPassword=Crea una nuova password userUpdatePasswordConfirmation=Aggiornare veramente la password? sync=Sync diff --git a/sormas-api/src/main/resources/captions_ja-JP.properties b/sormas-api/src/main/resources/captions_ja-JP.properties index 94174e3b778..5228d7ceb03 100644 --- a/sormas-api/src/main/resources/captions_ja-JP.properties +++ b/sormas-api/src/main/resources/captions_ja-JP.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Okay, and continue to contact actionOkAndGoToPersonDirectory = Okay, and continue to person directory actionExecuteAutomaticDeletion = Execute automatic deletion actionDone = Done +actionConfirmAction = Confirm action activityAsCaseFlightNumber=Flight number ActivityAsCase=Activity as case ActivityAsCase.startDate=Start of activity @@ -295,6 +296,9 @@ bulkTaskStatus=Change task status bulkTaskAssignee=Change assignee bulkTaskPriority=Change priority bulkRestore=Restore +bulkCompleted=%d/%d Completed +bulkSkipped=%d Skipped +bulkSuccessful=%d Successful # Campaign campaignActiveCampaigns=Active campaigns campaignAllCampaigns=All campaigns @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=Case ID TreatmentExport.caseName=Case name # User userNewUser=New user +userMyUserId=My user ID userResetPassword=Create new password userUpdatePasswordConfirmation=Really update password? sync=Sync diff --git a/sormas-api/src/main/resources/captions_ne-NP.properties b/sormas-api/src/main/resources/captions_ne-NP.properties index 4f9365b863b..4b7682d5a55 100644 --- a/sormas-api/src/main/resources/captions_ne-NP.properties +++ b/sormas-api/src/main/resources/captions_ne-NP.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Okay, and continue to contact actionOkAndGoToPersonDirectory = Okay, and continue to person directory actionExecuteAutomaticDeletion = Execute automatic deletion actionDone = Done +actionConfirmAction = Confirm action activityAsCaseFlightNumber=Flight number ActivityAsCase=Activity as case ActivityAsCase.startDate=Start of activity @@ -295,6 +296,9 @@ bulkTaskStatus=Change task status bulkTaskAssignee=Change assignee bulkTaskPriority=Change priority bulkRestore=Restore +bulkCompleted=%d/%d Completed +bulkSkipped=%d Skipped +bulkSuccessful=%d Successful # Campaign campaignActiveCampaigns=Active campaigns campaignAllCampaigns=All campaigns @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=Case ID TreatmentExport.caseName=Case name # User userNewUser=New user +userMyUserId=My user ID userResetPassword=Create new password userUpdatePasswordConfirmation=Really update password? sync=Sync diff --git a/sormas-api/src/main/resources/captions_nl-NL.properties b/sormas-api/src/main/resources/captions_nl-NL.properties index 08ec62c1400..f4f09fe9d65 100644 --- a/sormas-api/src/main/resources/captions_nl-NL.properties +++ b/sormas-api/src/main/resources/captions_nl-NL.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Okay, and continue to contact actionOkAndGoToPersonDirectory = Okay, and continue to person directory actionExecuteAutomaticDeletion = Execute automatic deletion actionDone = Done +actionConfirmAction = Confirm action activityAsCaseFlightNumber=Flight number ActivityAsCase=Activity as case ActivityAsCase.startDate=Start of activity @@ -295,6 +296,9 @@ bulkTaskStatus=Change task status bulkTaskAssignee=Change assignee bulkTaskPriority=Change priority bulkRestore=Restore +bulkCompleted=%d/%d Completed +bulkSkipped=%d Skipped +bulkSuccessful=%d Successful # Campaign campaignActiveCampaigns=Active campaigns campaignAllCampaigns=All campaigns @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=Case ID TreatmentExport.caseName=Case name # User userNewUser=New user +userMyUserId=My user ID userResetPassword=Create new password userUpdatePasswordConfirmation=Really update password? sync=Sync diff --git a/sormas-api/src/main/resources/captions_no-NO.properties b/sormas-api/src/main/resources/captions_no-NO.properties index 94174e3b778..5228d7ceb03 100644 --- a/sormas-api/src/main/resources/captions_no-NO.properties +++ b/sormas-api/src/main/resources/captions_no-NO.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Okay, and continue to contact actionOkAndGoToPersonDirectory = Okay, and continue to person directory actionExecuteAutomaticDeletion = Execute automatic deletion actionDone = Done +actionConfirmAction = Confirm action activityAsCaseFlightNumber=Flight number ActivityAsCase=Activity as case ActivityAsCase.startDate=Start of activity @@ -295,6 +296,9 @@ bulkTaskStatus=Change task status bulkTaskAssignee=Change assignee bulkTaskPriority=Change priority bulkRestore=Restore +bulkCompleted=%d/%d Completed +bulkSkipped=%d Skipped +bulkSuccessful=%d Successful # Campaign campaignActiveCampaigns=Active campaigns campaignAllCampaigns=All campaigns @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=Case ID TreatmentExport.caseName=Case name # User userNewUser=New user +userMyUserId=My user ID userResetPassword=Create new password userUpdatePasswordConfirmation=Really update password? sync=Sync diff --git a/sormas-api/src/main/resources/captions_pl-PL.properties b/sormas-api/src/main/resources/captions_pl-PL.properties index 8511cc5f8bf..4658762faa0 100644 --- a/sormas-api/src/main/resources/captions_pl-PL.properties +++ b/sormas-api/src/main/resources/captions_pl-PL.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Okay, and continue to contact actionOkAndGoToPersonDirectory = Okay, and continue to person directory actionExecuteAutomaticDeletion = Execute automatic deletion actionDone = Gotowe +actionConfirmAction = Confirm action activityAsCaseFlightNumber=Flight number ActivityAsCase=Activity as case ActivityAsCase.startDate=Start aktywności @@ -295,6 +296,9 @@ bulkTaskStatus=Change task status bulkTaskAssignee=Change assignee bulkTaskPriority=Change priority bulkRestore=Restore +bulkCompleted=%d/%d Completed +bulkSkipped=%d Skipped +bulkSuccessful=%d Successful # Campaign campaignActiveCampaigns=Active campaigns campaignAllCampaigns=All campaigns @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=Case ID TreatmentExport.caseName=Case name # User userNewUser=New user +userMyUserId=My user ID userResetPassword=Create new password userUpdatePasswordConfirmation=Really update password? sync=Sync diff --git a/sormas-api/src/main/resources/captions_ps-AF.properties b/sormas-api/src/main/resources/captions_ps-AF.properties index e86a09ba0f4..5cd666ce188 100644 --- a/sormas-api/src/main/resources/captions_ps-AF.properties +++ b/sormas-api/src/main/resources/captions_ps-AF.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Okay, and continue to contact actionOkAndGoToPersonDirectory = Okay, and continue to person directory actionExecuteAutomaticDeletion = Execute automatic deletion actionDone = Done +actionConfirmAction = Confirm action activityAsCaseFlightNumber=Flight number ActivityAsCase=Activity as case ActivityAsCase.startDate=Start of activity @@ -295,6 +296,9 @@ bulkTaskStatus=Change task status bulkTaskAssignee=Change assignee bulkTaskPriority=Change priority bulkRestore=Restore +bulkCompleted=%d/%d Completed +bulkSkipped=%d Skipped +bulkSuccessful=%d Successful # Campaign campaignActiveCampaigns=فعال کمپاینونه campaignAllCampaigns=ټول کمپاینونه @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=Case ID TreatmentExport.caseName=Case name # User userNewUser=نوی استعمالوونکی +userMyUserId=My user ID userResetPassword=د پاسورډ بیرته جوړول userUpdatePasswordConfirmation=د نوی پاسورډ تا ئيدول sync=Sync diff --git a/sormas-api/src/main/resources/captions_pt-PT.properties b/sormas-api/src/main/resources/captions_pt-PT.properties index f9417b7e927..199813298de 100644 --- a/sormas-api/src/main/resources/captions_pt-PT.properties +++ b/sormas-api/src/main/resources/captions_pt-PT.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Okay, and continue to contact actionOkAndGoToPersonDirectory = Okay, and continue to person directory actionExecuteAutomaticDeletion = Execute automatic deletion actionDone = Done +actionConfirmAction = Confirm action activityAsCaseFlightNumber=Flight number ActivityAsCase=Activity as case ActivityAsCase.startDate=Start of activity @@ -295,6 +296,9 @@ bulkTaskStatus=Change task status bulkTaskAssignee=Change assignee bulkTaskPriority=Change priority bulkRestore=Restore +bulkCompleted=%d/%d Completed +bulkSkipped=%d Skipped +bulkSuccessful=%d Successful # Campaign campaignActiveCampaigns=Active campaigns campaignAllCampaigns=All campaigns @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=Case ID TreatmentExport.caseName=Case name # User userNewUser=New user +userMyUserId=My user ID userResetPassword=Create new password userUpdatePasswordConfirmation=Really update password? sync=Sync diff --git a/sormas-api/src/main/resources/captions_ro-RO.properties b/sormas-api/src/main/resources/captions_ro-RO.properties index 94174e3b778..5228d7ceb03 100644 --- a/sormas-api/src/main/resources/captions_ro-RO.properties +++ b/sormas-api/src/main/resources/captions_ro-RO.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Okay, and continue to contact actionOkAndGoToPersonDirectory = Okay, and continue to person directory actionExecuteAutomaticDeletion = Execute automatic deletion actionDone = Done +actionConfirmAction = Confirm action activityAsCaseFlightNumber=Flight number ActivityAsCase=Activity as case ActivityAsCase.startDate=Start of activity @@ -295,6 +296,9 @@ bulkTaskStatus=Change task status bulkTaskAssignee=Change assignee bulkTaskPriority=Change priority bulkRestore=Restore +bulkCompleted=%d/%d Completed +bulkSkipped=%d Skipped +bulkSuccessful=%d Successful # Campaign campaignActiveCampaigns=Active campaigns campaignAllCampaigns=All campaigns @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=Case ID TreatmentExport.caseName=Case name # User userNewUser=New user +userMyUserId=My user ID userResetPassword=Create new password userUpdatePasswordConfirmation=Really update password? sync=Sync diff --git a/sormas-api/src/main/resources/captions_ru-RU.properties b/sormas-api/src/main/resources/captions_ru-RU.properties index c92d1b6ab8e..88fbe296921 100644 --- a/sormas-api/src/main/resources/captions_ru-RU.properties +++ b/sormas-api/src/main/resources/captions_ru-RU.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Okay, and continue to contact actionOkAndGoToPersonDirectory = Okay, and continue to person directory actionExecuteAutomaticDeletion = Execute automatic deletion actionDone = Done +actionConfirmAction = Confirm action activityAsCaseFlightNumber=Flight number ActivityAsCase=Activity as case ActivityAsCase.startDate=Start of activity @@ -295,6 +296,9 @@ bulkTaskStatus=Change task status bulkTaskAssignee=Change assignee bulkTaskPriority=Change priority bulkRestore=Restore +bulkCompleted=%d/%d Completed +bulkSkipped=%d Skipped +bulkSuccessful=%d Successful # Campaign campaignActiveCampaigns=Active campaigns campaignAllCampaigns=All campaigns @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=Case ID TreatmentExport.caseName=Case name # User userNewUser=New user +userMyUserId=My user ID userResetPassword=Create new password userUpdatePasswordConfirmation=Really update password? sync=Sync diff --git a/sormas-api/src/main/resources/captions_sv-SE.properties b/sormas-api/src/main/resources/captions_sv-SE.properties index 94174e3b778..5228d7ceb03 100644 --- a/sormas-api/src/main/resources/captions_sv-SE.properties +++ b/sormas-api/src/main/resources/captions_sv-SE.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Okay, and continue to contact actionOkAndGoToPersonDirectory = Okay, and continue to person directory actionExecuteAutomaticDeletion = Execute automatic deletion actionDone = Done +actionConfirmAction = Confirm action activityAsCaseFlightNumber=Flight number ActivityAsCase=Activity as case ActivityAsCase.startDate=Start of activity @@ -295,6 +296,9 @@ bulkTaskStatus=Change task status bulkTaskAssignee=Change assignee bulkTaskPriority=Change priority bulkRestore=Restore +bulkCompleted=%d/%d Completed +bulkSkipped=%d Skipped +bulkSuccessful=%d Successful # Campaign campaignActiveCampaigns=Active campaigns campaignAllCampaigns=All campaigns @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=Case ID TreatmentExport.caseName=Case name # User userNewUser=New user +userMyUserId=My user ID userResetPassword=Create new password userUpdatePasswordConfirmation=Really update password? sync=Sync diff --git a/sormas-api/src/main/resources/captions_sw-KE.properties b/sormas-api/src/main/resources/captions_sw-KE.properties index 94174e3b778..5228d7ceb03 100644 --- a/sormas-api/src/main/resources/captions_sw-KE.properties +++ b/sormas-api/src/main/resources/captions_sw-KE.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Okay, and continue to contact actionOkAndGoToPersonDirectory = Okay, and continue to person directory actionExecuteAutomaticDeletion = Execute automatic deletion actionDone = Done +actionConfirmAction = Confirm action activityAsCaseFlightNumber=Flight number ActivityAsCase=Activity as case ActivityAsCase.startDate=Start of activity @@ -295,6 +296,9 @@ bulkTaskStatus=Change task status bulkTaskAssignee=Change assignee bulkTaskPriority=Change priority bulkRestore=Restore +bulkCompleted=%d/%d Completed +bulkSkipped=%d Skipped +bulkSuccessful=%d Successful # Campaign campaignActiveCampaigns=Active campaigns campaignAllCampaigns=All campaigns @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=Case ID TreatmentExport.caseName=Case name # User userNewUser=New user +userMyUserId=My user ID userResetPassword=Create new password userUpdatePasswordConfirmation=Really update password? sync=Sync diff --git a/sormas-api/src/main/resources/captions_tr-TR.properties b/sormas-api/src/main/resources/captions_tr-TR.properties index 94174e3b778..5228d7ceb03 100644 --- a/sormas-api/src/main/resources/captions_tr-TR.properties +++ b/sormas-api/src/main/resources/captions_tr-TR.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Okay, and continue to contact actionOkAndGoToPersonDirectory = Okay, and continue to person directory actionExecuteAutomaticDeletion = Execute automatic deletion actionDone = Done +actionConfirmAction = Confirm action activityAsCaseFlightNumber=Flight number ActivityAsCase=Activity as case ActivityAsCase.startDate=Start of activity @@ -295,6 +296,9 @@ bulkTaskStatus=Change task status bulkTaskAssignee=Change assignee bulkTaskPriority=Change priority bulkRestore=Restore +bulkCompleted=%d/%d Completed +bulkSkipped=%d Skipped +bulkSuccessful=%d Successful # Campaign campaignActiveCampaigns=Active campaigns campaignAllCampaigns=All campaigns @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=Case ID TreatmentExport.caseName=Case name # User userNewUser=New user +userMyUserId=My user ID userResetPassword=Create new password userUpdatePasswordConfirmation=Really update password? sync=Sync diff --git a/sormas-api/src/main/resources/captions_uk-UA.properties b/sormas-api/src/main/resources/captions_uk-UA.properties index 94174e3b778..5228d7ceb03 100644 --- a/sormas-api/src/main/resources/captions_uk-UA.properties +++ b/sormas-api/src/main/resources/captions_uk-UA.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Okay, and continue to contact actionOkAndGoToPersonDirectory = Okay, and continue to person directory actionExecuteAutomaticDeletion = Execute automatic deletion actionDone = Done +actionConfirmAction = Confirm action activityAsCaseFlightNumber=Flight number ActivityAsCase=Activity as case ActivityAsCase.startDate=Start of activity @@ -295,6 +296,9 @@ bulkTaskStatus=Change task status bulkTaskAssignee=Change assignee bulkTaskPriority=Change priority bulkRestore=Restore +bulkCompleted=%d/%d Completed +bulkSkipped=%d Skipped +bulkSuccessful=%d Successful # Campaign campaignActiveCampaigns=Active campaigns campaignAllCampaigns=All campaigns @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=Case ID TreatmentExport.caseName=Case name # User userNewUser=New user +userMyUserId=My user ID userResetPassword=Create new password userUpdatePasswordConfirmation=Really update password? sync=Sync diff --git a/sormas-api/src/main/resources/captions_ur-PK.properties b/sormas-api/src/main/resources/captions_ur-PK.properties index 5fb003852da..007a2447bf2 100644 --- a/sormas-api/src/main/resources/captions_ur-PK.properties +++ b/sormas-api/src/main/resources/captions_ur-PK.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = ٹھیک ہے، اور رابطہ کی طرف ج actionOkAndGoToPersonDirectory = ٹھیک ہے، اور پرسن ڈائرکٹری کی طرف جانا جاری رکھیں actionExecuteAutomaticDeletion = خود کار طریقے سے مٹانے پر عمل کریں actionDone = ہو گیا +actionConfirmAction = ایکشن کی تصدیق کریں activityAsCaseFlightNumber=پرواز نمبر ActivityAsCase=سرگرمی بطور کیس ActivityAsCase.startDate=سرگرمی کا آغاز @@ -295,6 +296,9 @@ bulkTaskStatus=کام کی حالت کو تبدیل کریں bulkTaskAssignee=کرنے والے کو تبدیل کریں bulkTaskPriority=ترجیح تبدیل کریں bulkRestore=بحال کریں +bulkCompleted=%d%d مکمل ہو گیا +bulkSkipped=%d نظر انداز ہو گیا +bulkSuccessful=%d کامیاب ہو گیا # Campaign campaignActiveCampaigns=فعال مہمات campaignAllCampaigns=تمام مہمات @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=کیس کی شناخت TreatmentExport.caseName=کیس کا نام # User userNewUser=نیا صارف +userMyUserId=میری یوزر آئی ڈی userResetPassword=نیا پاس ورڈ بنائیں userUpdatePasswordConfirmation=واقعی پاس ورڈ اپ ڈیٹ کریں؟ sync=مطابقت پذیری diff --git a/sormas-api/src/main/resources/captions_zh-CN.properties b/sormas-api/src/main/resources/captions_zh-CN.properties index 0fde0b1bca8..f6d78d35c70 100644 --- a/sormas-api/src/main/resources/captions_zh-CN.properties +++ b/sormas-api/src/main/resources/captions_zh-CN.properties @@ -193,6 +193,7 @@ actionOkAndGoToContactDetails = Okay, and continue to contact actionOkAndGoToPersonDirectory = Okay, and continue to person directory actionExecuteAutomaticDeletion = Execute automatic deletion actionDone = Done +actionConfirmAction = Confirm action activityAsCaseFlightNumber=航班号 ActivityAsCase=Activity as case ActivityAsCase.startDate=活动开始 @@ -295,6 +296,9 @@ bulkTaskStatus=Change task status bulkTaskAssignee=Change assignee bulkTaskPriority=Change priority bulkRestore=Restore +bulkCompleted=%d/%d Completed +bulkSkipped=%d Skipped +bulkSuccessful=%d Successful # Campaign campaignActiveCampaigns=Active campaigns campaignAllCampaigns=All campaigns @@ -2427,6 +2431,7 @@ TreatmentExport.caseUuid=Case ID TreatmentExport.caseName=Case name # User userNewUser=New user +userMyUserId=My user ID userResetPassword=Create new password userUpdatePasswordConfirmation=Really update password? sync=Sync diff --git a/sormas-api/src/main/resources/countries_cs-CZ.properties b/sormas-api/src/main/resources/countries_cs-CZ.properties index 3af2401a732..18bd2786c6e 100644 --- a/sormas-api/src/main/resources/countries_cs-CZ.properties +++ b/sormas-api/src/main/resources/countries_cs-CZ.properties @@ -101,7 +101,7 @@ country.IRQ.name=Irák country.IRL.name=Irsko country.ISR.name=Izrael country.ITA.name=Itálie -country.CIV.name=Ivory Coast +country.CIV.name=Pobřeží slonoviny country.JAM.name=Jamajka country.JPN.name=Japonsko country.JOR.name=Jordánsko diff --git a/sormas-api/src/main/resources/countries_fr-FR.properties b/sormas-api/src/main/resources/countries_fr-FR.properties index 00347e1993c..b40358109e9 100644 --- a/sormas-api/src/main/resources/countries_fr-FR.properties +++ b/sormas-api/src/main/resources/countries_fr-FR.properties @@ -92,18 +92,18 @@ country.GNB.name=Guinée-Bissau country.GUY.name=Guyane country.HTI.name=Haïti country.HND.name=Honduras -country.HUN.name=Hungary -country.ISL.name=Iceland -country.IND.name=India -country.IDN.name=Indonesia -country.IRN.name=Iran (Islamic Republic of) +country.HUN.name=Hongrie +country.ISL.name=Islande +country.IND.name=Inde +country.IDN.name=Indonésie +country.IRN.name=Iran (République islamique d') country.IRQ.name=Iraq -country.IRL.name=Ireland -country.ISR.name=Israel -country.ITA.name=Italy -country.CIV.name=Ivory Coast -country.JAM.name=Jamaica -country.JPN.name=Japan +country.IRL.name=Irlande +country.ISR.name=Israël +country.ITA.name=Italie +country.CIV.name=Côte d'Ivoire +country.JAM.name=Jamaïque +country.JPN.name=Japon country.JOR.name=Jordan country.KAZ.name=Kazakhstan country.KEN.name=Kenya diff --git a/sormas-api/src/main/resources/doc/SORMAS_Data_Dictionary.xlsx b/sormas-api/src/main/resources/doc/SORMAS_Data_Dictionary.xlsx index 9e82d25b737..69c74e0691c 100644 Binary files a/sormas-api/src/main/resources/doc/SORMAS_Data_Dictionary.xlsx and b/sormas-api/src/main/resources/doc/SORMAS_Data_Dictionary.xlsx differ diff --git a/sormas-api/src/main/resources/doc/SORMAS_User_Roles.xlsx b/sormas-api/src/main/resources/doc/SORMAS_User_Roles.xlsx index fd9cb4322c6..a4d0c3f6c35 100644 Binary files a/sormas-api/src/main/resources/doc/SORMAS_User_Roles.xlsx and b/sormas-api/src/main/resources/doc/SORMAS_User_Roles.xlsx differ diff --git a/sormas-api/src/main/resources/enum_cs-CZ.properties b/sormas-api/src/main/resources/enum_cs-CZ.properties index 9d9a2ce5a6e..3cf1289e519 100644 --- a/sormas-api/src/main/resources/enum_cs-CZ.properties +++ b/sormas-api/src/main/resources/enum_cs-CZ.properties @@ -861,7 +861,7 @@ Language.PS = Paštto Language.FA = Dari Language.CZ = Čeština Language.UR_PK = Urdština -Language.FR_TN = Français (Tunisie) +Language.FR_TN = Francouzština (Tunisko) # MapCaseDisplayMode MapCaseDisplayMode.CASE_ADDRESS = ... podle adresy domova diff --git a/sormas-api/src/main/resources/strings.properties b/sormas-api/src/main/resources/strings.properties index 8c7cb7f5913..e2f4778b468 100644 --- a/sormas-api/src/main/resources/strings.properties +++ b/sormas-api/src/main/resources/strings.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = This message contains corrections to a p confirmationVaccinationStatusUpdate = Deleting this vaccination has lead to at least one case no longer having a valid vaccination. Do you want to remove the vaccination status from all affected cases? confirmExternalMessageCorrectionThrough = No other new or changed information could automatically be determined from the message. Do you want to manually add or edit more information? confirmationDeleteCaseContacts = Do you also want to delete all contacts of this case? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=Entity was automatically deleted @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = If you want to share thi errorSormasToSormasAcceptContactsWithoutCaseShared = The contact %s cannot be accepted, because it was sent without a case. Please reject the contact and ask the source system to send the linked case first. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = The contact %s cannot be accepted, because the contact belongs to a case that has not yet been accepted. Please accept the linked case first.
It is shared within the request %s. errorSormasToSormasExistingPendingRequest = There is already a pending request to the same organization. Please revoke it before sending a new one. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = Quarantine can only be issued for cases, contacts, event participants and travel entries. errorQuarantineBulkOnlySupportedEntities = Bulk quarantine can only be issued for cases, contacts, event participants. errorCreatingTemplateDirectory = Could not create template directory. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = This immunization is not editable any more errorForbidden = Access to the specified resource has been forbidden. Please contact your supervisor or administrator and inform them about it errorNoRightsForChangingField = You have no rights for changing %s errorNoRightsForChangingMultipleFields = You have no rights for changing %s and related fields +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Cannot delete user role, because the following users would remain without a user role:

%s

Please give them a different role and re-try to delete this one. errorSurveillanceReportNotEditable = This report is not editable any more @@ -505,6 +508,7 @@ headingEditPrescription = Edit prescription headingEditTask = Edit task headingEditTreatment = Edit treatment headingEditUser = Edit user +headingEditVaccination = Edit vaccination headingEditVisit = Edit visit headingEditCountry = Edit country headingEditContinent = Edit continent @@ -646,11 +650,15 @@ headingUploadSuccess = Upload Successful headingUserData = User data headingVaccination = Vaccination headingViewNotFound = The view could not be found -headingViewPathogenTestResult = Pathogen test result -headingViewAdditionalTest = Additional test results +headingViewPathogenTestResult = View pathogen test result +headingViewPrescription = View prescription +headingViewAdditionalTest = View additional test results +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Report view headingViewTask = View task -headingViewVisit = Visit view +headingViewTreatment = View treatment +headingViewVaccination = View vaccination +headingViewVisit = View visit headingVisits = Visits headingVisitsDeleted = Visits deleted headingVisualization = Visualization @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Revoke share request headingSormasToSormasCantShareContactWithoutCase=Can not share contact headingSormasToSormasCanAcceptContactsWithoutCase=Can not accept contact(s) headingSormasToSormasDuplicateDetection = Potential duplicates detected +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Share request details headingShareRequestCases=Cases headingShareRequestContacts=Contacts @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Search for another person infoTasksWithMultipleJurisdictionsSelected = You have selected tasks connected to different jurisdictions, or that are connected to data that does not have facility or point of entry information. Only users on %s level or above will be selectable as assignees. infoNoAccessToPersonEntities = You don't have the necessary user rights to view any entries associated with persons. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s events not deleted. Event Ids not deleted: %s messageEventsNotDeletedReason = No events that contain event participants linked will be deleted. Please remove the events participants from the event in order to be able to delete it. messageCountEventsNotDeletedExternalSurveillanceTool=%s events not deleted due to the reporting tool communication. Event Ids not deleted: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Some events were not deleted because the communication with the reporting tool failed. -messageEventsEdited = All events have been edited -messageEventsEditedExceptArchived = %s events have been successfully edited. Some of the events could not be edited because they are in a different jurisdiction or were already archived. messageExportFailed = There was an error preventing the data to be exported. Please contact an admin and inform them about this issue. messageExportConfigurationDeleted = Export configuration deleted messageExportConfigurationSaved = Export configuration saved @@ -1342,9 +1354,7 @@ messageCannotMergeMoreThanTwoPersons = You need to select two persons for merge! messageAutomaticDeletionStarted = Automatic deletion has been started and will be executed in the background. Please note that, depending on the amount of data that is deleted, this process can take some time. messageUserRoleUnusableForLogin = Users with only this role will not be able to login because the role does not have Access Sormas UI nor Access Sormas REST right messageUserRoleHasNoRights = This user role has no rights. Please select at least one right. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. +messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited # Notifications diff --git a/sormas-api/src/main/resources/strings_ar-SA.properties b/sormas-api/src/main/resources/strings_ar-SA.properties index 29b9b4dfb33..ba1d5d26247 100644 --- a/sormas-api/src/main/resources/strings_ar-SA.properties +++ b/sormas-api/src/main/resources/strings_ar-SA.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = This message contains corrections to a p confirmationVaccinationStatusUpdate = Deleting this vaccination has lead to at least one case no longer having a valid vaccination. Do you want to remove the vaccination status from all affected cases? confirmExternalMessageCorrectionThrough = No other new or changed information could automatically be determined from the message. Do you want to manually add or edit more information? confirmationDeleteCaseContacts = Do you also want to delete all contacts of this case? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=Entity was automatically deleted @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = If you want to share thi errorSormasToSormasAcceptContactsWithoutCaseShared = The contact %s cannot be accepted, because it was sent without a case. Please reject the contact and ask the source system to send the linked case first. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = The contact %s cannot be accepted, because the contact belongs to a case that has not yet been accepted. Please accept the linked case first.
It is shared within the request %s. errorSormasToSormasExistingPendingRequest = There is already a pending request to the same organization. Please revoke it before sending a new one. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = Quarantine can only be issued for cases, contacts, event participants and travel entries. errorQuarantineBulkOnlySupportedEntities = Bulk quarantine can only be issued for cases, contacts, event participants. errorCreatingTemplateDirectory = Could not create template directory. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = This immunization is not editable any more errorForbidden = Access to the specified resource has been forbidden. Please contact your supervisor or administrator and inform them about it errorNoRightsForChangingField = You have no rights for changing %s errorNoRightsForChangingMultipleFields = You have no rights for changing %s and related fields +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Cannot delete user role, because the following users would remain without a user role\:

%s

Please give them a different role and re-try to delete this one. errorSurveillanceReportNotEditable = This report is not editable any more @@ -505,6 +508,7 @@ headingEditPrescription = Edit prescription headingEditTask = Edit task headingEditTreatment = Edit treatment headingEditUser = Edit user +headingEditVaccination = Edit vaccination headingEditVisit = Edit visit headingEditCountry = Edit country headingEditContinent = Edit continent @@ -647,9 +651,13 @@ headingUserData = User data headingVaccination = Vaccination headingViewNotFound = The view could not be found headingViewPathogenTestResult = Pathogen test result +headingViewPrescription = View prescription headingViewAdditionalTest = Additional test results +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Report view headingViewTask = View task +headingViewTreatment = View treatment +headingViewVaccination = View vaccination headingViewVisit = Visit view headingVisits = Visits headingVisitsDeleted = Visits deleted @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Revoke share request headingSormasToSormasCantShareContactWithoutCase=Can not share contact headingSormasToSormasCanAcceptContactsWithoutCase=Can not accept contact(s) headingSormasToSormasDuplicateDetection = Potential duplicates detected +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Share request details headingShareRequestCases=Cases headingShareRequestContacts=Contacts @@ -964,7 +973,7 @@ infoUserSyncProcess = %d users are being synced to the External Authentication P infoNoSubordinateEvents=No subordinate events infoNoSuperordinateEvent=No superordinate event infoNoEventGroups=No event groups -infoMergeFiltersHint = Calculating and displaying potential duplicates may take a lot of time under specific circumstances. It is recommended to use the filters on top of this view to reduce the number of rows that have to be compared at the same time, e.g. by choosing a narrow creation date interval and a low result count limit. If the potential duplicates are loading fast, extending these values should be safe.

In order to avoid performance issues when entering this view, potential duplicates are only loaded once you click on "Confirm Filters". +infoMergeFiltersHint = Calculating and displaying potential duplicate cases is a very complex task and can require a lot of time. It is strongly recommended to adjust the filters on top of this view to reduce the number of cases that are detected at the same time, e.g. by increasing the lower threshold of the "Creation date" filter, or by selecting thresholds for the "Report or Onset Date".

When you see this hint, the loading of duplicates has been temporarily blocked to make sure that you can adjust the filters. Clicking on "Confirm Filters" after doing so will bring up the list of potential duplicates. infoPlaceOfStayInHospital = Please select a hospital as the place of stay. If the case is not currently admitted to a hospital as an inpatient, please document hospitalizations under previous hospitalizations. infoMoreDetailsAboutHospitalization = For adding more details about the hospitalization, go to the hospitalization tab. infoCountryNotEditableEventParticipantsWithoutJurisdiction = Changing the country is not permitted because at least one event participant in this event does not have a responsible region and/or responsible district set. @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Search for another person infoTasksWithMultipleJurisdictionsSelected = You have selected tasks connected to different jurisdictions, or that are connected to data that does not have facility or point of entry information. Only users on %s level or above will be selectable as assignees. infoNoAccessToPersonEntities = You don't have the necessary user rights to view any entries associated with persons. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s events not deleted. Event Ids not deleted\: %s messageEventsNotDeletedReason = No events that contain event participants linked will be deleted. Please remove the events participants from the event in order to be able to delete it. messageCountEventsNotDeletedExternalSurveillanceTool=%s events not deleted due to the reporting tool communication. Event Ids not deleted\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Some events were not deleted because the communication with the reporting tool failed. -messageEventsEdited = All events have been edited -messageEventsEditedExceptArchived = %s events have been successfully edited. Some of the events could not be edited because they are in a different jurisdiction or were already archived. messageExportFailed = There was an error preventing the data to be exported. Please contact an admin and inform them about this issue. messageExportConfigurationDeleted = Export configuration deleted messageExportConfigurationSaved = Export configuration saved @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = You need to select two persons for merge\ messageAutomaticDeletionStarted = Automatic deletion has been started and will be executed in the background. Please note that, depending on the amount of data that is deleted, this process can take some time. messageUserRoleUnusableForLogin = Users with only this role will not be able to login because the role does not have Access Sormas UI nor Access Sormas REST right messageUserRoleHasNoRights = This user role has no rights. Please select at least one right. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited diff --git a/sormas-api/src/main/resources/strings_cs-CZ.properties b/sormas-api/src/main/resources/strings_cs-CZ.properties index 7ef4f5a48db..47c8099f5b0 100644 --- a/sormas-api/src/main/resources/strings_cs-CZ.properties +++ b/sormas-api/src/main/resources/strings_cs-CZ.properties @@ -148,16 +148,16 @@ confirmationDearchiveEventParticipant = Opravdu chcete vyjmout z archivu tohoto confirmationDearchiveEventGroup = Jste si jisti, že chcete vyjmout z archivu tuto skupinu událostí? Ta se znovu zobrazí v normální složce skupiny událostí. confirmationDeleteCases = Opravdu chcete odstranit všech %d vybraných případů?

Pokud se na ně odkazují jiná data, tyto odkazy budou odstraněny, které nelze automaticky vrátit zpět. confirmationDeleteContacts = Opravdu chcete odstranit všech %d vybraných případů?

Pokud se na ně odkazují jiná data, tyto odkazy budou odstraněny, které nelze automaticky vrátit zpět. -confirmationRestoreEntities = Are you sure you want to restore all %d selected %s? -confirmationDeleteEntity = Are you sure you want to delete this %s?

If referenced by other data in the system, those references will be removed, which cannot be automatically undone. -confirmationDeleteEntityWithDetails = Are you sure you want to delete this %s?
%s
If referenced by other data in the system, those references will be removed, which cannot be automatically undone. -confirmationDeleteEventParticipants = Are you sure you want to delete all %d selected event participants?

If referenced by other data in the system, those references will be removed, which cannot be automatically undone. -confirmationDeleteEvents = Are you sure you want to delete all %d selected events?

If referenced by other data in the system, those references will be removed, which cannot be automatically undone. +confirmationRestoreEntities = Opravdu chcete obnovit všech %d vybraných %s? +confirmationDeleteEntity = Opravdu chcete smazat %s?

Pokud se na ně odkazují jiná data, tyto odkazy budou odstraněny, které nelze automaticky vrátit zpět. +confirmationDeleteEntityWithDetails = Opravdu chcete smazat %s?
%s
Pokud se na ně odkazují jiná data, tyto odkazy budou odstraněny, což nelze automaticky vrátit zpět. +confirmationDeleteEventParticipants = Opravdu chcete odstranit všech %d vybraných případů?

Pokud se na ně odkazují jiná data, tyto odkazy budou odstraněny, což nelze automaticky vrátit zpět. +confirmationDeleteEvents = Opravdu chcete odstranit všech %d vybraných případů?

Pokud se na ně odkazují jiná data, tyto odkazy budou odstraněny, což nelze automaticky vrátit zpět. confirmationDeleteTravelEntries = Opravdu chcete odstranit všech %d vybraných vstupních míst?

Pokud se na ně odkazují jiná data, tyto odkazy budou odstraněny, které nelze automaticky vrátit zpět. confirmationDeleteFile = Opravdu chcete smazat %s? -confirmationDeletePathogenTests = Are you sure you want to delete all %d selected pathogen tests? If referenced by other data in the system, those references will be removed, which cannot be automatically undone. +confirmationDeletePathogenTests = Opravdu chcete odstranit všech %d vybraných případů? Pokud se na ně odkazují jiná data, tyto odkazy budou odstraněny, což nelze automaticky vrátit zpět. confirmationDeletePrescriptions = Opravdu chcete smazat všech %d vybraných předpisů? -confirmationDeleteSamples = Are you sure you want to delete all %d selected samples? If referenced by other data in the system, those references will be removed, which cannot be automatically undone. +confirmationDeleteSamples = Opravdu chcete odstranit všech %d vybraných vzorků? Pokud se na ně odkazují jiná data, tyto odkazy budou odstraněny, což nelze automaticky vrátit zpět. confirmationDeleteTasks = Opravdu chcete smazat všech %d vybraných úkolů? confirmationDeleteTreatments = Opravdu chcete smazat všech %d vybraných léčeb? confirmationDeleteVisits = Opravdu chcete smazat všech %d vybraných návštěv? @@ -232,7 +232,7 @@ confirmationUnlinkCaseFromEvent = Opravdu chcete odpojit tento případ od této confirmationDeleteExternalMessages = Opravdu chcete odstranit všech %d vybraných zpráv? confirmationUnclearExternalMessage = Opravdu chcete tuto zprávu označit jako nejasnou? confirmationManuallyForwardedExternalMessage = Opravdu chcete tuto zprávu označit jako přeposlanou? -confirmationManualDeleteCoreEntity=You are about to mark this data for deletion. If referenced by other data in the system, those references will be removed, which cannot be automatically undone. +confirmationManualDeleteCoreEntity=Chystáte se označit tato data k vymazání. Pokud se na ně odkazují jiná data v systému, budou tyto odkazy odstraněny, což nelze automaticky vrátit zpět. confirmationFetchExternalMessages = V tuto chvíli se zdá, že jiný uživatel načítá zprávy. Pokud se rozhodnete pokračovat, může to mít za následek duplicitní zprávy. Opravdu chcete pokračovat? confirmationRejectSormasToSormasShareRequest = Opravdu chcete odmítnout tuto žádost o sdílení? confirmationEnableUsers = Opravdu chcete povolit všech %d vybraných uživatelů? @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = Tato zpráva obsahuje opravy k předchoz confirmationVaccinationStatusUpdate = Vymazání tohoto očkování vedlo k tomu, že nejméně jeden případ již nemá platné očkování. Chcete odstranit status očkování u všech dotčených případů? confirmExternalMessageCorrectionThrough = Žádné další nové nebo změněné informace nelze automaticky určit ze zprávy. Chcete ručně přidat nebo upravit více informací? confirmationDeleteCaseContacts = Chcete také odstranit všechny kontakty tohoto případu? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=Entita byla automaticky smazána @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = Pokud chcete sdílet ten errorSormasToSormasAcceptContactsWithoutCaseShared = Kontakt %s nelze přijmout, protože byl odeslán bez případu. Prosím odmítněte kontakt a požádejte zdrojový systém o zaslání propojeného případu. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = Kontakt %s nelze přijmout, protože kontakt patří k případu, který ještě nebyl přijat. Nejdříve prosím přijměte propojený případ.
Je sdílen v rámci požadavku %s. errorSormasToSormasExistingPendingRequest = Existuje již nevyřízený požadavek pro tutéž organizaci. Prosím zrušte jej před odesláním nového. +errorSormasToSormasSharequestNotFound = Požadavek na sdílení nebyl nalezen. Byl buď zneplatněn zdrojovým systémem, nebo byl odmítnut jiným systémem. errorQuarantineOnlySupportedEntities = Karanténa může být vydána pouze pro případy, kontakty, účastníky akcí a údaje o cestování. errorQuarantineBulkOnlySupportedEntities = Hromadnou karanténu lze vydat pouze pro případy, kontakty a účastníky událostí. errorCreatingTemplateDirectory = Nelze vytvořit adresář šablony. @@ -382,7 +384,7 @@ errorNoPopulationDataFound=Nejsou k dispozici žádná populační data. Přepn errorFormIdPopulationAgeGroup=Obě možnosti "Id formuláře" a "Věková skupina obyvatel" jsou nastaveny errorNotifyingExternalSurveillanceTool=Chyba při oznamování externího systému hlášení errorExternalSurveillanceToolNonCoronavirusCase=Vybrané případy nelze odeslat na nástroj hlášení, protože případ %s není případ %s. -errorExternalSurveillanceToolCasesNotSharable=%d of the selected %d cases can not be sent to the external reporting tool.
Please make sure that all of the cases below are owned and allowed to be shared with the external reporting tool. Then, re-try sending or only send the ones that can be sent. +errorExternalSurveillanceToolCasesNotSharable=%d z vybraných %d případů nelze odeslat do externího nástroje pro podávání zpráv.
Ujistěte se, že všechny níže uvedené případy jsou vlastněny a mohou být sdíleny s externím nástrojem pro podávání zpráv. Poté zkuste odeslat znovu nebo odešlete pouze ty, které odeslat lze. errorExternalSurveillanceToolNonClusterEvent=Vybrané události nelze odeslat do nástroje hlášení, protože událost %s není klastrem %s. errorExternalSurveillanceToolEventNotOwned=%d z vybraných událostí nelze odeslat do externího oznamovacího nástroje.
Ujistěte se, že všechny níže uvedené události jsou vlastněny. Potom je zkuste poslat znovu, nebo pouze ty, které mohou být odeslány. errorEventFromAnotherJurisdiction = Událost souvisí s jurisdikcí, ke které nemáte přístup @@ -398,8 +400,9 @@ errorImmunizationNotEditable = Tato imunizace již není upravitelná errorForbidden = Přístup ke specifikovanému zdroji byl zakázán. Kontaktujte prosím svého inspektora nebo správce a informujte o něm errorNoRightsForChangingField = Nemáte žádná práva pro změnu %s errorNoRightsForChangingMultipleFields = Nemáte žádná práva pro změnu %s a souvisejících polí +errorNotFound = Požadovaný subjekt nebyl nalezen errorDeleteUserRoleUsedAlone = Nelze odstranit uživatelskou roli, protože následující uživatelé by zůstali bez uživatelské role\:

%s

Prosím, dejte jim jinou roli a zkuste to znovu smazat. -errorSurveillanceReportNotEditable = This report is not editable any more +errorSurveillanceReportNotEditable = Tato zpráva již není upravitelná # headings headingAccessDenied = Přístup odepřen @@ -505,6 +508,7 @@ headingEditPrescription = Upravit předpis headingEditTask = Upravit úkol headingEditTreatment = Upravit léčbu headingEditUser = Upravit uživatele +headingEditVaccination = Upravit očkování headingEditVisit = Upravit návštěvu headingEditCountry = Upravit zemi headingEditContinent = Upravit kontinent @@ -647,9 +651,13 @@ headingUserData = Uživatelská data headingVaccination = Očkování headingViewNotFound = Zobrazení nebylo nalezeno headingViewPathogenTestResult = Výsledek testu patogenu +headingViewPrescription = Zobrazit recept headingViewAdditionalTest = Další výsledky testů +headingViewClinicalVisit = Zobrazit klinické hodnocení headingViewSurveillanceReport = Report view -headingViewTask = View task +headingViewTask = Zobrazit úkol +headingViewTreatment = Zobrazit léčbu +headingViewVaccination = Zobrazit očkování headingViewVisit = Visit view headingVisits = Návštěvy headingVisitsDeleted = Návštěvy odstraněny @@ -703,7 +711,7 @@ headingSomeEventsNotRestored = Některé události nebyly obnoveny headingSomeEventParticipantsNotRestored = Někteří účastníci události nebyli obnoveni headingSomeImmunizationsNotRestored = Některé imunizace nebyly obnoveny headingSomeSamplesNotRestored = Některé vzorky nebyly obnoveny -headingSomeTravelEntriesNotRestored = Some travel entries were not restored +headingSomeTravelEntriesNotRestored = Některá místa vstupu nebyla obnovena headingSomeEventsNotDeleted = Některé události nebyly odstraněny headingContactConfirmationRequired = Vyžadováno potvrzení kontaktu headingContactConversionFollowUpCommentLarge = Komentář k následnému sledování překročí maximální povolený počet znaků @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Odmítnout žádost o sdílení headingSormasToSormasCantShareContactWithoutCase=Nelze sdílet kontakt headingSormasToSormasCanAcceptContactsWithoutCase=Nelze přijmout kontakt(y) headingSormasToSormasDuplicateDetection = Zjištěny potenciální duplikáty +headingSormasToSormasShareRequestNotFound = Požadavek na sdílení nebyl nalezen headingShareRequestDetails=Detaily žádosti o sdílení headingShareRequestCases=Případy headingShareRequestContacts=Kontakty @@ -964,7 +973,7 @@ infoUserSyncProcess = %d uživatelů je synchronizováno s poskytovatelem extern infoNoSubordinateEvents=Žádné podřízené události infoNoSuperordinateEvent=Žádná nadřízená událost infoNoEventGroups=Žádné skupiny událostí -infoMergeFiltersHint = Calculating and displaying potential duplicates may take a lot of time under specific circumstances. It is recommended to use the filters on top of this view to reduce the number of rows that have to be compared at the same time, e.g. by choosing a narrow creation date interval and a low result count limit. If the potential duplicates are loading fast, extending these values should be safe.

In order to avoid performance issues when entering this view, potential duplicates are only loaded once you click on "Confirm Filters". +infoMergeFiltersHint = Výpočet a zobrazení možných duplicitních případů je velmi složitý úkol a může vyžadovat mnoho času. Důrazně se doporučuje upravit filtry nad tento pohled tak, aby se snížil počet případů, které jsou zjištěny současně, např. zvýšením dolní hranice filtru "Datum vytvoření" nebo výběrem prahových hodnot pro "Datum nahlášení nebo prvku".

Když uvidíte tento nápovědu, načítání duplikátů bylo dočasně zablokováno, abyste se ujistili, že můžete upravit filtry. Kliknutím na "Potvrdit filtry" se zobrazí seznam potenciálních duplikátů. infoPlaceOfStayInHospital = Vyberte prosím nemocnici jako místo pobytu. Pokud případ není v současné době přijat do nemocnice jako pacient, doložte prosím hospitalizaci při předchozích hospitalizacích. infoMoreDetailsAboutHospitalization = Chcete-li přidat další podrobnosti o hospitalizaci, přejděte na záložku hospitalizace. infoCountryNotEditableEventParticipantsWithoutJurisdiction = Změna země není povolena, protože alespoň jeden účastník této události nemá nastavený odpovědný region a/nebo odpovědný okres. @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Hledat jinou osobu infoTasksWithMultipleJurisdictionsSelected = Vybrali jste úlohy, které jsou spojeny s různými jurisdikcemi nebo které jsou spojeny s údaji, které nemají informace o zařízení nebo vstupním místě. Jako příkazce bude možné vybrat pouze uživatele na úrovni %s nebo vyšší. infoNoAccessToPersonEntities = Nemáte potřebná uživatelská práva k zobrazení záznamů spojených s osobami. infoDashboardFinalLaboratoryResult = Pokud má případ více vzorků, bere se v úvahu pouze konečný laboratorní výsledek vzorku s nejzazším datem odběru vzorku. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = Akce mimo jurisdikci uživatele nemůže být odstraněna @@ -1093,18 +1107,16 @@ messageEventsDeleted = Všechny vybrané události byly odstraněny messageEventsSentToSurvnet = Všechny vybrané události byly odeslány na SurvNet messageCountCasesNotDeleted = %s případů nebylo smazáno. CasesIds nebyl smazán\: %s messageCountCasesNotRestored = %s cases not restored. UUIDs of cases not restored\: %s -messageCountContactsNotRestored = %s contacts not restored. UUIDs of contact not restored\: %s -messageCountEventsNotRestored = %s events not restored. UUIDs of events not restored\: %s -messageCountEventParticipantsNotRestored = %s event participants not restored. UUIDs of event participants not restored\: %s -messageCountImmunizationsNotRestored = %s immunizations not restored. UUIDs of immunizations not restored\: %s -messageCountSamplesNotRestored = %s samples not restored. UUIDs of samples not restored\: %s +messageCountContactsNotRestored = %s kontaktů není obnoveno. UUID kontaktu není obnoveno\: %s +messageCountEventsNotRestored = %s událostí není obnoveno. UUID událostí nebyly obnoveny\: %s +messageCountEventParticipantsNotRestored = %s účastníků události není obnoveno. UUID účastníků události není obnoveno\: %s +messageCountImmunizationsNotRestored = %s imunizace nebyla obnovena. UUIDy imunizací nebyly obnoveny\: %s +messageCountSamplesNotRestored = %s vzorků nebylo obnoveno. UUID vzorků nebylo obnoveno\: %s messageCountTravelEntriesNotRestored = %s travel entries not restored. UUIDs of travel entries not restored\: %s messageCountEventsNotDeleted = %s událostí nebylo smazáno. Id události nebyl smazán\: %s messageEventsNotDeletedReason = Žádné události, které obsahují propojené účastníky událostí, nebudou smazány. Odstraňte účastníky událostí z události, abyste je mohli odstranit. messageCountEventsNotDeletedExternalSurveillanceTool=%s událostí nebylo odstraněno z důvodu nástroje hlášení. Id událostí nebyl smazán\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Některé události nebyly odstraněny, protože komunikace s nástrojem hlášení selhala. -messageEventsEdited = Všechny události byly editovány -messageEventsEditedExceptArchived = %s událostí bylo úspěšně upraveno. Některé události nemohly být upraveny, protože jsou v jiné jurisdikci, nebo již byly archivovány. messageExportFailed = Došlo k chybě bránící exportu dat. Kontaktujte prosím administrátora a informujte ho o tomto problému. messageExportConfigurationDeleted = Nastavení exportu odstraněno messageExportConfigurationSaved = Nastavení exportu uloženo @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = Pro sloučení musíte vybrat dvě osoby\ messageAutomaticDeletionStarted = Automatické smazání bylo zahájeno a bude provedeno na pozadí. Vezměte prosím na vědomí, že v závislosti na množství dat, která jsou odstraněna, může tento proces nějakou dobu trvat. messageUserRoleUnusableForLogin = Uživatelé s pouze touto rolí se nebudou moci přihlásit, protože role nemá přístupové Sormas UI ani přístup k Sormas REST right messageUserRoleHasNoRights = Tato uživatelská role nemá žádná práva. Vyberte prosím alespoň jedno právo. -messageBulkOperationEntryLimitReached = Bylo dosaženo maximálního počtu položek, které mohou být současně zpracovány (%s). Dosud bylo zpracováno %s položek a zbývá ještě %s položek. Chcete pokračovat v operaci?

Pokud se rozhodnete, budete přesměrováni zpět do adresáře s dosud vybranými nezpracovanými položkami. -messageBulkOperationTimeLimitReached = Bylo dosaženo maximálního počtu položek, které mohou být současně zpracovány (%s). Dosud bylo zpracováno %s položek a zbývá ještě %s položek. Chcete pokračovat v operaci?

Pokud se rozhodnete, budete přesměrováni zpět do adresáře s dosud vybranými nezpracovanými položkami. messageEntriesEditedExceptArchived = %s položek bylo úspěšně upraveno. Některé položky nemohly být upraveny, protože jsou v jiné jurisdikci nebo již byly archivovány. messageEntriesEdited = Všechny položky byly upraveny diff --git a/sormas-api/src/main/resources/strings_de-CH.properties b/sormas-api/src/main/resources/strings_de-CH.properties index c81941e348f..b2712548fc0 100644 --- a/sormas-api/src/main/resources/strings_de-CH.properties +++ b/sormas-api/src/main/resources/strings_de-CH.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = Diese Meldung enthält Korrekturen zu ei confirmationVaccinationStatusUpdate = Das Löschen dieser Impfung hat dazu geführt, dass mindestens ein Fall keine gültige Impfung mehr hat. Möchten Sie den Impfstatus von allen betroffenen Fällen entfernen? confirmExternalMessageCorrectionThrough = Keine anderen neuen oder geänderten Informationen konnten automatisch aus der Meldung ermittelt werden. Möchten Sie manuell weitere Informationen hinzufügen oder bearbeiten? confirmationDeleteCaseContacts = Möchten Sie auch alle Kontakte von diesem Fall löschen? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=Entität wurde automatisch gelöscht @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = Wenn Sie diesen Kontakt errorSormasToSormasAcceptContactsWithoutCaseShared = Der Kontakt %s kann nicht akzeptiert werden, da er ohne Fall gesendet wurde. Bitte den Kontakt ablehnen und das Usprungsssystem bitten, den verknüpften Fall zuerst zu senden. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = Der Kontakt %s kann nicht übernommen werden, da er zu einem Fall gehört, der noch nicht angenommen wurde. Bitte übernehmen Sie den verknüpften Fall zuerst.
Er wird innerhalb der Anfrage %s übergeben. errorSormasToSormasExistingPendingRequest = Es gibt bereits eine ausstehende Anfrage an das gleiche Gesundheitsamt. Bitte widerrufen Sie sie, bevor Sie eine neue senden. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = Quarantäne kann nur für Fälle, Kontakte, Ereignisteilnehmer und Einreisende ausgestellt werden. errorQuarantineBulkOnlySupportedEntities = Quarantäne können massenhaft nur für Fälle, Kontakte, Ereignisteilnehmer ausgestellt werden. errorCreatingTemplateDirectory = Verzeichnis konnte nicht erstellt werden. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = Diese Immunisierung kann nicht mehr bearbeitet we errorForbidden = Der Zugriff auf die Ressource wurde eingeschränkt. Bitte kontaktieren Sie Ihre IT-Administration und informieren Sie sie darüber errorNoRightsForChangingField = Sie haben nicht die Berechtigungen zum Ändern von %s errorNoRightsForChangingMultipleFields = Sie haben nicht die Berechtigungen, um %s und verwandte Felder zu ändern +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Benutzerrolle kann nicht gelöscht werden, weil die folgenden Benutzer ohne eine Benutzerrolle verbleiben würden\:

%s

Bitte geben Sie ihnen eine andere Rolle und versuchen Sie das Löschen erneut. errorSurveillanceReportNotEditable = This report is not editable any more @@ -505,6 +508,7 @@ headingEditPrescription = Rezept bearbeiten headingEditTask = Aufgabe bearbeiten headingEditTreatment = Behandlung bearbeiten headingEditUser = Benutzer bearbeiten +headingEditVaccination = Edit vaccination headingEditVisit = Anruf bearbeiten headingEditCountry = Land bearbeiten headingEditContinent = Kontinent bearbeiten @@ -647,9 +651,13 @@ headingUserData = Nutzerdaten headingVaccination = Impfung headingViewNotFound = Die Ansicht konnte nicht gefunden werden headingViewPathogenTestResult = Erregertestergebnis +headingViewPrescription = View prescription headingViewAdditionalTest = Zusätzliche Testergebnisse +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Meldungsübersicht headingViewTask = Aufgabe anzeigen +headingViewTreatment = View treatment +headingViewVaccination = View vaccination headingViewVisit = Nachverfolgungsübersicht headingVisits = Anrufe headingVisitsDeleted = Anrufe gelöscht @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Anfrage widerrufen headingSormasToSormasCantShareContactWithoutCase=Kontakt kann nicht geteilt werden headingSormasToSormasCanAcceptContactsWithoutCase=Kontakt(e) können nicht übernommen werden headingSormasToSormasDuplicateDetection = Potentielle Duplikate erkannt +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Details der Anfrage headingShareRequestCases=Fälle headingShareRequestContacts=Kontakte @@ -964,7 +973,7 @@ infoUserSyncProcess = %d Benutzer werden mit dem externen Authentifizierungsanbi infoNoSubordinateEvents=Keine untergeordneten Ereignisse infoNoSuperordinateEvent=Kein übergeordnetes Ereignis infoNoEventGroups=Keine Ereignisgruppen -infoMergeFiltersHint = Calculating and displaying potential duplicates may take a lot of time under specific circumstances. It is recommended to use the filters on top of this view to reduce the number of rows that have to be compared at the same time, e.g. by choosing a narrow creation date interval and a low result count limit. If the potential duplicates are loading fast, extending these values should be safe.

In order to avoid performance issues when entering this view, potential duplicates are only loaded once you click on "Confirm Filters". +infoMergeFiltersHint = Die Berechnung und Anzeige möglicher Duplikat-Fälle ist eine sehr komplexe Aufgabe und kann viel Zeit in Anspruch nehmen. Es wird dringend empfohlen, die Filter auf dieser Ansicht anzupassen, um die Anzahl der gleichzeitig erkannten Fälle zu verringern z. B. durch die Anhebung des unteren Schwellenwertes des Filters "Erstellungsdatum" oder durch die Auswahl von Schwellenwerten für das "Melde- oder Symptom Startdatum".

Wenn Sie diesen Hinweis sehen, wurde das Laden von Duplikaten vorübergehend blockiert, um sicherzustellen, dass Sie die Filter anpassen können. Ein Klick auf "Filter bestätigen" lädt die Liste der möglichen Duplikate. infoPlaceOfStayInHospital = Bitte wählen Sie ein Krankenhaus als Aufenthaltsort aus. Falls sich der Fall momentan nicht stationär als Patient in einem Krankenhaus aufhält, dokumentieren Sie bitte die Krankenhausaufenthalte unter vorherigen Krankenhausaufenthalten. infoMoreDetailsAboutHospitalization = Um weitere Details zum Krankenhausaufenthalt hinzuzufügen, gehen Sie zum Reiter Krankenhausaufenthalt. infoCountryNotEditableEventParticipantsWithoutJurisdiction = Eine Änderung des Landes ist nicht zulässig, da mindestens ein Ereignisteilnehmer dieses Ereignisses keinen zuständigen Kanton und/oder zuständigen Bezirk hat. @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Nach einer anderen Person suchen infoTasksWithMultipleJurisdictionsSelected = Sie haben Aufgaben ausgewählt, die mit verschiedenen Zuständigkeitsbereichen verbunden sind oder die mit Daten verbunden sind, die keine Einrichtungs- oder Einreiseort-Information haben. Nur Benutzer auf %s Ebene oder höher können als zugewiesener Benutzer ausgewählt werden. infoNoAccessToPersonEntities = Sie haben nicht die notwendigen Benutzerrechte, um Einträge zu sehen, die mit Personen verbunden sind. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s Ereignisse nicht gelöscht. Event-Ids der nich messageEventsNotDeletedReason = Keine Ereignisse, die verlinkte Teilnehmer enthalten, werden gelöscht. Bitte entfernen Sie die Ereignisteilnehmer aus dem Ereignis, um sie löschen zu können. messageCountEventsNotDeletedExternalSurveillanceTool=%s Ereignisse, die aufgrund der Kommunikation mit der Meldesoftware nicht gelöscht wurden. Nicht gelöschte Ereignis-Ids\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Einige Ereignisse wurden nicht gelöscht, weil die Kommunikation mit der Meldesoftware fehlgeschlagen ist. -messageEventsEdited = Alle Ereignisse wurden bearbeitet -messageEventsEditedExceptArchived = %s Ereignisse wurden erfolgreich bearbeitet. Einige Termine konnten nicht bearbeitet werden, da sie in einem anderen Zuständigkeitsbereich liegen oder bereits archiviert wurden. messageExportFailed = Es gab einen Fehler beim Export der Daten. Bitte kontaktieren Sie einen Administrator und informieren Sie ihn über dieses Problem. messageExportConfigurationDeleted = Exporteinstellung gelöscht messageExportConfigurationSaved = Exporteinstellung gespeichert @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = Sie müssen zwei Personen zum Zusammenfü messageAutomaticDeletionStarted = Automatisches Löschen wurde gestartet und wird im Hintergrund ausgeführt. Bitte beachten Sie, dass dieser Prozess je nach Anzahl der zu löschenden Daten einige Zeit in Anspruch nehmen kann. messageUserRoleUnusableForLogin = Benutzer mit nur dieser Rolle können sich nicht anmelden, da die Rolle weder Zugang Sormas UI noch Zugang Sormas REST Rechte hat messageUserRoleHasNoRights = Diese Benutzerrolle hat keine Rechte. Bitte wählen Sie mindestens ein Recht aus. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited diff --git a/sormas-api/src/main/resources/strings_de-DE.properties b/sormas-api/src/main/resources/strings_de-DE.properties index cd87f582711..ca6294f357b 100644 --- a/sormas-api/src/main/resources/strings_de-DE.properties +++ b/sormas-api/src/main/resources/strings_de-DE.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = Diese Meldung enthält Korrekturen zu ei confirmationVaccinationStatusUpdate = Das Löschen dieser Impfung hat dazu geführt, dass mindestens ein Fall keine gültige Impfung mehr hat. Möchten Sie den Impfstatus von allen betroffenen Fällen entfernen? confirmExternalMessageCorrectionThrough = Keine anderen neuen oder geänderten Informationen konnten automatisch aus der Meldung ermittelt werden. Möchten Sie manuell weitere Informationen hinzufügen oder bearbeiten? confirmationDeleteCaseContacts = Möchten Sie auch alle Kontakte von diesem Fall löschen? +confirmationCancelBulkAction = Möchten Sie den Massenvorgang wirklich abbrechen? Die Operation wird nach der Bearbeitung des aktuellen Stapels gestoppt. # Entities entityAutomaticSoftDeletion=Entität wurde automatisch gelöscht @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = Wenn Sie diesen Kontakt errorSormasToSormasAcceptContactsWithoutCaseShared = Der Kontakt %s kann nicht akzeptiert werden, da er ohne Fall gesendet wurde. Bitte den Kontakt ablehnen und das Usprungsssystem bitten, den verknüpften Fall zuerst zu senden. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = Der Kontakt %s kann nicht übernommen werden, da er zu einem Fall gehört, der noch nicht angenommen wurde. Bitte übernehmen Sie den verknüpften Fall zuerst.
Er wird innerhalb der Anfrage %s übergeben. errorSormasToSormasExistingPendingRequest = Es gibt bereits eine ausstehende Anfrage an das gleiche Gesundheitsamt. Bitte widerrufen Sie die Anfrage, bevor Sie eine Neue senden. +errorSormasToSormasSharequestNotFound = Die Freigabeanfrage konnte nicht gefunden werden. Sie wurde entweder vom Quellsystem zurückgezogen oder von jemand anderem abgelehnt. errorQuarantineOnlySupportedEntities = Quarantäne kann nur für Fälle, Kontakte, Ereignisteilnehmer und Einreisende ausgestellt werden. errorQuarantineBulkOnlySupportedEntities = Quarantäne können massenhaft nur für Fälle, Kontakte, Ereignisteilnehmer ausgestellt werden. errorCreatingTemplateDirectory = Verzeichnis konnte nicht erstellt werden. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = Diese Immunisierung kann nicht mehr bearbeitet we errorForbidden = Der Zugriff auf die angegebene Ressource wurde untersagt. Bitte kontaktieren Sie Ihren IT-Administrator und informieren Sie ihn darüber errorNoRightsForChangingField = Sie haben keine Rechte zum Ändern von %s errorNoRightsForChangingMultipleFields = Sie haben keine Rechte um %s und verwandte Felder zu ändern +errorNotFound = Die angeforderte Entität konnte nicht gefunden werden errorDeleteUserRoleUsedAlone = Benutzerrolle kann nicht gelöscht werden, weil die folgenden Benutzer ohne eine Benutzerrolle verbleiben würden\:

%s

Bitte geben Sie ihnen eine andere Rolle und versuchen Sie das Löschen erneut. errorSurveillanceReportNotEditable = Dieser Bericht kann nicht mehr bearbeitet werden @@ -505,6 +508,7 @@ headingEditPrescription = Verschreibung bearbeiten headingEditTask = Aufgabe bearbeiten headingEditTreatment = Behandlung bearbeiten headingEditUser = Benutzer bearbeiten +headingEditVaccination = Impfung bearbeiten headingEditVisit = Anruf bearbeiten headingEditCountry = Land bearbeiten headingEditContinent = Kontinent bearbeiten @@ -647,9 +651,13 @@ headingUserData = Nutzerdaten headingVaccination = Impfung headingViewNotFound = Die Ansicht konnte nicht gefunden werden headingViewPathogenTestResult = Erregertestergebnis +headingViewPrescription = Verschreibung anzeigen headingViewAdditionalTest = Zusätzliche Testergebnisse +headingViewClinicalVisit = Klinische Bewertung ansehen headingViewSurveillanceReport = Meldungsübersicht headingViewTask = Aufgabe anzeigen +headingViewTreatment = Behandlung anzeigen +headingViewVaccination = Impfung anzeigen headingViewVisit = Nachverfolgungsübersicht headingVisits = Anrufe headingVisitsDeleted = Anrufe gelöscht @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Anfrage widerrufen headingSormasToSormasCantShareContactWithoutCase=Kontakt kann nicht geteilt werden headingSormasToSormasCanAcceptContactsWithoutCase=Kontakt(e) können nicht übernommen werden headingSormasToSormasDuplicateDetection = Potentielle Duplikate erkannt +headingSormasToSormasShareRequestNotFound = Freigabeanfrage nicht gefunden headingShareRequestDetails=Details der Anfrage headingShareRequestCases=Fälle headingShareRequestContacts=Kontakte @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Nach einer anderen Person suchen infoTasksWithMultipleJurisdictionsSelected = Sie haben Aufgaben ausgewählt, die mit verschiedenen Zuständigkeitsbereichen verbunden sind oder die mit Daten verbunden sind, die keine Einrichtungs- oder Einreiseort-Information haben. Nur Benutzer auf %s Ebene oder höher können als zugewiesener Benutzer ausgewählt werden. infoNoAccessToPersonEntities = Sie haben nicht die notwendigen Benutzerrechte, um Einträge zu sehen, die mit Personen verbunden sind. infoDashboardFinalLaboratoryResult = Wenn ein Fall mehrere Proben hat, wird nur das Endergebnis der Probe mit dem neuesten Proben Datum berücksichtigt. +infoBulkProcess = %d ausgewählte Einträge werden derzeit verarbeitet. Dies kann eine Weile dauern. Der Fortschritt wird für jede 20 Einträge aktualisiert, die bearbeitet wurden. +infoBulkProcessFinished = Alle ausgewählten Einträge wurden verarbeitet\!
Sie können nun dieses Fenster schließen. +infoBulkProcessFinishedWithSkips = Massenverarbeitung wurde erfolgreich abgeschlossen\!
Einige der ausgewählten Einträge konnten jedoch nicht verarbeitet werden, wahrscheinlich weil sie außerhalb Ihrer Gerichtsbarkeit waren oder bereits archiviert wurden. +infoBulkProcessCancelled = Massenverarbeitung wurde abgebrochen\!
Alle ausgewählten Einträge bis zu diesem Punkt verarbeitet. Sie können dieses Fenster nun schließen. Alle noch nicht bearbeiteten Einträge werden weiterhin ausgewählt. +infoBulkUnresponsiveWindowHint = Tipp\: Wenn der Fortschrittsbalken nicht reagiert und nach einer Weile kein Fortschritt sichtbar ist versuchen Sie auf dieses Popup-Fenster zu klicken oder die Größe Ihres Browserfensters zu verändern. # Messages messageActionOutsideJurisdictionDeletionDenied = Die Aktion außerhalb der Zuständigkeit des Benutzers kann nicht gelöscht werden @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s Ereignisse nicht gelöscht. Event Ids nicht ge messageEventsNotDeletedReason = Keine Ereignisse, die verlinkte Teilnehmer enthalten, werden gelöscht. Bitte entfernen Sie die Ereignisteilnehmer aus dem Ereignis, um sie löschen zu können. messageCountEventsNotDeletedExternalSurveillanceTool=%s Ereignisse, die aufgrund der Kommunikation mit der Meldesoftware nicht gelöscht wurden. Nicht gelöschte Ereignis-Ids\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Einige Ereignisse wurden nicht gelöscht, weil die Kommunikation mit der Meldesoftware fehlgeschlagen ist. -messageEventsEdited = Alle Ereignisse wurden bearbeitet -messageEventsEditedExceptArchived = %s Ereignisse wurden erfolgreich bearbeitet. Einige Ereignisse konnten nicht bearbeitet werden, da sie in einem anderen Zuständigkeitsbereich liegen oder bereits abgeschlossen wurden. messageExportFailed = Es gab einen Fehler beim Export der Daten. Bitte kontaktieren Sie einen Administrator und informieren Sie ihn über dieses Problem. messageExportConfigurationDeleted = Exporteinstellung gelöscht messageExportConfigurationSaved = Exporteinstellung gespeichert @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = Sie müssen zwei Personen zum Zusammenfü messageAutomaticDeletionStarted = Automatisches Löschen wurde gestartet und wird im Hintergrund ausgeführt. Bitte beachten Sie, dass dieser Prozess je nach Anzahl der zu löschenden Daten einige Zeit in Anspruch nehmen kann. messageUserRoleUnusableForLogin = Benutzer mit nur dieser Rolle können sich nicht anmelden, da die Rolle weder Zugang Sormas UI noch Zugang Sormas REST Rechte hat messageUserRoleHasNoRights = Diese Benutzerrolle hat keine Rechte. Bitte wählen Sie mindestens ein Recht aus. -messageBulkOperationEntryLimitReached = Die maximale Anzahl an Einträgen, die gleichzeitig bearbeitet werden können, wurde erreicht (%s). %s Einträge wurden bisher verarbeitet und es bleiben noch %s Einträge zu verarbeiten. Möchten Sie den Vorgang fortsetzen?

Wenn Sie dies nicht wünschen, wird das vorherige Verzeichnis aufgerufen, in dem die noch nicht bearbeiteten Einträge ausgewählt sind. -messageBulkOperationTimeLimitReached = Die maximale Anzahl an Einträgen, die gleichzeitig bearbeitet werden können, wurde erreicht (%s). %s Einträge wurden bisher verarbeitet und es bleiben noch %s Einträge zu verarbeiten. Möchten Sie den Vorgang fortsetzen?

Wenn Sie dies nicht wünschen, wird das vorherige Verzeichnis aufgerufen, in dem die noch nicht bearbeiteten Einträge ausgewählt sind. messageEntriesEditedExceptArchived = %s Einträge wurden erfolgreich bearbeitet. Einige Einträge konnten nicht bearbeitet werden, da sie in einem anderen Zuständigkeitsbereich liegen oder bereits abgeschlossen wurden. messageEntriesEdited = Alle Entitäten wurden bearbeitet diff --git a/sormas-api/src/main/resources/strings_en-AF.properties b/sormas-api/src/main/resources/strings_en-AF.properties index cfefc086638..ad7bd972c80 100644 --- a/sormas-api/src/main/resources/strings_en-AF.properties +++ b/sormas-api/src/main/resources/strings_en-AF.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = This message contains corrections to a p confirmationVaccinationStatusUpdate = Deleting this vaccination has lead to at least one case no longer having a valid vaccination. Do you want to remove the vaccination status from all affected cases? confirmExternalMessageCorrectionThrough = No other new or changed information could automatically be determined from the message. Do you want to manually add or edit more information? confirmationDeleteCaseContacts = Do you also want to delete all contacts of this case? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=Entity was automatically deleted @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = If you want to share thi errorSormasToSormasAcceptContactsWithoutCaseShared = The contact %s cannot be accepted, because it was sent without a case. Please reject the contact and ask the source system to send the linked case first. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = The contact %s cannot be accepted, because the contact belongs to a case that has not yet been accepted. Please accept the linked case first.
It is shared within the request %s. errorSormasToSormasExistingPendingRequest = There is already a pending request to the same organization. Please revoke it before sending a new one. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = Quarantine can only be issued for cases, contacts, event participants and travel entries. errorQuarantineBulkOnlySupportedEntities = Bulk quarantine can only be issued for cases, contacts, event participants. errorCreatingTemplateDirectory = Could not create template directory. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = This immunization is not editable any more errorForbidden = Access to the specified resource has been forbidden. Please contact your supervisor or administrator and inform them about it errorNoRightsForChangingField = You have no rights for changing %s errorNoRightsForChangingMultipleFields = You have no rights for changing %s and related fields +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Cannot delete user role, because the following users would remain without a user role\:

%s

Please give them a different role and re-try to delete this one. errorSurveillanceReportNotEditable = This report is not editable any more @@ -505,6 +508,7 @@ headingEditPrescription = Edit prescription headingEditTask = Edit task headingEditTreatment = Edit treatment headingEditUser = Edit user +headingEditVaccination = Edit vaccination headingEditVisit = Edit visit headingEditCountry = Edit country headingEditContinent = Edit continent @@ -647,9 +651,13 @@ headingUserData = User data headingVaccination = Vaccination headingViewNotFound = The view could not be found headingViewPathogenTestResult = Pathogen test result +headingViewPrescription = View prescription headingViewAdditionalTest = Additional test results +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Report view headingViewTask = View task +headingViewTreatment = View treatment +headingViewVaccination = View vaccination headingViewVisit = Visit view headingVisits = Visits headingVisitsDeleted = Visits deleted @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Revoke share request headingSormasToSormasCantShareContactWithoutCase=Can not share contact headingSormasToSormasCanAcceptContactsWithoutCase=Can not accept contact(s) headingSormasToSormasDuplicateDetection = Potential duplicates detected +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Share request details headingShareRequestCases=Cases headingShareRequestContacts=Contacts @@ -964,7 +973,7 @@ infoUserSyncProcess = %d users are being synced to the External Authentication P infoNoSubordinateEvents=No subordinate events infoNoSuperordinateEvent=No superordinate event infoNoEventGroups=No event groups -infoMergeFiltersHint = Calculating and displaying potential duplicates may take a lot of time under specific circumstances. It is recommended to use the filters on top of this view to reduce the number of rows that have to be compared at the same time, e.g. by choosing a narrow creation date interval and a low result count limit. If the potential duplicates are loading fast, extending these values should be safe.

In order to avoid performance issues when entering this view, potential duplicates are only loaded once you click on "Confirm Filters". +infoMergeFiltersHint = Calculating and displaying potential duplicate cases is a very complex task and can require a lot of time. It is strongly recommended to adjust the filters on top of this view to reduce the number of cases that are detected at the same time, e.g. by increasing the lower threshold of the "Creation date" filter, or by selecting thresholds for the "Report or Onset Date".

When you see this hint, the loading of duplicates has been temporarily blocked to make sure that you can adjust the filters. Clicking on "Confirm Filters" after doing so will bring up the list of potential duplicates. infoPlaceOfStayInHospital = Please select a hospital as the place of stay. If the case is not currently admitted to a hospital as an inpatient, please document hospitalizations under previous hospitalizations. infoMoreDetailsAboutHospitalization = For adding more details about the hospitalization, go to the hospitalization tab. infoCountryNotEditableEventParticipantsWithoutJurisdiction = Changing the country is not permitted because at least one event participant in this event does not have a responsible region and/or responsible district set. @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Search for another person infoTasksWithMultipleJurisdictionsSelected = You have selected tasks connected to different jurisdictions, or that are connected to data that does not have facility or point of entry information. Only users on %s level or above will be selectable as assignees. infoNoAccessToPersonEntities = You don't have the necessary user rights to view any entries associated with persons. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s events not deleted. Event Ids not deleted\: %s messageEventsNotDeletedReason = No events that contain event participants linked will be deleted. Please remove the events participants from the event in order to be able to delete it. messageCountEventsNotDeletedExternalSurveillanceTool=%s events not deleted due to the reporting tool communication. Event Ids not deleted\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Some events were not deleted because the communication with the reporting tool failed. -messageEventsEdited = All events have been edited -messageEventsEditedExceptArchived = %s events have been successfully edited. Some of the events could not be edited because they are in a different jurisdiction or were already archived. messageExportFailed = There was an error preventing the data to be exported. Please contact an admin and inform them about this issue. messageExportConfigurationDeleted = Export configuration deleted messageExportConfigurationSaved = Export configuration saved @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = You need to select two persons for merge\ messageAutomaticDeletionStarted = Automatic deletion has been started and will be executed in the background. Please note that, depending on the amount of data that is deleted, this process can take some time. messageUserRoleUnusableForLogin = Users with only this role will not be able to login because the role does not have Access Sormas UI nor Access Sormas REST right messageUserRoleHasNoRights = This user role has no rights. Please select at least one right. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited diff --git a/sormas-api/src/main/resources/strings_en-GH.properties b/sormas-api/src/main/resources/strings_en-GH.properties index f0165fadafb..3acbb7eb4a5 100644 --- a/sormas-api/src/main/resources/strings_en-GH.properties +++ b/sormas-api/src/main/resources/strings_en-GH.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = This message contains corrections to a p confirmationVaccinationStatusUpdate = Deleting this vaccination has lead to at least one case no longer having a valid vaccination. Do you want to remove the vaccination status from all affected cases? confirmExternalMessageCorrectionThrough = No other new or changed information could automatically be determined from the message. Do you want to manually add or edit more information? confirmationDeleteCaseContacts = Do you also want to delete all contacts of this case? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=Entity was automatically deleted @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = If you want to share thi errorSormasToSormasAcceptContactsWithoutCaseShared = The contact %s cannot be accepted, because it was sent without a case. Please reject the contact and ask the source system to send the linked case first. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = The contact %s cannot be accepted, because the contact belongs to a case that has not yet been accepted. Please accept the linked case first.
It is shared within the request %s. errorSormasToSormasExistingPendingRequest = There is already a pending request to the same organization. Please revoke it before sending a new one. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = Quarantine can only be issued for cases, contacts, event participants and travel entries. errorQuarantineBulkOnlySupportedEntities = Bulk quarantine can only be issued for cases, contacts, event participants. errorCreatingTemplateDirectory = Could not create template directory. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = This immunization is not editable any more errorForbidden = Access to the specified resource has been forbidden. Please contact your supervisor or administrator and inform them about it errorNoRightsForChangingField = You have no rights for changing %s errorNoRightsForChangingMultipleFields = You have no rights for changing %s and related fields +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Cannot delete user role, because the following users would remain without a user role\:

%s

Please give them a different role and re-try to delete this one. errorSurveillanceReportNotEditable = This report is not editable any more @@ -505,6 +508,7 @@ headingEditPrescription = Edit prescription headingEditTask = Edit task headingEditTreatment = Edit treatment headingEditUser = Edit user +headingEditVaccination = Edit vaccination headingEditVisit = Edit visit headingEditCountry = Edit country headingEditContinent = Edit continent @@ -647,9 +651,13 @@ headingUserData = User data headingVaccination = Vaccination headingViewNotFound = The view could not be found headingViewPathogenTestResult = Pathogen test result +headingViewPrescription = View prescription headingViewAdditionalTest = Additional test results +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Report view headingViewTask = View task +headingViewTreatment = View treatment +headingViewVaccination = View vaccination headingViewVisit = Visit view headingVisits = Visits headingVisitsDeleted = Visits deleted @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Revoke share request headingSormasToSormasCantShareContactWithoutCase=Can not share contact headingSormasToSormasCanAcceptContactsWithoutCase=Can not accept contact(s) headingSormasToSormasDuplicateDetection = Potential duplicates detected +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Share request details headingShareRequestCases=Cases headingShareRequestContacts=Contacts @@ -964,7 +973,7 @@ infoUserSyncProcess = %d users are being synced to the External Authentication P infoNoSubordinateEvents=No subordinate events infoNoSuperordinateEvent=No superordinate event infoNoEventGroups=No event groups -infoMergeFiltersHint = Calculating and displaying potential duplicates may take a lot of time under specific circumstances. It is recommended to use the filters on top of this view to reduce the number of rows that have to be compared at the same time, e.g. by choosing a narrow creation date interval and a low result count limit. If the potential duplicates are loading fast, extending these values should be safe.

In order to avoid performance issues when entering this view, potential duplicates are only loaded once you click on "Confirm Filters". +infoMergeFiltersHint = Calculating and displaying potential duplicate cases is a very complex task and can require a lot of time. It is strongly recommended to adjust the filters on top of this view to reduce the number of cases that are detected at the same time, e.g. by increasing the lower threshold of the "Creation date" filter, or by selecting thresholds for the "Report or Onset Date".

When you see this hint, the loading of duplicates has been temporarily blocked to make sure that you can adjust the filters. Clicking on "Confirm Filters" after doing so will bring up the list of potential duplicates. infoPlaceOfStayInHospital = Please select a hospital as the place of stay. If the case is not currently admitted to a hospital as an inpatient, please document hospitalizations under previous hospitalizations. infoMoreDetailsAboutHospitalization = For adding more details about the hospitalization, go to the hospitalization tab. infoCountryNotEditableEventParticipantsWithoutJurisdiction = Changing the country is not permitted because at least one event participant in this event does not have a responsible region and/or responsible district set. @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Search for another person infoTasksWithMultipleJurisdictionsSelected = You have selected tasks connected to different jurisdictions, or that are connected to data that does not have facility or point of entry information. Only users on %s level or above will be selectable as assignees. infoNoAccessToPersonEntities = You don't have the necessary user rights to view any entries associated with persons. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s events not deleted. Event Ids not deleted\: %s messageEventsNotDeletedReason = No events that contain event participants linked will be deleted. Please remove the events participants from the event in order to be able to delete it. messageCountEventsNotDeletedExternalSurveillanceTool=%s events not deleted due to the reporting tool communication. Event Ids not deleted\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Some events were not deleted because the communication with the reporting tool failed. -messageEventsEdited = All events have been edited -messageEventsEditedExceptArchived = %s events have been successfully edited. Some of the events could not be edited because they are in a different jurisdiction or were already archived. messageExportFailed = There was an error preventing the data to be exported. Please contact an admin and inform them about this issue. messageExportConfigurationDeleted = Export configuration deleted messageExportConfigurationSaved = Export configuration saved @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = You need to select two persons for merge\ messageAutomaticDeletionStarted = Automatic deletion has been started and will be executed in the background. Please note that, depending on the amount of data that is deleted, this process can take some time. messageUserRoleUnusableForLogin = Users with only this role will not be able to login because the role does not have Access Sormas UI nor Access Sormas REST right messageUserRoleHasNoRights = This user role has no rights. Please select at least one right. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited diff --git a/sormas-api/src/main/resources/strings_en-NG.properties b/sormas-api/src/main/resources/strings_en-NG.properties index bd13aebbfa7..e10275c50f2 100644 --- a/sormas-api/src/main/resources/strings_en-NG.properties +++ b/sormas-api/src/main/resources/strings_en-NG.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = This message contains corrections to a p confirmationVaccinationStatusUpdate = Deleting this vaccination has lead to at least one case no longer having a valid vaccination. Do you want to remove the vaccination status from all affected cases? confirmExternalMessageCorrectionThrough = No other new or changed information could automatically be determined from the message. Do you want to manually add or edit more information? confirmationDeleteCaseContacts = Do you also want to delete all contacts of this case? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=Entity was automatically deleted @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = If you want to share thi errorSormasToSormasAcceptContactsWithoutCaseShared = The contact %s cannot be accepted, because it was sent without a case. Please reject the contact and ask the source system to send the linked case first. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = The contact %s cannot be accepted, because the contact belongs to a case that has not yet been accepted. Please accept the linked case first.
It is shared within the request %s. errorSormasToSormasExistingPendingRequest = There is already a pending request to the same organization. Please revoke it before sending a new one. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = Quarantine can only be issued for cases, contacts, event participants and travel entries. errorQuarantineBulkOnlySupportedEntities = Bulk quarantine can only be issued for cases, contacts, event participants. errorCreatingTemplateDirectory = Could not create template directory. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = This immunization is not editable any more errorForbidden = Access to the specified resource has been forbidden. Please contact your supervisor or administrator and inform them about it errorNoRightsForChangingField = You have no rights for changing %s errorNoRightsForChangingMultipleFields = You have no rights for changing %s and related fields +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Cannot delete user role, because the following users would remain without a user role\:

%s

Please give them a different role and re-try to delete this one. errorSurveillanceReportNotEditable = This report is not editable any more @@ -505,6 +508,7 @@ headingEditPrescription = Edit prescription headingEditTask = Edit task headingEditTreatment = Edit treatment headingEditUser = Edit user +headingEditVaccination = Edit vaccination headingEditVisit = Edit visit headingEditCountry = Edit country headingEditContinent = Edit continent @@ -647,9 +651,13 @@ headingUserData = User data headingVaccination = Vaccination headingViewNotFound = The view could not be found headingViewPathogenTestResult = Pathogen test result +headingViewPrescription = View prescription headingViewAdditionalTest = Additional test results +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Report view headingViewTask = View task +headingViewTreatment = View treatment +headingViewVaccination = View vaccination headingViewVisit = Visit view headingVisits = Visits headingVisitsDeleted = Visits deleted @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Revoke share request headingSormasToSormasCantShareContactWithoutCase=Can not share contact headingSormasToSormasCanAcceptContactsWithoutCase=Can not accept contact(s) headingSormasToSormasDuplicateDetection = Potential duplicates detected +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Share request details headingShareRequestCases=Cases headingShareRequestContacts=Contacts @@ -964,7 +973,7 @@ infoUserSyncProcess = %d users are being synced to the External Authentication P infoNoSubordinateEvents=No subordinate events infoNoSuperordinateEvent=No superordinate event infoNoEventGroups=No event groups -infoMergeFiltersHint = Calculating and displaying potential duplicates may take a lot of time under specific circumstances. It is recommended to use the filters on top of this view to reduce the number of rows that have to be compared at the same time, e.g. by choosing a narrow creation date interval and a low result count limit. If the potential duplicates are loading fast, extending these values should be safe.

In order to avoid performance issues when entering this view, potential duplicates are only loaded once you click on "Confirm Filters". +infoMergeFiltersHint = Calculating and displaying potential duplicate cases is a very complex task and can require a lot of time. It is strongly recommended to adjust the filters on top of this view to reduce the number of cases that are detected at the same time, e.g. by increasing the lower threshold of the "Creation date" filter, or by selecting thresholds for the "Report or Onset Date".

When you see this hint, the loading of duplicates has been temporarily blocked to make sure that you can adjust the filters. Clicking on "Confirm Filters" after doing so will bring up the list of potential duplicates. infoPlaceOfStayInHospital = Please select a hospital as the place of stay. If the case is not currently admitted to a hospital as an inpatient, please document hospitalizations under previous hospitalizations. infoMoreDetailsAboutHospitalization = For adding more details about the hospitalization, go to the hospitalization tab. infoCountryNotEditableEventParticipantsWithoutJurisdiction = Changing the country is not permitted because at least one event participant in this event does not have a responsible region and/or responsible district set. @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Search for another person infoTasksWithMultipleJurisdictionsSelected = You have selected tasks connected to different jurisdictions, or that are connected to data that does not have facility or point of entry information. Only users on %s level or above will be selectable as assignees. infoNoAccessToPersonEntities = You don't have the necessary user rights to view any entries associated with persons. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s events not deleted. Event Ids not deleted\: %s messageEventsNotDeletedReason = No events that contain event participants linked will be deleted. Please remove the events participants from the event in order to be able to delete it. messageCountEventsNotDeletedExternalSurveillanceTool=%s events not deleted due to the reporting tool communication. Event Ids not deleted\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Some events were not deleted because the communication with the reporting tool failed. -messageEventsEdited = All events have been edited -messageEventsEditedExceptArchived = %s events have been successfully edited. Some of the events could not be edited because they are in a different jurisdiction or were already archived. messageExportFailed = There was an error preventing the data to be exported. Please contact an admin and inform them about this issue. messageExportConfigurationDeleted = Export configuration deleted messageExportConfigurationSaved = Export configuration saved @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = You need to select two persons for merge\ messageAutomaticDeletionStarted = Automatic deletion has been started and will be executed in the background. Please note that, depending on the amount of data that is deleted, this process can take some time. messageUserRoleUnusableForLogin = Users with only this role will not be able to login because the role does not have Access Sormas UI nor Access Sormas REST right messageUserRoleHasNoRights = This user role has no rights. Please select at least one right. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited diff --git a/sormas-api/src/main/resources/strings_es-CU.properties b/sormas-api/src/main/resources/strings_es-CU.properties index a4dd8134cdf..53e866a16ca 100644 --- a/sormas-api/src/main/resources/strings_es-CU.properties +++ b/sormas-api/src/main/resources/strings_es-CU.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = Este mensaje contiene correcciones a uno confirmationVaccinationStatusUpdate = La eliminación de esta vacuna ha llevado a que al menos un caso ya no tenga una vacunación válida. ¿Desea eliminar el estado de vacunación de todos los casos afectados? confirmExternalMessageCorrectionThrough = No se pudo determinar automáticamente ninguna otra información nueva o modificada a partir del mensaje. ¿Desea añadir o editar manualmente más información? confirmationDeleteCaseContacts = ¿Desea también eliminar todos los contactos de este caso? +confirmationCancelBulkAction = ¿Realmente desea cancelar la operación masiva? La operación se detendrá después que el lote actual haya sido procesado. # Entities entityAutomaticSoftDeletion=La entidad fue eliminada automáticamente @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = Si desea compartir este errorSormasToSormasAcceptContactsWithoutCaseShared = El contacto %s no se puede aceptar, porque se envió sin un caso. Por favor, rechace el contacto y pida al sistema de origen que envíe el caso vinculado primero. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = El contacto %s no se puede aceptar, porque el contacto pertenece a un caso que aún no se ha aceptado. Por favor, acepte el caso vinculado primero.
Se comparte dentro de la solicitud %s. errorSormasToSormasExistingPendingRequest = Ya hay una solicitud pendiente a la misma organización. Por favor, revóquela antes de enviar una nueva. +errorSormasToSormasSharequestNotFound = No se pudo encontrar la solicitud de compartición. Ha sido revocada por el sistema de origen o ha sido rechazada por otra persona. errorQuarantineOnlySupportedEntities = La cuarentena sólo se puede ordenar para casos, contactos, participantes de eventos y entradas de viaje. errorQuarantineBulkOnlySupportedEntities = La cuarentena masiva sólo se puede ordenar para casos, contactos, participantes de eventos. errorCreatingTemplateDirectory = No se pudo crear el directorio de plantillas. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = Esta inmunización ya no es editable errorForbidden = Se prohibió el acceso al recurso especificado. Por favor, contacte a su supervisor o administrador e infórmele al respecto errorNoRightsForChangingField = No tiene permisos para cambiar %s errorNoRightsForChangingMultipleFields = No tiene permisos para cambiar %s y campos relacionados +errorNotFound = No se encontró la entidad solicitada errorDeleteUserRoleUsedAlone = No se puede eliminar el rol de usuario, porque los siguientes usuarios quedarían sin un rol de usuario\:

%s

Por favor, asígneles un rol diferente y vuelva a intentar eliminar este. errorSurveillanceReportNotEditable = Este informe ya no es editable @@ -505,6 +508,7 @@ headingEditPrescription = Editar prescripción headingEditTask = Editar tarea headingEditTreatment = Editar tratamiento headingEditUser = Editar usuario +headingEditVaccination = Editar vacunación headingEditVisit = Editar visita headingEditCountry = Editar país headingEditContinent = Editar continente @@ -647,9 +651,13 @@ headingUserData = Datos de usuario headingVaccination = Vacunación headingViewNotFound = La vista no se pudo encontrar headingViewPathogenTestResult = Resultado de la prueba de patógeno +headingViewPrescription = Ver prescripción headingViewAdditionalTest = Resultados de pruebas adicionales +headingViewClinicalVisit = Ver evaluación clínica headingViewSurveillanceReport = Vista de informe headingViewTask = Ver tarea +headingViewTreatment = Ver tratamiento +headingViewVaccination = Ver vacunación headingViewVisit = Vista de visita headingVisits = Visitas headingVisitsDeleted = Visitas eliminadas @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Revocar solicitud de compartir headingSormasToSormasCantShareContactWithoutCase=No se puede compartir el contacto headingSormasToSormasCanAcceptContactsWithoutCase=No se puede aceptar el contacto(s) headingSormasToSormasDuplicateDetection = Se detectaron posibles duplicados +headingSormasToSormasShareRequestNotFound = Solicitud de compartición no encontrada headingShareRequestDetails=Detalles de la solicitud de compartir headingShareRequestCases=Casos headingShareRequestContacts=Contactos @@ -964,7 +973,7 @@ infoUserSyncProcess = %d usuarios están siendo sincronizados con el Proveedor d infoNoSubordinateEvents=No hay eventos subordinados infoNoSuperordinateEvent=No hay evento superior infoNoEventGroups=No hay grupos de eventos -infoMergeFiltersHint = Calculating and displaying potential duplicates may take a lot of time under specific circumstances. It is recommended to use the filters on top of this view to reduce the number of rows that have to be compared at the same time, e.g. by choosing a narrow creation date interval and a low result count limit. If the potential duplicates are loading fast, extending these values should be safe.

In order to avoid performance issues when entering this view, potential duplicates are only loaded once you click on "Confirm Filters". +infoMergeFiltersHint = Calcular y mostrar posibles casos duplicados es una tarea muy compleja y puede requerir mucho tiempo. Se recomienda encarecidamente ajustar los filtros en la parte superior de esta vista para reducir el número de casos que se detectan simultáneamente, por ejemplo, incrementando el umbral inferior del filtro "Fecha de creación", o seleccionando umbrales para la "Fecha de inicio de síntomas o de reporte".

Cuando vea este texto, la carga de duplicados se habrá bloqueado temporalmente para asegurar que pueda ajustar los filtros. Después de hacerlo, un clic en "Confirmar filtros" mostrará la lista de posibles duplicados. infoPlaceOfStayInHospital = Por favor seleccione un hospital como lugar de estancia. Si el caso no está admitido actualmente en un hospital como paciente ingresado, por favor documente sus hospitalizaciones bajo hospitalizaciones previas. infoMoreDetailsAboutHospitalization = Para agregar más detalles sobre la hospitalización, vaya a la pestaña de hospitalización. infoCountryNotEditableEventParticipantsWithoutJurisdiction = No se permite cambiar el país porque al menos un participante de este evento no tiene especificada una provincia responsable y/o municipio responsable. @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Buscar otra persona infoTasksWithMultipleJurisdictionsSelected = Ha seleccionado tareas conectadas a diferentes jurisdicciones, o que están conectadas a datos que no tienen información de centro de salud o punto de entrada. Sólo los usuarios en el nivel %s o superior podrán ser seleccionados como responsables. infoNoAccessToPersonEntities = No tiene los derechos de usuario necesarios para ver entradas asociadas con personas. infoDashboardFinalLaboratoryResult = Cuando un caso tiene múltiples muestras, sólo se considera el resultado final de laboratorio de la muestra con la fecha de recolección de muestra más reciente. +infoBulkProcess = Se están procesando %d entradas seleccionadas. Esto puede tardar un tiempo. El progreso se actualizará por cada 20 entradas que hayan sido procesadas. +infoBulkProcessFinished = ¡Todas las entradas seleccionadas han sido procesadas\!
Ahora puede cerrar esta ventana. +infoBulkProcessFinishedWithSkips = ¡El proceso masivo se completó con éxito\!
Sin embargo, algunas de las entradas seleccionadas no se pudieron procesar, probablemente por estar fuera de su jurisdicción o ya archivadas. +infoBulkProcessCancelled = ¡El proceso masivo se canceló\!
Todas las entradas seleccionadas hasta este punto han sido procesadas. Ahora puede cerrar esta ventana. Todas las entradas aún no procesadas seguirán seleccionadas. +infoBulkUnresponsiveWindowHint = Sugerencia\: Si la barra de progreso parece no responder y no hay progreso visible por algún tiempo, pruebe hacer clic en esta ventana emergente o cambiar el tamaño de la ventana de su navegador. # Messages messageActionOutsideJurisdictionDeletionDenied = La acción fuera de la jurisdicción del usuario no puede ser eliminada @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s eventos no eliminados. Ids de eventos no elimi messageEventsNotDeletedReason = No se eliminarán eventos que tengan participantes vinculados. Por favor, elimine los participantes del evento para poder eliminarlo. messageCountEventsNotDeletedExternalSurveillanceTool=%s eventos no eliminados debido a la comunicación con la herramienta de reporte. Ids de eventos no eliminados\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Algunos eventos no fueron eliminados porque la comunicación con la herramienta de reporte falló. -messageEventsEdited = Todos los eventos fueron editados -messageEventsEditedExceptArchived = %s eventos fueron editados con éxito. Algunos de los eventos no pudieron ser editados porque están en una jurisdicción diferente o ya estaban archivados. messageExportFailed = Un error impidió exportar los datos. Por favor, contacte a un administrador e infórmele sobre este problema. messageExportConfigurationDeleted = Configuración de exportación eliminada messageExportConfigurationSaved = Configuración de exportación guardada @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = ¡Debe seleccionar dos personas para comb messageAutomaticDeletionStarted = La eliminación automática se ha iniciado y se ejecutará en segundo plano. Tenga en cuenta que, dependiendo de la cantidad de datos que se eliminen, este proceso puede tardar algún tiempo. messageUserRoleUnusableForLogin = Los usuarios que sólo tengan este rol no podrán iniciar sesión porque el rol no tiene derecho de Acceso a Sormas UI ni derecho de Acceso a Sormas REST messageUserRoleHasNoRights = Este rol de usuario no tiene derechos. Por favor, seleccione al menos un derecho. -messageBulkOperationEntryLimitReached = Se ha alcanzado la cantidad máxima de entradas que pueden ser procesadas al mismo tiempo (%s). %s entradas han sido procesadas hasta ahora y todavía quedan %s entradas por procesar. ¿Desea continuar la operación?

Si decide no hacerlo, será retornado al directorio con las entradas no procesadas aún seleccionadas. -messageBulkOperationTimeLimitReached = Se ha detenido el procesamiento masivo porque se ha alcanzado el tiempo de ejecución máximo (%s segundos). %s entradas han sido procesadas hasta ahora y todavía quedan %s entradas por procesar. ¿Desea continuar la operación?

Si decide no hacerlo, será retornado al directorio con las entradas no procesadas aún seleccionadas. messageEntriesEditedExceptArchived = %s entradas fueron editadas con éxito. Algunas de las entradas no pudieron ser editadas porque están en una jurisdicción diferente o ya estaban archivadas. messageEntriesEdited = Todas las entradas fueron editadas diff --git a/sormas-api/src/main/resources/strings_es-ES.properties b/sormas-api/src/main/resources/strings_es-ES.properties index 192a5ad00f4..1314823c0cf 100644 --- a/sormas-api/src/main/resources/strings_es-ES.properties +++ b/sormas-api/src/main/resources/strings_es-ES.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = This message contains corrections to a p confirmationVaccinationStatusUpdate = Deleting this vaccination has lead to at least one case no longer having a valid vaccination. Do you want to remove the vaccination status from all affected cases? confirmExternalMessageCorrectionThrough = No other new or changed information could automatically be determined from the message. Do you want to manually add or edit more information? confirmationDeleteCaseContacts = Do you also want to delete all contacts of this case? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=Entity was automatically deleted @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = If you want to share thi errorSormasToSormasAcceptContactsWithoutCaseShared = The contact %s cannot be accepted, because it was sent without a case. Please reject the contact and ask the source system to send the linked case first. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = The contact %s cannot be accepted, because the contact belongs to a case that has not yet been accepted. Please accept the linked case first.
It is shared within the request %s. errorSormasToSormasExistingPendingRequest = There is already a pending request to the same organization. Please revoke it before sending a new one. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = Quarantine can only be issued for cases, contacts, event participants and travel entries. errorQuarantineBulkOnlySupportedEntities = Bulk quarantine can only be issued for cases, contacts, event participants. errorCreatingTemplateDirectory = Could not create template directory. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = This immunization is not editable any more errorForbidden = Access to the specified resource has been forbidden. Please contact your supervisor or administrator and inform them about it errorNoRightsForChangingField = You have no rights for changing %s errorNoRightsForChangingMultipleFields = You have no rights for changing %s and related fields +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Cannot delete user role, because the following users would remain without a user role\:

%s

Please give them a different role and re-try to delete this one. errorSurveillanceReportNotEditable = This report is not editable any more @@ -505,6 +508,7 @@ headingEditPrescription = Edit prescription headingEditTask = Edit task headingEditTreatment = Edit treatment headingEditUser = Edit user +headingEditVaccination = Edit vaccination headingEditVisit = Edit visit headingEditCountry = Edit country headingEditContinent = Edit continent @@ -647,9 +651,13 @@ headingUserData = User data headingVaccination = Vaccination headingViewNotFound = The view could not be found headingViewPathogenTestResult = Pathogen test result +headingViewPrescription = View prescription headingViewAdditionalTest = Additional test results +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Report view headingViewTask = View task +headingViewTreatment = View treatment +headingViewVaccination = View vaccination headingViewVisit = Visit view headingVisits = Visits headingVisitsDeleted = Visits deleted @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Revoke share request headingSormasToSormasCantShareContactWithoutCase=Can not share contact headingSormasToSormasCanAcceptContactsWithoutCase=Can not accept contact(s) headingSormasToSormasDuplicateDetection = Potential duplicates detected +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Share request details headingShareRequestCases=Cases headingShareRequestContacts=Contacts @@ -964,7 +973,7 @@ infoUserSyncProcess = %d users are being synced to the External Authentication P infoNoSubordinateEvents=No subordinate events infoNoSuperordinateEvent=No superordinate event infoNoEventGroups=No event groups -infoMergeFiltersHint = Calculating and displaying potential duplicates may take a lot of time under specific circumstances. It is recommended to use the filters on top of this view to reduce the number of rows that have to be compared at the same time, e.g. by choosing a narrow creation date interval and a low result count limit. If the potential duplicates are loading fast, extending these values should be safe.

In order to avoid performance issues when entering this view, potential duplicates are only loaded once you click on "Confirm Filters". +infoMergeFiltersHint = Calculating and displaying potential duplicate cases is a very complex task and can require a lot of time. It is strongly recommended to adjust the filters on top of this view to reduce the number of cases that are detected at the same time, e.g. by increasing the lower threshold of the "Creation date" filter, or by selecting thresholds for the "Report or Onset Date".

When you see this hint, the loading of duplicates has been temporarily blocked to make sure that you can adjust the filters. Clicking on "Confirm Filters" after doing so will bring up the list of potential duplicates. infoPlaceOfStayInHospital = Please select a hospital as the place of stay. If the case is not currently admitted to a hospital as an inpatient, please document hospitalizations under previous hospitalizations. infoMoreDetailsAboutHospitalization = For adding more details about the hospitalization, go to the hospitalization tab. infoCountryNotEditableEventParticipantsWithoutJurisdiction = Changing the country is not permitted because at least one event participant in this event does not have a responsible region and/or responsible district set. @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Search for another person infoTasksWithMultipleJurisdictionsSelected = You have selected tasks connected to different jurisdictions, or that are connected to data that does not have facility or point of entry information. Only users on %s level or above will be selectable as assignees. infoNoAccessToPersonEntities = You don't have the necessary user rights to view any entries associated with persons. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s events not deleted. Event Ids not deleted\: %s messageEventsNotDeletedReason = No events that contain event participants linked will be deleted. Please remove the events participants from the event in order to be able to delete it. messageCountEventsNotDeletedExternalSurveillanceTool=%s events not deleted due to the reporting tool communication. Event Ids not deleted\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Some events were not deleted because the communication with the reporting tool failed. -messageEventsEdited = All events have been edited -messageEventsEditedExceptArchived = %s events have been successfully edited. Some of the events could not be edited because they are in a different jurisdiction or were already archived. messageExportFailed = There was an error preventing the data to be exported. Please contact an admin and inform them about this issue. messageExportConfigurationDeleted = Export configuration deleted messageExportConfigurationSaved = Export configuration saved @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = You need to select two persons for merge\ messageAutomaticDeletionStarted = Automatic deletion has been started and will be executed in the background. Please note that, depending on the amount of data that is deleted, this process can take some time. messageUserRoleUnusableForLogin = Users with only this role will not be able to login because the role does not have Access Sormas UI nor Access Sormas REST right messageUserRoleHasNoRights = This user role has no rights. Please select at least one right. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited diff --git a/sormas-api/src/main/resources/strings_fa-AF.properties b/sormas-api/src/main/resources/strings_fa-AF.properties index 192a5ad00f4..1314823c0cf 100644 --- a/sormas-api/src/main/resources/strings_fa-AF.properties +++ b/sormas-api/src/main/resources/strings_fa-AF.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = This message contains corrections to a p confirmationVaccinationStatusUpdate = Deleting this vaccination has lead to at least one case no longer having a valid vaccination. Do you want to remove the vaccination status from all affected cases? confirmExternalMessageCorrectionThrough = No other new or changed information could automatically be determined from the message. Do you want to manually add or edit more information? confirmationDeleteCaseContacts = Do you also want to delete all contacts of this case? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=Entity was automatically deleted @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = If you want to share thi errorSormasToSormasAcceptContactsWithoutCaseShared = The contact %s cannot be accepted, because it was sent without a case. Please reject the contact and ask the source system to send the linked case first. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = The contact %s cannot be accepted, because the contact belongs to a case that has not yet been accepted. Please accept the linked case first.
It is shared within the request %s. errorSormasToSormasExistingPendingRequest = There is already a pending request to the same organization. Please revoke it before sending a new one. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = Quarantine can only be issued for cases, contacts, event participants and travel entries. errorQuarantineBulkOnlySupportedEntities = Bulk quarantine can only be issued for cases, contacts, event participants. errorCreatingTemplateDirectory = Could not create template directory. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = This immunization is not editable any more errorForbidden = Access to the specified resource has been forbidden. Please contact your supervisor or administrator and inform them about it errorNoRightsForChangingField = You have no rights for changing %s errorNoRightsForChangingMultipleFields = You have no rights for changing %s and related fields +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Cannot delete user role, because the following users would remain without a user role\:

%s

Please give them a different role and re-try to delete this one. errorSurveillanceReportNotEditable = This report is not editable any more @@ -505,6 +508,7 @@ headingEditPrescription = Edit prescription headingEditTask = Edit task headingEditTreatment = Edit treatment headingEditUser = Edit user +headingEditVaccination = Edit vaccination headingEditVisit = Edit visit headingEditCountry = Edit country headingEditContinent = Edit continent @@ -647,9 +651,13 @@ headingUserData = User data headingVaccination = Vaccination headingViewNotFound = The view could not be found headingViewPathogenTestResult = Pathogen test result +headingViewPrescription = View prescription headingViewAdditionalTest = Additional test results +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Report view headingViewTask = View task +headingViewTreatment = View treatment +headingViewVaccination = View vaccination headingViewVisit = Visit view headingVisits = Visits headingVisitsDeleted = Visits deleted @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Revoke share request headingSormasToSormasCantShareContactWithoutCase=Can not share contact headingSormasToSormasCanAcceptContactsWithoutCase=Can not accept contact(s) headingSormasToSormasDuplicateDetection = Potential duplicates detected +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Share request details headingShareRequestCases=Cases headingShareRequestContacts=Contacts @@ -964,7 +973,7 @@ infoUserSyncProcess = %d users are being synced to the External Authentication P infoNoSubordinateEvents=No subordinate events infoNoSuperordinateEvent=No superordinate event infoNoEventGroups=No event groups -infoMergeFiltersHint = Calculating and displaying potential duplicates may take a lot of time under specific circumstances. It is recommended to use the filters on top of this view to reduce the number of rows that have to be compared at the same time, e.g. by choosing a narrow creation date interval and a low result count limit. If the potential duplicates are loading fast, extending these values should be safe.

In order to avoid performance issues when entering this view, potential duplicates are only loaded once you click on "Confirm Filters". +infoMergeFiltersHint = Calculating and displaying potential duplicate cases is a very complex task and can require a lot of time. It is strongly recommended to adjust the filters on top of this view to reduce the number of cases that are detected at the same time, e.g. by increasing the lower threshold of the "Creation date" filter, or by selecting thresholds for the "Report or Onset Date".

When you see this hint, the loading of duplicates has been temporarily blocked to make sure that you can adjust the filters. Clicking on "Confirm Filters" after doing so will bring up the list of potential duplicates. infoPlaceOfStayInHospital = Please select a hospital as the place of stay. If the case is not currently admitted to a hospital as an inpatient, please document hospitalizations under previous hospitalizations. infoMoreDetailsAboutHospitalization = For adding more details about the hospitalization, go to the hospitalization tab. infoCountryNotEditableEventParticipantsWithoutJurisdiction = Changing the country is not permitted because at least one event participant in this event does not have a responsible region and/or responsible district set. @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Search for another person infoTasksWithMultipleJurisdictionsSelected = You have selected tasks connected to different jurisdictions, or that are connected to data that does not have facility or point of entry information. Only users on %s level or above will be selectable as assignees. infoNoAccessToPersonEntities = You don't have the necessary user rights to view any entries associated with persons. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s events not deleted. Event Ids not deleted\: %s messageEventsNotDeletedReason = No events that contain event participants linked will be deleted. Please remove the events participants from the event in order to be able to delete it. messageCountEventsNotDeletedExternalSurveillanceTool=%s events not deleted due to the reporting tool communication. Event Ids not deleted\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Some events were not deleted because the communication with the reporting tool failed. -messageEventsEdited = All events have been edited -messageEventsEditedExceptArchived = %s events have been successfully edited. Some of the events could not be edited because they are in a different jurisdiction or were already archived. messageExportFailed = There was an error preventing the data to be exported. Please contact an admin and inform them about this issue. messageExportConfigurationDeleted = Export configuration deleted messageExportConfigurationSaved = Export configuration saved @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = You need to select two persons for merge\ messageAutomaticDeletionStarted = Automatic deletion has been started and will be executed in the background. Please note that, depending on the amount of data that is deleted, this process can take some time. messageUserRoleUnusableForLogin = Users with only this role will not be able to login because the role does not have Access Sormas UI nor Access Sormas REST right messageUserRoleHasNoRights = This user role has no rights. Please select at least one right. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited diff --git a/sormas-api/src/main/resources/strings_fi-FI.properties b/sormas-api/src/main/resources/strings_fi-FI.properties index 241d4826526..7328dfbee14 100644 --- a/sormas-api/src/main/resources/strings_fi-FI.properties +++ b/sormas-api/src/main/resources/strings_fi-FI.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = This message contains corrections to a p confirmationVaccinationStatusUpdate = Deleting this vaccination has lead to at least one case no longer having a valid vaccination. Do you want to remove the vaccination status from all affected cases? confirmExternalMessageCorrectionThrough = No other new or changed information could automatically be determined from the message. Do you want to manually add or edit more information? confirmationDeleteCaseContacts = Do you also want to delete all contacts of this case? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=Entity was automatically deleted @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = If you want to share thi errorSormasToSormasAcceptContactsWithoutCaseShared = The contact %s cannot be accepted, because it was sent without a case. Please reject the contact and ask the source system to send the linked case first. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = The contact %s cannot be accepted, because the contact belongs to a case that has not yet been accepted. Please accept the linked case first.
It is shared within the request %s. errorSormasToSormasExistingPendingRequest = There is already a pending request to the same organization. Please revoke it before sending a new one. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = Quarantine can only be issued for cases, contacts, event participants and travel entries. errorQuarantineBulkOnlySupportedEntities = Bulk quarantine can only be issued for cases, contacts, event participants. errorCreatingTemplateDirectory = Could not create template directory. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = This immunization is not editable any more errorForbidden = Access to the specified resource has been forbidden. Please contact your supervisor or administrator and inform them about it errorNoRightsForChangingField = You have no rights for changing %s errorNoRightsForChangingMultipleFields = You have no rights for changing %s and related fields +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Cannot delete user role, because the following users would remain without a user role\:

%s

Please give them a different role and re-try to delete this one. errorSurveillanceReportNotEditable = This report is not editable any more @@ -505,6 +508,7 @@ headingEditPrescription = Muokkaa lääkemääräystä headingEditTask = Muokkaa tehtävää headingEditTreatment = Muokkaa hoitoa headingEditUser = Muokkaa käyttäjää +headingEditVaccination = Edit vaccination headingEditVisit = Muokkaa käyntiä headingEditCountry = Edit country headingEditContinent = Edit continent @@ -647,9 +651,13 @@ headingUserData = Käyttäjätiedot headingVaccination = Vaccination headingViewNotFound = Näkymää ei löytynyt headingViewPathogenTestResult = Pathogen test result +headingViewPrescription = View prescription headingViewAdditionalTest = Additional test results +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Report view headingViewTask = View task +headingViewTreatment = View treatment +headingViewVaccination = View vaccination headingViewVisit = Visit view headingVisits = Käynnit headingVisitsDeleted = Käynnit poistettu @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Revoke share request headingSormasToSormasCantShareContactWithoutCase=Can not share contact headingSormasToSormasCanAcceptContactsWithoutCase=Can not accept contact(s) headingSormasToSormasDuplicateDetection = Potential duplicates detected +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Share request details headingShareRequestCases=Cases headingShareRequestContacts=Contacts @@ -964,7 +973,7 @@ infoUserSyncProcess = %d users are being synced to the External Authentication P infoNoSubordinateEvents=No subordinate events infoNoSuperordinateEvent=No superordinate event infoNoEventGroups=No event groups -infoMergeFiltersHint = Calculating and displaying potential duplicates may take a lot of time under specific circumstances. It is recommended to use the filters on top of this view to reduce the number of rows that have to be compared at the same time, e.g. by choosing a narrow creation date interval and a low result count limit. If the potential duplicates are loading fast, extending these values should be safe.

In order to avoid performance issues when entering this view, potential duplicates are only loaded once you click on "Confirm Filters". +infoMergeFiltersHint = Calculating and displaying potential duplicate cases is a very complex task and can require a lot of time. It is strongly recommended to adjust the filters on top of this view to reduce the number of cases that are detected at the same time, e.g. by increasing the lower threshold of the "Creation date" filter, or by selecting thresholds for the "Report or Onset Date".

When you see this hint, the loading of duplicates has been temporarily blocked to make sure that you can adjust the filters. Clicking on "Confirm Filters" after doing so will bring up the list of potential duplicates. infoPlaceOfStayInHospital = Please select a hospital as the place of stay. If the case is not currently admitted to a hospital as an inpatient, please document hospitalizations under previous hospitalizations. infoMoreDetailsAboutHospitalization = For adding more details about the hospitalization, go to the hospitalization tab. infoCountryNotEditableEventParticipantsWithoutJurisdiction = Changing the country is not permitted because at least one event participant in this event does not have a responsible region and/or responsible district set. @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Search for another person infoTasksWithMultipleJurisdictionsSelected = You have selected tasks connected to different jurisdictions, or that are connected to data that does not have facility or point of entry information. Only users on %s level or above will be selectable as assignees. infoNoAccessToPersonEntities = You don't have the necessary user rights to view any entries associated with persons. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s events not deleted. Event Ids not deleted\: %s messageEventsNotDeletedReason = No events that contain event participants linked will be deleted. Please remove the events participants from the event in order to be able to delete it. messageCountEventsNotDeletedExternalSurveillanceTool=%s events not deleted due to the reporting tool communication. Event Ids not deleted\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Some events were not deleted because the communication with the reporting tool failed. -messageEventsEdited = Kaikkia tapahtumia on muokattu -messageEventsEditedExceptArchived = %s events have been successfully edited. Some of the events could not be edited because they are in a different jurisdiction or were already archived. messageExportFailed = Kohdattiin ongelma, jonka takia tietoja ei saatu vietyä. Ota yhteyttä ylläpitoon ja kerro heille tästä ongelmasta. messageExportConfigurationDeleted = Vientiasetukset poistettu messageExportConfigurationSaved = Vientiasetukset tallennettu @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = You need to select two persons for merge\ messageAutomaticDeletionStarted = Automatic deletion has been started and will be executed in the background. Please note that, depending on the amount of data that is deleted, this process can take some time. messageUserRoleUnusableForLogin = Users with only this role will not be able to login because the role does not have Access Sormas UI nor Access Sormas REST right messageUserRoleHasNoRights = This user role has no rights. Please select at least one right. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited diff --git a/sormas-api/src/main/resources/strings_fil-PH.properties b/sormas-api/src/main/resources/strings_fil-PH.properties index 192a5ad00f4..1314823c0cf 100644 --- a/sormas-api/src/main/resources/strings_fil-PH.properties +++ b/sormas-api/src/main/resources/strings_fil-PH.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = This message contains corrections to a p confirmationVaccinationStatusUpdate = Deleting this vaccination has lead to at least one case no longer having a valid vaccination. Do you want to remove the vaccination status from all affected cases? confirmExternalMessageCorrectionThrough = No other new or changed information could automatically be determined from the message. Do you want to manually add or edit more information? confirmationDeleteCaseContacts = Do you also want to delete all contacts of this case? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=Entity was automatically deleted @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = If you want to share thi errorSormasToSormasAcceptContactsWithoutCaseShared = The contact %s cannot be accepted, because it was sent without a case. Please reject the contact and ask the source system to send the linked case first. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = The contact %s cannot be accepted, because the contact belongs to a case that has not yet been accepted. Please accept the linked case first.
It is shared within the request %s. errorSormasToSormasExistingPendingRequest = There is already a pending request to the same organization. Please revoke it before sending a new one. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = Quarantine can only be issued for cases, contacts, event participants and travel entries. errorQuarantineBulkOnlySupportedEntities = Bulk quarantine can only be issued for cases, contacts, event participants. errorCreatingTemplateDirectory = Could not create template directory. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = This immunization is not editable any more errorForbidden = Access to the specified resource has been forbidden. Please contact your supervisor or administrator and inform them about it errorNoRightsForChangingField = You have no rights for changing %s errorNoRightsForChangingMultipleFields = You have no rights for changing %s and related fields +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Cannot delete user role, because the following users would remain without a user role\:

%s

Please give them a different role and re-try to delete this one. errorSurveillanceReportNotEditable = This report is not editable any more @@ -505,6 +508,7 @@ headingEditPrescription = Edit prescription headingEditTask = Edit task headingEditTreatment = Edit treatment headingEditUser = Edit user +headingEditVaccination = Edit vaccination headingEditVisit = Edit visit headingEditCountry = Edit country headingEditContinent = Edit continent @@ -647,9 +651,13 @@ headingUserData = User data headingVaccination = Vaccination headingViewNotFound = The view could not be found headingViewPathogenTestResult = Pathogen test result +headingViewPrescription = View prescription headingViewAdditionalTest = Additional test results +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Report view headingViewTask = View task +headingViewTreatment = View treatment +headingViewVaccination = View vaccination headingViewVisit = Visit view headingVisits = Visits headingVisitsDeleted = Visits deleted @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Revoke share request headingSormasToSormasCantShareContactWithoutCase=Can not share contact headingSormasToSormasCanAcceptContactsWithoutCase=Can not accept contact(s) headingSormasToSormasDuplicateDetection = Potential duplicates detected +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Share request details headingShareRequestCases=Cases headingShareRequestContacts=Contacts @@ -964,7 +973,7 @@ infoUserSyncProcess = %d users are being synced to the External Authentication P infoNoSubordinateEvents=No subordinate events infoNoSuperordinateEvent=No superordinate event infoNoEventGroups=No event groups -infoMergeFiltersHint = Calculating and displaying potential duplicates may take a lot of time under specific circumstances. It is recommended to use the filters on top of this view to reduce the number of rows that have to be compared at the same time, e.g. by choosing a narrow creation date interval and a low result count limit. If the potential duplicates are loading fast, extending these values should be safe.

In order to avoid performance issues when entering this view, potential duplicates are only loaded once you click on "Confirm Filters". +infoMergeFiltersHint = Calculating and displaying potential duplicate cases is a very complex task and can require a lot of time. It is strongly recommended to adjust the filters on top of this view to reduce the number of cases that are detected at the same time, e.g. by increasing the lower threshold of the "Creation date" filter, or by selecting thresholds for the "Report or Onset Date".

When you see this hint, the loading of duplicates has been temporarily blocked to make sure that you can adjust the filters. Clicking on "Confirm Filters" after doing so will bring up the list of potential duplicates. infoPlaceOfStayInHospital = Please select a hospital as the place of stay. If the case is not currently admitted to a hospital as an inpatient, please document hospitalizations under previous hospitalizations. infoMoreDetailsAboutHospitalization = For adding more details about the hospitalization, go to the hospitalization tab. infoCountryNotEditableEventParticipantsWithoutJurisdiction = Changing the country is not permitted because at least one event participant in this event does not have a responsible region and/or responsible district set. @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Search for another person infoTasksWithMultipleJurisdictionsSelected = You have selected tasks connected to different jurisdictions, or that are connected to data that does not have facility or point of entry information. Only users on %s level or above will be selectable as assignees. infoNoAccessToPersonEntities = You don't have the necessary user rights to view any entries associated with persons. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s events not deleted. Event Ids not deleted\: %s messageEventsNotDeletedReason = No events that contain event participants linked will be deleted. Please remove the events participants from the event in order to be able to delete it. messageCountEventsNotDeletedExternalSurveillanceTool=%s events not deleted due to the reporting tool communication. Event Ids not deleted\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Some events were not deleted because the communication with the reporting tool failed. -messageEventsEdited = All events have been edited -messageEventsEditedExceptArchived = %s events have been successfully edited. Some of the events could not be edited because they are in a different jurisdiction or were already archived. messageExportFailed = There was an error preventing the data to be exported. Please contact an admin and inform them about this issue. messageExportConfigurationDeleted = Export configuration deleted messageExportConfigurationSaved = Export configuration saved @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = You need to select two persons for merge\ messageAutomaticDeletionStarted = Automatic deletion has been started and will be executed in the background. Please note that, depending on the amount of data that is deleted, this process can take some time. messageUserRoleUnusableForLogin = Users with only this role will not be able to login because the role does not have Access Sormas UI nor Access Sormas REST right messageUserRoleHasNoRights = This user role has no rights. Please select at least one right. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited diff --git a/sormas-api/src/main/resources/strings_fj-FJ.properties b/sormas-api/src/main/resources/strings_fj-FJ.properties index 192a5ad00f4..1314823c0cf 100644 --- a/sormas-api/src/main/resources/strings_fj-FJ.properties +++ b/sormas-api/src/main/resources/strings_fj-FJ.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = This message contains corrections to a p confirmationVaccinationStatusUpdate = Deleting this vaccination has lead to at least one case no longer having a valid vaccination. Do you want to remove the vaccination status from all affected cases? confirmExternalMessageCorrectionThrough = No other new or changed information could automatically be determined from the message. Do you want to manually add or edit more information? confirmationDeleteCaseContacts = Do you also want to delete all contacts of this case? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=Entity was automatically deleted @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = If you want to share thi errorSormasToSormasAcceptContactsWithoutCaseShared = The contact %s cannot be accepted, because it was sent without a case. Please reject the contact and ask the source system to send the linked case first. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = The contact %s cannot be accepted, because the contact belongs to a case that has not yet been accepted. Please accept the linked case first.
It is shared within the request %s. errorSormasToSormasExistingPendingRequest = There is already a pending request to the same organization. Please revoke it before sending a new one. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = Quarantine can only be issued for cases, contacts, event participants and travel entries. errorQuarantineBulkOnlySupportedEntities = Bulk quarantine can only be issued for cases, contacts, event participants. errorCreatingTemplateDirectory = Could not create template directory. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = This immunization is not editable any more errorForbidden = Access to the specified resource has been forbidden. Please contact your supervisor or administrator and inform them about it errorNoRightsForChangingField = You have no rights for changing %s errorNoRightsForChangingMultipleFields = You have no rights for changing %s and related fields +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Cannot delete user role, because the following users would remain without a user role\:

%s

Please give them a different role and re-try to delete this one. errorSurveillanceReportNotEditable = This report is not editable any more @@ -505,6 +508,7 @@ headingEditPrescription = Edit prescription headingEditTask = Edit task headingEditTreatment = Edit treatment headingEditUser = Edit user +headingEditVaccination = Edit vaccination headingEditVisit = Edit visit headingEditCountry = Edit country headingEditContinent = Edit continent @@ -647,9 +651,13 @@ headingUserData = User data headingVaccination = Vaccination headingViewNotFound = The view could not be found headingViewPathogenTestResult = Pathogen test result +headingViewPrescription = View prescription headingViewAdditionalTest = Additional test results +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Report view headingViewTask = View task +headingViewTreatment = View treatment +headingViewVaccination = View vaccination headingViewVisit = Visit view headingVisits = Visits headingVisitsDeleted = Visits deleted @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Revoke share request headingSormasToSormasCantShareContactWithoutCase=Can not share contact headingSormasToSormasCanAcceptContactsWithoutCase=Can not accept contact(s) headingSormasToSormasDuplicateDetection = Potential duplicates detected +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Share request details headingShareRequestCases=Cases headingShareRequestContacts=Contacts @@ -964,7 +973,7 @@ infoUserSyncProcess = %d users are being synced to the External Authentication P infoNoSubordinateEvents=No subordinate events infoNoSuperordinateEvent=No superordinate event infoNoEventGroups=No event groups -infoMergeFiltersHint = Calculating and displaying potential duplicates may take a lot of time under specific circumstances. It is recommended to use the filters on top of this view to reduce the number of rows that have to be compared at the same time, e.g. by choosing a narrow creation date interval and a low result count limit. If the potential duplicates are loading fast, extending these values should be safe.

In order to avoid performance issues when entering this view, potential duplicates are only loaded once you click on "Confirm Filters". +infoMergeFiltersHint = Calculating and displaying potential duplicate cases is a very complex task and can require a lot of time. It is strongly recommended to adjust the filters on top of this view to reduce the number of cases that are detected at the same time, e.g. by increasing the lower threshold of the "Creation date" filter, or by selecting thresholds for the "Report or Onset Date".

When you see this hint, the loading of duplicates has been temporarily blocked to make sure that you can adjust the filters. Clicking on "Confirm Filters" after doing so will bring up the list of potential duplicates. infoPlaceOfStayInHospital = Please select a hospital as the place of stay. If the case is not currently admitted to a hospital as an inpatient, please document hospitalizations under previous hospitalizations. infoMoreDetailsAboutHospitalization = For adding more details about the hospitalization, go to the hospitalization tab. infoCountryNotEditableEventParticipantsWithoutJurisdiction = Changing the country is not permitted because at least one event participant in this event does not have a responsible region and/or responsible district set. @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Search for another person infoTasksWithMultipleJurisdictionsSelected = You have selected tasks connected to different jurisdictions, or that are connected to data that does not have facility or point of entry information. Only users on %s level or above will be selectable as assignees. infoNoAccessToPersonEntities = You don't have the necessary user rights to view any entries associated with persons. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s events not deleted. Event Ids not deleted\: %s messageEventsNotDeletedReason = No events that contain event participants linked will be deleted. Please remove the events participants from the event in order to be able to delete it. messageCountEventsNotDeletedExternalSurveillanceTool=%s events not deleted due to the reporting tool communication. Event Ids not deleted\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Some events were not deleted because the communication with the reporting tool failed. -messageEventsEdited = All events have been edited -messageEventsEditedExceptArchived = %s events have been successfully edited. Some of the events could not be edited because they are in a different jurisdiction or were already archived. messageExportFailed = There was an error preventing the data to be exported. Please contact an admin and inform them about this issue. messageExportConfigurationDeleted = Export configuration deleted messageExportConfigurationSaved = Export configuration saved @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = You need to select two persons for merge\ messageAutomaticDeletionStarted = Automatic deletion has been started and will be executed in the background. Please note that, depending on the amount of data that is deleted, this process can take some time. messageUserRoleUnusableForLogin = Users with only this role will not be able to login because the role does not have Access Sormas UI nor Access Sormas REST right messageUserRoleHasNoRights = This user role has no rights. Please select at least one right. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited diff --git a/sormas-api/src/main/resources/strings_fr-CD.properties b/sormas-api/src/main/resources/strings_fr-CD.properties index 29b9b4dfb33..b5c882e3c90 100644 --- a/sormas-api/src/main/resources/strings_fr-CD.properties +++ b/sormas-api/src/main/resources/strings_fr-CD.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = This message contains corrections to a p confirmationVaccinationStatusUpdate = Deleting this vaccination has lead to at least one case no longer having a valid vaccination. Do you want to remove the vaccination status from all affected cases? confirmExternalMessageCorrectionThrough = No other new or changed information could automatically be determined from the message. Do you want to manually add or edit more information? confirmationDeleteCaseContacts = Do you also want to delete all contacts of this case? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=Entity was automatically deleted @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = If you want to share thi errorSormasToSormasAcceptContactsWithoutCaseShared = The contact %s cannot be accepted, because it was sent without a case. Please reject the contact and ask the source system to send the linked case first. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = The contact %s cannot be accepted, because the contact belongs to a case that has not yet been accepted. Please accept the linked case first.
It is shared within the request %s. errorSormasToSormasExistingPendingRequest = There is already a pending request to the same organization. Please revoke it before sending a new one. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = Quarantine can only be issued for cases, contacts, event participants and travel entries. errorQuarantineBulkOnlySupportedEntities = Bulk quarantine can only be issued for cases, contacts, event participants. errorCreatingTemplateDirectory = Could not create template directory. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = This immunization is not editable any more errorForbidden = Access to the specified resource has been forbidden. Please contact your supervisor or administrator and inform them about it errorNoRightsForChangingField = You have no rights for changing %s errorNoRightsForChangingMultipleFields = You have no rights for changing %s and related fields +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Cannot delete user role, because the following users would remain without a user role\:

%s

Please give them a different role and re-try to delete this one. errorSurveillanceReportNotEditable = This report is not editable any more @@ -505,6 +508,7 @@ headingEditPrescription = Edit prescription headingEditTask = Edit task headingEditTreatment = Edit treatment headingEditUser = Edit user +headingEditVaccination = Edit vaccination headingEditVisit = Edit visit headingEditCountry = Edit country headingEditContinent = Edit continent @@ -647,9 +651,13 @@ headingUserData = User data headingVaccination = Vaccination headingViewNotFound = The view could not be found headingViewPathogenTestResult = Pathogen test result +headingViewPrescription = View prescription headingViewAdditionalTest = Additional test results +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Report view headingViewTask = View task +headingViewTreatment = View treatment +headingViewVaccination = View vaccination headingViewVisit = Visit view headingVisits = Visits headingVisitsDeleted = Visits deleted @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Revoke share request headingSormasToSormasCantShareContactWithoutCase=Can not share contact headingSormasToSormasCanAcceptContactsWithoutCase=Can not accept contact(s) headingSormasToSormasDuplicateDetection = Potential duplicates detected +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Share request details headingShareRequestCases=Cases headingShareRequestContacts=Contacts @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Search for another person infoTasksWithMultipleJurisdictionsSelected = You have selected tasks connected to different jurisdictions, or that are connected to data that does not have facility or point of entry information. Only users on %s level or above will be selectable as assignees. infoNoAccessToPersonEntities = You don't have the necessary user rights to view any entries associated with persons. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s events not deleted. Event Ids not deleted\: %s messageEventsNotDeletedReason = No events that contain event participants linked will be deleted. Please remove the events participants from the event in order to be able to delete it. messageCountEventsNotDeletedExternalSurveillanceTool=%s events not deleted due to the reporting tool communication. Event Ids not deleted\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Some events were not deleted because the communication with the reporting tool failed. -messageEventsEdited = All events have been edited -messageEventsEditedExceptArchived = %s events have been successfully edited. Some of the events could not be edited because they are in a different jurisdiction or were already archived. messageExportFailed = There was an error preventing the data to be exported. Please contact an admin and inform them about this issue. messageExportConfigurationDeleted = Export configuration deleted messageExportConfigurationSaved = Export configuration saved @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = You need to select two persons for merge\ messageAutomaticDeletionStarted = Automatic deletion has been started and will be executed in the background. Please note that, depending on the amount of data that is deleted, this process can take some time. messageUserRoleUnusableForLogin = Users with only this role will not be able to login because the role does not have Access Sormas UI nor Access Sormas REST right messageUserRoleHasNoRights = This user role has no rights. Please select at least one right. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited diff --git a/sormas-api/src/main/resources/strings_fr-CH.properties b/sormas-api/src/main/resources/strings_fr-CH.properties index 31c6911773b..bbb805d1133 100644 --- a/sormas-api/src/main/resources/strings_fr-CH.properties +++ b/sormas-api/src/main/resources/strings_fr-CH.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = This message contains corrections to a p confirmationVaccinationStatusUpdate = Deleting this vaccination has lead to at least one case no longer having a valid vaccination. Do you want to remove the vaccination status from all affected cases? confirmExternalMessageCorrectionThrough = No other new or changed information could automatically be determined from the message. Do you want to manually add or edit more information? confirmationDeleteCaseContacts = Do you also want to delete all contacts of this case? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=Entity was automatically deleted @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = If you want to share thi errorSormasToSormasAcceptContactsWithoutCaseShared = The contact %s cannot be accepted, because it was sent without a case. Please reject the contact and ask the source system to send the linked case first. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = The contact %s cannot be accepted, because the contact belongs to a case that has not yet been accepted. Please accept the linked case first.
It is shared within the request %s. errorSormasToSormasExistingPendingRequest = There is already a pending request to the same organization. Please revoke it before sending a new one. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = Quarantine can only be issued for cases, contacts, event participants and travel entries. errorQuarantineBulkOnlySupportedEntities = Bulk quarantine can only be issued for cases, contacts, event participants. errorCreatingTemplateDirectory = Could not create template directory. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = This immunization is not editable any more errorForbidden = Access to the specified resource has been forbidden. Please contact your supervisor or administrator and inform them about it errorNoRightsForChangingField = You have no rights for changing %s errorNoRightsForChangingMultipleFields = You have no rights for changing %s and related fields +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Cannot delete user role, because the following users would remain without a user role\:

%s

Please give them a different role and re-try to delete this one. errorSurveillanceReportNotEditable = This report is not editable any more @@ -505,6 +508,7 @@ headingEditPrescription = Modifier la prescription headingEditTask = Modifier la tâche headingEditTreatment = Modifier le traitement headingEditUser = Modifier utilisateur +headingEditVaccination = Edit vaccination headingEditVisit = Modifier la visite headingEditCountry = Modifier le pays headingEditContinent = Edit continent @@ -647,9 +651,13 @@ headingUserData = Données d'utilisateur headingVaccination = Vaccination headingViewNotFound = La vue n'a pas pu être trouvée headingViewPathogenTestResult = Pathogen test result +headingViewPrescription = View prescription headingViewAdditionalTest = Additional test results +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Report view headingViewTask = View task +headingViewTreatment = View treatment +headingViewVaccination = View vaccination headingViewVisit = Visit view headingVisits = Visites headingVisitsDeleted = Visite supprimée @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Revoke share request headingSormasToSormasCantShareContactWithoutCase=Can not share contact headingSormasToSormasCanAcceptContactsWithoutCase=Can not accept contact(s) headingSormasToSormasDuplicateDetection = Potential duplicates detected +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Share request details headingShareRequestCases=Cases headingShareRequestContacts=Contacts @@ -964,7 +973,7 @@ infoUserSyncProcess = %d users are being synced to the External Authentication P infoNoSubordinateEvents=No subordinate events infoNoSuperordinateEvent=No superordinate event infoNoEventGroups=No event groups -infoMergeFiltersHint = Calculating and displaying potential duplicates may take a lot of time under specific circumstances. It is recommended to use the filters on top of this view to reduce the number of rows that have to be compared at the same time, e.g. by choosing a narrow creation date interval and a low result count limit. If the potential duplicates are loading fast, extending these values should be safe.

In order to avoid performance issues when entering this view, potential duplicates are only loaded once you click on "Confirm Filters". +infoMergeFiltersHint = Calculating and displaying potential duplicate cases is a very complex task and can require a lot of time. It is strongly recommended to adjust the filters on top of this view to reduce the number of cases that are detected at the same time, e.g. by increasing the lower threshold of the "Creation date" filter, or by selecting thresholds for the "Report or Onset Date".

When you see this hint, the loading of duplicates has been temporarily blocked to make sure that you can adjust the filters. Clicking on "Confirm Filters" after doing so will bring up the list of potential duplicates. infoPlaceOfStayInHospital = Please select a hospital as the place of stay. If the case is not currently admitted to a hospital as an inpatient, please document hospitalizations under previous hospitalizations. infoMoreDetailsAboutHospitalization = For adding more details about the hospitalization, go to the hospitalization tab. infoCountryNotEditableEventParticipantsWithoutJurisdiction = Changing the country is not permitted because at least one event participant in this event does not have a responsible region and/or responsible district set. @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Search for another person infoTasksWithMultipleJurisdictionsSelected = You have selected tasks connected to different jurisdictions, or that are connected to data that does not have facility or point of entry information. Only users on %s level or above will be selectable as assignees. infoNoAccessToPersonEntities = You don't have the necessary user rights to view any entries associated with persons. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s événements non supprimés. ID d'événements messageEventsNotDeletedReason = Aucun événement qui contient des participants à l'événement ne sera supprimé. Veuillez supprimer les participants à l'événement afin de pouvoir le supprimer. messageCountEventsNotDeletedExternalSurveillanceTool=%s events not deleted due to the reporting tool communication. Event Ids not deleted\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Some events were not deleted because the communication with the reporting tool failed. -messageEventsEdited = Tous les événements ont été modifiés -messageEventsEditedExceptArchived = %s events have been successfully edited. Some of the events could not be edited because they are in a different jurisdiction or were already archived. messageExportFailed = Il y a eu une erreur empêchant l'exportation des données. Veuillez contacter un administrateur et l'informer de ce problème. messageExportConfigurationDeleted = Configuration d'export supprimée messageExportConfigurationSaved = Configuration d'exportation enregistrée @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = You need to select two persons for merge\ messageAutomaticDeletionStarted = Automatic deletion has been started and will be executed in the background. Please note that, depending on the amount of data that is deleted, this process can take some time. messageUserRoleUnusableForLogin = Users with only this role will not be able to login because the role does not have Access Sormas UI nor Access Sormas REST right messageUserRoleHasNoRights = This user role has no rights. Please select at least one right. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited diff --git a/sormas-api/src/main/resources/strings_fr-FR.properties b/sormas-api/src/main/resources/strings_fr-FR.properties index 96ce7878875..c963b1d08e6 100644 --- a/sormas-api/src/main/resources/strings_fr-FR.properties +++ b/sormas-api/src/main/resources/strings_fr-FR.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = Ce message contient des corrections appo confirmationVaccinationStatusUpdate = La suppression de cette vaccination a conduit au moins un cas à ne plus avoir de vaccination valide. Voulez-vous supprimer le statut vaccinal de tous les cas concernés ? confirmExternalMessageCorrectionThrough = Aucune autre information nouvelle ou modifiée n'a pu être automatiquement déterminée à partir du message. Voulez-vous ajouter ou modifier manuellement plus d'informations ? confirmationDeleteCaseContacts = Voulez-vous également supprimer tous les contacts de ce cas ? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=L'entité a été automatiquement supprimée @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = Si vous souhaitez partag errorSormasToSormasAcceptContactsWithoutCaseShared = Le contact %s ne peut pas être accepté, car il a été envoyé sans cas. Veuillez rejeter le contact et demander au système source d'envoyer d'abord le dossier lié. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = Le contact %s ne peut pas être accepté, car le contact appartient à une requête qui n'a pas encore été acceptée. Veuillez d'abord accepter le cas lié.
Il est partagé dans la demande %s. errorSormasToSormasExistingPendingRequest = Il y a déjà une demande en attente pour la même organisation. Veuillez la révoquer avant d'en envoyer une nouvelle. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = La quarantaine ne peut être émise que pour les cas, les contacts, les participants à l'événement et les entrées de voyage. errorQuarantineBulkOnlySupportedEntities = La mise en quarantaine groupée ne peut être émise que pour les cas, les contacts et les participants à l'événement. errorCreatingTemplateDirectory = Impossible de créer le répertoire des modèles. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = Cette immunisation n'est plus modifiable errorForbidden = L'accès à la ressource spécifiée a été interdit. Veuillez contacter votre superviseur ou votre administrateur et l'informer à ce sujet errorNoRightsForChangingField = Vous n'avez pas les droits de modifier %s errorNoRightsForChangingMultipleFields = Vous n'avez pas les droits de modifier %s et les champs associés +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Impossible de supprimer le rôle d'utilisateur, car les utilisateurs suivants resteraient sans rôle d'utilisateur \:

%s

Veuillez leur attribuer un rôle différent et réessayer de supprimer celui-ci. errorSurveillanceReportNotEditable = Ce rapport n'est plus modifiable @@ -505,6 +508,7 @@ headingEditPrescription = Modifier la prescription headingEditTask = Modifier la tâche headingEditTreatment = Modifier le traitement headingEditUser = Modifier utilisateur +headingEditVaccination = Edit vaccination headingEditVisit = Modifier la visite headingEditCountry = Modifier le pays headingEditContinent = Modifier le continent @@ -647,9 +651,13 @@ headingUserData = Données d'utilisateur headingVaccination = Vaccination headingViewNotFound = La vue n'a pas pu être trouvée headingViewPathogenTestResult = Résultat du test pathogène +headingViewPrescription = View prescription headingViewAdditionalTest = Résultats de test supplémentaires +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Affichage du rapport headingViewTask = Afficher la tâche +headingViewTreatment = View treatment +headingViewVaccination = View vaccination headingViewVisit = Vue de visite headingVisits = Visites headingVisitsDeleted = Visite supprimée @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Révoquer la demande de partage headingSormasToSormasCantShareContactWithoutCase=Impossible de partager le contact headingSormasToSormasCanAcceptContactsWithoutCase=Can not accept contact(s) headingSormasToSormasDuplicateDetection = Potential duplicates detected +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Partager les détails de la demande headingShareRequestCases=Cas headingShareRequestContacts=Contacts @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Rechercher une autre personne infoTasksWithMultipleJurisdictionsSelected = You have selected tasks connected to different jurisdictions, or that are connected to data that does not have facility or point of entry information. Only users on %s level or above will be selectable as assignees. infoNoAccessToPersonEntities = You don't have the necessary user rights to view any entries associated with persons. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s événements non supprimés. Id d'événement messageEventsNotDeletedReason = Aucun événement qui contient des participants à l'événement ne sera supprimé. Veuillez supprimer les participants à l'événement afin de pouvoir le supprimer. messageCountEventsNotDeletedExternalSurveillanceTool=%s événements n'ont pas été supprimés en raison de la communication de l'outil de rapport. Ids d'événements non supprimés \: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Certains événements n'ont pas été supprimés car la communication avec l'outil de rapport a échoué. -messageEventsEdited = Tous les événements ont été modifiés -messageEventsEditedExceptArchived = %s events have been successfully edited. Some of the events could not be edited because they are in a different jurisdiction or were already archived. messageExportFailed = Il y a eu une erreur empêchant l'exportation des données. Veuillez contacter un administrateur et l'informer de ce problème. messageExportConfigurationDeleted = Configuration d'export supprimée messageExportConfigurationSaved = Configuration d'exportation enregistrée @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = You need to select two persons for merge\ messageAutomaticDeletionStarted = Automatic deletion has been started and will be executed in the background. Please note that, depending on the amount of data that is deleted, this process can take some time. messageUserRoleUnusableForLogin = Users with only this role will not be able to login because the role does not have Access Sormas UI nor Access Sormas REST right messageUserRoleHasNoRights = This user role has no rights. Please select at least one right. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited diff --git a/sormas-api/src/main/resources/strings_fr-TN.properties b/sormas-api/src/main/resources/strings_fr-TN.properties index 96ce7878875..c963b1d08e6 100644 --- a/sormas-api/src/main/resources/strings_fr-TN.properties +++ b/sormas-api/src/main/resources/strings_fr-TN.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = Ce message contient des corrections appo confirmationVaccinationStatusUpdate = La suppression de cette vaccination a conduit au moins un cas à ne plus avoir de vaccination valide. Voulez-vous supprimer le statut vaccinal de tous les cas concernés ? confirmExternalMessageCorrectionThrough = Aucune autre information nouvelle ou modifiée n'a pu être automatiquement déterminée à partir du message. Voulez-vous ajouter ou modifier manuellement plus d'informations ? confirmationDeleteCaseContacts = Voulez-vous également supprimer tous les contacts de ce cas ? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=L'entité a été automatiquement supprimée @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = Si vous souhaitez partag errorSormasToSormasAcceptContactsWithoutCaseShared = Le contact %s ne peut pas être accepté, car il a été envoyé sans cas. Veuillez rejeter le contact et demander au système source d'envoyer d'abord le dossier lié. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = Le contact %s ne peut pas être accepté, car le contact appartient à une requête qui n'a pas encore été acceptée. Veuillez d'abord accepter le cas lié.
Il est partagé dans la demande %s. errorSormasToSormasExistingPendingRequest = Il y a déjà une demande en attente pour la même organisation. Veuillez la révoquer avant d'en envoyer une nouvelle. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = La quarantaine ne peut être émise que pour les cas, les contacts, les participants à l'événement et les entrées de voyage. errorQuarantineBulkOnlySupportedEntities = La mise en quarantaine groupée ne peut être émise que pour les cas, les contacts et les participants à l'événement. errorCreatingTemplateDirectory = Impossible de créer le répertoire des modèles. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = Cette immunisation n'est plus modifiable errorForbidden = L'accès à la ressource spécifiée a été interdit. Veuillez contacter votre superviseur ou votre administrateur et l'informer à ce sujet errorNoRightsForChangingField = Vous n'avez pas les droits de modifier %s errorNoRightsForChangingMultipleFields = Vous n'avez pas les droits de modifier %s et les champs associés +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Impossible de supprimer le rôle d'utilisateur, car les utilisateurs suivants resteraient sans rôle d'utilisateur \:

%s

Veuillez leur attribuer un rôle différent et réessayer de supprimer celui-ci. errorSurveillanceReportNotEditable = Ce rapport n'est plus modifiable @@ -505,6 +508,7 @@ headingEditPrescription = Modifier la prescription headingEditTask = Modifier la tâche headingEditTreatment = Modifier le traitement headingEditUser = Modifier utilisateur +headingEditVaccination = Edit vaccination headingEditVisit = Modifier la visite headingEditCountry = Modifier le pays headingEditContinent = Modifier le continent @@ -647,9 +651,13 @@ headingUserData = Données d'utilisateur headingVaccination = Vaccination headingViewNotFound = La vue n'a pas pu être trouvée headingViewPathogenTestResult = Résultat du test pathogène +headingViewPrescription = View prescription headingViewAdditionalTest = Résultats de test supplémentaires +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Affichage du rapport headingViewTask = Afficher la tâche +headingViewTreatment = View treatment +headingViewVaccination = View vaccination headingViewVisit = Vue de visite headingVisits = Visites headingVisitsDeleted = Visite supprimée @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Révoquer la demande de partage headingSormasToSormasCantShareContactWithoutCase=Impossible de partager le contact headingSormasToSormasCanAcceptContactsWithoutCase=Can not accept contact(s) headingSormasToSormasDuplicateDetection = Potential duplicates detected +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Partager les détails de la demande headingShareRequestCases=Cas headingShareRequestContacts=Contacts @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Rechercher une autre personne infoTasksWithMultipleJurisdictionsSelected = You have selected tasks connected to different jurisdictions, or that are connected to data that does not have facility or point of entry information. Only users on %s level or above will be selectable as assignees. infoNoAccessToPersonEntities = You don't have the necessary user rights to view any entries associated with persons. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s événements non supprimés. Id d'événement messageEventsNotDeletedReason = Aucun événement qui contient des participants à l'événement ne sera supprimé. Veuillez supprimer les participants à l'événement afin de pouvoir le supprimer. messageCountEventsNotDeletedExternalSurveillanceTool=%s événements n'ont pas été supprimés en raison de la communication de l'outil de rapport. Ids d'événements non supprimés \: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Certains événements n'ont pas été supprimés car la communication avec l'outil de rapport a échoué. -messageEventsEdited = Tous les événements ont été modifiés -messageEventsEditedExceptArchived = %s events have been successfully edited. Some of the events could not be edited because they are in a different jurisdiction or were already archived. messageExportFailed = Il y a eu une erreur empêchant l'exportation des données. Veuillez contacter un administrateur et l'informer de ce problème. messageExportConfigurationDeleted = Configuration d'export supprimée messageExportConfigurationSaved = Configuration d'exportation enregistrée @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = You need to select two persons for merge\ messageAutomaticDeletionStarted = Automatic deletion has been started and will be executed in the background. Please note that, depending on the amount of data that is deleted, this process can take some time. messageUserRoleUnusableForLogin = Users with only this role will not be able to login because the role does not have Access Sormas UI nor Access Sormas REST right messageUserRoleHasNoRights = This user role has no rights. Please select at least one right. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited diff --git a/sormas-api/src/main/resources/strings_hi-IN.properties b/sormas-api/src/main/resources/strings_hi-IN.properties index 192a5ad00f4..1314823c0cf 100644 --- a/sormas-api/src/main/resources/strings_hi-IN.properties +++ b/sormas-api/src/main/resources/strings_hi-IN.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = This message contains corrections to a p confirmationVaccinationStatusUpdate = Deleting this vaccination has lead to at least one case no longer having a valid vaccination. Do you want to remove the vaccination status from all affected cases? confirmExternalMessageCorrectionThrough = No other new or changed information could automatically be determined from the message. Do you want to manually add or edit more information? confirmationDeleteCaseContacts = Do you also want to delete all contacts of this case? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=Entity was automatically deleted @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = If you want to share thi errorSormasToSormasAcceptContactsWithoutCaseShared = The contact %s cannot be accepted, because it was sent without a case. Please reject the contact and ask the source system to send the linked case first. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = The contact %s cannot be accepted, because the contact belongs to a case that has not yet been accepted. Please accept the linked case first.
It is shared within the request %s. errorSormasToSormasExistingPendingRequest = There is already a pending request to the same organization. Please revoke it before sending a new one. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = Quarantine can only be issued for cases, contacts, event participants and travel entries. errorQuarantineBulkOnlySupportedEntities = Bulk quarantine can only be issued for cases, contacts, event participants. errorCreatingTemplateDirectory = Could not create template directory. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = This immunization is not editable any more errorForbidden = Access to the specified resource has been forbidden. Please contact your supervisor or administrator and inform them about it errorNoRightsForChangingField = You have no rights for changing %s errorNoRightsForChangingMultipleFields = You have no rights for changing %s and related fields +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Cannot delete user role, because the following users would remain without a user role\:

%s

Please give them a different role and re-try to delete this one. errorSurveillanceReportNotEditable = This report is not editable any more @@ -505,6 +508,7 @@ headingEditPrescription = Edit prescription headingEditTask = Edit task headingEditTreatment = Edit treatment headingEditUser = Edit user +headingEditVaccination = Edit vaccination headingEditVisit = Edit visit headingEditCountry = Edit country headingEditContinent = Edit continent @@ -647,9 +651,13 @@ headingUserData = User data headingVaccination = Vaccination headingViewNotFound = The view could not be found headingViewPathogenTestResult = Pathogen test result +headingViewPrescription = View prescription headingViewAdditionalTest = Additional test results +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Report view headingViewTask = View task +headingViewTreatment = View treatment +headingViewVaccination = View vaccination headingViewVisit = Visit view headingVisits = Visits headingVisitsDeleted = Visits deleted @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Revoke share request headingSormasToSormasCantShareContactWithoutCase=Can not share contact headingSormasToSormasCanAcceptContactsWithoutCase=Can not accept contact(s) headingSormasToSormasDuplicateDetection = Potential duplicates detected +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Share request details headingShareRequestCases=Cases headingShareRequestContacts=Contacts @@ -964,7 +973,7 @@ infoUserSyncProcess = %d users are being synced to the External Authentication P infoNoSubordinateEvents=No subordinate events infoNoSuperordinateEvent=No superordinate event infoNoEventGroups=No event groups -infoMergeFiltersHint = Calculating and displaying potential duplicates may take a lot of time under specific circumstances. It is recommended to use the filters on top of this view to reduce the number of rows that have to be compared at the same time, e.g. by choosing a narrow creation date interval and a low result count limit. If the potential duplicates are loading fast, extending these values should be safe.

In order to avoid performance issues when entering this view, potential duplicates are only loaded once you click on "Confirm Filters". +infoMergeFiltersHint = Calculating and displaying potential duplicate cases is a very complex task and can require a lot of time. It is strongly recommended to adjust the filters on top of this view to reduce the number of cases that are detected at the same time, e.g. by increasing the lower threshold of the "Creation date" filter, or by selecting thresholds for the "Report or Onset Date".

When you see this hint, the loading of duplicates has been temporarily blocked to make sure that you can adjust the filters. Clicking on "Confirm Filters" after doing so will bring up the list of potential duplicates. infoPlaceOfStayInHospital = Please select a hospital as the place of stay. If the case is not currently admitted to a hospital as an inpatient, please document hospitalizations under previous hospitalizations. infoMoreDetailsAboutHospitalization = For adding more details about the hospitalization, go to the hospitalization tab. infoCountryNotEditableEventParticipantsWithoutJurisdiction = Changing the country is not permitted because at least one event participant in this event does not have a responsible region and/or responsible district set. @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Search for another person infoTasksWithMultipleJurisdictionsSelected = You have selected tasks connected to different jurisdictions, or that are connected to data that does not have facility or point of entry information. Only users on %s level or above will be selectable as assignees. infoNoAccessToPersonEntities = You don't have the necessary user rights to view any entries associated with persons. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s events not deleted. Event Ids not deleted\: %s messageEventsNotDeletedReason = No events that contain event participants linked will be deleted. Please remove the events participants from the event in order to be able to delete it. messageCountEventsNotDeletedExternalSurveillanceTool=%s events not deleted due to the reporting tool communication. Event Ids not deleted\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Some events were not deleted because the communication with the reporting tool failed. -messageEventsEdited = All events have been edited -messageEventsEditedExceptArchived = %s events have been successfully edited. Some of the events could not be edited because they are in a different jurisdiction or were already archived. messageExportFailed = There was an error preventing the data to be exported. Please contact an admin and inform them about this issue. messageExportConfigurationDeleted = Export configuration deleted messageExportConfigurationSaved = Export configuration saved @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = You need to select two persons for merge\ messageAutomaticDeletionStarted = Automatic deletion has been started and will be executed in the background. Please note that, depending on the amount of data that is deleted, this process can take some time. messageUserRoleUnusableForLogin = Users with only this role will not be able to login because the role does not have Access Sormas UI nor Access Sormas REST right messageUserRoleHasNoRights = This user role has no rights. Please select at least one right. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited diff --git a/sormas-api/src/main/resources/strings_hr-HR.properties b/sormas-api/src/main/resources/strings_hr-HR.properties index 192a5ad00f4..1314823c0cf 100644 --- a/sormas-api/src/main/resources/strings_hr-HR.properties +++ b/sormas-api/src/main/resources/strings_hr-HR.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = This message contains corrections to a p confirmationVaccinationStatusUpdate = Deleting this vaccination has lead to at least one case no longer having a valid vaccination. Do you want to remove the vaccination status from all affected cases? confirmExternalMessageCorrectionThrough = No other new or changed information could automatically be determined from the message. Do you want to manually add or edit more information? confirmationDeleteCaseContacts = Do you also want to delete all contacts of this case? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=Entity was automatically deleted @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = If you want to share thi errorSormasToSormasAcceptContactsWithoutCaseShared = The contact %s cannot be accepted, because it was sent without a case. Please reject the contact and ask the source system to send the linked case first. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = The contact %s cannot be accepted, because the contact belongs to a case that has not yet been accepted. Please accept the linked case first.
It is shared within the request %s. errorSormasToSormasExistingPendingRequest = There is already a pending request to the same organization. Please revoke it before sending a new one. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = Quarantine can only be issued for cases, contacts, event participants and travel entries. errorQuarantineBulkOnlySupportedEntities = Bulk quarantine can only be issued for cases, contacts, event participants. errorCreatingTemplateDirectory = Could not create template directory. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = This immunization is not editable any more errorForbidden = Access to the specified resource has been forbidden. Please contact your supervisor or administrator and inform them about it errorNoRightsForChangingField = You have no rights for changing %s errorNoRightsForChangingMultipleFields = You have no rights for changing %s and related fields +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Cannot delete user role, because the following users would remain without a user role\:

%s

Please give them a different role and re-try to delete this one. errorSurveillanceReportNotEditable = This report is not editable any more @@ -505,6 +508,7 @@ headingEditPrescription = Edit prescription headingEditTask = Edit task headingEditTreatment = Edit treatment headingEditUser = Edit user +headingEditVaccination = Edit vaccination headingEditVisit = Edit visit headingEditCountry = Edit country headingEditContinent = Edit continent @@ -647,9 +651,13 @@ headingUserData = User data headingVaccination = Vaccination headingViewNotFound = The view could not be found headingViewPathogenTestResult = Pathogen test result +headingViewPrescription = View prescription headingViewAdditionalTest = Additional test results +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Report view headingViewTask = View task +headingViewTreatment = View treatment +headingViewVaccination = View vaccination headingViewVisit = Visit view headingVisits = Visits headingVisitsDeleted = Visits deleted @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Revoke share request headingSormasToSormasCantShareContactWithoutCase=Can not share contact headingSormasToSormasCanAcceptContactsWithoutCase=Can not accept contact(s) headingSormasToSormasDuplicateDetection = Potential duplicates detected +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Share request details headingShareRequestCases=Cases headingShareRequestContacts=Contacts @@ -964,7 +973,7 @@ infoUserSyncProcess = %d users are being synced to the External Authentication P infoNoSubordinateEvents=No subordinate events infoNoSuperordinateEvent=No superordinate event infoNoEventGroups=No event groups -infoMergeFiltersHint = Calculating and displaying potential duplicates may take a lot of time under specific circumstances. It is recommended to use the filters on top of this view to reduce the number of rows that have to be compared at the same time, e.g. by choosing a narrow creation date interval and a low result count limit. If the potential duplicates are loading fast, extending these values should be safe.

In order to avoid performance issues when entering this view, potential duplicates are only loaded once you click on "Confirm Filters". +infoMergeFiltersHint = Calculating and displaying potential duplicate cases is a very complex task and can require a lot of time. It is strongly recommended to adjust the filters on top of this view to reduce the number of cases that are detected at the same time, e.g. by increasing the lower threshold of the "Creation date" filter, or by selecting thresholds for the "Report or Onset Date".

When you see this hint, the loading of duplicates has been temporarily blocked to make sure that you can adjust the filters. Clicking on "Confirm Filters" after doing so will bring up the list of potential duplicates. infoPlaceOfStayInHospital = Please select a hospital as the place of stay. If the case is not currently admitted to a hospital as an inpatient, please document hospitalizations under previous hospitalizations. infoMoreDetailsAboutHospitalization = For adding more details about the hospitalization, go to the hospitalization tab. infoCountryNotEditableEventParticipantsWithoutJurisdiction = Changing the country is not permitted because at least one event participant in this event does not have a responsible region and/or responsible district set. @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Search for another person infoTasksWithMultipleJurisdictionsSelected = You have selected tasks connected to different jurisdictions, or that are connected to data that does not have facility or point of entry information. Only users on %s level or above will be selectable as assignees. infoNoAccessToPersonEntities = You don't have the necessary user rights to view any entries associated with persons. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s events not deleted. Event Ids not deleted\: %s messageEventsNotDeletedReason = No events that contain event participants linked will be deleted. Please remove the events participants from the event in order to be able to delete it. messageCountEventsNotDeletedExternalSurveillanceTool=%s events not deleted due to the reporting tool communication. Event Ids not deleted\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Some events were not deleted because the communication with the reporting tool failed. -messageEventsEdited = All events have been edited -messageEventsEditedExceptArchived = %s events have been successfully edited. Some of the events could not be edited because they are in a different jurisdiction or were already archived. messageExportFailed = There was an error preventing the data to be exported. Please contact an admin and inform them about this issue. messageExportConfigurationDeleted = Export configuration deleted messageExportConfigurationSaved = Export configuration saved @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = You need to select two persons for merge\ messageAutomaticDeletionStarted = Automatic deletion has been started and will be executed in the background. Please note that, depending on the amount of data that is deleted, this process can take some time. messageUserRoleUnusableForLogin = Users with only this role will not be able to login because the role does not have Access Sormas UI nor Access Sormas REST right messageUserRoleHasNoRights = This user role has no rights. Please select at least one right. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited diff --git a/sormas-api/src/main/resources/strings_it-CH.properties b/sormas-api/src/main/resources/strings_it-CH.properties index 126409ca2a3..24b79d40d49 100644 --- a/sormas-api/src/main/resources/strings_it-CH.properties +++ b/sormas-api/src/main/resources/strings_it-CH.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = This message contains corrections to a p confirmationVaccinationStatusUpdate = Deleting this vaccination has lead to at least one case no longer having a valid vaccination. Do you want to remove the vaccination status from all affected cases? confirmExternalMessageCorrectionThrough = No other new or changed information could automatically be determined from the message. Do you want to manually add or edit more information? confirmationDeleteCaseContacts = Do you also want to delete all contacts of this case? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=Entity was automatically deleted @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = If you want to share thi errorSormasToSormasAcceptContactsWithoutCaseShared = The contact %s cannot be accepted, because it was sent without a case. Please reject the contact and ask the source system to send the linked case first. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = The contact %s cannot be accepted, because the contact belongs to a case that has not yet been accepted. Please accept the linked case first.
It is shared within the request %s. errorSormasToSormasExistingPendingRequest = There is already a pending request to the same organization. Please revoke it before sending a new one. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = Quarantine can only be issued for cases, contacts, event participants and travel entries. errorQuarantineBulkOnlySupportedEntities = Bulk quarantine can only be issued for cases, contacts, event participants. errorCreatingTemplateDirectory = Could not create template directory. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = This immunization is not editable any more errorForbidden = Access to the specified resource has been forbidden. Please contact your supervisor or administrator and inform them about it errorNoRightsForChangingField = You have no rights for changing %s errorNoRightsForChangingMultipleFields = You have no rights for changing %s and related fields +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Cannot delete user role, because the following users would remain without a user role\:

%s

Please give them a different role and re-try to delete this one. errorSurveillanceReportNotEditable = This report is not editable any more @@ -505,6 +508,7 @@ headingEditPrescription = Modifica prescrizione headingEditTask = Modifica compito headingEditTreatment = Modifica trattamento headingEditUser = Modifica utente +headingEditVaccination = Edit vaccination headingEditVisit = Modifica visita headingEditCountry = Edit country headingEditContinent = Edit continent @@ -647,9 +651,13 @@ headingUserData = Dati utente headingVaccination = Vaccination headingViewNotFound = La vista non è stata trovata headingViewPathogenTestResult = Pathogen test result +headingViewPrescription = View prescription headingViewAdditionalTest = Additional test results +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Report view headingViewTask = View task +headingViewTreatment = View treatment +headingViewVaccination = View vaccination headingViewVisit = Visit view headingVisits = Visite headingVisitsDeleted = Visite eliminate @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Revoke share request headingSormasToSormasCantShareContactWithoutCase=Can not share contact headingSormasToSormasCanAcceptContactsWithoutCase=Can not accept contact(s) headingSormasToSormasDuplicateDetection = Potential duplicates detected +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Share request details headingShareRequestCases=Cases headingShareRequestContacts=Contacts @@ -964,7 +973,7 @@ infoUserSyncProcess = %d users are being synced to the External Authentication P infoNoSubordinateEvents=No subordinate events infoNoSuperordinateEvent=No superordinate event infoNoEventGroups=No event groups -infoMergeFiltersHint = Calculating and displaying potential duplicates may take a lot of time under specific circumstances. It is recommended to use the filters on top of this view to reduce the number of rows that have to be compared at the same time, e.g. by choosing a narrow creation date interval and a low result count limit. If the potential duplicates are loading fast, extending these values should be safe.

In order to avoid performance issues when entering this view, potential duplicates are only loaded once you click on "Confirm Filters". +infoMergeFiltersHint = Calculating and displaying potential duplicate cases is a very complex task and can require a lot of time. It is strongly recommended to adjust the filters on top of this view to reduce the number of cases that are detected at the same time, e.g. by increasing the lower threshold of the "Creation date" filter, or by selecting thresholds for the "Report or Onset Date".

When you see this hint, the loading of duplicates has been temporarily blocked to make sure that you can adjust the filters. Clicking on "Confirm Filters" after doing so will bring up the list of potential duplicates. infoPlaceOfStayInHospital = Please select a hospital as the place of stay. If the case is not currently admitted to a hospital as an inpatient, please document hospitalizations under previous hospitalizations. infoMoreDetailsAboutHospitalization = For adding more details about the hospitalization, go to the hospitalization tab. infoCountryNotEditableEventParticipantsWithoutJurisdiction = Changing the country is not permitted because at least one event participant in this event does not have a responsible region and/or responsible district set. @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Search for another person infoTasksWithMultipleJurisdictionsSelected = You have selected tasks connected to different jurisdictions, or that are connected to data that does not have facility or point of entry information. Only users on %s level or above will be selectable as assignees. infoNoAccessToPersonEntities = You don't have the necessary user rights to view any entries associated with persons. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s eventi non eliminati. Id evento non eliminati\ messageEventsNotDeletedReason = Nessun evento che contenga partecipanti all'evento collegati verrà eliminato. Si prega di rimuovere gli eventi partecipanti dall'evento per poterlo eliminare. messageCountEventsNotDeletedExternalSurveillanceTool=%s events not deleted due to the reporting tool communication. Event Ids not deleted\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Some events were not deleted because the communication with the reporting tool failed. -messageEventsEdited = Tutti gli eventi sono stati modificati -messageEventsEditedExceptArchived = %s events have been successfully edited. Some of the events could not be edited because they are in a different jurisdiction or were already archived. messageExportFailed = Si è verificato un errore che impedisce l'esportazione dei dati. Si prega di contattare un amministratore e segnalargli il problema. messageExportConfigurationDeleted = Configurazione di esportazione eliminata messageExportConfigurationSaved = Configurazione di esportazione salvata @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = You need to select two persons for merge\ messageAutomaticDeletionStarted = Automatic deletion has been started and will be executed in the background. Please note that, depending on the amount of data that is deleted, this process can take some time. messageUserRoleUnusableForLogin = Users with only this role will not be able to login because the role does not have Access Sormas UI nor Access Sormas REST right messageUserRoleHasNoRights = This user role has no rights. Please select at least one right. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited diff --git a/sormas-api/src/main/resources/strings_it-IT.properties b/sormas-api/src/main/resources/strings_it-IT.properties index 4946b14db0c..2bfd00e9cce 100644 --- a/sormas-api/src/main/resources/strings_it-IT.properties +++ b/sormas-api/src/main/resources/strings_it-IT.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = This message contains corrections to a p confirmationVaccinationStatusUpdate = Deleting this vaccination has lead to at least one case no longer having a valid vaccination. Do you want to remove the vaccination status from all affected cases? confirmExternalMessageCorrectionThrough = No other new or changed information could automatically be determined from the message. Do you want to manually add or edit more information? confirmationDeleteCaseContacts = Do you also want to delete all contacts of this case? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=Entity was automatically deleted @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = If you want to share thi errorSormasToSormasAcceptContactsWithoutCaseShared = The contact %s cannot be accepted, because it was sent without a case. Please reject the contact and ask the source system to send the linked case first. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = The contact %s cannot be accepted, because the contact belongs to a case that has not yet been accepted. Please accept the linked case first.
It is shared within the request %s. errorSormasToSormasExistingPendingRequest = There is already a pending request to the same organization. Please revoke it before sending a new one. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = Quarantine can only be issued for cases, contacts, event participants and travel entries. errorQuarantineBulkOnlySupportedEntities = Bulk quarantine can only be issued for cases, contacts, event participants. errorCreatingTemplateDirectory = Could not create template directory. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = This immunization is not editable any more errorForbidden = Access to the specified resource has been forbidden. Please contact your supervisor or administrator and inform them about it errorNoRightsForChangingField = You have no rights for changing %s errorNoRightsForChangingMultipleFields = You have no rights for changing %s and related fields +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Cannot delete user role, because the following users would remain without a user role\:

%s

Please give them a different role and re-try to delete this one. errorSurveillanceReportNotEditable = This report is not editable any more @@ -505,6 +508,7 @@ headingEditPrescription = Modifica prescrizione headingEditTask = Modifica compito headingEditTreatment = Modifica trattamento headingEditUser = Modifica utente +headingEditVaccination = Edit vaccination headingEditVisit = Modifica visita headingEditCountry = Edit country headingEditContinent = Edit continent @@ -647,9 +651,13 @@ headingUserData = Dati utente headingVaccination = Vaccination headingViewNotFound = La vista non è stata trovata headingViewPathogenTestResult = Pathogen test result +headingViewPrescription = View prescription headingViewAdditionalTest = Additional test results +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Report view headingViewTask = View task +headingViewTreatment = View treatment +headingViewVaccination = View vaccination headingViewVisit = Visit view headingVisits = Visite headingVisitsDeleted = Visite eliminate @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Revoke share request headingSormasToSormasCantShareContactWithoutCase=Can not share contact headingSormasToSormasCanAcceptContactsWithoutCase=Can not accept contact(s) headingSormasToSormasDuplicateDetection = Potential duplicates detected +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Share request details headingShareRequestCases=Cases headingShareRequestContacts=Contacts @@ -964,7 +973,7 @@ infoUserSyncProcess = %d users are being synced to the External Authentication P infoNoSubordinateEvents=No subordinate events infoNoSuperordinateEvent=No superordinate event infoNoEventGroups=No event groups -infoMergeFiltersHint = Calculating and displaying potential duplicates may take a lot of time under specific circumstances. It is recommended to use the filters on top of this view to reduce the number of rows that have to be compared at the same time, e.g. by choosing a narrow creation date interval and a low result count limit. If the potential duplicates are loading fast, extending these values should be safe.

In order to avoid performance issues when entering this view, potential duplicates are only loaded once you click on "Confirm Filters". +infoMergeFiltersHint = Calculating and displaying potential duplicate cases is a very complex task and can require a lot of time. It is strongly recommended to adjust the filters on top of this view to reduce the number of cases that are detected at the same time, e.g. by increasing the lower threshold of the "Creation date" filter, or by selecting thresholds for the "Report or Onset Date".

When you see this hint, the loading of duplicates has been temporarily blocked to make sure that you can adjust the filters. Clicking on "Confirm Filters" after doing so will bring up the list of potential duplicates. infoPlaceOfStayInHospital = Please select a hospital as the place of stay. If the case is not currently admitted to a hospital as an inpatient, please document hospitalizations under previous hospitalizations. infoMoreDetailsAboutHospitalization = For adding more details about the hospitalization, go to the hospitalization tab. infoCountryNotEditableEventParticipantsWithoutJurisdiction = Changing the country is not permitted because at least one event participant in this event does not have a responsible region and/or responsible district set. @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Search for another person infoTasksWithMultipleJurisdictionsSelected = You have selected tasks connected to different jurisdictions, or that are connected to data that does not have facility or point of entry information. Only users on %s level or above will be selectable as assignees. infoNoAccessToPersonEntities = You don't have the necessary user rights to view any entries associated with persons. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s events not deleted. Event Ids not deleted\: %s messageEventsNotDeletedReason = No events that contain event participants linked will be deleted. Please remove the events participants from the event in order to be able to delete it. messageCountEventsNotDeletedExternalSurveillanceTool=%s events not deleted due to the reporting tool communication. Event Ids not deleted\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Some events were not deleted because the communication with the reporting tool failed. -messageEventsEdited = Tutti gli eventi sono stati modificati -messageEventsEditedExceptArchived = %s events have been successfully edited. Some of the events could not be edited because they are in a different jurisdiction or were already archived. messageExportFailed = Si è verificato un errore che impedisce l'esportazione dei dati. Si prega di contattare un amministratore e segnalargli il problema. messageExportConfigurationDeleted = Configurazione di esportazione eliminata messageExportConfigurationSaved = Configurazione di esportazione salvata @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = You need to select two persons for merge\ messageAutomaticDeletionStarted = Automatic deletion has been started and will be executed in the background. Please note that, depending on the amount of data that is deleted, this process can take some time. messageUserRoleUnusableForLogin = Users with only this role will not be able to login because the role does not have Access Sormas UI nor Access Sormas REST right messageUserRoleHasNoRights = This user role has no rights. Please select at least one right. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited diff --git a/sormas-api/src/main/resources/strings_ja-JP.properties b/sormas-api/src/main/resources/strings_ja-JP.properties index 192a5ad00f4..1314823c0cf 100644 --- a/sormas-api/src/main/resources/strings_ja-JP.properties +++ b/sormas-api/src/main/resources/strings_ja-JP.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = This message contains corrections to a p confirmationVaccinationStatusUpdate = Deleting this vaccination has lead to at least one case no longer having a valid vaccination. Do you want to remove the vaccination status from all affected cases? confirmExternalMessageCorrectionThrough = No other new or changed information could automatically be determined from the message. Do you want to manually add or edit more information? confirmationDeleteCaseContacts = Do you also want to delete all contacts of this case? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=Entity was automatically deleted @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = If you want to share thi errorSormasToSormasAcceptContactsWithoutCaseShared = The contact %s cannot be accepted, because it was sent without a case. Please reject the contact and ask the source system to send the linked case first. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = The contact %s cannot be accepted, because the contact belongs to a case that has not yet been accepted. Please accept the linked case first.
It is shared within the request %s. errorSormasToSormasExistingPendingRequest = There is already a pending request to the same organization. Please revoke it before sending a new one. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = Quarantine can only be issued for cases, contacts, event participants and travel entries. errorQuarantineBulkOnlySupportedEntities = Bulk quarantine can only be issued for cases, contacts, event participants. errorCreatingTemplateDirectory = Could not create template directory. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = This immunization is not editable any more errorForbidden = Access to the specified resource has been forbidden. Please contact your supervisor or administrator and inform them about it errorNoRightsForChangingField = You have no rights for changing %s errorNoRightsForChangingMultipleFields = You have no rights for changing %s and related fields +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Cannot delete user role, because the following users would remain without a user role\:

%s

Please give them a different role and re-try to delete this one. errorSurveillanceReportNotEditable = This report is not editable any more @@ -505,6 +508,7 @@ headingEditPrescription = Edit prescription headingEditTask = Edit task headingEditTreatment = Edit treatment headingEditUser = Edit user +headingEditVaccination = Edit vaccination headingEditVisit = Edit visit headingEditCountry = Edit country headingEditContinent = Edit continent @@ -647,9 +651,13 @@ headingUserData = User data headingVaccination = Vaccination headingViewNotFound = The view could not be found headingViewPathogenTestResult = Pathogen test result +headingViewPrescription = View prescription headingViewAdditionalTest = Additional test results +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Report view headingViewTask = View task +headingViewTreatment = View treatment +headingViewVaccination = View vaccination headingViewVisit = Visit view headingVisits = Visits headingVisitsDeleted = Visits deleted @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Revoke share request headingSormasToSormasCantShareContactWithoutCase=Can not share contact headingSormasToSormasCanAcceptContactsWithoutCase=Can not accept contact(s) headingSormasToSormasDuplicateDetection = Potential duplicates detected +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Share request details headingShareRequestCases=Cases headingShareRequestContacts=Contacts @@ -964,7 +973,7 @@ infoUserSyncProcess = %d users are being synced to the External Authentication P infoNoSubordinateEvents=No subordinate events infoNoSuperordinateEvent=No superordinate event infoNoEventGroups=No event groups -infoMergeFiltersHint = Calculating and displaying potential duplicates may take a lot of time under specific circumstances. It is recommended to use the filters on top of this view to reduce the number of rows that have to be compared at the same time, e.g. by choosing a narrow creation date interval and a low result count limit. If the potential duplicates are loading fast, extending these values should be safe.

In order to avoid performance issues when entering this view, potential duplicates are only loaded once you click on "Confirm Filters". +infoMergeFiltersHint = Calculating and displaying potential duplicate cases is a very complex task and can require a lot of time. It is strongly recommended to adjust the filters on top of this view to reduce the number of cases that are detected at the same time, e.g. by increasing the lower threshold of the "Creation date" filter, or by selecting thresholds for the "Report or Onset Date".

When you see this hint, the loading of duplicates has been temporarily blocked to make sure that you can adjust the filters. Clicking on "Confirm Filters" after doing so will bring up the list of potential duplicates. infoPlaceOfStayInHospital = Please select a hospital as the place of stay. If the case is not currently admitted to a hospital as an inpatient, please document hospitalizations under previous hospitalizations. infoMoreDetailsAboutHospitalization = For adding more details about the hospitalization, go to the hospitalization tab. infoCountryNotEditableEventParticipantsWithoutJurisdiction = Changing the country is not permitted because at least one event participant in this event does not have a responsible region and/or responsible district set. @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Search for another person infoTasksWithMultipleJurisdictionsSelected = You have selected tasks connected to different jurisdictions, or that are connected to data that does not have facility or point of entry information. Only users on %s level or above will be selectable as assignees. infoNoAccessToPersonEntities = You don't have the necessary user rights to view any entries associated with persons. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s events not deleted. Event Ids not deleted\: %s messageEventsNotDeletedReason = No events that contain event participants linked will be deleted. Please remove the events participants from the event in order to be able to delete it. messageCountEventsNotDeletedExternalSurveillanceTool=%s events not deleted due to the reporting tool communication. Event Ids not deleted\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Some events were not deleted because the communication with the reporting tool failed. -messageEventsEdited = All events have been edited -messageEventsEditedExceptArchived = %s events have been successfully edited. Some of the events could not be edited because they are in a different jurisdiction or were already archived. messageExportFailed = There was an error preventing the data to be exported. Please contact an admin and inform them about this issue. messageExportConfigurationDeleted = Export configuration deleted messageExportConfigurationSaved = Export configuration saved @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = You need to select two persons for merge\ messageAutomaticDeletionStarted = Automatic deletion has been started and will be executed in the background. Please note that, depending on the amount of data that is deleted, this process can take some time. messageUserRoleUnusableForLogin = Users with only this role will not be able to login because the role does not have Access Sormas UI nor Access Sormas REST right messageUserRoleHasNoRights = This user role has no rights. Please select at least one right. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited diff --git a/sormas-api/src/main/resources/strings_ne-NP.properties b/sormas-api/src/main/resources/strings_ne-NP.properties index 29b9b4dfb33..ba1d5d26247 100644 --- a/sormas-api/src/main/resources/strings_ne-NP.properties +++ b/sormas-api/src/main/resources/strings_ne-NP.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = This message contains corrections to a p confirmationVaccinationStatusUpdate = Deleting this vaccination has lead to at least one case no longer having a valid vaccination. Do you want to remove the vaccination status from all affected cases? confirmExternalMessageCorrectionThrough = No other new or changed information could automatically be determined from the message. Do you want to manually add or edit more information? confirmationDeleteCaseContacts = Do you also want to delete all contacts of this case? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=Entity was automatically deleted @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = If you want to share thi errorSormasToSormasAcceptContactsWithoutCaseShared = The contact %s cannot be accepted, because it was sent without a case. Please reject the contact and ask the source system to send the linked case first. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = The contact %s cannot be accepted, because the contact belongs to a case that has not yet been accepted. Please accept the linked case first.
It is shared within the request %s. errorSormasToSormasExistingPendingRequest = There is already a pending request to the same organization. Please revoke it before sending a new one. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = Quarantine can only be issued for cases, contacts, event participants and travel entries. errorQuarantineBulkOnlySupportedEntities = Bulk quarantine can only be issued for cases, contacts, event participants. errorCreatingTemplateDirectory = Could not create template directory. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = This immunization is not editable any more errorForbidden = Access to the specified resource has been forbidden. Please contact your supervisor or administrator and inform them about it errorNoRightsForChangingField = You have no rights for changing %s errorNoRightsForChangingMultipleFields = You have no rights for changing %s and related fields +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Cannot delete user role, because the following users would remain without a user role\:

%s

Please give them a different role and re-try to delete this one. errorSurveillanceReportNotEditable = This report is not editable any more @@ -505,6 +508,7 @@ headingEditPrescription = Edit prescription headingEditTask = Edit task headingEditTreatment = Edit treatment headingEditUser = Edit user +headingEditVaccination = Edit vaccination headingEditVisit = Edit visit headingEditCountry = Edit country headingEditContinent = Edit continent @@ -647,9 +651,13 @@ headingUserData = User data headingVaccination = Vaccination headingViewNotFound = The view could not be found headingViewPathogenTestResult = Pathogen test result +headingViewPrescription = View prescription headingViewAdditionalTest = Additional test results +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Report view headingViewTask = View task +headingViewTreatment = View treatment +headingViewVaccination = View vaccination headingViewVisit = Visit view headingVisits = Visits headingVisitsDeleted = Visits deleted @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Revoke share request headingSormasToSormasCantShareContactWithoutCase=Can not share contact headingSormasToSormasCanAcceptContactsWithoutCase=Can not accept contact(s) headingSormasToSormasDuplicateDetection = Potential duplicates detected +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Share request details headingShareRequestCases=Cases headingShareRequestContacts=Contacts @@ -964,7 +973,7 @@ infoUserSyncProcess = %d users are being synced to the External Authentication P infoNoSubordinateEvents=No subordinate events infoNoSuperordinateEvent=No superordinate event infoNoEventGroups=No event groups -infoMergeFiltersHint = Calculating and displaying potential duplicates may take a lot of time under specific circumstances. It is recommended to use the filters on top of this view to reduce the number of rows that have to be compared at the same time, e.g. by choosing a narrow creation date interval and a low result count limit. If the potential duplicates are loading fast, extending these values should be safe.

In order to avoid performance issues when entering this view, potential duplicates are only loaded once you click on "Confirm Filters". +infoMergeFiltersHint = Calculating and displaying potential duplicate cases is a very complex task and can require a lot of time. It is strongly recommended to adjust the filters on top of this view to reduce the number of cases that are detected at the same time, e.g. by increasing the lower threshold of the "Creation date" filter, or by selecting thresholds for the "Report or Onset Date".

When you see this hint, the loading of duplicates has been temporarily blocked to make sure that you can adjust the filters. Clicking on "Confirm Filters" after doing so will bring up the list of potential duplicates. infoPlaceOfStayInHospital = Please select a hospital as the place of stay. If the case is not currently admitted to a hospital as an inpatient, please document hospitalizations under previous hospitalizations. infoMoreDetailsAboutHospitalization = For adding more details about the hospitalization, go to the hospitalization tab. infoCountryNotEditableEventParticipantsWithoutJurisdiction = Changing the country is not permitted because at least one event participant in this event does not have a responsible region and/or responsible district set. @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Search for another person infoTasksWithMultipleJurisdictionsSelected = You have selected tasks connected to different jurisdictions, or that are connected to data that does not have facility or point of entry information. Only users on %s level or above will be selectable as assignees. infoNoAccessToPersonEntities = You don't have the necessary user rights to view any entries associated with persons. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s events not deleted. Event Ids not deleted\: %s messageEventsNotDeletedReason = No events that contain event participants linked will be deleted. Please remove the events participants from the event in order to be able to delete it. messageCountEventsNotDeletedExternalSurveillanceTool=%s events not deleted due to the reporting tool communication. Event Ids not deleted\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Some events were not deleted because the communication with the reporting tool failed. -messageEventsEdited = All events have been edited -messageEventsEditedExceptArchived = %s events have been successfully edited. Some of the events could not be edited because they are in a different jurisdiction or were already archived. messageExportFailed = There was an error preventing the data to be exported. Please contact an admin and inform them about this issue. messageExportConfigurationDeleted = Export configuration deleted messageExportConfigurationSaved = Export configuration saved @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = You need to select two persons for merge\ messageAutomaticDeletionStarted = Automatic deletion has been started and will be executed in the background. Please note that, depending on the amount of data that is deleted, this process can take some time. messageUserRoleUnusableForLogin = Users with only this role will not be able to login because the role does not have Access Sormas UI nor Access Sormas REST right messageUserRoleHasNoRights = This user role has no rights. Please select at least one right. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited diff --git a/sormas-api/src/main/resources/strings_nl-NL.properties b/sormas-api/src/main/resources/strings_nl-NL.properties index 192a5ad00f4..1314823c0cf 100644 --- a/sormas-api/src/main/resources/strings_nl-NL.properties +++ b/sormas-api/src/main/resources/strings_nl-NL.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = This message contains corrections to a p confirmationVaccinationStatusUpdate = Deleting this vaccination has lead to at least one case no longer having a valid vaccination. Do you want to remove the vaccination status from all affected cases? confirmExternalMessageCorrectionThrough = No other new or changed information could automatically be determined from the message. Do you want to manually add or edit more information? confirmationDeleteCaseContacts = Do you also want to delete all contacts of this case? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=Entity was automatically deleted @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = If you want to share thi errorSormasToSormasAcceptContactsWithoutCaseShared = The contact %s cannot be accepted, because it was sent without a case. Please reject the contact and ask the source system to send the linked case first. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = The contact %s cannot be accepted, because the contact belongs to a case that has not yet been accepted. Please accept the linked case first.
It is shared within the request %s. errorSormasToSormasExistingPendingRequest = There is already a pending request to the same organization. Please revoke it before sending a new one. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = Quarantine can only be issued for cases, contacts, event participants and travel entries. errorQuarantineBulkOnlySupportedEntities = Bulk quarantine can only be issued for cases, contacts, event participants. errorCreatingTemplateDirectory = Could not create template directory. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = This immunization is not editable any more errorForbidden = Access to the specified resource has been forbidden. Please contact your supervisor or administrator and inform them about it errorNoRightsForChangingField = You have no rights for changing %s errorNoRightsForChangingMultipleFields = You have no rights for changing %s and related fields +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Cannot delete user role, because the following users would remain without a user role\:

%s

Please give them a different role and re-try to delete this one. errorSurveillanceReportNotEditable = This report is not editable any more @@ -505,6 +508,7 @@ headingEditPrescription = Edit prescription headingEditTask = Edit task headingEditTreatment = Edit treatment headingEditUser = Edit user +headingEditVaccination = Edit vaccination headingEditVisit = Edit visit headingEditCountry = Edit country headingEditContinent = Edit continent @@ -647,9 +651,13 @@ headingUserData = User data headingVaccination = Vaccination headingViewNotFound = The view could not be found headingViewPathogenTestResult = Pathogen test result +headingViewPrescription = View prescription headingViewAdditionalTest = Additional test results +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Report view headingViewTask = View task +headingViewTreatment = View treatment +headingViewVaccination = View vaccination headingViewVisit = Visit view headingVisits = Visits headingVisitsDeleted = Visits deleted @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Revoke share request headingSormasToSormasCantShareContactWithoutCase=Can not share contact headingSormasToSormasCanAcceptContactsWithoutCase=Can not accept contact(s) headingSormasToSormasDuplicateDetection = Potential duplicates detected +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Share request details headingShareRequestCases=Cases headingShareRequestContacts=Contacts @@ -964,7 +973,7 @@ infoUserSyncProcess = %d users are being synced to the External Authentication P infoNoSubordinateEvents=No subordinate events infoNoSuperordinateEvent=No superordinate event infoNoEventGroups=No event groups -infoMergeFiltersHint = Calculating and displaying potential duplicates may take a lot of time under specific circumstances. It is recommended to use the filters on top of this view to reduce the number of rows that have to be compared at the same time, e.g. by choosing a narrow creation date interval and a low result count limit. If the potential duplicates are loading fast, extending these values should be safe.

In order to avoid performance issues when entering this view, potential duplicates are only loaded once you click on "Confirm Filters". +infoMergeFiltersHint = Calculating and displaying potential duplicate cases is a very complex task and can require a lot of time. It is strongly recommended to adjust the filters on top of this view to reduce the number of cases that are detected at the same time, e.g. by increasing the lower threshold of the "Creation date" filter, or by selecting thresholds for the "Report or Onset Date".

When you see this hint, the loading of duplicates has been temporarily blocked to make sure that you can adjust the filters. Clicking on "Confirm Filters" after doing so will bring up the list of potential duplicates. infoPlaceOfStayInHospital = Please select a hospital as the place of stay. If the case is not currently admitted to a hospital as an inpatient, please document hospitalizations under previous hospitalizations. infoMoreDetailsAboutHospitalization = For adding more details about the hospitalization, go to the hospitalization tab. infoCountryNotEditableEventParticipantsWithoutJurisdiction = Changing the country is not permitted because at least one event participant in this event does not have a responsible region and/or responsible district set. @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Search for another person infoTasksWithMultipleJurisdictionsSelected = You have selected tasks connected to different jurisdictions, or that are connected to data that does not have facility or point of entry information. Only users on %s level or above will be selectable as assignees. infoNoAccessToPersonEntities = You don't have the necessary user rights to view any entries associated with persons. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s events not deleted. Event Ids not deleted\: %s messageEventsNotDeletedReason = No events that contain event participants linked will be deleted. Please remove the events participants from the event in order to be able to delete it. messageCountEventsNotDeletedExternalSurveillanceTool=%s events not deleted due to the reporting tool communication. Event Ids not deleted\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Some events were not deleted because the communication with the reporting tool failed. -messageEventsEdited = All events have been edited -messageEventsEditedExceptArchived = %s events have been successfully edited. Some of the events could not be edited because they are in a different jurisdiction or were already archived. messageExportFailed = There was an error preventing the data to be exported. Please contact an admin and inform them about this issue. messageExportConfigurationDeleted = Export configuration deleted messageExportConfigurationSaved = Export configuration saved @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = You need to select two persons for merge\ messageAutomaticDeletionStarted = Automatic deletion has been started and will be executed in the background. Please note that, depending on the amount of data that is deleted, this process can take some time. messageUserRoleUnusableForLogin = Users with only this role will not be able to login because the role does not have Access Sormas UI nor Access Sormas REST right messageUserRoleHasNoRights = This user role has no rights. Please select at least one right. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited diff --git a/sormas-api/src/main/resources/strings_no-NO.properties b/sormas-api/src/main/resources/strings_no-NO.properties index 192a5ad00f4..1314823c0cf 100644 --- a/sormas-api/src/main/resources/strings_no-NO.properties +++ b/sormas-api/src/main/resources/strings_no-NO.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = This message contains corrections to a p confirmationVaccinationStatusUpdate = Deleting this vaccination has lead to at least one case no longer having a valid vaccination. Do you want to remove the vaccination status from all affected cases? confirmExternalMessageCorrectionThrough = No other new or changed information could automatically be determined from the message. Do you want to manually add or edit more information? confirmationDeleteCaseContacts = Do you also want to delete all contacts of this case? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=Entity was automatically deleted @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = If you want to share thi errorSormasToSormasAcceptContactsWithoutCaseShared = The contact %s cannot be accepted, because it was sent without a case. Please reject the contact and ask the source system to send the linked case first. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = The contact %s cannot be accepted, because the contact belongs to a case that has not yet been accepted. Please accept the linked case first.
It is shared within the request %s. errorSormasToSormasExistingPendingRequest = There is already a pending request to the same organization. Please revoke it before sending a new one. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = Quarantine can only be issued for cases, contacts, event participants and travel entries. errorQuarantineBulkOnlySupportedEntities = Bulk quarantine can only be issued for cases, contacts, event participants. errorCreatingTemplateDirectory = Could not create template directory. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = This immunization is not editable any more errorForbidden = Access to the specified resource has been forbidden. Please contact your supervisor or administrator and inform them about it errorNoRightsForChangingField = You have no rights for changing %s errorNoRightsForChangingMultipleFields = You have no rights for changing %s and related fields +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Cannot delete user role, because the following users would remain without a user role\:

%s

Please give them a different role and re-try to delete this one. errorSurveillanceReportNotEditable = This report is not editable any more @@ -505,6 +508,7 @@ headingEditPrescription = Edit prescription headingEditTask = Edit task headingEditTreatment = Edit treatment headingEditUser = Edit user +headingEditVaccination = Edit vaccination headingEditVisit = Edit visit headingEditCountry = Edit country headingEditContinent = Edit continent @@ -647,9 +651,13 @@ headingUserData = User data headingVaccination = Vaccination headingViewNotFound = The view could not be found headingViewPathogenTestResult = Pathogen test result +headingViewPrescription = View prescription headingViewAdditionalTest = Additional test results +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Report view headingViewTask = View task +headingViewTreatment = View treatment +headingViewVaccination = View vaccination headingViewVisit = Visit view headingVisits = Visits headingVisitsDeleted = Visits deleted @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Revoke share request headingSormasToSormasCantShareContactWithoutCase=Can not share contact headingSormasToSormasCanAcceptContactsWithoutCase=Can not accept contact(s) headingSormasToSormasDuplicateDetection = Potential duplicates detected +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Share request details headingShareRequestCases=Cases headingShareRequestContacts=Contacts @@ -964,7 +973,7 @@ infoUserSyncProcess = %d users are being synced to the External Authentication P infoNoSubordinateEvents=No subordinate events infoNoSuperordinateEvent=No superordinate event infoNoEventGroups=No event groups -infoMergeFiltersHint = Calculating and displaying potential duplicates may take a lot of time under specific circumstances. It is recommended to use the filters on top of this view to reduce the number of rows that have to be compared at the same time, e.g. by choosing a narrow creation date interval and a low result count limit. If the potential duplicates are loading fast, extending these values should be safe.

In order to avoid performance issues when entering this view, potential duplicates are only loaded once you click on "Confirm Filters". +infoMergeFiltersHint = Calculating and displaying potential duplicate cases is a very complex task and can require a lot of time. It is strongly recommended to adjust the filters on top of this view to reduce the number of cases that are detected at the same time, e.g. by increasing the lower threshold of the "Creation date" filter, or by selecting thresholds for the "Report or Onset Date".

When you see this hint, the loading of duplicates has been temporarily blocked to make sure that you can adjust the filters. Clicking on "Confirm Filters" after doing so will bring up the list of potential duplicates. infoPlaceOfStayInHospital = Please select a hospital as the place of stay. If the case is not currently admitted to a hospital as an inpatient, please document hospitalizations under previous hospitalizations. infoMoreDetailsAboutHospitalization = For adding more details about the hospitalization, go to the hospitalization tab. infoCountryNotEditableEventParticipantsWithoutJurisdiction = Changing the country is not permitted because at least one event participant in this event does not have a responsible region and/or responsible district set. @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Search for another person infoTasksWithMultipleJurisdictionsSelected = You have selected tasks connected to different jurisdictions, or that are connected to data that does not have facility or point of entry information. Only users on %s level or above will be selectable as assignees. infoNoAccessToPersonEntities = You don't have the necessary user rights to view any entries associated with persons. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s events not deleted. Event Ids not deleted\: %s messageEventsNotDeletedReason = No events that contain event participants linked will be deleted. Please remove the events participants from the event in order to be able to delete it. messageCountEventsNotDeletedExternalSurveillanceTool=%s events not deleted due to the reporting tool communication. Event Ids not deleted\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Some events were not deleted because the communication with the reporting tool failed. -messageEventsEdited = All events have been edited -messageEventsEditedExceptArchived = %s events have been successfully edited. Some of the events could not be edited because they are in a different jurisdiction or were already archived. messageExportFailed = There was an error preventing the data to be exported. Please contact an admin and inform them about this issue. messageExportConfigurationDeleted = Export configuration deleted messageExportConfigurationSaved = Export configuration saved @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = You need to select two persons for merge\ messageAutomaticDeletionStarted = Automatic deletion has been started and will be executed in the background. Please note that, depending on the amount of data that is deleted, this process can take some time. messageUserRoleUnusableForLogin = Users with only this role will not be able to login because the role does not have Access Sormas UI nor Access Sormas REST right messageUserRoleHasNoRights = This user role has no rights. Please select at least one right. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited diff --git a/sormas-api/src/main/resources/strings_pl-PL.properties b/sormas-api/src/main/resources/strings_pl-PL.properties index 18a5607e4f4..f0ca84a9f8a 100644 --- a/sormas-api/src/main/resources/strings_pl-PL.properties +++ b/sormas-api/src/main/resources/strings_pl-PL.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = This message contains corrections to a p confirmationVaccinationStatusUpdate = Deleting this vaccination has lead to at least one case no longer having a valid vaccination. Do you want to remove the vaccination status from all affected cases? confirmExternalMessageCorrectionThrough = No other new or changed information could automatically be determined from the message. Do you want to manually add or edit more information? confirmationDeleteCaseContacts = Do you also want to delete all contacts of this case? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=Entity was automatically deleted @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = If you want to share thi errorSormasToSormasAcceptContactsWithoutCaseShared = The contact %s cannot be accepted, because it was sent without a case. Please reject the contact and ask the source system to send the linked case first. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = The contact %s cannot be accepted, because the contact belongs to a case that has not yet been accepted. Please accept the linked case first.
It is shared within the request %s. errorSormasToSormasExistingPendingRequest = There is already a pending request to the same organization. Please revoke it before sending a new one. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = Quarantine can only be issued for cases, contacts, event participants and travel entries. errorQuarantineBulkOnlySupportedEntities = Bulk quarantine can only be issued for cases, contacts, event participants. errorCreatingTemplateDirectory = Could not create template directory. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = This immunization is not editable any more errorForbidden = Access to the specified resource has been forbidden. Please contact your supervisor or administrator and inform them about it errorNoRightsForChangingField = You have no rights for changing %s errorNoRightsForChangingMultipleFields = You have no rights for changing %s and related fields +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Cannot delete user role, because the following users would remain without a user role\:

%s

Please give them a different role and re-try to delete this one. errorSurveillanceReportNotEditable = This report is not editable any more @@ -505,6 +508,7 @@ headingEditPrescription = Edit prescription headingEditTask = Edit task headingEditTreatment = Edit treatment headingEditUser = Edit user +headingEditVaccination = Edit vaccination headingEditVisit = Edit visit headingEditCountry = Edit country headingEditContinent = Edit continent @@ -647,9 +651,13 @@ headingUserData = User data headingVaccination = Vaccination headingViewNotFound = The view could not be found headingViewPathogenTestResult = Pathogen test result +headingViewPrescription = View prescription headingViewAdditionalTest = Additional test results +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Report view headingViewTask = View task +headingViewTreatment = View treatment +headingViewVaccination = View vaccination headingViewVisit = Visit view headingVisits = Visits headingVisitsDeleted = Visits deleted @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Revoke share request headingSormasToSormasCantShareContactWithoutCase=Can not share contact headingSormasToSormasCanAcceptContactsWithoutCase=Can not accept contact(s) headingSormasToSormasDuplicateDetection = Potential duplicates detected +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Share request details headingShareRequestCases=Cases headingShareRequestContacts=Contacts @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Search for another person infoTasksWithMultipleJurisdictionsSelected = You have selected tasks connected to different jurisdictions, or that are connected to data that does not have facility or point of entry information. Only users on %s level or above will be selectable as assignees. infoNoAccessToPersonEntities = You don't have the necessary user rights to view any entries associated with persons. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s events not deleted. Event Ids not deleted\: %s messageEventsNotDeletedReason = No events that contain event participants linked will be deleted. Please remove the events participants from the event in order to be able to delete it. messageCountEventsNotDeletedExternalSurveillanceTool=%s events not deleted due to the reporting tool communication. Event Ids not deleted\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Some events were not deleted because the communication with the reporting tool failed. -messageEventsEdited = All events have been edited -messageEventsEditedExceptArchived = %s events have been successfully edited. Some of the events could not be edited because they are in a different jurisdiction or were already archived. messageExportFailed = There was an error preventing the data to be exported. Please contact an admin and inform them about this issue. messageExportConfigurationDeleted = Export configuration deleted messageExportConfigurationSaved = Export configuration saved @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = You need to select two persons for merge\ messageAutomaticDeletionStarted = Automatic deletion has been started and will be executed in the background. Please note that, depending on the amount of data that is deleted, this process can take some time. messageUserRoleUnusableForLogin = Users with only this role will not be able to login because the role does not have Access Sormas UI nor Access Sormas REST right messageUserRoleHasNoRights = This user role has no rights. Please select at least one right. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited diff --git a/sormas-api/src/main/resources/strings_ps-AF.properties b/sormas-api/src/main/resources/strings_ps-AF.properties index 533d2eea4d4..b5d47fd6906 100644 --- a/sormas-api/src/main/resources/strings_ps-AF.properties +++ b/sormas-api/src/main/resources/strings_ps-AF.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = This message contains corrections to a p confirmationVaccinationStatusUpdate = Deleting this vaccination has lead to at least one case no longer having a valid vaccination. Do you want to remove the vaccination status from all affected cases? confirmExternalMessageCorrectionThrough = No other new or changed information could automatically be determined from the message. Do you want to manually add or edit more information? confirmationDeleteCaseContacts = Do you also want to delete all contacts of this case? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=Entity was automatically deleted @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = If you want to share thi errorSormasToSormasAcceptContactsWithoutCaseShared = The contact %s cannot be accepted, because it was sent without a case. Please reject the contact and ask the source system to send the linked case first. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = The contact %s cannot be accepted, because the contact belongs to a case that has not yet been accepted. Please accept the linked case first.
It is shared within the request %s. errorSormasToSormasExistingPendingRequest = There is already a pending request to the same organization. Please revoke it before sending a new one. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = Quarantine can only be issued for cases, contacts, event participants and travel entries. errorQuarantineBulkOnlySupportedEntities = Bulk quarantine can only be issued for cases, contacts, event participants. errorCreatingTemplateDirectory = Could not create template directory. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = This immunization is not editable any more errorForbidden = Access to the specified resource has been forbidden. Please contact your supervisor or administrator and inform them about it errorNoRightsForChangingField = You have no rights for changing %s errorNoRightsForChangingMultipleFields = You have no rights for changing %s and related fields +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Cannot delete user role, because the following users would remain without a user role\:

%s

Please give them a different role and re-try to delete this one. errorSurveillanceReportNotEditable = This report is not editable any more @@ -505,6 +508,7 @@ headingEditPrescription = Edit prescription headingEditTask = Edit task headingEditTreatment = Edit treatment headingEditUser = Edit user +headingEditVaccination = Edit vaccination headingEditVisit = Edit visit headingEditCountry = Edit country headingEditContinent = Edit continent @@ -647,9 +651,13 @@ headingUserData = User data headingVaccination = Vaccination headingViewNotFound = The view could not be found headingViewPathogenTestResult = Pathogen test result +headingViewPrescription = View prescription headingViewAdditionalTest = Additional test results +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Report view headingViewTask = View task +headingViewTreatment = View treatment +headingViewVaccination = View vaccination headingViewVisit = Visit view headingVisits = Visits headingVisitsDeleted = Visits deleted @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Revoke share request headingSormasToSormasCantShareContactWithoutCase=Can not share contact headingSormasToSormasCanAcceptContactsWithoutCase=Can not accept contact(s) headingSormasToSormasDuplicateDetection = Potential duplicates detected +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Share request details headingShareRequestCases=Cases headingShareRequestContacts=Contacts @@ -964,7 +973,7 @@ infoUserSyncProcess = %d users are being synced to the External Authentication P infoNoSubordinateEvents=No subordinate events infoNoSuperordinateEvent=No superordinate event infoNoEventGroups=No event groups -infoMergeFiltersHint = Calculating and displaying potential duplicates may take a lot of time under specific circumstances. It is recommended to use the filters on top of this view to reduce the number of rows that have to be compared at the same time, e.g. by choosing a narrow creation date interval and a low result count limit. If the potential duplicates are loading fast, extending these values should be safe.

In order to avoid performance issues when entering this view, potential duplicates are only loaded once you click on "Confirm Filters". +infoMergeFiltersHint = Calculating and displaying potential duplicate cases is a very complex task and can require a lot of time. It is strongly recommended to adjust the filters on top of this view to reduce the number of cases that are detected at the same time, e.g. by increasing the lower threshold of the "Creation date" filter, or by selecting thresholds for the "Report or Onset Date".

When you see this hint, the loading of duplicates has been temporarily blocked to make sure that you can adjust the filters. Clicking on "Confirm Filters" after doing so will bring up the list of potential duplicates. infoPlaceOfStayInHospital = Please select a hospital as the place of stay. If the case is not currently admitted to a hospital as an inpatient, please document hospitalizations under previous hospitalizations. infoMoreDetailsAboutHospitalization = For adding more details about the hospitalization, go to the hospitalization tab. infoCountryNotEditableEventParticipantsWithoutJurisdiction = Changing the country is not permitted because at least one event participant in this event does not have a responsible region and/or responsible district set. @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Search for another person infoTasksWithMultipleJurisdictionsSelected = You have selected tasks connected to different jurisdictions, or that are connected to data that does not have facility or point of entry information. Only users on %s level or above will be selectable as assignees. infoNoAccessToPersonEntities = You don't have the necessary user rights to view any entries associated with persons. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s events not deleted. Event Ids not deleted\: %s messageEventsNotDeletedReason = No events that contain event participants linked will be deleted. Please remove the events participants from the event in order to be able to delete it. messageCountEventsNotDeletedExternalSurveillanceTool=%s events not deleted due to the reporting tool communication. Event Ids not deleted\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Some events were not deleted because the communication with the reporting tool failed. -messageEventsEdited = All events have been edited -messageEventsEditedExceptArchived = %s events have been successfully edited. Some of the events could not be edited because they are in a different jurisdiction or were already archived. messageExportFailed = There was an error preventing the data to be exported. Please contact an admin and inform them about this issue. messageExportConfigurationDeleted = Export configuration deleted messageExportConfigurationSaved = Export configuration saved @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = You need to select two persons for merge\ messageAutomaticDeletionStarted = Automatic deletion has been started and will be executed in the background. Please note that, depending on the amount of data that is deleted, this process can take some time. messageUserRoleUnusableForLogin = Users with only this role will not be able to login because the role does not have Access Sormas UI nor Access Sormas REST right messageUserRoleHasNoRights = This user role has no rights. Please select at least one right. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited diff --git a/sormas-api/src/main/resources/strings_pt-PT.properties b/sormas-api/src/main/resources/strings_pt-PT.properties index 192a5ad00f4..1314823c0cf 100644 --- a/sormas-api/src/main/resources/strings_pt-PT.properties +++ b/sormas-api/src/main/resources/strings_pt-PT.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = This message contains corrections to a p confirmationVaccinationStatusUpdate = Deleting this vaccination has lead to at least one case no longer having a valid vaccination. Do you want to remove the vaccination status from all affected cases? confirmExternalMessageCorrectionThrough = No other new or changed information could automatically be determined from the message. Do you want to manually add or edit more information? confirmationDeleteCaseContacts = Do you also want to delete all contacts of this case? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=Entity was automatically deleted @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = If you want to share thi errorSormasToSormasAcceptContactsWithoutCaseShared = The contact %s cannot be accepted, because it was sent without a case. Please reject the contact and ask the source system to send the linked case first. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = The contact %s cannot be accepted, because the contact belongs to a case that has not yet been accepted. Please accept the linked case first.
It is shared within the request %s. errorSormasToSormasExistingPendingRequest = There is already a pending request to the same organization. Please revoke it before sending a new one. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = Quarantine can only be issued for cases, contacts, event participants and travel entries. errorQuarantineBulkOnlySupportedEntities = Bulk quarantine can only be issued for cases, contacts, event participants. errorCreatingTemplateDirectory = Could not create template directory. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = This immunization is not editable any more errorForbidden = Access to the specified resource has been forbidden. Please contact your supervisor or administrator and inform them about it errorNoRightsForChangingField = You have no rights for changing %s errorNoRightsForChangingMultipleFields = You have no rights for changing %s and related fields +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Cannot delete user role, because the following users would remain without a user role\:

%s

Please give them a different role and re-try to delete this one. errorSurveillanceReportNotEditable = This report is not editable any more @@ -505,6 +508,7 @@ headingEditPrescription = Edit prescription headingEditTask = Edit task headingEditTreatment = Edit treatment headingEditUser = Edit user +headingEditVaccination = Edit vaccination headingEditVisit = Edit visit headingEditCountry = Edit country headingEditContinent = Edit continent @@ -647,9 +651,13 @@ headingUserData = User data headingVaccination = Vaccination headingViewNotFound = The view could not be found headingViewPathogenTestResult = Pathogen test result +headingViewPrescription = View prescription headingViewAdditionalTest = Additional test results +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Report view headingViewTask = View task +headingViewTreatment = View treatment +headingViewVaccination = View vaccination headingViewVisit = Visit view headingVisits = Visits headingVisitsDeleted = Visits deleted @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Revoke share request headingSormasToSormasCantShareContactWithoutCase=Can not share contact headingSormasToSormasCanAcceptContactsWithoutCase=Can not accept contact(s) headingSormasToSormasDuplicateDetection = Potential duplicates detected +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Share request details headingShareRequestCases=Cases headingShareRequestContacts=Contacts @@ -964,7 +973,7 @@ infoUserSyncProcess = %d users are being synced to the External Authentication P infoNoSubordinateEvents=No subordinate events infoNoSuperordinateEvent=No superordinate event infoNoEventGroups=No event groups -infoMergeFiltersHint = Calculating and displaying potential duplicates may take a lot of time under specific circumstances. It is recommended to use the filters on top of this view to reduce the number of rows that have to be compared at the same time, e.g. by choosing a narrow creation date interval and a low result count limit. If the potential duplicates are loading fast, extending these values should be safe.

In order to avoid performance issues when entering this view, potential duplicates are only loaded once you click on "Confirm Filters". +infoMergeFiltersHint = Calculating and displaying potential duplicate cases is a very complex task and can require a lot of time. It is strongly recommended to adjust the filters on top of this view to reduce the number of cases that are detected at the same time, e.g. by increasing the lower threshold of the "Creation date" filter, or by selecting thresholds for the "Report or Onset Date".

When you see this hint, the loading of duplicates has been temporarily blocked to make sure that you can adjust the filters. Clicking on "Confirm Filters" after doing so will bring up the list of potential duplicates. infoPlaceOfStayInHospital = Please select a hospital as the place of stay. If the case is not currently admitted to a hospital as an inpatient, please document hospitalizations under previous hospitalizations. infoMoreDetailsAboutHospitalization = For adding more details about the hospitalization, go to the hospitalization tab. infoCountryNotEditableEventParticipantsWithoutJurisdiction = Changing the country is not permitted because at least one event participant in this event does not have a responsible region and/or responsible district set. @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Search for another person infoTasksWithMultipleJurisdictionsSelected = You have selected tasks connected to different jurisdictions, or that are connected to data that does not have facility or point of entry information. Only users on %s level or above will be selectable as assignees. infoNoAccessToPersonEntities = You don't have the necessary user rights to view any entries associated with persons. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s events not deleted. Event Ids not deleted\: %s messageEventsNotDeletedReason = No events that contain event participants linked will be deleted. Please remove the events participants from the event in order to be able to delete it. messageCountEventsNotDeletedExternalSurveillanceTool=%s events not deleted due to the reporting tool communication. Event Ids not deleted\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Some events were not deleted because the communication with the reporting tool failed. -messageEventsEdited = All events have been edited -messageEventsEditedExceptArchived = %s events have been successfully edited. Some of the events could not be edited because they are in a different jurisdiction or were already archived. messageExportFailed = There was an error preventing the data to be exported. Please contact an admin and inform them about this issue. messageExportConfigurationDeleted = Export configuration deleted messageExportConfigurationSaved = Export configuration saved @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = You need to select two persons for merge\ messageAutomaticDeletionStarted = Automatic deletion has been started and will be executed in the background. Please note that, depending on the amount of data that is deleted, this process can take some time. messageUserRoleUnusableForLogin = Users with only this role will not be able to login because the role does not have Access Sormas UI nor Access Sormas REST right messageUserRoleHasNoRights = This user role has no rights. Please select at least one right. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited diff --git a/sormas-api/src/main/resources/strings_ro-RO.properties b/sormas-api/src/main/resources/strings_ro-RO.properties index 192a5ad00f4..1314823c0cf 100644 --- a/sormas-api/src/main/resources/strings_ro-RO.properties +++ b/sormas-api/src/main/resources/strings_ro-RO.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = This message contains corrections to a p confirmationVaccinationStatusUpdate = Deleting this vaccination has lead to at least one case no longer having a valid vaccination. Do you want to remove the vaccination status from all affected cases? confirmExternalMessageCorrectionThrough = No other new or changed information could automatically be determined from the message. Do you want to manually add or edit more information? confirmationDeleteCaseContacts = Do you also want to delete all contacts of this case? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=Entity was automatically deleted @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = If you want to share thi errorSormasToSormasAcceptContactsWithoutCaseShared = The contact %s cannot be accepted, because it was sent without a case. Please reject the contact and ask the source system to send the linked case first. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = The contact %s cannot be accepted, because the contact belongs to a case that has not yet been accepted. Please accept the linked case first.
It is shared within the request %s. errorSormasToSormasExistingPendingRequest = There is already a pending request to the same organization. Please revoke it before sending a new one. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = Quarantine can only be issued for cases, contacts, event participants and travel entries. errorQuarantineBulkOnlySupportedEntities = Bulk quarantine can only be issued for cases, contacts, event participants. errorCreatingTemplateDirectory = Could not create template directory. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = This immunization is not editable any more errorForbidden = Access to the specified resource has been forbidden. Please contact your supervisor or administrator and inform them about it errorNoRightsForChangingField = You have no rights for changing %s errorNoRightsForChangingMultipleFields = You have no rights for changing %s and related fields +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Cannot delete user role, because the following users would remain without a user role\:

%s

Please give them a different role and re-try to delete this one. errorSurveillanceReportNotEditable = This report is not editable any more @@ -505,6 +508,7 @@ headingEditPrescription = Edit prescription headingEditTask = Edit task headingEditTreatment = Edit treatment headingEditUser = Edit user +headingEditVaccination = Edit vaccination headingEditVisit = Edit visit headingEditCountry = Edit country headingEditContinent = Edit continent @@ -647,9 +651,13 @@ headingUserData = User data headingVaccination = Vaccination headingViewNotFound = The view could not be found headingViewPathogenTestResult = Pathogen test result +headingViewPrescription = View prescription headingViewAdditionalTest = Additional test results +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Report view headingViewTask = View task +headingViewTreatment = View treatment +headingViewVaccination = View vaccination headingViewVisit = Visit view headingVisits = Visits headingVisitsDeleted = Visits deleted @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Revoke share request headingSormasToSormasCantShareContactWithoutCase=Can not share contact headingSormasToSormasCanAcceptContactsWithoutCase=Can not accept contact(s) headingSormasToSormasDuplicateDetection = Potential duplicates detected +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Share request details headingShareRequestCases=Cases headingShareRequestContacts=Contacts @@ -964,7 +973,7 @@ infoUserSyncProcess = %d users are being synced to the External Authentication P infoNoSubordinateEvents=No subordinate events infoNoSuperordinateEvent=No superordinate event infoNoEventGroups=No event groups -infoMergeFiltersHint = Calculating and displaying potential duplicates may take a lot of time under specific circumstances. It is recommended to use the filters on top of this view to reduce the number of rows that have to be compared at the same time, e.g. by choosing a narrow creation date interval and a low result count limit. If the potential duplicates are loading fast, extending these values should be safe.

In order to avoid performance issues when entering this view, potential duplicates are only loaded once you click on "Confirm Filters". +infoMergeFiltersHint = Calculating and displaying potential duplicate cases is a very complex task and can require a lot of time. It is strongly recommended to adjust the filters on top of this view to reduce the number of cases that are detected at the same time, e.g. by increasing the lower threshold of the "Creation date" filter, or by selecting thresholds for the "Report or Onset Date".

When you see this hint, the loading of duplicates has been temporarily blocked to make sure that you can adjust the filters. Clicking on "Confirm Filters" after doing so will bring up the list of potential duplicates. infoPlaceOfStayInHospital = Please select a hospital as the place of stay. If the case is not currently admitted to a hospital as an inpatient, please document hospitalizations under previous hospitalizations. infoMoreDetailsAboutHospitalization = For adding more details about the hospitalization, go to the hospitalization tab. infoCountryNotEditableEventParticipantsWithoutJurisdiction = Changing the country is not permitted because at least one event participant in this event does not have a responsible region and/or responsible district set. @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Search for another person infoTasksWithMultipleJurisdictionsSelected = You have selected tasks connected to different jurisdictions, or that are connected to data that does not have facility or point of entry information. Only users on %s level or above will be selectable as assignees. infoNoAccessToPersonEntities = You don't have the necessary user rights to view any entries associated with persons. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s events not deleted. Event Ids not deleted\: %s messageEventsNotDeletedReason = No events that contain event participants linked will be deleted. Please remove the events participants from the event in order to be able to delete it. messageCountEventsNotDeletedExternalSurveillanceTool=%s events not deleted due to the reporting tool communication. Event Ids not deleted\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Some events were not deleted because the communication with the reporting tool failed. -messageEventsEdited = All events have been edited -messageEventsEditedExceptArchived = %s events have been successfully edited. Some of the events could not be edited because they are in a different jurisdiction or were already archived. messageExportFailed = There was an error preventing the data to be exported. Please contact an admin and inform them about this issue. messageExportConfigurationDeleted = Export configuration deleted messageExportConfigurationSaved = Export configuration saved @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = You need to select two persons for merge\ messageAutomaticDeletionStarted = Automatic deletion has been started and will be executed in the background. Please note that, depending on the amount of data that is deleted, this process can take some time. messageUserRoleUnusableForLogin = Users with only this role will not be able to login because the role does not have Access Sormas UI nor Access Sormas REST right messageUserRoleHasNoRights = This user role has no rights. Please select at least one right. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited diff --git a/sormas-api/src/main/resources/strings_ru-RU.properties b/sormas-api/src/main/resources/strings_ru-RU.properties index 8d2d2fde468..7d5c7f925f5 100644 --- a/sormas-api/src/main/resources/strings_ru-RU.properties +++ b/sormas-api/src/main/resources/strings_ru-RU.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = This message contains corrections to a p confirmationVaccinationStatusUpdate = Deleting this vaccination has lead to at least one case no longer having a valid vaccination. Do you want to remove the vaccination status from all affected cases? confirmExternalMessageCorrectionThrough = No other new or changed information could automatically be determined from the message. Do you want to manually add or edit more information? confirmationDeleteCaseContacts = Do you also want to delete all contacts of this case? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=Entity was automatically deleted @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = If you want to share thi errorSormasToSormasAcceptContactsWithoutCaseShared = The contact %s cannot be accepted, because it was sent without a case. Please reject the contact and ask the source system to send the linked case first. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = The contact %s cannot be accepted, because the contact belongs to a case that has not yet been accepted. Please accept the linked case first.
It is shared within the request %s. errorSormasToSormasExistingPendingRequest = There is already a pending request to the same organization. Please revoke it before sending a new one. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = Quarantine can only be issued for cases, contacts, event participants and travel entries. errorQuarantineBulkOnlySupportedEntities = Bulk quarantine can only be issued for cases, contacts, event participants. errorCreatingTemplateDirectory = Could not create template directory. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = This immunization is not editable any more errorForbidden = Access to the specified resource has been forbidden. Please contact your supervisor or administrator and inform them about it errorNoRightsForChangingField = You have no rights for changing %s errorNoRightsForChangingMultipleFields = You have no rights for changing %s and related fields +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Cannot delete user role, because the following users would remain without a user role\:

%s

Please give them a different role and re-try to delete this one. errorSurveillanceReportNotEditable = This report is not editable any more @@ -505,6 +508,7 @@ headingEditPrescription = Edit prescription headingEditTask = Edit task headingEditTreatment = Edit treatment headingEditUser = Edit user +headingEditVaccination = Edit vaccination headingEditVisit = Edit visit headingEditCountry = Edit country headingEditContinent = Edit continent @@ -647,9 +651,13 @@ headingUserData = User data headingVaccination = Vaccination headingViewNotFound = The view could not be found headingViewPathogenTestResult = Pathogen test result +headingViewPrescription = View prescription headingViewAdditionalTest = Additional test results +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Report view headingViewTask = View task +headingViewTreatment = View treatment +headingViewVaccination = View vaccination headingViewVisit = Visit view headingVisits = Visits headingVisitsDeleted = Visits deleted @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Revoke share request headingSormasToSormasCantShareContactWithoutCase=Can not share contact headingSormasToSormasCanAcceptContactsWithoutCase=Can not accept contact(s) headingSormasToSormasDuplicateDetection = Potential duplicates detected +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Share request details headingShareRequestCases=Cases headingShareRequestContacts=Contacts @@ -964,7 +973,7 @@ infoUserSyncProcess = %d users are being synced to the External Authentication P infoNoSubordinateEvents=No subordinate events infoNoSuperordinateEvent=No superordinate event infoNoEventGroups=No event groups -infoMergeFiltersHint = Calculating and displaying potential duplicates may take a lot of time under specific circumstances. It is recommended to use the filters on top of this view to reduce the number of rows that have to be compared at the same time, e.g. by choosing a narrow creation date interval and a low result count limit. If the potential duplicates are loading fast, extending these values should be safe.

In order to avoid performance issues when entering this view, potential duplicates are only loaded once you click on "Confirm Filters". +infoMergeFiltersHint = Calculating and displaying potential duplicate cases is a very complex task and can require a lot of time. It is strongly recommended to adjust the filters on top of this view to reduce the number of cases that are detected at the same time, e.g. by increasing the lower threshold of the "Creation date" filter, or by selecting thresholds for the "Report or Onset Date".

When you see this hint, the loading of duplicates has been temporarily blocked to make sure that you can adjust the filters. Clicking on "Confirm Filters" after doing so will bring up the list of potential duplicates. infoPlaceOfStayInHospital = Please select a hospital as the place of stay. If the case is not currently admitted to a hospital as an inpatient, please document hospitalizations under previous hospitalizations. infoMoreDetailsAboutHospitalization = For adding more details about the hospitalization, go to the hospitalization tab. infoCountryNotEditableEventParticipantsWithoutJurisdiction = Changing the country is not permitted because at least one event participant in this event does not have a responsible region and/or responsible district set. @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Search for another person infoTasksWithMultipleJurisdictionsSelected = You have selected tasks connected to different jurisdictions, or that are connected to data that does not have facility or point of entry information. Only users on %s level or above will be selectable as assignees. infoNoAccessToPersonEntities = You don't have the necessary user rights to view any entries associated with persons. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s events not deleted. Event Ids not deleted\: %s messageEventsNotDeletedReason = No events that contain event participants linked will be deleted. Please remove the events participants from the event in order to be able to delete it. messageCountEventsNotDeletedExternalSurveillanceTool=%s events not deleted due to the reporting tool communication. Event Ids not deleted\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Some events were not deleted because the communication with the reporting tool failed. -messageEventsEdited = All events have been edited -messageEventsEditedExceptArchived = %s events have been successfully edited. Some of the events could not be edited because they are in a different jurisdiction or were already archived. messageExportFailed = There was an error preventing the data to be exported. Please contact an admin and inform them about this issue. messageExportConfigurationDeleted = Export configuration deleted messageExportConfigurationSaved = Export configuration saved @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = You need to select two persons for merge\ messageAutomaticDeletionStarted = Automatic deletion has been started and will be executed in the background. Please note that, depending on the amount of data that is deleted, this process can take some time. messageUserRoleUnusableForLogin = Users with only this role will not be able to login because the role does not have Access Sormas UI nor Access Sormas REST right messageUserRoleHasNoRights = This user role has no rights. Please select at least one right. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited diff --git a/sormas-api/src/main/resources/strings_sv-SE.properties b/sormas-api/src/main/resources/strings_sv-SE.properties index 192a5ad00f4..1314823c0cf 100644 --- a/sormas-api/src/main/resources/strings_sv-SE.properties +++ b/sormas-api/src/main/resources/strings_sv-SE.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = This message contains corrections to a p confirmationVaccinationStatusUpdate = Deleting this vaccination has lead to at least one case no longer having a valid vaccination. Do you want to remove the vaccination status from all affected cases? confirmExternalMessageCorrectionThrough = No other new or changed information could automatically be determined from the message. Do you want to manually add or edit more information? confirmationDeleteCaseContacts = Do you also want to delete all contacts of this case? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=Entity was automatically deleted @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = If you want to share thi errorSormasToSormasAcceptContactsWithoutCaseShared = The contact %s cannot be accepted, because it was sent without a case. Please reject the contact and ask the source system to send the linked case first. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = The contact %s cannot be accepted, because the contact belongs to a case that has not yet been accepted. Please accept the linked case first.
It is shared within the request %s. errorSormasToSormasExistingPendingRequest = There is already a pending request to the same organization. Please revoke it before sending a new one. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = Quarantine can only be issued for cases, contacts, event participants and travel entries. errorQuarantineBulkOnlySupportedEntities = Bulk quarantine can only be issued for cases, contacts, event participants. errorCreatingTemplateDirectory = Could not create template directory. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = This immunization is not editable any more errorForbidden = Access to the specified resource has been forbidden. Please contact your supervisor or administrator and inform them about it errorNoRightsForChangingField = You have no rights for changing %s errorNoRightsForChangingMultipleFields = You have no rights for changing %s and related fields +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Cannot delete user role, because the following users would remain without a user role\:

%s

Please give them a different role and re-try to delete this one. errorSurveillanceReportNotEditable = This report is not editable any more @@ -505,6 +508,7 @@ headingEditPrescription = Edit prescription headingEditTask = Edit task headingEditTreatment = Edit treatment headingEditUser = Edit user +headingEditVaccination = Edit vaccination headingEditVisit = Edit visit headingEditCountry = Edit country headingEditContinent = Edit continent @@ -647,9 +651,13 @@ headingUserData = User data headingVaccination = Vaccination headingViewNotFound = The view could not be found headingViewPathogenTestResult = Pathogen test result +headingViewPrescription = View prescription headingViewAdditionalTest = Additional test results +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Report view headingViewTask = View task +headingViewTreatment = View treatment +headingViewVaccination = View vaccination headingViewVisit = Visit view headingVisits = Visits headingVisitsDeleted = Visits deleted @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Revoke share request headingSormasToSormasCantShareContactWithoutCase=Can not share contact headingSormasToSormasCanAcceptContactsWithoutCase=Can not accept contact(s) headingSormasToSormasDuplicateDetection = Potential duplicates detected +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Share request details headingShareRequestCases=Cases headingShareRequestContacts=Contacts @@ -964,7 +973,7 @@ infoUserSyncProcess = %d users are being synced to the External Authentication P infoNoSubordinateEvents=No subordinate events infoNoSuperordinateEvent=No superordinate event infoNoEventGroups=No event groups -infoMergeFiltersHint = Calculating and displaying potential duplicates may take a lot of time under specific circumstances. It is recommended to use the filters on top of this view to reduce the number of rows that have to be compared at the same time, e.g. by choosing a narrow creation date interval and a low result count limit. If the potential duplicates are loading fast, extending these values should be safe.

In order to avoid performance issues when entering this view, potential duplicates are only loaded once you click on "Confirm Filters". +infoMergeFiltersHint = Calculating and displaying potential duplicate cases is a very complex task and can require a lot of time. It is strongly recommended to adjust the filters on top of this view to reduce the number of cases that are detected at the same time, e.g. by increasing the lower threshold of the "Creation date" filter, or by selecting thresholds for the "Report or Onset Date".

When you see this hint, the loading of duplicates has been temporarily blocked to make sure that you can adjust the filters. Clicking on "Confirm Filters" after doing so will bring up the list of potential duplicates. infoPlaceOfStayInHospital = Please select a hospital as the place of stay. If the case is not currently admitted to a hospital as an inpatient, please document hospitalizations under previous hospitalizations. infoMoreDetailsAboutHospitalization = For adding more details about the hospitalization, go to the hospitalization tab. infoCountryNotEditableEventParticipantsWithoutJurisdiction = Changing the country is not permitted because at least one event participant in this event does not have a responsible region and/or responsible district set. @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Search for another person infoTasksWithMultipleJurisdictionsSelected = You have selected tasks connected to different jurisdictions, or that are connected to data that does not have facility or point of entry information. Only users on %s level or above will be selectable as assignees. infoNoAccessToPersonEntities = You don't have the necessary user rights to view any entries associated with persons. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s events not deleted. Event Ids not deleted\: %s messageEventsNotDeletedReason = No events that contain event participants linked will be deleted. Please remove the events participants from the event in order to be able to delete it. messageCountEventsNotDeletedExternalSurveillanceTool=%s events not deleted due to the reporting tool communication. Event Ids not deleted\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Some events were not deleted because the communication with the reporting tool failed. -messageEventsEdited = All events have been edited -messageEventsEditedExceptArchived = %s events have been successfully edited. Some of the events could not be edited because they are in a different jurisdiction or were already archived. messageExportFailed = There was an error preventing the data to be exported. Please contact an admin and inform them about this issue. messageExportConfigurationDeleted = Export configuration deleted messageExportConfigurationSaved = Export configuration saved @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = You need to select two persons for merge\ messageAutomaticDeletionStarted = Automatic deletion has been started and will be executed in the background. Please note that, depending on the amount of data that is deleted, this process can take some time. messageUserRoleUnusableForLogin = Users with only this role will not be able to login because the role does not have Access Sormas UI nor Access Sormas REST right messageUserRoleHasNoRights = This user role has no rights. Please select at least one right. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited diff --git a/sormas-api/src/main/resources/strings_sw-KE.properties b/sormas-api/src/main/resources/strings_sw-KE.properties index 192a5ad00f4..1314823c0cf 100644 --- a/sormas-api/src/main/resources/strings_sw-KE.properties +++ b/sormas-api/src/main/resources/strings_sw-KE.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = This message contains corrections to a p confirmationVaccinationStatusUpdate = Deleting this vaccination has lead to at least one case no longer having a valid vaccination. Do you want to remove the vaccination status from all affected cases? confirmExternalMessageCorrectionThrough = No other new or changed information could automatically be determined from the message. Do you want to manually add or edit more information? confirmationDeleteCaseContacts = Do you also want to delete all contacts of this case? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=Entity was automatically deleted @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = If you want to share thi errorSormasToSormasAcceptContactsWithoutCaseShared = The contact %s cannot be accepted, because it was sent without a case. Please reject the contact and ask the source system to send the linked case first. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = The contact %s cannot be accepted, because the contact belongs to a case that has not yet been accepted. Please accept the linked case first.
It is shared within the request %s. errorSormasToSormasExistingPendingRequest = There is already a pending request to the same organization. Please revoke it before sending a new one. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = Quarantine can only be issued for cases, contacts, event participants and travel entries. errorQuarantineBulkOnlySupportedEntities = Bulk quarantine can only be issued for cases, contacts, event participants. errorCreatingTemplateDirectory = Could not create template directory. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = This immunization is not editable any more errorForbidden = Access to the specified resource has been forbidden. Please contact your supervisor or administrator and inform them about it errorNoRightsForChangingField = You have no rights for changing %s errorNoRightsForChangingMultipleFields = You have no rights for changing %s and related fields +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Cannot delete user role, because the following users would remain without a user role\:

%s

Please give them a different role and re-try to delete this one. errorSurveillanceReportNotEditable = This report is not editable any more @@ -505,6 +508,7 @@ headingEditPrescription = Edit prescription headingEditTask = Edit task headingEditTreatment = Edit treatment headingEditUser = Edit user +headingEditVaccination = Edit vaccination headingEditVisit = Edit visit headingEditCountry = Edit country headingEditContinent = Edit continent @@ -647,9 +651,13 @@ headingUserData = User data headingVaccination = Vaccination headingViewNotFound = The view could not be found headingViewPathogenTestResult = Pathogen test result +headingViewPrescription = View prescription headingViewAdditionalTest = Additional test results +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Report view headingViewTask = View task +headingViewTreatment = View treatment +headingViewVaccination = View vaccination headingViewVisit = Visit view headingVisits = Visits headingVisitsDeleted = Visits deleted @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Revoke share request headingSormasToSormasCantShareContactWithoutCase=Can not share contact headingSormasToSormasCanAcceptContactsWithoutCase=Can not accept contact(s) headingSormasToSormasDuplicateDetection = Potential duplicates detected +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Share request details headingShareRequestCases=Cases headingShareRequestContacts=Contacts @@ -964,7 +973,7 @@ infoUserSyncProcess = %d users are being synced to the External Authentication P infoNoSubordinateEvents=No subordinate events infoNoSuperordinateEvent=No superordinate event infoNoEventGroups=No event groups -infoMergeFiltersHint = Calculating and displaying potential duplicates may take a lot of time under specific circumstances. It is recommended to use the filters on top of this view to reduce the number of rows that have to be compared at the same time, e.g. by choosing a narrow creation date interval and a low result count limit. If the potential duplicates are loading fast, extending these values should be safe.

In order to avoid performance issues when entering this view, potential duplicates are only loaded once you click on "Confirm Filters". +infoMergeFiltersHint = Calculating and displaying potential duplicate cases is a very complex task and can require a lot of time. It is strongly recommended to adjust the filters on top of this view to reduce the number of cases that are detected at the same time, e.g. by increasing the lower threshold of the "Creation date" filter, or by selecting thresholds for the "Report or Onset Date".

When you see this hint, the loading of duplicates has been temporarily blocked to make sure that you can adjust the filters. Clicking on "Confirm Filters" after doing so will bring up the list of potential duplicates. infoPlaceOfStayInHospital = Please select a hospital as the place of stay. If the case is not currently admitted to a hospital as an inpatient, please document hospitalizations under previous hospitalizations. infoMoreDetailsAboutHospitalization = For adding more details about the hospitalization, go to the hospitalization tab. infoCountryNotEditableEventParticipantsWithoutJurisdiction = Changing the country is not permitted because at least one event participant in this event does not have a responsible region and/or responsible district set. @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Search for another person infoTasksWithMultipleJurisdictionsSelected = You have selected tasks connected to different jurisdictions, or that are connected to data that does not have facility or point of entry information. Only users on %s level or above will be selectable as assignees. infoNoAccessToPersonEntities = You don't have the necessary user rights to view any entries associated with persons. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s events not deleted. Event Ids not deleted\: %s messageEventsNotDeletedReason = No events that contain event participants linked will be deleted. Please remove the events participants from the event in order to be able to delete it. messageCountEventsNotDeletedExternalSurveillanceTool=%s events not deleted due to the reporting tool communication. Event Ids not deleted\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Some events were not deleted because the communication with the reporting tool failed. -messageEventsEdited = All events have been edited -messageEventsEditedExceptArchived = %s events have been successfully edited. Some of the events could not be edited because they are in a different jurisdiction or were already archived. messageExportFailed = There was an error preventing the data to be exported. Please contact an admin and inform them about this issue. messageExportConfigurationDeleted = Export configuration deleted messageExportConfigurationSaved = Export configuration saved @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = You need to select two persons for merge\ messageAutomaticDeletionStarted = Automatic deletion has been started and will be executed in the background. Please note that, depending on the amount of data that is deleted, this process can take some time. messageUserRoleUnusableForLogin = Users with only this role will not be able to login because the role does not have Access Sormas UI nor Access Sormas REST right messageUserRoleHasNoRights = This user role has no rights. Please select at least one right. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited diff --git a/sormas-api/src/main/resources/strings_tr-TR.properties b/sormas-api/src/main/resources/strings_tr-TR.properties index 192a5ad00f4..1314823c0cf 100644 --- a/sormas-api/src/main/resources/strings_tr-TR.properties +++ b/sormas-api/src/main/resources/strings_tr-TR.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = This message contains corrections to a p confirmationVaccinationStatusUpdate = Deleting this vaccination has lead to at least one case no longer having a valid vaccination. Do you want to remove the vaccination status from all affected cases? confirmExternalMessageCorrectionThrough = No other new or changed information could automatically be determined from the message. Do you want to manually add or edit more information? confirmationDeleteCaseContacts = Do you also want to delete all contacts of this case? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=Entity was automatically deleted @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = If you want to share thi errorSormasToSormasAcceptContactsWithoutCaseShared = The contact %s cannot be accepted, because it was sent without a case. Please reject the contact and ask the source system to send the linked case first. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = The contact %s cannot be accepted, because the contact belongs to a case that has not yet been accepted. Please accept the linked case first.
It is shared within the request %s. errorSormasToSormasExistingPendingRequest = There is already a pending request to the same organization. Please revoke it before sending a new one. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = Quarantine can only be issued for cases, contacts, event participants and travel entries. errorQuarantineBulkOnlySupportedEntities = Bulk quarantine can only be issued for cases, contacts, event participants. errorCreatingTemplateDirectory = Could not create template directory. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = This immunization is not editable any more errorForbidden = Access to the specified resource has been forbidden. Please contact your supervisor or administrator and inform them about it errorNoRightsForChangingField = You have no rights for changing %s errorNoRightsForChangingMultipleFields = You have no rights for changing %s and related fields +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Cannot delete user role, because the following users would remain without a user role\:

%s

Please give them a different role and re-try to delete this one. errorSurveillanceReportNotEditable = This report is not editable any more @@ -505,6 +508,7 @@ headingEditPrescription = Edit prescription headingEditTask = Edit task headingEditTreatment = Edit treatment headingEditUser = Edit user +headingEditVaccination = Edit vaccination headingEditVisit = Edit visit headingEditCountry = Edit country headingEditContinent = Edit continent @@ -647,9 +651,13 @@ headingUserData = User data headingVaccination = Vaccination headingViewNotFound = The view could not be found headingViewPathogenTestResult = Pathogen test result +headingViewPrescription = View prescription headingViewAdditionalTest = Additional test results +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Report view headingViewTask = View task +headingViewTreatment = View treatment +headingViewVaccination = View vaccination headingViewVisit = Visit view headingVisits = Visits headingVisitsDeleted = Visits deleted @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Revoke share request headingSormasToSormasCantShareContactWithoutCase=Can not share contact headingSormasToSormasCanAcceptContactsWithoutCase=Can not accept contact(s) headingSormasToSormasDuplicateDetection = Potential duplicates detected +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Share request details headingShareRequestCases=Cases headingShareRequestContacts=Contacts @@ -964,7 +973,7 @@ infoUserSyncProcess = %d users are being synced to the External Authentication P infoNoSubordinateEvents=No subordinate events infoNoSuperordinateEvent=No superordinate event infoNoEventGroups=No event groups -infoMergeFiltersHint = Calculating and displaying potential duplicates may take a lot of time under specific circumstances. It is recommended to use the filters on top of this view to reduce the number of rows that have to be compared at the same time, e.g. by choosing a narrow creation date interval and a low result count limit. If the potential duplicates are loading fast, extending these values should be safe.

In order to avoid performance issues when entering this view, potential duplicates are only loaded once you click on "Confirm Filters". +infoMergeFiltersHint = Calculating and displaying potential duplicate cases is a very complex task and can require a lot of time. It is strongly recommended to adjust the filters on top of this view to reduce the number of cases that are detected at the same time, e.g. by increasing the lower threshold of the "Creation date" filter, or by selecting thresholds for the "Report or Onset Date".

When you see this hint, the loading of duplicates has been temporarily blocked to make sure that you can adjust the filters. Clicking on "Confirm Filters" after doing so will bring up the list of potential duplicates. infoPlaceOfStayInHospital = Please select a hospital as the place of stay. If the case is not currently admitted to a hospital as an inpatient, please document hospitalizations under previous hospitalizations. infoMoreDetailsAboutHospitalization = For adding more details about the hospitalization, go to the hospitalization tab. infoCountryNotEditableEventParticipantsWithoutJurisdiction = Changing the country is not permitted because at least one event participant in this event does not have a responsible region and/or responsible district set. @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Search for another person infoTasksWithMultipleJurisdictionsSelected = You have selected tasks connected to different jurisdictions, or that are connected to data that does not have facility or point of entry information. Only users on %s level or above will be selectable as assignees. infoNoAccessToPersonEntities = You don't have the necessary user rights to view any entries associated with persons. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s events not deleted. Event Ids not deleted\: %s messageEventsNotDeletedReason = No events that contain event participants linked will be deleted. Please remove the events participants from the event in order to be able to delete it. messageCountEventsNotDeletedExternalSurveillanceTool=%s events not deleted due to the reporting tool communication. Event Ids not deleted\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Some events were not deleted because the communication with the reporting tool failed. -messageEventsEdited = All events have been edited -messageEventsEditedExceptArchived = %s events have been successfully edited. Some of the events could not be edited because they are in a different jurisdiction or were already archived. messageExportFailed = There was an error preventing the data to be exported. Please contact an admin and inform them about this issue. messageExportConfigurationDeleted = Export configuration deleted messageExportConfigurationSaved = Export configuration saved @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = You need to select two persons for merge\ messageAutomaticDeletionStarted = Automatic deletion has been started and will be executed in the background. Please note that, depending on the amount of data that is deleted, this process can take some time. messageUserRoleUnusableForLogin = Users with only this role will not be able to login because the role does not have Access Sormas UI nor Access Sormas REST right messageUserRoleHasNoRights = This user role has no rights. Please select at least one right. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited diff --git a/sormas-api/src/main/resources/strings_uk-UA.properties b/sormas-api/src/main/resources/strings_uk-UA.properties index 192a5ad00f4..1314823c0cf 100644 --- a/sormas-api/src/main/resources/strings_uk-UA.properties +++ b/sormas-api/src/main/resources/strings_uk-UA.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = This message contains corrections to a p confirmationVaccinationStatusUpdate = Deleting this vaccination has lead to at least one case no longer having a valid vaccination. Do you want to remove the vaccination status from all affected cases? confirmExternalMessageCorrectionThrough = No other new or changed information could automatically be determined from the message. Do you want to manually add or edit more information? confirmationDeleteCaseContacts = Do you also want to delete all contacts of this case? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=Entity was automatically deleted @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = If you want to share thi errorSormasToSormasAcceptContactsWithoutCaseShared = The contact %s cannot be accepted, because it was sent without a case. Please reject the contact and ask the source system to send the linked case first. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = The contact %s cannot be accepted, because the contact belongs to a case that has not yet been accepted. Please accept the linked case first.
It is shared within the request %s. errorSormasToSormasExistingPendingRequest = There is already a pending request to the same organization. Please revoke it before sending a new one. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = Quarantine can only be issued for cases, contacts, event participants and travel entries. errorQuarantineBulkOnlySupportedEntities = Bulk quarantine can only be issued for cases, contacts, event participants. errorCreatingTemplateDirectory = Could not create template directory. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = This immunization is not editable any more errorForbidden = Access to the specified resource has been forbidden. Please contact your supervisor or administrator and inform them about it errorNoRightsForChangingField = You have no rights for changing %s errorNoRightsForChangingMultipleFields = You have no rights for changing %s and related fields +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Cannot delete user role, because the following users would remain without a user role\:

%s

Please give them a different role and re-try to delete this one. errorSurveillanceReportNotEditable = This report is not editable any more @@ -505,6 +508,7 @@ headingEditPrescription = Edit prescription headingEditTask = Edit task headingEditTreatment = Edit treatment headingEditUser = Edit user +headingEditVaccination = Edit vaccination headingEditVisit = Edit visit headingEditCountry = Edit country headingEditContinent = Edit continent @@ -647,9 +651,13 @@ headingUserData = User data headingVaccination = Vaccination headingViewNotFound = The view could not be found headingViewPathogenTestResult = Pathogen test result +headingViewPrescription = View prescription headingViewAdditionalTest = Additional test results +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Report view headingViewTask = View task +headingViewTreatment = View treatment +headingViewVaccination = View vaccination headingViewVisit = Visit view headingVisits = Visits headingVisitsDeleted = Visits deleted @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Revoke share request headingSormasToSormasCantShareContactWithoutCase=Can not share contact headingSormasToSormasCanAcceptContactsWithoutCase=Can not accept contact(s) headingSormasToSormasDuplicateDetection = Potential duplicates detected +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Share request details headingShareRequestCases=Cases headingShareRequestContacts=Contacts @@ -964,7 +973,7 @@ infoUserSyncProcess = %d users are being synced to the External Authentication P infoNoSubordinateEvents=No subordinate events infoNoSuperordinateEvent=No superordinate event infoNoEventGroups=No event groups -infoMergeFiltersHint = Calculating and displaying potential duplicates may take a lot of time under specific circumstances. It is recommended to use the filters on top of this view to reduce the number of rows that have to be compared at the same time, e.g. by choosing a narrow creation date interval and a low result count limit. If the potential duplicates are loading fast, extending these values should be safe.

In order to avoid performance issues when entering this view, potential duplicates are only loaded once you click on "Confirm Filters". +infoMergeFiltersHint = Calculating and displaying potential duplicate cases is a very complex task and can require a lot of time. It is strongly recommended to adjust the filters on top of this view to reduce the number of cases that are detected at the same time, e.g. by increasing the lower threshold of the "Creation date" filter, or by selecting thresholds for the "Report or Onset Date".

When you see this hint, the loading of duplicates has been temporarily blocked to make sure that you can adjust the filters. Clicking on "Confirm Filters" after doing so will bring up the list of potential duplicates. infoPlaceOfStayInHospital = Please select a hospital as the place of stay. If the case is not currently admitted to a hospital as an inpatient, please document hospitalizations under previous hospitalizations. infoMoreDetailsAboutHospitalization = For adding more details about the hospitalization, go to the hospitalization tab. infoCountryNotEditableEventParticipantsWithoutJurisdiction = Changing the country is not permitted because at least one event participant in this event does not have a responsible region and/or responsible district set. @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Search for another person infoTasksWithMultipleJurisdictionsSelected = You have selected tasks connected to different jurisdictions, or that are connected to data that does not have facility or point of entry information. Only users on %s level or above will be selectable as assignees. infoNoAccessToPersonEntities = You don't have the necessary user rights to view any entries associated with persons. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s events not deleted. Event Ids not deleted\: %s messageEventsNotDeletedReason = No events that contain event participants linked will be deleted. Please remove the events participants from the event in order to be able to delete it. messageCountEventsNotDeletedExternalSurveillanceTool=%s events not deleted due to the reporting tool communication. Event Ids not deleted\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Some events were not deleted because the communication with the reporting tool failed. -messageEventsEdited = All events have been edited -messageEventsEditedExceptArchived = %s events have been successfully edited. Some of the events could not be edited because they are in a different jurisdiction or were already archived. messageExportFailed = There was an error preventing the data to be exported. Please contact an admin and inform them about this issue. messageExportConfigurationDeleted = Export configuration deleted messageExportConfigurationSaved = Export configuration saved @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = You need to select two persons for merge\ messageAutomaticDeletionStarted = Automatic deletion has been started and will be executed in the background. Please note that, depending on the amount of data that is deleted, this process can take some time. messageUserRoleUnusableForLogin = Users with only this role will not be able to login because the role does not have Access Sormas UI nor Access Sormas REST right messageUserRoleHasNoRights = This user role has no rights. Please select at least one right. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited diff --git a/sormas-api/src/main/resources/strings_ur-PK.properties b/sormas-api/src/main/resources/strings_ur-PK.properties index baa61395ddd..46c00854de6 100644 --- a/sormas-api/src/main/resources/strings_ur-PK.properties +++ b/sormas-api/src/main/resources/strings_ur-PK.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = اس پیغام میں پچھلی ایک confirmationVaccinationStatusUpdate = اس ویکسینیشن کو مٹانے سے کم از کم ایک کیس میں اب درست ویکسینیشن نہیں ہے۔ کیا آپ تمام متاثرہ کیسوں سے ویکسینیشن کی حیثیت کو ہٹانا چاہتے ہیں؟ confirmExternalMessageCorrectionThrough = پیغام سے کوئی دوسری نئی یا تبدیل شدہ معلومات کا خود بخود تعین نہیں کیا جا سکتا ہے۔ کیا آپ دستی طور پر مزید معلومات شامل کرنا یا ترمیم کرنا چاہتے ہیں؟ confirmationDeleteCaseContacts = کیا آپ اس کیس کے تمام رابطوں کو بھی مٹانا چاہتے ہیں؟ +confirmationCancelBulkAction = کیا آپ واقعی بلک آپریشن کو منسوخ کرنا چاہتے ہیں؟ موجودہ بیچ پر کارروائی کے بعد آپریشن روک دیا جائے گا۔ # Entities entityAutomaticSoftDeletion=اندراج خود بخود مٹ گیا @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = اگر آپ اس راب errorSormasToSormasAcceptContactsWithoutCaseShared = رابطہ %s کو قبول نہیں کیا جا سکتا، کیونکہ اسے بغیر کیس کے بھیجا گیا تھا۔ براہ کرم رابطہ کو مسترد کریں اور سورس سسٹم سے پہلے منسلک کیس بھیجنے کو کہیں۔ errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = رابطہ %s کو قبول نہیں کیا جا سکتا، کیونکہ رابطہ ایک ایسے کیس سے تعلق رکھتا ہے جسے ابھی تک قبول نہیں کیا گیا ہے۔ براہ کرم پہلے منسلک کیس کو قبول کریں۔
اسے درخواست کے اندر شیئر کیا گیا ہے %s۔ errorSormasToSormasExistingPendingRequest = اسی تنظیم کی ایک درخواست پہلے ہی زیر التوا ہے۔ براہ کرم نئی بھیجنے سے پہلے اسے منسوخ کریں۔ +errorSormasToSormasSharequestNotFound = اشتراک کی درخواست نہیں مل سکی۔ اسے یا تو سورس سسٹم نے منسوخ کر دیا تھا یا اسے کسی اور نے مسترد کر دیا ہے۔ errorQuarantineOnlySupportedEntities = قرنطینہ صرف کیسز، رابطوں، تقریب کے شرکاء اور سفری اندراجات کے لیے جاری کیا جا سکتا ہے۔ errorQuarantineBulkOnlySupportedEntities = بلک قرنطینہ صرف کیسز، رابطوں، تقریب کے شرکاء کے لیے جاری کیا جا سکتا ہے۔ errorCreatingTemplateDirectory = ٹیمپلیٹ ڈائرکٹری نہیں بن سکی۔ @@ -398,6 +400,7 @@ errorImmunizationNotEditable = یہ امیونائزیشن مزید قابل ت errorForbidden = مخصوص وسائل تک رسائی منع کر دی گئی ہے۔ براہ کرم اپنے سپروائزر یا منتظم سے رابطہ کریں اور انہیں اس کے بارے میں مطلع کریں errorNoRightsForChangingField = آپ کو تبدیل کرنے کا کوئی حق نہیں ہے %s errorNoRightsForChangingMultipleFields = آپ کو %s اور متعلقہ فیلڈز کو تبدیل کرنے کا کوئی حق نہیں ہے +errorNotFound = درخواست کردہ چیز نہیں ملی errorDeleteUserRoleUsedAlone = صارف کے کردار کو مٹایا نہیں جا سکتا، کیونکہ درج ذیل صارفین صارف کے کردار کے بغیر رہیں گے\:

%s

براہ کرم انہیں ایک مختلف کردار دیں اور اسے مٹانے کی دوبارہ کوشش کریں۔ errorSurveillanceReportNotEditable = یہ رپورٹ مزید قابل ترمیم نہیں ہے @@ -505,6 +508,7 @@ headingEditPrescription = نسخے میں ترمیم کریں headingEditTask = کام میں ترمیم کریں۔ headingEditTreatment = علاج میں ترمیم کریں headingEditUser = صارف میں ترمیم کریں +headingEditVaccination = ویکسینیش کی ترمیم کریں headingEditVisit = دورہ میں ترمیم کریں headingEditCountry = ملک میں ترمیم کریں headingEditContinent = براعظم میں ترمیم کریں @@ -647,9 +651,13 @@ headingUserData = صارف کا ڈیٹا headingVaccination = ویکسینیشن headingViewNotFound = ویو نہیں مل سکا headingViewPathogenTestResult = پیتھوجین ٹیسٹ کا نتیجہ +headingViewPrescription = نسخہ دیکھیں headingViewAdditionalTest = اضافی ٹیسٹ کے نتائج +headingViewClinicalVisit = کلینیکل تشخیص دیکھیں headingViewSurveillanceReport = رپورٹ کا نظارہ headingViewTask = ٹاسک دیکھیں +headingViewTreatment = علاج ملاحظہ کریں +headingViewVaccination = ویکسینیشن دیکھیں headingViewVisit = دورہ کا نظارہ headingVisits = دورے headingVisitsDeleted = دورے مٹا دیۓ @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=شیئر کرنے کی درخواست ک headingSormasToSormasCantShareContactWithoutCase=رابطہ کو شریک نہیں کر سکتے. headingSormasToSormasCanAcceptContactsWithoutCase=رابطے قبول نہیں کر سکتے headingSormasToSormasDuplicateDetection = ممکنہ نقول کا پتہ چلا +headingSormasToSormasShareRequestNotFound = اشتراک کی درخواست نہیں ملی headingShareRequestDetails=درخواست کی تفصیلات شیئر کریں headingShareRequestCases=کیسز headingShareRequestContacts=روابط @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = کسی دوسرے شخص کو تلاش کری infoTasksWithMultipleJurisdictionsSelected = آپ نے مختلف دائرہ اختیار سے منسلک کاموں کو منتخب کیا ہے ، یا وہ ایسے ڈیٹا سے جڑے ہوئے ہیں جن میں سہولت یا پوائنٹ آف انٹری انفارمیشن نہیں ہے۔ صرف%s لیول یا اس سے اوپر کے صارفین کو بطور تفویض منتخب کیا جائے گا۔ infoNoAccessToPersonEntities = آپ کے پاس افراد سے وابستہ کسی بھی اندراج کو دیکھنے کے لیے ضروری صارف حقوق نہیں ہیں۔ infoDashboardFinalLaboratoryResult = جب ایک کیس میں ایک سے زیادہ نمونے ہوتے ہیں، تو صرف نمونے کے آخری لیبارٹری نتیجہ پر غور کیا جاتا ہے جس میں نمونہ جمع کرنے کی تازہ ترین تاریخ ہوتی ہے۔ +infoBulkProcess = فی الحال %d منتخب اندراجات پر کارروائی ہو رہی ہے۔ اس میں کچھ وقت لگ سکتا ہے۔ پیشرفت ہر 20 اندراجات کے لیے اپ ڈیٹ کی جائے گی جن پر کارروائی کی گئی ہے۔ +infoBulkProcessFinished = تمام منتخب اندراجات پر کارروائی ہو چکی ہے\!
اب آپ اس ونڈو کو بند کر سکتے ہیں۔ +infoBulkProcessFinishedWithSkips = بڑی تعداد میں عمل کامیابی کے ساتھ مکمل ہو گیا ہے\!
تاہم، کچھ منتخب اندراجات پر کارروائی نہیں ہو سکی، زیادہ تر امکان ہے کہ وہ آپ کے دائرہ اختیار سے باہر تھیں یا پہلے ہی محفوظ شدہ تھیں۔ +infoBulkProcessCancelled = بلک پروسیس کو منسوخ کر دیا گیا ہے\!
اس پوائنٹ پر کارروائی ہونے تک تمام منتخب اندراجات۔ اب آپ اس ونڈو کو بند کر سکتے ہیں۔ تمام ابھی تک پروسیس شدہ اندراجات کا انتخاب نہیں کیا جائے گا۔ +infoBulkUnresponsiveWindowHint = اشارہ\: اگر پروگریس بار غیر جوابی لگتا ہے اور تھوڑی دیر کے بعد کوئی پیش رفت نظر نہیں آتی ہے، تو اس پاپ اپ ونڈو پر کلک کرنے کی کوشش کریں یا اپنی براؤزر ونڈو کا سائز تبدیل کریں۔ # Messages messageActionOutsideJurisdictionDeletionDenied = صارف کے دائرہ اختیار سے باہر کی کارروائی کو حذف نہیں کیا جا سکتا @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s تقریبات مٹا نہیں دی گئ۔ ت messageEventsNotDeletedReason = کسی بھی تقریب کو مٹایا نہیں جائے گا جس میں تقریب کے شرکاء سے منسلک ہوں۔ براہ کرم تقریب کے شرکاء کو تقریب سے ہٹا دیں تاکہ اسے مٹایا کیا جا سکے۔ messageCountEventsNotDeletedExternalSurveillanceTool=%s رپورٹنگ ٹول کمیونیکیشن کی وجہ سے تقریبات نہیں مٹائے۔ تقریب کی شناختیں ہیں مٹائی\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=رپورٹنگ ٹول کے ساتھ مواصلت ناکام ہونے کی وجہ سے کچھ تقریبات کو مٹایا نہیں گیا۔ -messageEventsEdited = تمام تقریبات میں ترمیم کر دی گئی ہے -messageEventsEditedExceptArchived = %s تقریبات میں کامیابی سے ترمیم کی گئی ہے۔ کچھ تقریبات میں ترمیم نہیں کی جا سکی کیونکہ وہ ایک مختلف دائرہ اختیار میں ہیں یا پہلے ہی آرکائیو ہیں۔ messageExportFailed = ڈیٹا کو ایکسپورٹ کرنے سے روکنے میں ایک خرابی تھی۔ براہ کرم ایڈمن سے رابطہ کریں اور انہیں اس مسئلے سے آگاہ کریں۔ messageExportConfigurationDeleted = ايکسپورٹ کنفیگریشن مٹا دی گئ messageExportConfigurationSaved = ایکسپورٹ کنفیگریشن محفوظ ہو گئی @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = آپ کو انضمام کے لیے دو messageAutomaticDeletionStarted = خودکار مٹانا شروع کر دیا گیا ہے اور اسے پس منظر میں عمل میں لایا جائے گا۔ براہ کرم نوٹ کریں کہ مٹنے والے ڈیٹا کی مقدار پر منحصر ہے، اس عمل میں کچھ وقت لگ سکتا ہے۔ messageUserRoleUnusableForLogin = صرف اس کردار کے حامل صارفین لاگ ان نہیں کر پائیں گے کیونکہ اس رول میں Access Sormas UI نہیں ہے اور نہ ہی Sormas REST تک رسائی حاصل ہے۔ messageUserRoleHasNoRights = اس صارف کے کردار کا کوئی حق نہیں ہے۔ براہ کرم کم از کم ایک صحیح منتخب کریں۔ -messageBulkOperationEntryLimitReached = اندراجات کی زیادہ سے زیادہ مقدار جس پر ایک ہی وقت میں کارروائی کی جاسکتی ہے (%s) تک پہنچ گئی ہے۔ ابھی تک %s اندراجات پر کارروائی ہو چکی ہے اور ابھی %s اندراجات پر کارروائی باقی ہے۔ کیا آپ آپریشن جاری رکھنا چاہتے ہیں؟

اگر آپ نہ کرنے کا انتخاب کرتے ہیں، تو آپ کو ڈائرکٹری میں واپس لے جایا جائے گا جس پر عمل نہ ہونے والی اندراجات ابھی بھی منتخب ہیں۔ -messageBulkOperationTimeLimitReached = بلک پروسیسنگ روک دی گئی ہے کیونکہ زیادہ سے زیادہ رن ٹائم (%s سیکنڈ) تک پہنچ گیا ہے۔ ابھی تک %s اندراجات پر کارروائی ہو چکی ہے اور ابھی %s اندراجات پر کارروائی باقی ہے۔ کیا آپ آپریشن جاری رکھنا چاہتے ہیں؟

اگر آپ نہ کرنے کا انتخاب کرتے ہیں، تو آپ کو ڈائرکٹری میں واپس لے جایا جائے گا جس پر عمل نہ ہونے والی اندراجات ابھی بھی منتخب ہیں۔ messageEntriesEditedExceptArchived = %s اندراجات میں کامیابی کے ساتھ ترمیم کی گئی ہے۔ کچھ اندراجات میں ترمیم نہیں کی جا سکی کیونکہ وہ ایک مختلف دائرہ اختیار میں ہیں یا پہلے ہی محفوظ شدہ تھیں۔ messageEntriesEdited = تمام اندراجات میں ترمیم کی گئی ہے diff --git a/sormas-api/src/main/resources/strings_zh-CN.properties b/sormas-api/src/main/resources/strings_zh-CN.properties index d9c5f4c0106..31191245439 100644 --- a/sormas-api/src/main/resources/strings_zh-CN.properties +++ b/sormas-api/src/main/resources/strings_zh-CN.properties @@ -244,6 +244,7 @@ confirmationExternalMessageCorrection = This message contains corrections to a p confirmationVaccinationStatusUpdate = Deleting this vaccination has lead to at least one case no longer having a valid vaccination. Do you want to remove the vaccination status from all affected cases? confirmExternalMessageCorrectionThrough = No other new or changed information could automatically be determined from the message. Do you want to manually add or edit more information? confirmationDeleteCaseContacts = Do you also want to delete all contacts of this case? +confirmationCancelBulkAction = Do you really want to cancel the bulk operation? The operation will be stopped after the current batch has been processed. # Entities entityAutomaticSoftDeletion=Entity was automatically deleted @@ -362,6 +363,7 @@ errorSormasToSormasShareContactWithUnsharedSourceCase = If you want to share thi errorSormasToSormasAcceptContactsWithoutCaseShared = The contact %s cannot be accepted, because it was sent without a case. Please reject the contact and ask the source system to send the linked case first. errorSormasToSormasAcceptContactsBeforeAcceptSourceCase = The contact %s cannot be accepted, because the contact belongs to a case that has not yet been accepted. Please accept the linked case first.
It is shared within the request %s. errorSormasToSormasExistingPendingRequest = There is already a pending request to the same organization. Please revoke it before sending a new one. +errorSormasToSormasSharequestNotFound = The share request could not be found. It was either revoked by the source system or it has been rejected by someone else. errorQuarantineOnlySupportedEntities = Quarantine can only be issued for cases, contacts, event participants and travel entries. errorQuarantineBulkOnlySupportedEntities = Bulk quarantine can only be issued for cases, contacts, event participants. errorCreatingTemplateDirectory = Could not create template directory. @@ -398,6 +400,7 @@ errorImmunizationNotEditable = 该免疫接种已不可编辑 errorForbidden = Access to the specified resource has been forbidden. Please contact your supervisor or administrator and inform them about it errorNoRightsForChangingField = You have no rights for changing %s errorNoRightsForChangingMultipleFields = You have no rights for changing %s and related fields +errorNotFound = The requested entity was not found errorDeleteUserRoleUsedAlone = Cannot delete user role, because the following users would remain without a user role\:

%s

Please give them a different role and re-try to delete this one. errorSurveillanceReportNotEditable = This report is not editable any more @@ -505,6 +508,7 @@ headingEditPrescription = Edit prescription headingEditTask = Edit task headingEditTreatment = Edit treatment headingEditUser = Edit user +headingEditVaccination = Edit vaccination headingEditVisit = Edit visit headingEditCountry = Edit country headingEditContinent = Edit continent @@ -647,9 +651,13 @@ headingUserData = User data headingVaccination = Vaccination headingViewNotFound = The view could not be found headingViewPathogenTestResult = Pathogen test result +headingViewPrescription = View prescription headingViewAdditionalTest = Additional test results +headingViewClinicalVisit = View clinical assessment headingViewSurveillanceReport = Report view headingViewTask = View task +headingViewTreatment = View treatment +headingViewVaccination = View vaccination headingViewVisit = Visit view headingVisits = Visits headingVisitsDeleted = Visits deleted @@ -758,6 +766,7 @@ headingRevokeSormasToSormasShareRequest=Revoke share request headingSormasToSormasCantShareContactWithoutCase=Can not share contact headingSormasToSormasCanAcceptContactsWithoutCase=Can not accept contact(s) headingSormasToSormasDuplicateDetection = Potential duplicates detected +headingSormasToSormasShareRequestNotFound = Share request not found headingShareRequestDetails=Share request details headingShareRequestCases=Cases headingShareRequestContacts=Contacts @@ -964,7 +973,7 @@ infoUserSyncProcess = %d users are being synced to the External Authentication P infoNoSubordinateEvents=No subordinate events infoNoSuperordinateEvent=No superordinate event infoNoEventGroups=No event groups -infoMergeFiltersHint = Calculating and displaying potential duplicates may take a lot of time under specific circumstances. It is recommended to use the filters on top of this view to reduce the number of rows that have to be compared at the same time, e.g. by choosing a narrow creation date interval and a low result count limit. If the potential duplicates are loading fast, extending these values should be safe.

In order to avoid performance issues when entering this view, potential duplicates are only loaded once you click on "Confirm Filters". +infoMergeFiltersHint = Calculating and displaying potential duplicate cases is a very complex task and can require a lot of time. It is strongly recommended to adjust the filters on top of this view to reduce the number of cases that are detected at the same time, e.g. by increasing the lower threshold of the "Creation date" filter, or by selecting thresholds for the "Report or Onset Date".

When you see this hint, the loading of duplicates has been temporarily blocked to make sure that you can adjust the filters. Clicking on "Confirm Filters" after doing so will bring up the list of potential duplicates. infoPlaceOfStayInHospital = 请选择医院作为停留地点。 如果病人目前不作为住院病人住院,请记录以前住院的住院情况。 infoMoreDetailsAboutHospitalization = 为了提供更多有关住院的详细信息,请到医院的选项卡。 infoCountryNotEditableEventParticipantsWithoutJurisdiction = Changing the country is not permitted because at least one event participant in this event does not have a responsible region and/or responsible district set. @@ -973,6 +982,11 @@ infoSearchPersonOnDependentForm = Search for another person infoTasksWithMultipleJurisdictionsSelected = You have selected tasks connected to different jurisdictions, or that are connected to data that does not have facility or point of entry information. Only users on %s level or above will be selectable as assignees. infoNoAccessToPersonEntities = You don't have the necessary user rights to view any entries associated with persons. infoDashboardFinalLaboratoryResult = When a case has multiple samples, only the final laboratory result of the sample with the latest sample collection date is considered. +infoBulkProcess = %d selected entries are currently being processed. This may take a while. The progress will be updated for each 20 entries that have been processed. +infoBulkProcessFinished = All selected entries have been processed\!
You can now close this window. +infoBulkProcessFinishedWithSkips = Bulk process has been successfully completed\!
However, some of the selected entries could not be processed, most likely because they were outside your jurisdiction or already archived. +infoBulkProcessCancelled = Bulk process has been cancelled\!
All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected. +infoBulkUnresponsiveWindowHint = Hint\: If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window. # Messages messageActionOutsideJurisdictionDeletionDenied = The action outside user's jurisdiction cannot be deleted @@ -1103,8 +1117,6 @@ messageCountEventsNotDeleted = %s events not deleted. Event Ids not deleted\: %s messageEventsNotDeletedReason = No events that contain event participants linked will be deleted. Please remove the events participants from the event in order to be able to delete it. messageCountEventsNotDeletedExternalSurveillanceTool=%s events not deleted due to the reporting tool communication. Event Ids not deleted\: %s messageEventsNotDeletedReasonExternalSurveillanceTool=Some events were not deleted because the communication with the reporting tool failed. -messageEventsEdited = All events have been edited -messageEventsEditedExceptArchived = %s events have been successfully edited. Some of the events could not be edited because they are in a different jurisdiction or were already archived. messageExportFailed = There was an error preventing the data to be exported. Please contact an admin and inform them about this issue. messageExportConfigurationDeleted = Export configuration deleted messageExportConfigurationSaved = Export configuration saved @@ -1342,8 +1354,6 @@ messageCannotMergeMoreThanTwoPersons = You need to select two persons for merge\ messageAutomaticDeletionStarted = Automatic deletion has been started and will be executed in the background. Please note that, depending on the amount of data that is deleted, this process can take some time. messageUserRoleUnusableForLogin = Users with only this role will not be able to login because the role does not have Access Sormas UI nor Access Sormas REST right messageUserRoleHasNoRights = This user role has no rights. Please select at least one right. -messageBulkOperationEntryLimitReached = The maximum amount of entries that can be processed at the same time has been reached (%s). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. -messageBulkOperationTimeLimitReached = The bulk processing has been halted because the maximum runtime has been reached (%s seconds). %s entries have been processed so far and there are still %s entries left to process. Do you want to continue the operation?

If you choose not to, you will be taken back to the directory with the unprocessed entries still selected. messageEntriesEditedExceptArchived = %s entries have been successfully edited. Some of the entries could not be edited because they are in a different jurisdiction or were already archived. messageEntriesEdited = All entries have been edited diff --git a/sormas-api/src/test/java/de/symeda/sormas/api/utils/DateHelperTest.java b/sormas-api/src/test/java/de/symeda/sormas/api/utils/DateHelperTest.java index b69e6dfcde4..7069156aa2b 100644 --- a/sormas-api/src/test/java/de/symeda/sormas/api/utils/DateHelperTest.java +++ b/sormas-api/src/test/java/de/symeda/sormas/api/utils/DateHelperTest.java @@ -31,7 +31,11 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.time.Month; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeFormatterBuilder; +import java.time.format.DateTimeParseException; import java.time.temporal.ChronoUnit; +import java.time.temporal.TemporalAccessor; import java.util.Calendar; import java.util.Collections; import java.util.Date; @@ -337,19 +341,42 @@ public void testParseDateTimeWithExceptionForDeFormat() throws ParseException { Date parsed = DateHelper.parseDateTimeWithException("21/04/2021 13:30", Language.DE); assertEquals(date, parsed); - parsed = DateHelper.parseDateTimeWithException("21.04.2021 1:30 nachm.", Language.DE); + String dePmSuffix = getDePmSuffix(); + parsed = DateHelper.parseDateTimeWithException("21.04.2021 1:30 " + dePmSuffix, Language.DE); assertEquals(date, parsed); parsed = DateHelper.parseDateTimeWithException("21-04-2021 13.30", Language.DE); assertEquals(date, parsed); - parsed = DateHelper.parseDateTimeWithException("21-04-2021 1.30 nachm.", Language.DE); + parsed = DateHelper.parseDateTimeWithException("21-04-2021 1.30 " + dePmSuffix, Language.DE); assertEquals(date, parsed); Date parsedNoTime = DateHelper.parseDateTimeWithException("21/04/2021", Language.DE); assertEquals(UtilDate.of(2021, Month.APRIL, 21), parsedNoTime); } + /** + * @return The correct PM suffix for Locale DE (changes between Java versions). + */ + private static String getDePmSuffix() { + + String dateString = "21.04.2021 1:30 "; + DateTimeFormatter formatter = + new DateTimeFormatterBuilder().parseCaseInsensitive().appendPattern("dd.MM.yyyy h:mm a").toFormatter(Language.DE.getLocale()); + String pmSuffix; + try { + // In Java 17 + pmSuffix = "PM"; + formatter.parse(dateString + pmSuffix); + } catch (DateTimeParseException e) { + // In Java 11 + pmSuffix = "nachm."; + formatter.parse(dateString + pmSuffix); + } + + return pmSuffix; + } + @Test public void testGetFullDaysBetween() { diff --git a/sormas-app/app/build.gradle b/sormas-app/app/build.gradle index 8a9e70e69d1..2a91e0fefe8 100644 --- a/sormas-app/app/build.gradle +++ b/sormas-app/app/build.gradle @@ -7,23 +7,32 @@ ext.sormasVersion = getVersionName() ext.keystoreProperties = loadKeystoreProperties() android { + // this avoids build errors as these files are present multiple times in the project dependencies, // however, as they do not need to be part of the artifact, they can be excluded - packagingOptions{ - exclude 'META-INF/LICENSE.md' - exclude 'META-INF/NOTICE.md' + packagingOptions { + jniLibs { + excludes += ['META-INF/spring.*'] + } + resources { + excludes += ['META-INF/LICENSE.md', + 'META-INF/NOTICE.md', + 'META-INF/maven/de.symeda.sormas/sormas-api/pom.properties', + 'META-INF/maven/de.symeda.sormas/sormas-api/pom.xml', + 'META-INF/license.txt', + 'META-INF/notice.txt', + 'META-INF/spring.*'] + } } // https://medium.com/google-developers/picking-your-compilesdkversion-minsdkversion-targetsdkversion-a098a0341ebd // ideally: minSdkVersion (lowest possible) <= targetSdkVersion == compileSdkVersion (latest SDK) - compileSdkVersion 31 - // always use the latest - buildToolsVersion '30.0.2' + compileSdkVersion 33 defaultConfig { applicationId "de.symeda.sormas.app" minSdkVersion 26 - targetSdkVersion 31 + targetSdkVersion 33 versionCode buildVersionCode() versionName "$sormasVersion" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -53,19 +62,9 @@ android { } } } - packagingOptions { - exclude 'META-INF/maven/de.symeda.sormas/sormas-api/pom.properties' - exclude 'META-INF/maven/de.symeda.sormas/sormas-api/pom.xml' - exclude 'META-INF/license.txt' - exclude 'META-INF/notice.txt' - exclude 'META-INF/spring.*' - } productFlavors { } - lintOptions { - abortOnError false - } defaultConfig { vectorDrawables.useSupportLibrary = true } @@ -81,6 +80,10 @@ android { useLibrary 'android.test.runner' useLibrary 'android.test.base' useLibrary 'android.test.mock' + namespace 'de.symeda.sormas.app' + lint { + abortOnError false + } } repositories { @@ -91,18 +94,14 @@ repositories { } dependencies { - def lifecycle_version = "2.2.0" - def paging_version = "3.0.1" - implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation platform('com.google.firebase:firebase-bom:29.0.0') - implementation 'androidx.appcompat:appcompat:1.3.1' - implementation 'com.google.android.material:material:1.5.0-alpha05' + implementation platform('com.google.firebase:firebase-bom:31.5.0') + implementation 'androidx.appcompat:appcompat:1.6.1' + implementation 'com.google.android.material:material:1.8.0' implementation 'androidx.percentlayout:percentlayout:1.0.0' - implementation 'com.squareup.retrofit2:retrofit:2.4.0' - implementation 'com.squareup.retrofit2:converter-gson:2.4.0' - implementation 'com.j256.ormlite:ormlite-core:5.1' - implementation 'com.j256.ormlite:ormlite-android:5.1' + implementation 'com.squareup.retrofit2:retrofit:2.9.0' + implementation 'com.squareup.retrofit2:converter-gson:2.9.0' + implementation 'com.j256.ormlite:ormlite-android:6.1' implementation 'javax.persistence:persistence-api:1.0.2' implementation 'com.google.firebase:firebase-crashlytics' implementation 'com.google.firebase:firebase-analytics' @@ -110,8 +109,8 @@ dependencies { implementation 'com.google.firebase:firebase-config' implementation("de.symeda.sormas:sormas-api:$sormasVersion") { changing = true } implementation 'com.github.mpkorstanje:simmetrics-core:4.1.1' - implementation 'com.google.guava:guava:31.0.1-android' - implementation 'com.opencsv:opencsv:5.5.2' + implementation 'com.google.guava:guava:31.1-jre' + implementation 'com.opencsv:opencsv:5.7.1' implementation 'commons-beanutils:commons-beanutils:1.9.4' implementation 'commons-codec:commons-codec:1.15' implementation 'commons-collections:commons-collections:3.2.2' @@ -119,39 +118,41 @@ dependencies { implementation 'org.apache.commons:commons-collections4:4.4' implementation 'org.apache.commons:commons-lang3:3.12.0' implementation 'org.apache.commons:commons-text:1.10.0' - implementation 'org.jsoup:jsoup:1.14.3' + implementation 'org.jsoup:jsoup:1.15.4' implementation 'com.googlecode:openbeans:1.0' implementation files('libs/MPAndroidChart-v3.0.2.jar') implementation(name: 'CircleProgress-v1.2.1', ext: 'aar') - implementation 'io.reactivex:rxandroid:1.0.1' - implementation 'io.reactivex:rxjava:1.0.14' - implementation 'com.fasterxml.jackson.core:jackson-core:2.12.4' - implementation 'com.fasterxml.jackson.core:jackson-annotations:2.12.4' - implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version" - implementation "androidx.paging:paging-runtime:$paging_version" - implementation 'androidx.work:work-runtime-ktx:2.7.1' + implementation 'io.reactivex:rxandroid:1.2.1' + implementation 'io.reactivex:rxjava:1.3.8' + implementation 'com.fasterxml.jackson.core:jackson-core:2.14.2' + implementation 'com.fasterxml.jackson.core:jackson-annotations:2.14.2' + implementation 'androidx.lifecycle:lifecycle-viewmodel:2.6.1' + implementation 'androidx.paging:paging-runtime:3.1.1' + implementation 'androidx.work:work-runtime-ktx:2.8.1' + implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' + implementation 'me.dm7.barcodescanner:zxing:1.9.13' + implementation 'io.crowdcode.sormas.lbds:lbds-android-messaging:1.4.8' + implementation 'org.slf4j:slf4j-api:2.0.7' + // Align versions of all Kotlin components + implementation platform("org.jetbrains.kotlin:kotlin-bom:1.8.10") testImplementation 'junit:junit:4.13.2' testImplementation 'org.hamcrest:hamcrest:2.2' testImplementation 'org.hamcrest:hamcrest-core:2.2' testImplementation 'org.hamcrest:hamcrest-library:2.2' - testImplementation 'org.robolectric:robolectric:4.2.1' - testImplementation 'org.mockito:mockito-core:4.3.1' - androidTestImplementation 'androidx.annotation:annotation:1.2.0' - androidTestImplementation 'androidx.test:runner:1.4.0' - androidTestImplementation 'androidx.test:rules:1.4.0' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' + testImplementation 'org.robolectric:robolectric:4.10' + testImplementation 'org.mockito:mockito-core:5.3.0' + androidTestImplementation 'androidx.annotation:annotation:1.5.0' + androidTestImplementation 'androidx.test:runner:1.5.2' + androidTestImplementation 'androidx.test:rules:1.5.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' androidTestImplementation 'androidx.test.uiautomator:uiautomator:2.2.0' - implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' - implementation 'me.dm7.barcodescanner:zxing:1.9.13' - implementation 'io.crowdcode.sormas.lbds:lbds-android-messaging:1.4.6' - implementation 'org.slf4j:slf4j-api:1.7.36' } apply plugin: "jacoco" jacoco { toolVersion = "0.8.5" - reportsDir = file("$buildDir/reports") + reportsDirectory = file("$buildDir/reports") } task jacocoUnitTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest']) { def coverageSourceDirs = [ @@ -176,8 +177,8 @@ task jacocoUnitTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest']) "jacoco/testDebugUnitTest.exec" ]) reports { - xml.enabled = true - html.enabled = true + xml.required = true + html.required = true } } diff --git a/sormas-app/app/proguard-rules.pro b/sormas-app/app/proguard-rules.pro index f701a927f15..660c2a5f27a 100644 --- a/sormas-app/app/proguard-rules.pro +++ b/sormas-app/app/proguard-rules.pro @@ -18,11 +18,17 @@ -dontobfuscate --keep public class de.symeda.sormas.** { - *; -} +-keep public class de.symeda.sormas.** { *; } +-keep public enum de.symeda.sormas.** { *; } # exclude LBDS libs - their usage via reflection isn't properly detected --keep public class org.hzi.sormas.** { - *; -} \ No newline at end of file +-keep public class org.hzi.sormas.** { *; } + +-dontwarn javax.** +-dontwarn java.beans.** +-dontwarn java.awt.Image +-dontwarn kotlin.reflect.jvm.ReflectJvmMapping +-dontwarn org.apache.commons.io.input.BOMInputStream +-dontwarn org.slf4j.impl.StaticLoggerBinder +-dontwarn reactor.blockhound.integration.BlockHoundIntegration +-dontwarn sun.security.x509.AlgorithmId \ No newline at end of file diff --git a/sormas-app/app/src/debug/AndroidManifest.xml b/sormas-app/app/src/debug/AndroidManifest.xml index 6575a7707dd..a13b59b0c7e 100644 --- a/sormas-app/app/src/debug/AndroidManifest.xml +++ b/sormas-app/app/src/debug/AndroidManifest.xml @@ -1,6 +1,5 @@ - + diff --git a/sormas-app/app/src/main/AndroidManifest.xml b/sormas-app/app/src/main/AndroidManifest.xml index 6835080e7c4..098a3733816 100644 --- a/sormas-app/app/src/main/AndroidManifest.xml +++ b/sormas-app/app/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ - + diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/backend/caze/CaseDao.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/backend/caze/CaseDao.java index 7591c112f4f..f7b7a6fdbc0 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/backend/caze/CaseDao.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/backend/caze/CaseDao.java @@ -523,7 +523,7 @@ private void onCaseChanged(Case existingCase, Case changedCase) { if (assigneeUser != null && CaseJurisdictionBooleanValidator .of(JurisdictionHelper.createCaseJurisdictionDto(changedCase), JurisdictionHelper.createUserJurisdiction(assigneeUser)) - .isInJurisdiction()) { + .isRootInJurisdiction()) { continue; } diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/backend/caze/CaseJurisdictionBooleanValidator.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/backend/caze/CaseJurisdictionBooleanValidator.java index e5fe7f07d67..2eda6522496 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/backend/caze/CaseJurisdictionBooleanValidator.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/backend/caze/CaseJurisdictionBooleanValidator.java @@ -18,6 +18,7 @@ package de.symeda.sormas.app.backend.caze; +import de.symeda.sormas.api.Disease; import de.symeda.sormas.api.utils.DataHelper; import de.symeda.sormas.app.util.BooleanJurisdictionValidator; import de.symeda.sormas.app.util.UserJurisdiction; @@ -32,21 +33,26 @@ public static CaseJurisdictionBooleanValidator of(CaseJurisdictionDto caseJurisd } private CaseJurisdictionBooleanValidator(CaseJurisdictionDto caseJurisdiction, UserJurisdiction userJurisdiction) { - super(null); + super(null, userJurisdiction); this.caseJurisdiction = caseJurisdiction; this.userJurisdiction = userJurisdiction; } @Override - protected Boolean isInJurisdiction() { + public Boolean isRootInJurisdiction() { return isInJurisdictionByJurisdictionLevel(userJurisdiction.getJurisdictionLevel()); } @Override - protected Boolean isInJurisdictionOrOwned() { + public Boolean isRootInJurisdictionOrOwned() { return userJurisdiction.getUuid().equals(caseJurisdiction.getReportingUserUuid()) || inJurisdiction(); } + @Override + protected Disease getDisease() { + return null; + } + @Override protected Boolean whenNotAllowed() { return false; diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/backend/contact/ContactJurisdictionBooleanValidator.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/backend/contact/ContactJurisdictionBooleanValidator.java index a7e6cc7ec96..b85b5c546bd 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/backend/contact/ContactJurisdictionBooleanValidator.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/backend/contact/ContactJurisdictionBooleanValidator.java @@ -20,6 +20,7 @@ import java.util.Collections; +import de.symeda.sormas.api.Disease; import de.symeda.sormas.api.utils.DataHelper; import de.symeda.sormas.app.backend.caze.CaseJurisdictionBooleanValidator; import de.symeda.sormas.app.util.BooleanJurisdictionValidator; @@ -35,21 +36,26 @@ public static ContactJurisdictionBooleanValidator of(ContactJurisdictionDto cont } private ContactJurisdictionBooleanValidator(ContactJurisdictionDto contactJurisdictionDto, UserJurisdiction userJurisdiction) { - super(Collections.singletonList(contactJurisdictionDto.getCaseJurisdiction() != null ? CaseJurisdictionBooleanValidator.of(contactJurisdictionDto.getCaseJurisdiction(), userJurisdiction): null)); + super(Collections.singletonList(contactJurisdictionDto.getCaseJurisdiction() != null ? CaseJurisdictionBooleanValidator.of(contactJurisdictionDto.getCaseJurisdiction(), userJurisdiction): null), userJurisdiction); this.contactJurisdictionDto = contactJurisdictionDto; this.userJurisdiction = userJurisdiction; } @Override - protected Boolean isInJurisdiction() { + public Boolean isRootInJurisdiction() { return isInJurisdictionByJurisdictionLevel(userJurisdiction.getJurisdictionLevel()); } @Override - protected Boolean isInJurisdictionOrOwned() { + public Boolean isRootInJurisdictionOrOwned() { return userJurisdiction.getUuid().equals(contactJurisdictionDto.getReportingUserUuid()) || inJurisdiction(); } + @Override + protected Disease getDisease() { + return null; + } + @Override protected Boolean whenNotAllowed() { return false; diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/backend/event/EventJurisdictionBooleanValidator.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/backend/event/EventJurisdictionBooleanValidator.java index ab0783b9a46..196b60c13e4 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/backend/event/EventJurisdictionBooleanValidator.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/backend/event/EventJurisdictionBooleanValidator.java @@ -18,6 +18,7 @@ package de.symeda.sormas.app.backend.event; +import de.symeda.sormas.api.Disease; import de.symeda.sormas.api.utils.DataHelper; import de.symeda.sormas.app.util.BooleanJurisdictionValidator; import de.symeda.sormas.app.util.UserJurisdiction; @@ -32,21 +33,26 @@ public static EventJurisdictionBooleanValidator of(EventJurisdictionDto eventJur } private EventJurisdictionBooleanValidator(EventJurisdictionDto eventJurisdictionDto, UserJurisdiction userJurisdiction) { - super(null); + super(null, userJurisdiction); this.eventJurisdictionDto = eventJurisdictionDto; this.userJurisdiction = userJurisdiction; } @Override - protected Boolean isInJurisdiction() { + public Boolean isRootInJurisdiction() { return isInJurisdictionByJurisdictionLevel(userJurisdiction.getJurisdictionLevel()); } @Override - protected Boolean isInJurisdictionOrOwned() { + public Boolean isRootInJurisdictionOrOwned() { return userJurisdiction.getUuid().equals(eventJurisdictionDto.getReportingUserUuid()) || userJurisdiction.getUuid().equals(eventJurisdictionDto.getResponsibleUserUuid()) || inJurisdiction(); } + @Override + protected Disease getDisease() { + return null; + } + @Override protected Boolean whenNotAllowed() { return false; diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/backend/event/EventParticipantJurisdictionBooleanValidator.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/backend/event/EventParticipantJurisdictionBooleanValidator.java index c7e28ef8558..4b54f8c9ce1 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/backend/event/EventParticipantJurisdictionBooleanValidator.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/backend/event/EventParticipantJurisdictionBooleanValidator.java @@ -18,6 +18,7 @@ package de.symeda.sormas.app.backend.event; +import de.symeda.sormas.api.Disease; import de.symeda.sormas.api.utils.DataHelper; import de.symeda.sormas.app.util.BooleanJurisdictionValidator; import de.symeda.sormas.app.util.UserJurisdiction; @@ -34,21 +35,26 @@ public static EventParticipantJurisdictionBooleanValidator of(EventParticipantJu } private EventParticipantJurisdictionBooleanValidator(EventParticipantJurisdictionDto eventParticipantJurisdictionDto, UserJurisdiction userJurisdiction) { - super(null); + super(null, userJurisdiction); this.eventParticipantJurisdictionDto = eventParticipantJurisdictionDto; this.userJurisdiction = userJurisdiction; } @Override - protected Boolean isInJurisdiction() { + public Boolean isRootInJurisdiction() { return isInJurisdictionByJurisdictionLevel(userJurisdiction.getJurisdictionLevel()); } @Override - protected Boolean isInJurisdictionOrOwned() { + public Boolean isRootInJurisdictionOrOwned() { return userJurisdiction.getUuid().equals(eventParticipantJurisdictionDto.getReportingUserUuid()) || inJurisdiction(); } + @Override + protected Disease getDisease() { + return null; + } + @Override protected Boolean whenNotAllowed() { return false; diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/backend/immunization/ImmunizationJurisdictionBooleanValidator.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/backend/immunization/ImmunizationJurisdictionBooleanValidator.java index c746a170b18..7de10c4d76a 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/backend/immunization/ImmunizationJurisdictionBooleanValidator.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/backend/immunization/ImmunizationJurisdictionBooleanValidator.java @@ -15,6 +15,7 @@ package de.symeda.sormas.app.backend.immunization; +import de.symeda.sormas.api.Disease; import de.symeda.sormas.api.utils.DataHelper; import de.symeda.sormas.app.backend.caze.ResponsibleJurisdictionDto; import de.symeda.sormas.app.util.BooleanJurisdictionValidator; @@ -32,21 +33,26 @@ public static ImmunizationJurisdictionBooleanValidator of( } public ImmunizationJurisdictionBooleanValidator(ImmunizationJurisdictionDto immunizationJurisdiction, UserJurisdiction userJurisdiction) { - super(null); + super(null, userJurisdiction); this.immunizationJurisdiction = immunizationJurisdiction; this.userJurisdiction = userJurisdiction; } @Override - protected Boolean isInJurisdiction() { + public Boolean isRootInJurisdiction() { return isInJurisdictionByJurisdictionLevel(userJurisdiction.getJurisdictionLevel()); } @Override - protected Boolean isInJurisdictionOrOwned() { + public Boolean isRootInJurisdictionOrOwned() { return userJurisdiction.getUuid().equals(immunizationJurisdiction.getReportingUserUuid()) || inJurisdiction(); } + @Override + protected Disease getDisease() { + return null; + } + @Override protected Boolean whenNotAllowed() { return false; diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/backend/sample/SampleJurisdictionBooleanValidator.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/backend/sample/SampleJurisdictionBooleanValidator.java index ed896c8788a..5a9364f0915 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/backend/sample/SampleJurisdictionBooleanValidator.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/backend/sample/SampleJurisdictionBooleanValidator.java @@ -21,6 +21,7 @@ import java.util.ArrayList; import java.util.List; +import de.symeda.sormas.api.Disease; import de.symeda.sormas.api.utils.DataHelper; import de.symeda.sormas.app.backend.caze.CaseJurisdictionBooleanValidator; import de.symeda.sormas.app.backend.caze.CaseJurisdictionDto; @@ -58,21 +59,26 @@ public static SampleJurisdictionBooleanValidator of(SampleJurisdictionDto sample } private SampleJurisdictionBooleanValidator(SampleJurisdictionDto sampleJurisdictionDto, UserJurisdiction userJurisdiction, List associatedJurisdictionValidators) { - super(associatedJurisdictionValidators); + super(associatedJurisdictionValidators, userJurisdiction); this.sampleJurisdictionDto = sampleJurisdictionDto; this.userJurisdiction = userJurisdiction; } @Override - protected Boolean isInJurisdiction() { + public Boolean isRootInJurisdiction() { return isInJurisdictionByJurisdictionLevel(userJurisdiction.getJurisdictionLevel()); } @Override - protected Boolean isInJurisdictionOrOwned() { + public Boolean isRootInJurisdictionOrOwned() { return userJurisdiction.getUuid().equals(sampleJurisdictionDto.getReportingUserUuid()) || inJurisdiction(); } + @Override + protected Disease getDisease() { + return null; + } + @Override protected Boolean whenNotAllowed() { return false; diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/backend/task/TaskJurisdictionBooleanValidator.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/backend/task/TaskJurisdictionBooleanValidator.java index e6245fa1607..788613b2b84 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/backend/task/TaskJurisdictionBooleanValidator.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/backend/task/TaskJurisdictionBooleanValidator.java @@ -21,6 +21,7 @@ import java.util.ArrayList; import java.util.List; +import de.symeda.sormas.api.Disease; import de.symeda.sormas.app.backend.caze.CaseJurisdictionBooleanValidator; import de.symeda.sormas.app.backend.caze.CaseJurisdictionDto; import de.symeda.sormas.app.backend.contact.ContactJurisdictionBooleanValidator; @@ -56,21 +57,26 @@ public static TaskJurisdictionBooleanValidator of(TaskJurisdictionDto taskJurisd } private TaskJurisdictionBooleanValidator(TaskJurisdictionDto taskJurisdictionDto, UserJurisdiction userJurisdiction, List associatedJurisdictionValidators) { - super(associatedJurisdictionValidators); + super(associatedJurisdictionValidators, userJurisdiction); this.taskJurisdictionDto = taskJurisdictionDto; this.userJurisdiction = userJurisdiction; } @Override - protected Boolean isInJurisdiction() { + public Boolean isRootInJurisdiction() { return isInJurisdictionByJurisdictionLevel(userJurisdiction.getJurisdictionLevel()); } @Override - protected Boolean isInJurisdictionOrOwned() { + public Boolean isRootInJurisdictionOrOwned() { return userJurisdiction.getUuid().equals(taskJurisdictionDto.getCreatorUserUuid()) || userJurisdiction.getUuid().equals(taskJurisdictionDto.getAssigneeUserUuid()) || inJurisdiction(); } + @Override + protected Disease getDisease() { + return null; + } + @Override protected Boolean whenNotAllowed() { return false; diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/campaign/list/CampaignFormDataListActivity.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/campaign/list/CampaignFormDataListActivity.java index b3d7a912e2f..0f93d11c503 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/campaign/list/CampaignFormDataListActivity.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/campaign/list/CampaignFormDataListActivity.java @@ -22,7 +22,7 @@ import android.widget.AdapterView; import androidx.databinding.DataBindingUtil; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.RecyclerView; import java.util.ArrayList; @@ -86,7 +86,7 @@ public void onItemRangeMoved(int positionStart, int toPosition, int itemCount) { } }); - model = ViewModelProviders.of(this).get(CampaignFormDataListViewModel.class); + model = new ViewModelProvider(this).get(CampaignFormDataListViewModel.class); model.getCriteria().setCampaign(DatabaseHelper.getCampaignDao().getLastStartedCampaign()); model.getCampaignFormDataList().observe(this, campaignFormDataPagedList -> { adapter.submitList(campaignFormDataPagedList); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditClinicalVisitListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditClinicalVisitListFragment.java index 7bf9e9b4e6c..348ff4d775b 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditClinicalVisitListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditClinicalVisitListFragment.java @@ -23,7 +23,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -56,7 +56,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { ((BaseActivity) getActivity()).showPreloader(); adapter = new ClinicalVisitListAdapter(); - ClinicalVisitListViewModel model = ViewModelProviders.of(this).get(ClinicalVisitListViewModel.class); + ClinicalVisitListViewModel model = new ViewModelProvider(this).get(ClinicalVisitListViewModel.class); model.initializeViewModel(getActivityRootData().getClinicalCourse()); model.getClinicalVisits().observe(this, clinicalVisits -> { ((BaseActivity) getActivity()).hidePreloader(); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditContactListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditContactListFragment.java index b7fe99ba9c1..3d517b79bce 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditContactListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditContactListFragment.java @@ -24,7 +24,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -58,7 +58,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { ((CaseEditActivity) getActivity()).showPreloader(); adapter = new ContactListAdapter(); - ContactListViewModel model = ViewModelProviders.of(this).get(ContactListViewModel.class); + ContactListViewModel model = new ViewModelProvider(this).get(ContactListViewModel.class); model.initializeViewModel(getActivityRootData()); model.getContacts().observe(this, contacts -> { ((CaseEditActivity) getActivity()).hidePreloader(); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditEventListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditEventListFragment.java index cb3c969f995..b82fd5e4e32 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditEventListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditEventListFragment.java @@ -9,7 +9,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -38,7 +38,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { ((BaseActivity) getActivity()).showPreloader(); adapter = new EventListAdapter(); - EventListViewModel model = ViewModelProviders.of(this).get(EventListViewModel.class); + EventListViewModel model = new ViewModelProvider(this).get(EventListViewModel.class); model.initializeViewModel(getActivityRootData()); model.getEvents().observe(this, events -> { ((CaseEditActivity) getActivity()).hidePreloader(); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditImmunizationListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditImmunizationListFragment.java index 016b1e05cd8..e6f19e1a561 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditImmunizationListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditImmunizationListFragment.java @@ -25,7 +25,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -57,7 +57,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { ((BaseActivity) getActivity()).showPreloader(); adapter = new ImmunizationListAdapter(); - ImmunizationListViewModel model = ViewModelProviders.of(this).get(ImmunizationListViewModel.class); + ImmunizationListViewModel model = new ViewModelProvider(this).get(ImmunizationListViewModel.class); model.initializeViewModel(getActivityRootData()); model.getImmunizationList().observe(this, immunizations -> { ((CaseEditActivity) getActivity()).hidePreloader(); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditPrescriptionListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditPrescriptionListFragment.java index b5147068de9..864d2ef6a43 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditPrescriptionListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditPrescriptionListFragment.java @@ -23,7 +23,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -55,7 +55,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { ((BaseActivity) getActivity()).showPreloader(); adapter = new PrescriptionListAdapter(); - PrescriptionListViewModel model = ViewModelProviders.of(this).get(PrescriptionListViewModel.class); + PrescriptionListViewModel model = new ViewModelProvider(this).get(PrescriptionListViewModel.class); model.initializeViewModel(getActivityRootData().getTherapy()); model.getPrescriptions().observe(this, prescriptions -> { ((BaseActivity) getActivity()).hidePreloader(); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditSampleListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditSampleListFragment.java index 8618ba824bb..022a8cd3721 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditSampleListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditSampleListFragment.java @@ -24,7 +24,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -56,7 +56,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { ((BaseActivity) getActivity()).showPreloader(); adapter = new SampleListAdapter(); - SampleListViewModel model = ViewModelProviders.of(this).get(SampleListViewModel.class); + SampleListViewModel model = new ViewModelProvider(this).get(SampleListViewModel.class); model.initializeViewModel(getActivityRootData()); model.getSamples().observe(this, samples -> { ((CaseEditActivity) getActivity()).hidePreloader(); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditTaskListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditTaskListFragment.java index 81804980142..57c540b5364 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditTaskListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditTaskListFragment.java @@ -24,7 +24,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -54,7 +54,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { ((CaseEditActivity) getActivity()).showPreloader(); adapter = new TaskListAdapter(); - TaskListViewModel model = ViewModelProviders.of(this).get(TaskListViewModel.class); + TaskListViewModel model = new ViewModelProvider(this).get(TaskListViewModel.class); model.initializeViewModel(getActivityRootData()); model.getTasks().observe(this, tasks -> { ((CaseEditActivity) getActivity()).hidePreloader(); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditTreatmentListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditTreatmentListFragment.java index e0020b92d38..dbd383e6061 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditTreatmentListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditTreatmentListFragment.java @@ -23,7 +23,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -55,7 +55,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { ((BaseActivity) getActivity()).showPreloader(); adapter = new TreatmentListAdapter(); - TreatmentListViewModel model = ViewModelProviders.of(this).get(TreatmentListViewModel.class); + TreatmentListViewModel model = new ViewModelProvider(this).get(TreatmentListViewModel.class); model.initializeViewModel(getActivityRootData().getTherapy()); model.getTreatments().observe(this, treatments -> { ((BaseActivity) getActivity()).hidePreloader(); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditVaccinationListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditVaccinationListFragment.java index bb3b2123adc..fd2e644ab2f 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditVaccinationListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditVaccinationListFragment.java @@ -10,7 +10,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -43,7 +43,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { Date vaccinationListGrayoutDate = onsetDate != null ? onsetDate : getActivityRootData().getReportDate(); adapter = new VaccinationReducedListAdapter(vaccinationListGrayoutDate); - VaccinationListViewModel model = ViewModelProviders.of(this).get(VaccinationListViewModel.class); + VaccinationListViewModel model = new ViewModelProvider(this).get(VaccinationListViewModel.class); model.initializeViewModel(getActivityRootData()); model.getVaccinations().observe(this, vaccinations -> { adapter.submitList(vaccinations); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/list/CaseListActivity.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/list/CaseListActivity.java index f84be8f723a..bb138466203 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/list/CaseListActivity.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/list/CaseListActivity.java @@ -29,7 +29,7 @@ import android.widget.AdapterView; import androidx.databinding.DataBindingUtil; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.RecyclerView; import de.symeda.sormas.api.caze.CaseClassification; @@ -92,7 +92,7 @@ public void onItemRangeMoved(int positionStart, int toPosition, int itemCount) { } } }); - model = ViewModelProviders.of(this).get(CaseListViewModel.class); + model = new ViewModelProvider(this).get(CaseListViewModel.class); model.getCases().observe(this, cases -> { adapter.submitList(cases); hidePreloader(); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadClinicalVisitListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadClinicalVisitListFragment.java index 2ecb3ea6958..614b4ade3fd 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadClinicalVisitListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadClinicalVisitListFragment.java @@ -23,7 +23,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -54,7 +54,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { ((BaseActivity) getActivity()).showPreloader(); adapter = new ClinicalVisitListAdapter(); - ClinicalVisitListViewModel model = ViewModelProviders.of(this).get(ClinicalVisitListViewModel.class); + ClinicalVisitListViewModel model = new ViewModelProvider(this).get(ClinicalVisitListViewModel.class); model.initializeViewModel(getActivityRootData().getClinicalCourse()); model.getClinicalVisits().observe(this, clinicalVisits -> { ((BaseActivity) getActivity()).hidePreloader(); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadContactListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadContactListFragment.java index 617a5c4b90e..fbd5895171f 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadContactListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadContactListFragment.java @@ -24,7 +24,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -55,7 +55,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { ((CaseReadActivity) getActivity()).showPreloader(); adapter = new ContactListAdapter(); - ContactListViewModel model = ViewModelProviders.of(this).get(ContactListViewModel.class); + ContactListViewModel model = new ViewModelProvider(this).get(ContactListViewModel.class); model.initializeViewModel(getActivityRootData()); model.getContacts().observe(this, contacts -> { ((CaseReadActivity) getActivity()).hidePreloader(); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadEventListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadEventListFragment.java index 641084566f1..381dad99311 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadEventListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadEventListFragment.java @@ -9,7 +9,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -37,7 +37,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { ((CaseReadActivity) getActivity()).showPreloader(); eventListAdapter = new EventListAdapter(); - EventListViewModel model = ViewModelProviders.of(this).get(EventListViewModel.class); + EventListViewModel model = new ViewModelProvider(this).get(EventListViewModel.class); model.initializeViewModel(getActivityRootData()); model.getEvents().observe(this, events -> { eventListAdapter.submitList(events); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadImmunizationListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadImmunizationListFragment.java index 0fadffc91d5..d2d02412aa3 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadImmunizationListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadImmunizationListFragment.java @@ -25,7 +25,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -56,7 +56,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { ((CaseReadActivity) getActivity()).showPreloader(); immunizationListAdapter = new ImmunizationListAdapter(); - ImmunizationListViewModel model = ViewModelProviders.of(this).get(ImmunizationListViewModel.class); + ImmunizationListViewModel model = new ViewModelProvider(this).get(ImmunizationListViewModel.class); model.initializeViewModel(getActivityRootData()); model.getImmunizationList().observe(this, immunizations -> { immunizationListAdapter.submitList(immunizations); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadPrescriptionListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadPrescriptionListFragment.java index 438a940f997..380e9b9caea 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadPrescriptionListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadPrescriptionListFragment.java @@ -23,7 +23,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -53,7 +53,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { ((BaseActivity) getActivity()).showPreloader(); adapter = new PrescriptionListAdapter(); - PrescriptionListViewModel model = ViewModelProviders.of(this).get(PrescriptionListViewModel.class); + PrescriptionListViewModel model = new ViewModelProvider(this).get(PrescriptionListViewModel.class); model.initializeViewModel(getActivityRootData().getTherapy()); model.getPrescriptions().observe(this, prescriptions -> { ((BaseActivity) getActivity()).hidePreloader(); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadSampleListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadSampleListFragment.java index e0141627456..a529137d9ff 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadSampleListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadSampleListFragment.java @@ -24,7 +24,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -53,7 +53,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { ((CaseReadActivity) getActivity()).showPreloader(); adapter = new SampleListAdapter(); - SampleListViewModel model = ViewModelProviders.of(this).get(SampleListViewModel.class); + SampleListViewModel model = new ViewModelProvider(this).get(SampleListViewModel.class); model.initializeViewModel(getActivityRootData()); model.getSamples().observe(this, samples -> { adapter.submitList(samples); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadTaskListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadTaskListFragment.java index b24fa8d5659..afbc17fb5cc 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadTaskListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadTaskListFragment.java @@ -24,7 +24,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -52,7 +52,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { ((CaseReadActivity) getActivity()).showPreloader(); adapter = new TaskListAdapter(); - TaskListViewModel model = ViewModelProviders.of(this).get(TaskListViewModel.class); + TaskListViewModel model = new ViewModelProvider(this).get(TaskListViewModel.class); model.initializeViewModel(getActivityRootData()); model.getTasks().observe(this, tasks -> { ((CaseReadActivity) getActivity()).hidePreloader(); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadTreatmentListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadTreatmentListFragment.java index be068cb9257..4736187acd9 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadTreatmentListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadTreatmentListFragment.java @@ -23,7 +23,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -53,7 +53,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { ((BaseActivity) getActivity()).showPreloader(); adapter = new TreatmentListAdapter(); - TreatmentListViewModel model = ViewModelProviders.of(this).get(TreatmentListViewModel.class); + TreatmentListViewModel model = new ViewModelProvider(this).get(TreatmentListViewModel.class); model.initializeViewModel(getActivityRootData().getTherapy()); model.getTreatments().observe(this, treatments -> { ((BaseActivity) getActivity()).hidePreloader(); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadVaccinationListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadVaccinationListFragment.java index f6462aea03c..486b925a37d 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadVaccinationListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/read/CaseReadVaccinationListFragment.java @@ -10,7 +10,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -43,7 +43,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { Date vaccinationListGrayoutDate = onsetDate != null ? onsetDate : getActivityRootData().getReportDate(); adapter = new VaccinationReducedListAdapter(vaccinationListGrayoutDate); - VaccinationListViewModel model = ViewModelProviders.of(this).get(VaccinationListViewModel.class); + VaccinationListViewModel model = new ViewModelProvider(this).get(VaccinationListViewModel.class); model.initializeViewModel(getActivityRootData()); model.getVaccinations().observe(this, vaccinations -> { adapter.submitList(vaccinations); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/edit/ContactEditImmunizationListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/edit/ContactEditImmunizationListFragment.java index 417ec59ac90..bebdfb09555 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/edit/ContactEditImmunizationListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/edit/ContactEditImmunizationListFragment.java @@ -25,7 +25,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -57,7 +57,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { ((BaseActivity) getActivity()).showPreloader(); adapter = new ImmunizationListAdapter(); - ImmunizationListViewModel model = ViewModelProviders.of(this).get(ImmunizationListViewModel.class); + ImmunizationListViewModel model = new ViewModelProvider(this).get(ImmunizationListViewModel.class); model.initializeViewModel(getActivityRootData()); model.getImmunizationList().observe(this, immunizations -> { ((ContactEditActivity) getActivity()).hidePreloader(); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/edit/ContactEditTaskListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/edit/ContactEditTaskListFragment.java index f781d0874fe..c5b6088e9a8 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/edit/ContactEditTaskListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/edit/ContactEditTaskListFragment.java @@ -24,7 +24,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -57,7 +57,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { ((ContactEditActivity) getActivity()).showPreloader(); adapter = new TaskListAdapter(); - model = ViewModelProviders.of(this).get(TaskListViewModel.class); + model = new ViewModelProvider(this).get(TaskListViewModel.class); model.initializeViewModel(getActivityRootData()); model.getTasks().observe(this, tasks -> { ((ContactEditActivity) getActivity()).hidePreloader(); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/edit/ContactEditVaccinationListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/edit/ContactEditVaccinationListFragment.java index fa093d3ce12..306bb79916f 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/edit/ContactEditVaccinationListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/edit/ContactEditVaccinationListFragment.java @@ -10,7 +10,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -43,7 +43,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { Date vaccinationListGrayoutDate = lastContactDate != null ? lastContactDate : getActivityRootData().getReportDateTime(); adapter = new VaccinationReducedListAdapter(vaccinationListGrayoutDate); - VaccinationListViewModel model = ViewModelProviders.of(this).get(VaccinationListViewModel.class); + VaccinationListViewModel model = new ViewModelProvider(this).get(VaccinationListViewModel.class); model.initializeViewModel(getActivityRootData()); model.getVaccinations().observe(this, vaccinations -> { adapter.submitList(vaccinations); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/edit/ContactEditVisitsListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/edit/ContactEditVisitsListFragment.java index ad1068f30a8..58fcf52399c 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/edit/ContactEditVisitsListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/edit/ContactEditVisitsListFragment.java @@ -20,7 +20,7 @@ import android.view.View; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -59,7 +59,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { ((ContactEditActivity) getActivity()).showPreloader(); adapter = new VisitListAdapter(R.layout.row_read_followup_list_item_layout, this, null); - model = ViewModelProviders.of(this).get(VisitListViewModel.class); + model = new ViewModelProvider(this).get(VisitListViewModel.class); model.getVisits(getActivityRootData()).observe(this, visits -> { adapter.replaceAll(visits); adapter.notifyDataSetChanged(); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/list/ContactListActivity.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/list/ContactListActivity.java index cfe2daa4e61..8c87d5f4ce3 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/list/ContactListActivity.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/list/ContactListActivity.java @@ -25,7 +25,7 @@ import android.widget.AdapterView; import androidx.databinding.DataBindingUtil; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.RecyclerView; import de.symeda.sormas.api.contact.ContactClassification; @@ -87,7 +87,7 @@ public void onItemRangeMoved(int positionStart, int toPosition, int itemCount) { } } }); - model = ViewModelProviders.of(this).get(ContactListViewModel.class); + model = new ViewModelProvider(this).get(ContactListViewModel.class); model.initializeViewModel(); model.getContacts().observe(this, contacts -> { adapter.submitList(contacts); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/read/ContactReadImmunizationListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/read/ContactReadImmunizationListFragment.java index ea96b277002..c4f4605a847 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/read/ContactReadImmunizationListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/read/ContactReadImmunizationListFragment.java @@ -25,7 +25,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -56,7 +56,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { ((ContactReadActivity) getActivity()).showPreloader(); immunizationListAdapter = new ImmunizationListAdapter(); - ImmunizationListViewModel model = ViewModelProviders.of(this).get(ImmunizationListViewModel.class); + ImmunizationListViewModel model = new ViewModelProvider(this).get(ImmunizationListViewModel.class); model.initializeViewModel(getActivityRootData()); model.getImmunizationList().observe(this, immunizations -> { immunizationListAdapter.submitList(immunizations); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/read/ContactReadTaskListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/read/ContactReadTaskListFragment.java index e7e0e4a4403..e621fa020e4 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/read/ContactReadTaskListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/read/ContactReadTaskListFragment.java @@ -24,7 +24,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -57,7 +57,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { ((ContactReadActivity) getActivity()).showPreloader(); adapter = new TaskListAdapter(); - model = ViewModelProviders.of(this).get(TaskListViewModel.class); + model = new ViewModelProvider(this).get(TaskListViewModel.class); model.initializeViewModel(getActivityRootData()); model.getTasks().observe(this, tasks -> { ((ContactReadActivity) getActivity()).hidePreloader(); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/read/ContactReadVaccinationListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/read/ContactReadVaccinationListFragment.java index 5011c74b2aa..19898ae4f2a 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/read/ContactReadVaccinationListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/read/ContactReadVaccinationListFragment.java @@ -10,7 +10,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -43,7 +43,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { Date vaccinationListGrayoutDate = lastContactDate != null ? lastContactDate : getActivityRootData().getReportDateTime(); adapter = new VaccinationReducedListAdapter(vaccinationListGrayoutDate); - VaccinationListViewModel model = ViewModelProviders.of(this).get(VaccinationListViewModel.class); + VaccinationListViewModel model = new ViewModelProvider(this).get(VaccinationListViewModel.class); model.initializeViewModel(getActivityRootData()); model.getVaccinations().observe(this, vaccinations -> { adapter.submitList(vaccinations); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/read/ContactReadVisitsListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/read/ContactReadVisitsListFragment.java index aafd475944f..90aef7e8b45 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/read/ContactReadVisitsListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/contact/read/ContactReadVisitsListFragment.java @@ -22,7 +22,7 @@ import android.view.View; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -56,7 +56,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { ((ContactReadActivity) getActivity()).showPreloader(); adapter = new VisitListAdapter(R.layout.row_read_followup_list_item_layout, this, null); - model = ViewModelProviders.of(this).get(VisitListViewModel.class); + model = new ViewModelProvider(this).get(VisitListViewModel.class); model.getVisits(getActivityRootData()).observe(this, visits -> { adapter.replaceAll(visits); adapter.notifyDataSetChanged(); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/event/edit/EventEditPersonsInvolvedListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/event/edit/EventEditPersonsInvolvedListFragment.java index af1167eabf6..1198573e91b 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/event/edit/EventEditPersonsInvolvedListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/event/edit/EventEditPersonsInvolvedListFragment.java @@ -19,7 +19,7 @@ import android.view.View; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -53,7 +53,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { ((EventEditActivity) getActivity()).showPreloader(); adapter = new EventParticipantListAdapter(R.layout.row_read_persons_involved_list_item_layout, this, null); - model = ViewModelProviders.of(this).get(EventParticipantListViewModel.class); + model = new ViewModelProvider(this).get(EventParticipantListViewModel.class); model.getEventParticipants(getActivityRootData()).observe(this, eventParticipants -> { adapter.replaceAll(eventParticipants); adapter.notifyDataSetChanged(); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/event/edit/EventEditTaskListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/event/edit/EventEditTaskListFragment.java index caa715021e9..39f0dfa3f30 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/event/edit/EventEditTaskListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/event/edit/EventEditTaskListFragment.java @@ -23,7 +23,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -55,7 +55,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { ((EventEditActivity) getActivity()).showPreloader(); adapter = new TaskListAdapter(); - model = ViewModelProviders.of(this).get(TaskListViewModel.class); + model = new ViewModelProvider(this).get(TaskListViewModel.class); model.initializeViewModel(getActivityRootData()); model.getTasks().observe(this, tasks -> { ((EventEditActivity) getActivity()).hidePreloader(); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/event/eventparticipant/edit/EventParticipantEditImmunizationListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/event/eventparticipant/edit/EventParticipantEditImmunizationListFragment.java index aa77c729bdf..af2a32f9993 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/event/eventparticipant/edit/EventParticipantEditImmunizationListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/event/eventparticipant/edit/EventParticipantEditImmunizationListFragment.java @@ -25,7 +25,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -57,7 +57,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { ((BaseActivity) getActivity()).showPreloader(); adapter = new ImmunizationListAdapter(); - ImmunizationListViewModel model = ViewModelProviders.of(this).get(ImmunizationListViewModel.class); + ImmunizationListViewModel model = new ViewModelProvider(this).get(ImmunizationListViewModel.class); model.initializeViewModel(getActivityRootData()); model.getImmunizationList().observe(this, immunizations -> { ((EventParticipantEditActivity) getActivity()).hidePreloader(); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/event/eventparticipant/edit/EventParticipantEditVaccinationListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/event/eventparticipant/edit/EventParticipantEditVaccinationListFragment.java index 220c226a216..27f17bc9eed 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/event/eventparticipant/edit/EventParticipantEditVaccinationListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/event/eventparticipant/edit/EventParticipantEditVaccinationListFragment.java @@ -10,7 +10,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -45,7 +45,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { Date vaccinationListGrayoutDate = eventStartDate != null ? eventStartDate : eventEndDate != null ? eventEndDate : eventReportDate; adapter = new VaccinationReducedListAdapter(vaccinationListGrayoutDate); - VaccinationListViewModel model = ViewModelProviders.of(this).get(VaccinationListViewModel.class); + VaccinationListViewModel model = new ViewModelProvider(this).get(VaccinationListViewModel.class); model.initializeViewModel(getActivityRootData()); model.getVaccinations().observe(this, vaccinations -> { adapter.submitList(vaccinations); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/event/eventparticipant/read/EventParticipantReadImmunizationListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/event/eventparticipant/read/EventParticipantReadImmunizationListFragment.java index e15664840a9..480a308deee 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/event/eventparticipant/read/EventParticipantReadImmunizationListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/event/eventparticipant/read/EventParticipantReadImmunizationListFragment.java @@ -22,7 +22,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -54,7 +54,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { ((EventParticipantReadActivity) getActivity()).showPreloader(); immunizationListAdapter = new ImmunizationListAdapter(); - ImmunizationListViewModel model = ViewModelProviders.of(this).get(ImmunizationListViewModel.class); + ImmunizationListViewModel model = new ViewModelProvider(this).get(ImmunizationListViewModel.class); model.initializeViewModel(getActivityRootData()); model.getImmunizationList().observe(this, immunizations -> { immunizationListAdapter.submitList(immunizations); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/event/eventparticipant/read/EventParticipantReadVaccinationListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/event/eventparticipant/read/EventParticipantReadVaccinationListFragment.java index d870543a036..d763114ffcd 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/event/eventparticipant/read/EventParticipantReadVaccinationListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/event/eventparticipant/read/EventParticipantReadVaccinationListFragment.java @@ -10,7 +10,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -45,7 +45,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { Date vaccinationListGrayoutDate = eventStartDate != null ? eventStartDate : eventEndDate != null ? eventEndDate : eventReportDate; adapter = new VaccinationReducedListAdapter(vaccinationListGrayoutDate); - VaccinationListViewModel model = ViewModelProviders.of(this).get(VaccinationListViewModel.class); + VaccinationListViewModel model = new ViewModelProvider(this).get(VaccinationListViewModel.class); model.initializeViewModel(getActivityRootData()); model.getVaccinations().observe(this, vaccinations -> { adapter.submitList(vaccinations); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/event/list/EventListActivity.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/event/list/EventListActivity.java index a7b0c9f0ca1..8a58e24ca17 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/event/list/EventListActivity.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/event/list/EventListActivity.java @@ -23,7 +23,7 @@ import android.view.Menu; import android.widget.AdapterView; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.RecyclerView; import de.symeda.sormas.api.event.EventStatus; @@ -79,7 +79,7 @@ public void onItemRangeMoved(int positionStart, int toPosition, int itemCount) { } } }); - model = ViewModelProviders.of(this).get(EventListViewModel.class); + model = new ViewModelProvider(this).get(EventListViewModel.class); model.getEvents().observe(this, events -> { adapter.submitList(events); hidePreloader(); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/event/read/EventReadPersonsInvolvedListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/event/read/EventReadPersonsInvolvedListFragment.java index ef574f42a20..a7e6572feea 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/event/read/EventReadPersonsInvolvedListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/event/read/EventReadPersonsInvolvedListFragment.java @@ -21,7 +21,7 @@ import android.view.View; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -52,7 +52,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { ((EventReadActivity) getActivity()).showPreloader(); adapter = new EventParticipantListAdapter(R.layout.row_read_persons_involved_list_item_layout, this, null); - model = ViewModelProviders.of(this).get(EventParticipantListViewModel.class); + model = new ViewModelProvider(this).get(EventParticipantListViewModel.class); model.getEventParticipants(getActivityRootData()).observe(this, eventParticipants -> { adapter.replaceAll(eventParticipants); adapter.notifyDataSetChanged(); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/event/read/EventReadTaskListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/event/read/EventReadTaskListFragment.java index 27f8683dacd..bebc238c701 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/event/read/EventReadTaskListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/event/read/EventReadTaskListFragment.java @@ -23,7 +23,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -53,7 +53,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { ((EventReadActivity) getActivity()).showPreloader(); adapter = new TaskListAdapter(); - model = ViewModelProviders.of(this).get(TaskListViewModel.class); + model = new ViewModelProvider(this).get(TaskListViewModel.class); model.initializeViewModel(getActivityRootData()); model.getTasks().observe(this, tasks -> { ((EventReadActivity) getActivity()).hidePreloader(); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/immunization/edit/ImmunizationEditVaccinationListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/immunization/edit/ImmunizationEditVaccinationListFragment.java index a476792dac5..0ea9ab4a6dd 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/immunization/edit/ImmunizationEditVaccinationListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/immunization/edit/ImmunizationEditVaccinationListFragment.java @@ -24,7 +24,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -54,7 +54,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { ((BaseActivity) getActivity()).showPreloader(); adapter = new VaccinationListAdapter(); - VaccinationListViewModel model = ViewModelProviders.of(this).get(VaccinationListViewModel.class); + VaccinationListViewModel model = new ViewModelProvider(this).get(VaccinationListViewModel.class); model.initializeViewModel(getActivityRootData()); model.getVaccinations().observe(this, vaccination -> { ((ImmunizationEditActivity) getActivity()).hidePreloader(); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/immunization/list/ImmunizationListActivity.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/immunization/list/ImmunizationListActivity.java index 93a8b4005ae..f18c826a5e2 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/immunization/list/ImmunizationListActivity.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/immunization/list/ImmunizationListActivity.java @@ -25,7 +25,7 @@ import android.widget.AdapterView; import androidx.databinding.DataBindingUtil; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.RecyclerView; import de.symeda.sormas.api.immunization.ImmunizationManagementStatus; @@ -84,7 +84,7 @@ public void onItemRangeMoved(int positionStart, int toPosition, int itemCount) { } } }); - model = ViewModelProviders.of(this).get(ImmunizationListViewModel.class); + model = new ViewModelProvider(this).get(ImmunizationListViewModel.class); model.initializeViewModel(); model.getImmunizationList().observe(this, immunizations -> { adapter.submitList(immunizations); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/immunization/read/ImmunizationReadVaccinationListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/immunization/read/ImmunizationReadVaccinationListFragment.java index 26246310dc2..4768dc84eb2 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/immunization/read/ImmunizationReadVaccinationListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/immunization/read/ImmunizationReadVaccinationListFragment.java @@ -24,7 +24,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -53,7 +53,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { ((ImmunizationReadActivity) getActivity()).showPreloader(); adapter = new VaccinationListAdapter(); - VaccinationListViewModel model = ViewModelProviders.of(this).get(VaccinationListViewModel.class); + VaccinationListViewModel model = new ViewModelProvider(this).get(VaccinationListViewModel.class); model.initializeViewModel(getActivityRootData()); model.getVaccinations().observe(this, vaccinations -> { adapter.submitList(vaccinations); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/sample/list/SampleListActivity.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/sample/list/SampleListActivity.java index 9069043e42e..296600c427a 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/sample/list/SampleListActivity.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/sample/list/SampleListActivity.java @@ -30,7 +30,7 @@ import android.widget.AdapterView; import androidx.databinding.DataBindingUtil; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.RecyclerView; import de.symeda.sormas.app.BaseListActivity; @@ -89,7 +89,7 @@ public void onItemRangeMoved(int positionStart, int toPosition, int itemCount) { } } }); - model = ViewModelProviders.of(this).get(SampleListViewModel.class); + model = new ViewModelProvider(this).get(SampleListViewModel.class); model.initializeViewModel(); model.getSamples().observe(this, samples -> { adapter.submitList(samples); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/sample/read/SampleEditPathogenTestListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/sample/read/SampleEditPathogenTestListFragment.java index f28000ae5b6..6349f8334f5 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/sample/read/SampleEditPathogenTestListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/sample/read/SampleEditPathogenTestListFragment.java @@ -24,7 +24,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -58,7 +58,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { ((SampleEditActivity) getActivity()).showPreloader(); adapter = new PathogenTestListAdapter(); - PathogenTestListViewModel model = ViewModelProviders.of(this).get(PathogenTestListViewModel.class); + PathogenTestListViewModel model = new ViewModelProvider(this).get(PathogenTestListViewModel.class); model.initializeViewModel(getActivityRootData()); model.getPathogenTests().observe(this, contacts -> { ((SampleEditActivity) getActivity()).hidePreloader(); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/sample/read/SampleReadPathogenTestListFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/sample/read/SampleReadPathogenTestListFragment.java index c059f050e85..9aa88d8a205 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/sample/read/SampleReadPathogenTestListFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/sample/read/SampleReadPathogenTestListFragment.java @@ -24,7 +24,7 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -55,7 +55,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { ((SampleReadActivity) getActivity()).showPreloader(); adapter = new PathogenTestListAdapter(); - PathogenTestListViewModel model = ViewModelProviders.of(this).get(PathogenTestListViewModel.class); + PathogenTestListViewModel model = new ViewModelProvider(this).get(PathogenTestListViewModel.class); model.initializeViewModel(getActivityRootData()); model.getPathogenTests().observe(this, contacts -> { ((SampleReadActivity) getActivity()).hidePreloader(); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/task/list/TaskListActivity.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/task/list/TaskListActivity.java index 0742349b08b..84c86da680c 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/task/list/TaskListActivity.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/task/list/TaskListActivity.java @@ -25,7 +25,7 @@ import android.widget.AdapterView; import androidx.databinding.DataBindingUtil; -import androidx.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.RecyclerView; import de.symeda.sormas.api.task.TaskAssignee; @@ -75,7 +75,7 @@ public void onItemRangeInserted(int positionStart, int itemCount) { } } }); - model = ViewModelProviders.of(this).get(TaskListViewModel.class); + model = new ViewModelProvider(this).get(TaskListViewModel.class); model.initializeViewModel(); model.getTasks().observe(this, tasks -> { adapter.submitList(tasks); diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/util/BooleanJurisdictionValidator.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/util/BooleanJurisdictionValidator.java index 3eb9a332ff3..5a0ec18c43b 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/util/BooleanJurisdictionValidator.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/util/BooleanJurisdictionValidator.java @@ -1,32 +1,33 @@ /* * SORMAS® - Surveillance Outbreak Response Management & Analysis System * Copyright © 2016-2020 Helmholtz-Zentrum für Infektionsforschung GmbH (HZI) - * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. - * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * along with this program. If not, see . */ package de.symeda.sormas.app.util; import java.util.List; +import de.symeda.sormas.api.Disease; import de.symeda.sormas.api.utils.jurisdiction.JurisdictionValidator; public abstract class BooleanJurisdictionValidator extends JurisdictionValidator { - public BooleanJurisdictionValidator(List associatedJurisdictionValidators) { - super(associatedJurisdictionValidators); - } + private final UserJurisdiction userJurisdiction; + + public BooleanJurisdictionValidator(List associatedJurisdictionValidators, UserJurisdiction userJurisdiction) { + super(associatedJurisdictionValidators); + this.userJurisdiction = userJurisdiction; + } @Override protected Boolean or(List jurisdictionTypes) { @@ -37,4 +38,23 @@ protected Boolean or(List jurisdictionTypes) { } return false; } + + @Override + protected Boolean and(Boolean condition1, Boolean condition2) { + return condition1 && condition2; + } + + @Override + public Boolean hasUserLimitedDisease() { + if (getDisease() == null) { + return true; + } + if (userJurisdiction != null && userJurisdiction.getLimitedDisease() != null) { + return getDisease() == userJurisdiction.getLimitedDisease(); + } else { + return true; + } + } + + protected abstract Disease getDisease(); } diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/util/JurisdictionHelper.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/util/JurisdictionHelper.java index 4af5dc97b8d..e8b94bb8cbf 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/util/JurisdictionHelper.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/util/JurisdictionHelper.java @@ -50,6 +50,8 @@ public static UserJurisdiction createUserJurisdiction(User user) { jurisdiction.setPointOfEntryUuid(user.getPointOfEntry().getUuid()); } + jurisdiction.setLimitedDisease(user.getLimitedDisease()); + jurisdiction.setJurisdictionLevel(UserRole.getJurisdictionLevel(user.getUserRoles())); return jurisdiction; diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/util/UserJurisdiction.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/util/UserJurisdiction.java index df505e959a6..a7d7a9e4b23 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/util/UserJurisdiction.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/util/UserJurisdiction.java @@ -17,6 +17,7 @@ */ package de.symeda.sormas.app.util; +import de.symeda.sormas.api.Disease; import de.symeda.sormas.api.user.JurisdictionLevel; public class UserJurisdiction { @@ -29,6 +30,7 @@ public class UserJurisdiction { private String healthFacilityUuid; private String pointOfEntryUuid; private String labUuid; + private Disease limitedDisease; public JurisdictionLevel getJurisdictionLevel() { return jurisdictionLevel; @@ -93,4 +95,12 @@ public String getLabUuid() { public void setLabUuid(String labUuid) { this.labUuid = labUuid; } + + public Disease getLimitedDisease() { + return limitedDisease; + } + + public void setLimitedDisease(Disease limitedDisease) { + this.limitedDisease = limitedDisease; + } } diff --git a/sormas-app/build.gradle b/sormas-app/build.gradle index 4f5d1c58f1c..18c8a6a9e9d 100644 --- a/sormas-app/build.gradle +++ b/sormas-app/build.gradle @@ -3,25 +3,32 @@ buildscript { repositories { google() - jcenter() + mavenCentral() + gradlePluginPortal() } dependencies { - classpath 'com.android.tools.build:gradle:7.0.2' - classpath 'com.google.gms:google-services:4.3.10' - classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.0' - classpath 'com.google.firebase:perf-plugin:1.4.0' - classpath 'org.jacoco:org.jacoco.core:0.8.5' - classpath 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.8' + classpath 'com.android.tools.build:gradle:8.0.0' + classpath 'com.google.gms:google-services:4.3.15' + classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.5' + classpath 'com.google.firebase:perf-plugin:1.4.2' + classpath 'org.jacoco:org.jacoco.core:0.8.9' + classpath 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:4.0.0.2929' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } +plugins { + // Use "dependencyUpdates" task to list all updateable dependencies. + // For unknown reasons the Android Studio gradle tooling doesn't list all updates + id "com.github.ben-manes.versions" version "0.46.0" +} + allprojects { repositories { google() - jcenter() + mavenCentral() mavenLocal() flatDir { dirs 'libs' @@ -46,9 +53,34 @@ allprojects { } } +/** + * Returns an int representing how mature [version] is. Higher numbers are more mature. + * https://github.com/ben-manes/gradle-versions-plugin/issues/440#issuecomment-1410918392 + */ +static def maturityLevel(String version) { + /** + * Version qualifiers, in order from least to most mature. + * The most mature is to have no qualifier at all. + */ + def qualifiers = ["preview", "alpha", "beta", "m", "cr", "rc"] + def qualifiersRegex = qualifiers.collect { /(?i).*[.\-]$it[.\-\d]*/ } + + def index = qualifiersRegex.findIndexOf { version ==~ it } + return (index < 0) ? qualifiers.size : index +} + +tasks.named("dependencyUpdates").configure { + rejectVersionIf { + def candidateMaturity = maturityLevel(it.candidate.version) + def currentMaturity = maturityLevel(it.currentVersion) + candidateMaturity < currentMaturity + } +} + task clean(type: Delete) { delete rootProject.buildDir } + apply from: 'versioning.gradle' apply from: 'signing.gradle' diff --git a/sormas-app/gradle.properties b/sormas-app/gradle.properties index 78babe9ef95..9e5e36349cc 100644 --- a/sormas-app/gradle.properties +++ b/sormas-app/gradle.properties @@ -15,6 +15,12 @@ org.gradle.jvmargs=-Xmx2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF android.enableJetifier=true android.useAndroidX=true +android.defaults.buildfeatures.buildconfig=true +android.nonTransitiveRClass=false +android.nonFinalResIds=false + +# keep old default behaviour https://developer.android.com/build/releases/gradle-plugin#default-changes +android.enableR8.fullMode=false # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit diff --git a/sormas-app/gradle/wrapper/gradle-wrapper.properties b/sormas-app/gradle/wrapper/gradle-wrapper.properties index 6bfee2b513d..3a190f07ec4 100644 --- a/sormas-app/gradle/wrapper/gradle-wrapper.properties +++ b/sormas-app/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-all.zip diff --git a/sormas-app/pom.xml b/sormas-app/pom.xml index 09484f692df..d49a17f5cb7 100644 --- a/sormas-app/pom.xml +++ b/sormas-app/pom.xml @@ -3,7 +3,7 @@ sormas-base de.symeda.sormas - 1.83.1 + 1.84.0 ../sormas-base 4.0.0 @@ -14,9 +14,8 @@ ${project.basedir}/app/src/main/AndroidManifest.xml - 7.0.2 - 11 - 11 + 8.0 + 17 @@ -24,7 +23,6 @@ - org.fortasoft @@ -52,6 +50,25 @@
+ + org.apache.maven.plugins + maven-enforcer-plugin + + + enforce-versions + + enforce + + + + + ${maven.compiler.release} + + + + + + diff --git a/sormas-backend/pom.xml b/sormas-backend/pom.xml index 13c180fc282..4c8236484b4 100644 --- a/sormas-backend/pom.xml +++ b/sormas-backend/pom.xml @@ -3,7 +3,7 @@ sormas-base de.symeda.sormas - 1.83.1 + 1.84.0 ../sormas-base 4.0.0 @@ -279,7 +279,7 @@ ${project.artifactId} - + diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/campaign/data/CampaignFormDataJurisdictionPredicateValidator.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/campaign/data/CampaignFormDataJurisdictionPredicateValidator.java index 2184b96deaf..ba800042423 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/campaign/data/CampaignFormDataJurisdictionPredicateValidator.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/campaign/data/CampaignFormDataJurisdictionPredicateValidator.java @@ -39,11 +39,11 @@ public static CampaignFormDataJurisdictionPredicateValidator of(CampaignFormData } @Override - protected Predicate isInJurisdictionOrOwned() { + public Predicate isRootInJurisdictionOrOwned() { final Predicate reportedByCurrentUser = cb.and( cb.isNotNull(joins.getRoot().get(CampaignFormData.CREATING_USER)), cb.equal(joins.getRoot().get(CampaignFormData.CREATING_USER).get(User.ID), user.getId())); - return cb.or(reportedByCurrentUser, isInJurisdiction()); + return cb.or(reportedByCurrentUser, isRootInJurisdiction()); } @Override diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/campaign/form/CampaignFormMetaFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/campaign/form/CampaignFormMetaFacadeEjb.java index 17a35a5fcac..b44a6568709 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/campaign/form/CampaignFormMetaFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/campaign/form/CampaignFormMetaFacadeEjb.java @@ -20,7 +20,7 @@ import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; -import org.jsoup.safety.Whitelist; +import org.jsoup.safety.Safelist; import com.fasterxml.jackson.databind.ObjectMapper; @@ -219,7 +219,7 @@ public void validateAndClean(CampaignFormMetaDto campaignFormMetaDto) throws Val for (CampaignFormElement element : campaignFormMetaDto.getCampaignFormElements()) { // Clean the element caption from all HTML tags that are not explicitly allowed if (StringUtils.isNotBlank(element.getCaption())) { - Whitelist whitelist = Whitelist.none(); + Safelist whitelist = Safelist.none(); whitelist.addTags(CampaignFormElement.ALLOWED_HTML_TAGS); element.setCaption(HtmlHelper.cleanHtml(element.getCaption(), whitelist)); } @@ -245,7 +245,7 @@ public void validateAndClean(CampaignFormMetaDto campaignFormMetaDto) throws Val } if (StringUtils.isNotBlank(e.getCaption())) { - Whitelist whitelist = Whitelist.none(); + Safelist whitelist = Safelist.none(); whitelist.addTags(CampaignFormElement.ALLOWED_HTML_TAGS); e.setCaption(HtmlHelper.cleanHtml(e.getCaption(), whitelist)); } diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseFacadeEjb.java index 8c89e6bcd31..fa82fc9927f 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseFacadeEjb.java @@ -118,6 +118,7 @@ import de.symeda.sormas.api.caze.PlagueType; import de.symeda.sormas.api.caze.PreviousCaseDto; import de.symeda.sormas.api.caze.ReinfectionDetail; +import de.symeda.sormas.api.caze.VaccinationStatus; import de.symeda.sormas.api.caze.maternalhistory.MaternalHistoryDto; import de.symeda.sormas.api.caze.porthealthinfo.PortHealthInfoDto; import de.symeda.sormas.api.caze.surveillancereport.SurveillanceReportDto; @@ -198,7 +199,6 @@ import de.symeda.sormas.api.user.UserReferenceDto; import de.symeda.sormas.api.user.UserRight; import de.symeda.sormas.api.utils.AccessDeniedException; -import de.symeda.sormas.api.utils.BulkOperationResults; import de.symeda.sormas.api.utils.DataHelper; import de.symeda.sormas.api.utils.DataHelper.Pair; import de.symeda.sormas.api.utils.DateHelper; @@ -338,7 +338,6 @@ import de.symeda.sormas.backend.user.UserReference; import de.symeda.sormas.backend.user.UserRoleFacadeEjb; import de.symeda.sormas.backend.user.UserRoleService; -import de.symeda.sormas.backend.util.BulkOperationHelper; import de.symeda.sormas.backend.util.DtoHelper; import de.symeda.sormas.backend.util.IterableHelper; import de.symeda.sormas.backend.util.JurisdictionHelper; @@ -1525,7 +1524,7 @@ public CoreAndPersonDto save(@Valid @NotNull CoreAndPersonDto saveBulkCase( + public Integer saveBulkCase( List caseUuidList, @Valid CaseBulkEditData updatedCaseBulkEditData, boolean diseaseChange, @@ -1535,8 +1534,9 @@ public BulkOperationResults saveBulkCase( boolean surveillanceOfficerChange) throws ValidationRuntimeException { - return BulkOperationHelper.executeWithLimits(caseUuidList, uuid -> { - Case caze = service.getByUuid(uuid); + int changedCases = 0; + for (String caseUuid : caseUuidList) { + Case caze = service.getByUuid(caseUuid); if (service.isEditAllowed(caze)) { CaseDataDto existingCaseDto = toDto(caze); @@ -1549,13 +1549,15 @@ public BulkOperationResults saveBulkCase( outcomeChange, surveillanceOfficerChange); doSave(caze, true, existingCaseDto, true); + changedCases++; } - }); + } + return changedCases; } @RightsAllowed({ UserRight._CASE_EDIT }) - public BulkOperationResults saveBulkEditWithFacilities( + public Integer saveBulkEditWithFacilities( List caseUuidList, @Valid CaseBulkEditData updatedCaseBulkEditData, boolean diseaseChange, @@ -1571,8 +1573,9 @@ public BulkOperationResults saveBulkEditWithFacilities( updatedCaseBulkEditData.getCommunity() != null ? communityService.getByUuid(updatedCaseBulkEditData.getCommunity().getUuid()) : null; Facility newFacility = facilityService.getByUuid(updatedCaseBulkEditData.getHealthFacility().getUuid()); - return BulkOperationHelper.executeWithLimits(caseUuidList, uuid -> { - Case caze = service.getByUuid(uuid); + int changedCases = 0; + for (String caseUuid : caseUuidList) { + Case caze = service.getByUuid(caseUuid); if (service.isEditAllowed(caze)) { CaseDataDto existingCaseDto = toDto(caze); @@ -1593,8 +1596,11 @@ public BulkOperationResults saveBulkEditWithFacilities( caze.setHealthFacilityDetails(updatedCaseBulkEditData.getHealthFacilityDetails()); CaseLogic.handleHospitalization(toDto(caze), existingCaseDto, doTransfer); doSave(caze, true, existingCaseDto, true); + changedCases++; } - }); + } + + return changedCases; } private void updateCaseWithBulkData( @@ -1665,6 +1671,19 @@ public CaseDataDto updateFollowUpComment(@Valid @NotNull CaseDataDto dto) throws return toPseudonymizedDto(caze); } + @Override + @RightsAllowed({ + UserRight._CASE_EDIT, + UserRight._IMMUNIZATION_CREATE, + UserRight._IMMUNIZATION_EDIT, + UserRight._IMMUNIZATION_DELETE }) + public void updateVaccinationStatus(CaseReferenceDto caseRef, VaccinationStatus status) { + Case caze = service.getByReferenceDto(caseRef); + caze.setVaccinationStatus(status); + + service.ensurePersisted(caze); + } + private CaseDataDto caseSave( @Valid CaseDataDto dto, boolean handleChanges, diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseJurisdictionPredicateValidator.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseJurisdictionPredicateValidator.java index 00a50be5cce..5205cc6baf8 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseJurisdictionPredicateValidator.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseJurisdictionPredicateValidator.java @@ -53,7 +53,7 @@ private CaseJurisdictionPredicateValidator( this.joins = joins; this.cq = cq; } - + private CaseJurisdictionPredicateValidator( CriteriaQuery cq, CriteriaBuilder cb, @@ -74,19 +74,24 @@ public static CaseJurisdictionPredicateValidator of(CaseQueryContext qc, Path us } @Override - protected Predicate isInJurisdiction() { - return super.isInJurisdiction(); + public Predicate isRootInJurisdiction() { + return super.isRootInJurisdiction(); } @Override - protected Predicate isInJurisdictionOrOwned() { + public Predicate isRootInJurisdictionOrOwned() { final Predicate reportedByCurrentUser = cb.and( cb.isNotNull(joins.getRoot().get(Case.REPORTING_USER)), user != null ? cb.equal(joins.getRoot().get(Case.REPORTING_USER).get(User.ID), user.getId()) : cb.equal(joins.getRoot().get(Case.REPORTING_USER).get(User.ID), userPath.get(User.ID))); - return cb.or(reportedByCurrentUser, isInJurisdiction()); + return cb.or(reportedByCurrentUser, this.isRootInJurisdiction()); + } + + @Override + protected Predicate getLimitedDiseasePredicate() { + return cb.equal(joins.getRoot().get(Case.DISEASE), user.getLimitedDisease()); } @Override diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseService.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseService.java index e068cf3b500..dd264d32416 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseService.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseService.java @@ -1656,7 +1656,7 @@ public boolean inJurisdiction(Case caze, User user) { Root root = cq.from(Case.class); cq.multiselect( JurisdictionHelper - .booleanSelector(cb, CaseJurisdictionPredicateValidator.of(new CaseQueryContext(cb, cq, root), user).isInJurisdiction())); + .booleanSelector(cb, CaseJurisdictionPredicateValidator.of(new CaseQueryContext(cb, cq, root), user).isRootInJurisdiction())); cq.where(cb.equal(root.get(Case.UUID), caze.getUuid())); return em.createQuery(cq).getResultList().stream().anyMatch(aBoolean -> aBoolean); } diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/caseimport/CaseImportFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/caseimport/CaseImportFacadeEjb.java index b428f2b4b47..fa7f0819b69 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/caseimport/CaseImportFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/caseimport/CaseImportFacadeEjb.java @@ -383,11 +383,12 @@ protected ImportLineResultDto insertRowIntoData( private void insertColumnEntryIntoData(CaseDataDto caze, PersonDto person, String entry, String[] entryHeaderPath) throws InvalidColumnException, ImportErrorException { + Language language = I18nProperties.getUserLanguage(); + Object currentElement = caze; for (int i = 0; i < entryHeaderPath.length; i++) { String headerPathElementName = entryHeaderPath[i]; - Language language = I18nProperties.getUserLanguage(); try { if (i != entryHeaderPath.length - 1) { currentElement = new PropertyDescriptor(headerPathElementName, currentElement.getClass()).getReadMethod().invoke(currentElement); diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/contact/ContactFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/contact/ContactFacadeEjb.java index 62bbace0f32..daac0d5c294 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/contact/ContactFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/contact/ContactFacadeEjb.java @@ -136,7 +136,6 @@ import de.symeda.sormas.api.task.TaskType; import de.symeda.sormas.api.user.UserRight; import de.symeda.sormas.api.utils.AccessDeniedException; -import de.symeda.sormas.api.utils.BulkOperationResults; import de.symeda.sormas.api.utils.DataHelper; import de.symeda.sormas.api.utils.DateHelper; import de.symeda.sormas.api.utils.SortProperty; @@ -203,7 +202,6 @@ import de.symeda.sormas.backend.user.UserFacadeEjb; import de.symeda.sormas.backend.user.UserReference; import de.symeda.sormas.backend.user.UserRoleFacadeEjb; -import de.symeda.sormas.backend.util.BulkOperationHelper; import de.symeda.sormas.backend.util.DtoHelper; import de.symeda.sormas.backend.util.IterableHelper; import de.symeda.sormas.backend.util.JurisdictionHelper; @@ -2221,15 +2219,16 @@ public void updateExternalData(@Valid List externalData) throws @Override @RightsAllowed(UserRight._CONTACT_EDIT) - public BulkOperationResults saveBulkContacts( + public Integer saveBulkContacts( List contactUuidList, ContactBulkEditData updatedContactBulkEditData, boolean classificationChange, boolean contactOfficerChange) throws ValidationRuntimeException { - return BulkOperationHelper.executeWithLimits(contactUuidList, uuid -> { - Contact contact = service.getByUuid(uuid); + int changedContacts = 0; + for (String contactUuid : contactUuidList) { + Contact contact = service.getByUuid(contactUuid); if (service.isEditAllowed(contact)) { ContactDto existingContactDto = toDto(contact); @@ -2242,8 +2241,10 @@ public BulkOperationResults saveBulkContacts( } save(existingContactDto); + changedContacts++; } - }); + } + return changedContacts; } @Override diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/contact/ContactJurisdictionPredicateValidator.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/contact/ContactJurisdictionPredicateValidator.java index 5a5a3821d8c..18d684fcf51 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/contact/ContactJurisdictionPredicateValidator.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/contact/ContactJurisdictionPredicateValidator.java @@ -26,6 +26,7 @@ import de.symeda.sormas.backend.caze.CaseJurisdictionPredicateValidator; import de.symeda.sormas.backend.caze.CaseQueryContext; +import de.symeda.sormas.backend.common.CriteriaBuilderHelper; import de.symeda.sormas.backend.infrastructure.community.Community; import de.symeda.sormas.backend.infrastructure.district.District; import de.symeda.sormas.backend.infrastructure.region.Region; @@ -75,7 +76,7 @@ public static ContactJurisdictionPredicateValidator of(ContactQueryContext qc, P } @Override - protected Predicate isInJurisdictionOrOwned() { + public Predicate isRootInJurisdictionOrOwned() { final Predicate reportedByCurrentUser = cb.and( cb.isNotNull(joins.getRoot().get(Contact.REPORTING_USER)), user != null @@ -86,8 +87,13 @@ protected Predicate isInJurisdictionOrOwned() { } @Override - protected Predicate isInJurisdiction() { - return super.isInJurisdiction(); + protected Predicate getLimitedDiseasePredicate() { + return cb.equal(joins.getRoot().get(Contact.DISEASE), user.getLimitedDisease()); + } + + @Override + public Predicate isRootInJurisdiction() { + return super.isRootInJurisdiction(); } @Override @@ -140,8 +146,8 @@ protected Predicate whenLaboratoryLevel() { final Join contactJoin = sampleJoins.getContact(); SampleJurisdictionPredicateValidator sampleJurisdictionPredicateValidator = user != null - ? SampleJurisdictionPredicateValidator.withoutAssociations(cb, sampleJoins, user) - : SampleJurisdictionPredicateValidator.withoutAssociations(cb, sampleJoins, userPath); + ? SampleJurisdictionPredicateValidator.withoutAssociations(cb, sampleJoins, user) + : SampleJurisdictionPredicateValidator.withoutAssociations(cb, sampleJoins, userPath); sampleContactSubquery.where(cb.and(cb.equal(contactJoin, joins.getRoot()), sampleJurisdictionPredicateValidator.inJurisdictionOrOwned())); sampleContactSubquery.select(sampleRoot.get(Sample.ID)); diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/deletionconfiguration/CoreEntityDeletionService.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/deletionconfiguration/CoreEntityDeletionService.java index ade8862f926..b7d650df014 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/deletionconfiguration/CoreEntityDeletionService.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/deletionconfiguration/CoreEntityDeletionService.java @@ -12,13 +12,17 @@ import org.slf4j.LoggerFactory; import de.symeda.sormas.api.common.CoreEntityType; +import de.symeda.sormas.api.feature.FeatureType; +import de.symeda.sormas.api.feature.FeatureTypeProperty; import de.symeda.sormas.api.utils.DateHelper; import de.symeda.sormas.backend.caze.CaseFacadeEjb; import de.symeda.sormas.backend.common.AbstractCoreFacadeEjb; import de.symeda.sormas.backend.contact.ContactFacadeEjb; import de.symeda.sormas.backend.event.EventFacadeEjb; import de.symeda.sormas.backend.event.EventParticipantFacadeEjb; +import de.symeda.sormas.backend.feature.FeatureConfigurationFacadeEjb; import de.symeda.sormas.backend.immunization.ImmunizationFacadeEjb; +import de.symeda.sormas.backend.immunization.ImmunizationService; import de.symeda.sormas.backend.person.PersonService; import de.symeda.sormas.backend.sormastosormas.share.incoming.SormasToSormasShareRequestService; import de.symeda.sormas.backend.sormastosormas.share.outgoing.ShareRequestInfoService; @@ -49,6 +53,10 @@ public class CoreEntityDeletionService { private ShareRequestInfoService shareRequestInfoService; @EJB private SymptomsService symptomsService; + @EJB + private FeatureConfigurationFacadeEjb.FeatureConfigurationFacadeEjbLocal featureConfigurationFacade; + @EJB + private ImmunizationService immunizationService; public CoreEntityDeletionService() { } @@ -102,6 +110,13 @@ private void deleteOrphanEntities() { logger.debug("executeAutomaticDeletion(): Detected non referenced symptoms: n={}", nonReferencedSymptoms.size()); IterableHelper.executeBatched(nonReferencedSymptoms, DELETE_BATCH_SIZE, batchedUuids -> symptomsService.deletePermanentByUuids(batchedUuids)); + if (featureConfigurationFacade.isPropertyValueTrue(FeatureType.IMMUNIZATION_MANAGEMENT, FeatureTypeProperty.REDUCED)) { + List orphanImmunizations = immunizationService.getOrphanImmunizations(); + logger.debug("executeAutomaticDeletion(): Detected non referenced immunizations: n={}", orphanImmunizations.size()); + IterableHelper + .executeBatched(orphanImmunizations, DELETE_BATCH_SIZE, batchedUuids -> immunizationService.deletePermanentByUuids(batchedUuids)); + } + // Delete non referenced Persons List nonReferencedPersonUuids = personService.getAllNonReferencedPersonUuids(); logger.debug("executeAutomaticDeletion(): Detected non referenced persons: n={}", nonReferencedPersonUuids.size()); diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/docgeneration/TemplateEngine.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/docgeneration/TemplateEngine.java index ba0c9b07924..3f7da3c0d99 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/docgeneration/TemplateEngine.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/docgeneration/TemplateEngine.java @@ -46,7 +46,7 @@ import org.docx4j.openpackaging.packages.WordprocessingMLPackage; import org.jsoup.Jsoup; import org.jsoup.nodes.Document.OutputSettings; -import org.jsoup.safety.Whitelist; +import org.jsoup.safety.Safelist; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -68,7 +68,7 @@ public class TemplateEngine { private static final Pattern VARIABLE_PATTERN = Pattern.compile("([{] *(!)? *([A-Za-z0-9._]+) *[}]| *(!)? *([A-Za-z0-9._]+) *)"); - private static final Whitelist HTML_TEMPLATE_WHITELIST = + private static final Safelist HTML_TEMPLATE_WHITELIST = HtmlHelper.EVENTACTION_WHITELIST.addAttributes("div", "class").addAttributes("span", "class").addAttributes("table", "class"); private static final Logger logger = LoggerFactory.getLogger(TemplateEngine.class); diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/event/EventFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/event/EventFacadeEjb.java index ebf46a5e31d..e71e00f47f7 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/event/EventFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/event/EventFacadeEjb.java @@ -95,7 +95,6 @@ import de.symeda.sormas.api.sormastosormas.SormasToSormasRuntimeException; import de.symeda.sormas.api.user.UserRight; import de.symeda.sormas.api.utils.AccessDeniedException; -import de.symeda.sormas.api.utils.BulkOperationResults; import de.symeda.sormas.api.utils.SortProperty; import de.symeda.sormas.api.utils.ValidationRuntimeException; import de.symeda.sormas.backend.FacadeHelper; @@ -128,7 +127,6 @@ import de.symeda.sormas.backend.user.User; import de.symeda.sormas.backend.user.UserFacadeEjb; import de.symeda.sormas.backend.user.UserService; -import de.symeda.sormas.backend.util.BulkOperationHelper; import de.symeda.sormas.backend.util.DtoHelper; import de.symeda.sormas.backend.util.IterableHelper; import de.symeda.sormas.backend.util.JurisdictionHelper; @@ -1450,15 +1448,16 @@ public boolean hasAnyEventParticipantWithoutJurisdiction(String eventUuid) { @Override @RightsAllowed(UserRight._EVENT_EDIT) - public BulkOperationResults saveBulkEvents( + public Integer saveBulkEvents( List eventUuidList, EventDto updatedTempEvent, boolean eventStatusChange, boolean eventInvestigationStatusChange, boolean eventManagementStatusChange) { - return BulkOperationHelper.executeWithLimits(eventUuidList, uuid -> { - Event event = service.getByUuid(uuid); + int changedEvents = 0; + for (String eventUuid : eventUuidList) { + Event event = service.getByUuid(eventUuid); if (service.isEditAllowed(event)) { EventDto eventDto = toDto(event); @@ -1475,8 +1474,10 @@ public BulkOperationResults saveBulkEvents( } save(eventDto); + changedEvents++; } - }); + } + return changedEvents; } diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/event/EventJurisdictionPredicateValidator.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/event/EventJurisdictionPredicateValidator.java index c2e6454154e..dcb45b88c22 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/event/EventJurisdictionPredicateValidator.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/event/EventJurisdictionPredicateValidator.java @@ -19,6 +19,7 @@ import javax.persistence.criteria.Path; import javax.persistence.criteria.Predicate; +import de.symeda.sormas.backend.common.CriteriaBuilderHelper; import de.symeda.sormas.backend.infrastructure.community.Community; import de.symeda.sormas.backend.infrastructure.district.District; import de.symeda.sormas.backend.infrastructure.region.Region; @@ -52,12 +53,12 @@ public static EventJurisdictionPredicateValidator of(EventQueryContext qc, Path } @Override - protected Predicate isInJurisdiction() { - return super.isInJurisdiction(); + public Predicate isRootInJurisdiction() { + return super.isRootInJurisdiction(); } @Override - protected Predicate isInJurisdictionOrOwned() { + public Predicate isRootInJurisdictionOrOwned() { final Predicate reportedByCurrentUser = cb.and( cb.isNotNull(joins.getRoot().get(Event.REPORTING_USER)), @@ -71,7 +72,12 @@ protected Predicate isInJurisdictionOrOwned() { ? cb.equal(joins.getRoot().get(Event.RESPONSIBLE_USER).get(User.ID), user.getId()) : cb.equal(joins.getRoot().get(Event.RESPONSIBLE_USER).get(User.ID), userPath.get(User.ID))); - return cb.or(reportedByCurrentUser, currentUserResponsible, isInJurisdiction()); + return cb.or(reportedByCurrentUser, currentUserResponsible, this.isRootInJurisdiction()); + } + + @Override + protected Predicate getLimitedDiseasePredicate() { + return cb.equal(joins.getRoot().get(Event.DISEASE), user.getLimitedDisease()); } @Override @@ -121,7 +127,8 @@ protected Predicate whenLaboratoryLevel() { return EventParticipantJurisdictionPredicateValidator.of(new EventParticipantQueryContext(cb, cq, joins.getEventParticipantJoins()), user) .whenLaboratoryLevel(); } else { - return EventParticipantJurisdictionPredicateValidator.of(new EventParticipantQueryContext(cb, cq, joins.getEventParticipantJoins()), userPath) + return EventParticipantJurisdictionPredicateValidator + .of(new EventParticipantQueryContext(cb, cq, joins.getEventParticipantJoins()), userPath) .whenLaboratoryLevel(); } } diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/event/EventParticipantJurisdictionPredicateValidator.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/event/EventParticipantJurisdictionPredicateValidator.java index 776507eae5a..a76d267b1b7 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/event/EventParticipantJurisdictionPredicateValidator.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/event/EventParticipantJurisdictionPredicateValidator.java @@ -45,15 +45,20 @@ public static EventParticipantJurisdictionPredicateValidator of(EventParticipant } @Override - protected Predicate isInJurisdictionOrOwned() { + public Predicate isRootInJurisdictionOrOwned() { final Predicate reportedByCurrentUser = cb.and( cb.isNotNull(joins.getRoot().get(EventParticipant.REPORTING_USER)), cb.equal(joins.getRoot().get(EventParticipant.REPORTING_USER).get(User.ID), user.getId())); - return cb.or(reportedByCurrentUser, isInJurisdiction()); + return cb.or(reportedByCurrentUser, this.isRootInJurisdiction()); } @Override - protected Predicate isInJurisdiction() { + protected Predicate getLimitedDiseasePredicate() { + return cb.equal(joins.getEventJoins().getRoot().get(Event.DISEASE), user.getLimitedDisease()); + } + + @Override + public Predicate isRootInJurisdiction() { return isInJurisdictionByJurisdictionLevel(user.getJurisdictionLevel()); } diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/immunization/DirectoryImmunizationJurisdictionPredicateValidator.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/immunization/DirectoryImmunizationJurisdictionPredicateValidator.java index 709d947f46b..fc30cdb99dc 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/immunization/DirectoryImmunizationJurisdictionPredicateValidator.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/immunization/DirectoryImmunizationJurisdictionPredicateValidator.java @@ -32,15 +32,15 @@ public static DirectoryImmunizationJurisdictionPredicateValidator of(DirectoryIm } @Override - protected Predicate isInJurisdiction() { + public Predicate isRootInJurisdiction() { return isInJurisdictionByJurisdictionLevel(user.getJurisdictionLevel()); } @Override - protected Predicate isInJurisdictionOrOwned() { + public Predicate isRootInJurisdictionOrOwned() { final Path reportingUserPath = joins.getRoot().get(Immunization.REPORTING_USER); final Predicate reportedByCurrentUser = cb.and(cb.isNotNull(reportingUserPath), cb.equal(reportingUserPath.get(User.ID), user.getId())); - return cb.or(reportedByCurrentUser, isInJurisdiction()); + return cb.or(reportedByCurrentUser, this.isRootInJurisdiction()); } @Override diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/immunization/ImmunizationJurisdictionPredicateValidator.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/immunization/ImmunizationJurisdictionPredicateValidator.java index 508aa59801c..c3d93818271 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/immunization/ImmunizationJurisdictionPredicateValidator.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/immunization/ImmunizationJurisdictionPredicateValidator.java @@ -50,15 +50,15 @@ public static ImmunizationJurisdictionPredicateValidator of(ImmunizationQueryCon } @Override - protected Predicate isInJurisdiction() { + public Predicate isRootInJurisdiction() { return isInJurisdictionByJurisdictionLevel(user.getJurisdictionLevel()); } @Override - protected Predicate isInJurisdictionOrOwned() { + public Predicate isRootInJurisdictionOrOwned() { final Path reportingUserPath = joins.getRoot().get(Immunization.REPORTING_USER); final Predicate reportedByCurrentUser = cb.and(cb.isNotNull(reportingUserPath), cb.equal(reportingUserPath.get(User.ID), user.getId())); - return cb.or(reportedByCurrentUser, isInJurisdiction()); + return cb.or(reportedByCurrentUser, this.isRootInJurisdiction()); } @Override diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/immunization/ImmunizationService.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/immunization/ImmunizationService.java index 6a976a052aa..a51b3e70c55 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/immunization/ImmunizationService.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/immunization/ImmunizationService.java @@ -52,8 +52,10 @@ import de.symeda.sormas.backend.common.AbstractDomainObject; import de.symeda.sormas.backend.common.ChangeDateBuilder; import de.symeda.sormas.backend.common.ChangeDateFilterBuilder; +import de.symeda.sormas.backend.common.CoreAdo; import de.symeda.sormas.backend.common.CriteriaBuilderHelper; import de.symeda.sormas.backend.contact.Contact; +import de.symeda.sormas.backend.event.EventParticipant; import de.symeda.sormas.backend.immunization.entity.DirectoryImmunization; import de.symeda.sormas.backend.immunization.entity.Immunization; import de.symeda.sormas.backend.immunization.transformers.ImmunizationListEntryDtoResultTransformer; @@ -66,6 +68,7 @@ import de.symeda.sormas.backend.sormastosormas.share.outgoing.SormasToSormasShareInfo; import de.symeda.sormas.backend.sormastosormas.share.outgoing.SormasToSormasShareInfoFacadeEjb.SormasToSormasShareInfoFacadeEjbLocal; import de.symeda.sormas.backend.sormastosormas.share.outgoing.SormasToSormasShareInfoService; +import de.symeda.sormas.backend.travelentry.TravelEntry; import de.symeda.sormas.backend.user.User; import de.symeda.sormas.backend.user.UserService; import de.symeda.sormas.backend.util.IterableHelper; @@ -387,6 +390,47 @@ public Date getLastVaccinationDateBefore(String personUuid, Disease disease, Dat return QueryHelper.getFirstResult(em, cq); } + public List getOrphanImmunizations() { + CriteriaBuilder cb = em.getCriteriaBuilder(); + + CriteriaQuery cq = cb.createQuery(String.class); + Root root = cq.from(Immunization.class); + + ImmunizationQueryContext immunizationQueryContext = new ImmunizationQueryContext(cb, cq, root); + ImmunizationJoins joins = immunizationQueryContext.getJoins(); + + final Subquery caseSubquery = createPersonLinkedToOtherCoreEntitySubQuery(cb, cq, joins.getPerson(), Case.class, Case.PERSON); + final Subquery contactSubquery = createPersonLinkedToOtherCoreEntitySubQuery(cb, cq, joins.getPerson(), Contact.class, Contact.PERSON); + final Subquery eventParticipantSubquery = createPersonLinkedToOtherCoreEntitySubQuery(cb, cq, joins.getPerson(), EventParticipant.class, EventParticipant.PERSON); + final Subquery travelEntrySubquery = createPersonLinkedToOtherCoreEntitySubQuery(cb, cq, joins.getPerson(), TravelEntry.class, TravelEntry.PERSON); + + cq.where( + cb.and( + cb.not(cb.exists(caseSubquery)), + cb.not(cb.exists(contactSubquery)), + cb.not(cb.exists(eventParticipantSubquery)), + cb.not(cb.exists(travelEntrySubquery)))); + + cq.select(root.get(Immunization.UUID)); + cq.distinct(true); + + return em.createQuery(cq).getResultList(); + } + + private Subquery createPersonLinkedToOtherCoreEntitySubQuery( + CriteriaBuilder cb, + CriteriaQuery cq, + Join immunizationPerson, + Class otherCoreEntityClass, + String otherPersonField) { + + final Subquery subquery = cq.subquery(String.class); + final Root from = subquery.from(otherCoreEntityClass); + subquery.where(cb.equal(from.get(otherPersonField), immunizationPerson)); + subquery.select(from.get(AbstractDomainObject.UUID)); + return subquery; + } + public void updateImmunizationStatusBasedOnVaccinations(Immunization immunization) { ImmunizationStatus immunizationStatus = immunization.getImmunizationStatus(); if (immunizationStatus != ImmunizationStatus.NOT_ACQUIRED && immunizationStatus != ImmunizationStatus.EXPIRED) { diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/person/PersonJurisdictionPredicateValidator.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/person/PersonJurisdictionPredicateValidator.java index 528caf6c963..71f3bd93bc8 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/person/PersonJurisdictionPredicateValidator.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/person/PersonJurisdictionPredicateValidator.java @@ -90,12 +90,12 @@ public static PersonJurisdictionPredicateValidator of( } @Override - protected Predicate isInJurisdictionOrOwned() { - return isInJurisdiction(); + public Predicate isRootInJurisdictionOrOwned() { + return this.isRootInJurisdiction(); } @Override - protected Predicate isInJurisdiction() { + public Predicate isRootInJurisdiction() { // Fallback if no associatedJurisdictionValidator was linked: No persons can to be identified by permitted explicit associations return cb.disjunction(); diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/sample/SampleJurisdictionPredicateValidator.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/sample/SampleJurisdictionPredicateValidator.java index c2ddb8b01c5..790bb1ba7ca 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/sample/SampleJurisdictionPredicateValidator.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/sample/SampleJurisdictionPredicateValidator.java @@ -22,6 +22,7 @@ import javax.persistence.criteria.Path; import javax.persistence.criteria.Predicate; +import de.symeda.sormas.api.utils.jurisdiction.JurisdictionValidator; import de.symeda.sormas.backend.caze.CaseJurisdictionPredicateValidator; import de.symeda.sormas.backend.caze.CaseQueryContext; import de.symeda.sormas.backend.contact.ContactJurisdictionPredicateValidator; @@ -80,13 +81,58 @@ public static SampleJurisdictionPredicateValidator withoutAssociations(CriteriaB } @Override - protected Predicate isInJurisdictionOrOwned() { + public Predicate isRootInJurisdictionOrOwned() { final Predicate reportedByCurrentUser = cb.and( cb.isNotNull(joins.getRoot().get(Sample.REPORTING_USER)), user != null ? cb.equal(joins.getRoot().get(Sample.REPORTING_USER).get(User.ID), user.getId()) : cb.equal(joins.getRoot().get(Sample.REPORTING_USER).get(User.ID), userPath.get(User.ID))); - return cb.or(reportedByCurrentUser, isInJurisdiction()); + return cb.or(reportedByCurrentUser, isRootInJurisdiction()); + } + + @Override + public Predicate inJurisdictionOrOwned() { + Predicate rootInJurisdictionOrOwned = isRootInJurisdictionOrOwned(); + Predicate rootHasLimitedDisease = hasUserLimitedDisease(); + if (associatedJurisdictionValidators != null && !associatedJurisdictionValidators.isEmpty()) { + final List jurisdictionTypes = new ArrayList<>(); + final List diseaseJurisdictionTypes = new ArrayList<>(); + jurisdictionTypes.add(rootInJurisdictionOrOwned); + diseaseJurisdictionTypes.add(rootHasLimitedDisease); + for (JurisdictionValidator jurisdictionValidator : associatedJurisdictionValidators) { + if (jurisdictionValidator != null) { + Predicate associatedInJurisdictionOrOwned = jurisdictionValidator.isRootInJurisdictionOrOwned(); + Predicate associatedHasLimitedDisease = jurisdictionValidator.hasUserLimitedDisease(); + jurisdictionTypes.add(associatedInJurisdictionOrOwned); + diseaseJurisdictionTypes.add(associatedHasLimitedDisease); + } + } + return and(or(jurisdictionTypes), or(diseaseJurisdictionTypes)); + } else { + return and(rootInJurisdictionOrOwned, rootHasLimitedDisease); + } + } + + public Predicate inJurisdiction() { + Predicate rootInJurisdiction = isRootInJurisdiction(); + Predicate rootHasLimitedDisease = hasUserLimitedDisease(); + if (associatedJurisdictionValidators != null && !associatedJurisdictionValidators.isEmpty()) { + final List jurisdictionTypes = new ArrayList<>(); + final List diseaseJurisdictionTypes = new ArrayList<>(); + jurisdictionTypes.add(rootInJurisdiction); + diseaseJurisdictionTypes.add(rootHasLimitedDisease); + for (JurisdictionValidator jurisdictionValidator : associatedJurisdictionValidators) { + if (jurisdictionValidator != null) { + Predicate associatedInJurisdiction = jurisdictionValidator.isRootInJurisdiction(); + Predicate associatedHasLimitedDisease = jurisdictionValidator.hasUserLimitedDisease(); + jurisdictionTypes.add(associatedInJurisdiction); + diseaseJurisdictionTypes.add(associatedHasLimitedDisease); + } + } + return and(or(jurisdictionTypes), or(diseaseJurisdictionTypes)); + } else { + return and(rootInJurisdiction, rootHasLimitedDisease); + } } @Override diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/sormastosormas/AbstractSormasToSormasInterface.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/sormastosormas/AbstractSormasToSormasInterface.java index dc205aab3a1..9025d47ba2f 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/sormastosormas/AbstractSormasToSormasInterface.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/sormastosormas/AbstractSormasToSormasInterface.java @@ -733,7 +733,11 @@ private void syncEntityToOrigin(ADO entity, SormasToSormasOriginInfo originInfo, sormasToSormasRestClient.post(originInfo.getOrganizationId(), syncEndpoint, new SyncDataDto(shareData, criteria), null); // remove existing shares from the request info - shareRequestInfo.setShares(shareRequestInfo.getShares().stream().filter(s -> s.getId() == null).collect(Collectors.toList())); + shareRequestInfo.setShares( + shareRequestInfo.getShares() + .stream() + .filter(s -> s.getSharedEntity().getSormasToSormasOriginInfo() == null && s.getId() == null) + .collect(Collectors.toList())); if (!shareRequestInfo.getShares().isEmpty()) { shareRequestInfoService.ensurePersisted(shareRequestInfo); } diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/sormastosormas/entities/sample/ReceivedSampleProcessor.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/sormastosormas/entities/sample/ReceivedSampleProcessor.java index 09d952bc82f..461c3ab4471 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/sormastosormas/entities/sample/ReceivedSampleProcessor.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/sormastosormas/entities/sample/ReceivedSampleProcessor.java @@ -32,6 +32,7 @@ import de.symeda.sormas.api.sormastosormas.entities.sample.SormasToSormasSampleDto; import de.symeda.sormas.api.sormastosormas.share.incoming.PreviewNotImplementedDto; import de.symeda.sormas.api.sormastosormas.validation.ValidationErrors; +import de.symeda.sormas.api.user.UserReferenceDto; import de.symeda.sormas.backend.common.ConfigFacadeEjb; import de.symeda.sormas.backend.sample.PathogenTest; import de.symeda.sormas.backend.sample.PathogenTestFacadeEjb; @@ -46,7 +47,6 @@ public class ReceivedSampleProcessor extends ReceivedDataProcessor { - public ReceivedSampleProcessor() { } @@ -65,7 +65,14 @@ public void handleReceivedData(SormasToSormasSampleDto sharedData, Sample existi Map existingPathogenTests = getExistingPathogenTests(existingData); sharedData.getPathogenTests() - .forEach(pathogenTest -> handleIgnoredProperties(pathogenTest, existingPathogenTests.get(pathogenTest.getUuid()))); + .forEach(pathogenTest -> { + PathogenTestDto existingPathogenTest = existingPathogenTests.get(pathogenTest.getUuid()); + UserReferenceDto labUser = + existingPathogenTest == null ? userService.getCurrentUser().toReference() : existingPathogenTest.getLabUser(); + pathogenTest.setLabUser(labUser); + + handleIgnoredProperties(pathogenTest, existingPathogenTest); + }); } @Override diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/sormastosormas/share/outgoing/ShareRequestInfoFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/sormastosormas/share/outgoing/ShareRequestInfoFacadeEjb.java index c054cc3f70c..061fd530aac 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/sormastosormas/share/outgoing/ShareRequestInfoFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/sormastosormas/share/outgoing/ShareRequestInfoFacadeEjb.java @@ -16,7 +16,8 @@ package de.symeda.sormas.backend.sormastosormas.share.outgoing; import java.util.ArrayList; -import java.util.Comparator; +import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Objects; @@ -93,14 +94,14 @@ public List getIndexList(ShareRequestCriteria criteria, In Path sharesJoin = requestRoot.join(ShareRequestInfo.SHARES); Join senderJoin = requestRoot.join(ShareRequestInfo.SENDER, JoinType.LEFT); - Expression senderName = cb.concat(cb.concat(senderJoin.get(User.FIRST_NAME), " "), senderJoin.get(User.LAST_NAME)); cq.multiselect( requestRoot.get(ShareRequestInfo.UUID), requestRoot.get(ShareRequestInfo.CREATION_DATE), requestRoot.get(ShareRequestInfo.DATA_TYPE), requestRoot.get(ShareRequestInfo.REQUEST_STATUS), sharesJoin.get(SormasToSormasShareInfo.ORGANIZATION_ID), - senderName, + senderJoin.get(User.FIRST_NAME), + senderJoin.get(User.LAST_NAME), sharesJoin.get(SormasToSormasShareInfo.OWNERSHIP_HANDED_OVER), requestRoot.get(ShareRequestInfo.COMMENT)); @@ -114,40 +115,33 @@ public List getIndexList(ShareRequestCriteria criteria, In } List order = new ArrayList<>(); - String organizationOrderExpr = sormasToSormasDiscoveryService.getAllAvailableServers() - .stream() - .sorted(Comparator.comparing(SormasServerDescriptor::getName)) - .map(SormasServerDescriptor::getId) - .map(i -> "'" + i + "'") - .collect(Collectors.joining(",")); - if (sortProperties != null && sortProperties.size() > 0) { for (SortProperty sortProperty : sortProperties) { - Expression expression; + final List> expressions; switch (sortProperty.propertyName) { case ShareRequestIndexDto.UUID: case ShareRequestIndexDto.CREATION_DATE: case ShareRequestIndexDto.DATA_TYPE: case ShareRequestIndexDto.COMMENT: - expression = requestRoot.get(sortProperty.propertyName); + expressions = Collections.singletonList(requestRoot.get(sortProperty.propertyName)); break; case ShareRequestIndexDto.STATUS: - expression = requestRoot.get(ShareRequestInfo.REQUEST_STATUS); + expressions = Collections.singletonList(requestRoot.get(ShareRequestInfo.REQUEST_STATUS)); break; case ShareRequestIndexDto.SENDER_NAME: - expression = senderName; + expressions = Arrays.asList(senderJoin.get(User.FIRST_NAME), senderJoin.get(User.LAST_NAME)); break; case ShareRequestIndexDto.ORGANIZATION_ID: case ShareRequestIndexDto.OWNERSHIP_HANDED_OVER: - expression = sharesJoin.get(sortProperty.propertyName); + expressions = Collections.singletonList(sharesJoin.get(sortProperty.propertyName)); break; case ShareRequestIndexDto.ORGANIZATION_NAME: - expression = sharesJoin.get(ShareRequestIndexDto.ORGANIZATION_ID); + expressions = Collections.singletonList(sharesJoin.get(ShareRequestIndexDto.ORGANIZATION_ID)); break; default: throw new IllegalArgumentException(sortProperty.propertyName); } - order.add(sortProperty.ascending ? cb.asc(expression) : cb.desc(expression)); + order.addAll(expressions.stream().map(e -> sortProperty.ascending ? cb.asc(e) : cb.desc(e)).collect(Collectors.toList())); } } diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/sormastosormas/share/outgoing/SormasToSormasShareInfo.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/sormastosormas/share/outgoing/SormasToSormasShareInfo.java index 87d657c02c3..ffc4cb0f7b5 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/sormastosormas/share/outgoing/SormasToSormasShareInfo.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/sormastosormas/share/outgoing/SormasToSormasShareInfo.java @@ -17,6 +17,8 @@ import java.util.ArrayList; import java.util.List; +import java.util.Objects; +import java.util.stream.Stream; import javax.persistence.Column; import javax.persistence.Entity; @@ -25,6 +27,7 @@ import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.ManyToOne; +import javax.persistence.Transient; import de.symeda.sormas.api.utils.FieldConstraints; import de.symeda.sormas.backend.caze.Case; @@ -35,6 +38,7 @@ import de.symeda.sormas.backend.event.EventParticipant; import de.symeda.sormas.backend.immunization.entity.Immunization; import de.symeda.sormas.backend.sample.Sample; +import de.symeda.sormas.backend.sormastosormas.entities.SormasToSormasShareable; @Entity(name = "sormastosormasshareinfo") public class SormasToSormasShareInfo extends AbstractDomainObject { @@ -170,4 +174,12 @@ public boolean isOwnershipHandedOver() { public void setOwnershipHandedOver(boolean ownershipHandedOver) { this.ownershipHandedOver = ownershipHandedOver; } + + @Transient + public SormasToSormasShareable getSharedEntity() { + return Stream.of(caze, contact, sample, immunization, surveillanceReport, event, eventParticipant) + .filter(Objects::nonNull) + .findFirst() + .orElseThrow(() -> new RuntimeException("ShareInfo[" + getUuid() + "] does not contain an entity")); + } } diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/task/TaskFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/task/TaskFacadeEjb.java index 71e2e2e6d4d..1cc8f5c64de 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/task/TaskFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/task/TaskFacadeEjb.java @@ -72,7 +72,6 @@ import de.symeda.sormas.api.user.NotificationType; import de.symeda.sormas.api.user.UserReferenceDto; import de.symeda.sormas.api.user.UserRight; -import de.symeda.sormas.api.utils.BulkOperationResults; import de.symeda.sormas.api.utils.DataHelper; import de.symeda.sormas.api.utils.SortProperty; import de.symeda.sormas.api.utils.ValidationRuntimeException; @@ -112,7 +111,6 @@ import de.symeda.sormas.backend.user.User; import de.symeda.sormas.backend.user.UserFacadeEjb; import de.symeda.sormas.backend.user.UserService; -import de.symeda.sormas.backend.util.BulkOperationHelper; import de.symeda.sormas.backend.util.DtoHelper; import de.symeda.sormas.backend.util.IterableHelper; import de.symeda.sormas.backend.util.JurisdictionHelper; @@ -363,7 +361,7 @@ public TaskDto saveTask(@Valid TaskDto dto) { @Override @RightsAllowed(UserRight._TASK_EDIT) - public BulkOperationResults saveBulkTasks( + public Integer saveBulkTasks( List taskUuidList, TaskDto updatedTempTask, boolean priorityChange, @@ -372,8 +370,9 @@ public BulkOperationResults saveBulkTasks( UserReferenceDto currentUser = userService.getCurrentUser().toReference(); - return BulkOperationHelper.executeWithLimits(taskUuidList, uuid -> { - Task task = taskService.getByUuid(uuid); + int changedTasks = 0; + for (String taskUuid : taskUuidList) { + Task task = taskService.getByUuid(taskUuid); TaskDto taskDto = toDto(task, createPseudonymizer()); if (priorityChange) { @@ -388,7 +387,9 @@ public BulkOperationResults saveBulkTasks( } saveTask(taskDto); - }); + changedTasks++; + } + return changedTasks; } private void notifyAboutNewAssignee(Task task, User newAssignee, User oldAssignee) { diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/task/TaskJurisdictionPredicateValidator.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/task/TaskJurisdictionPredicateValidator.java index 7af82042460..6fdcc1ef91d 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/task/TaskJurisdictionPredicateValidator.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/task/TaskJurisdictionPredicateValidator.java @@ -49,7 +49,8 @@ public static TaskJurisdictionPredicateValidator of(TaskQueryContext qc, User us final CriteriaBuilder cb = qc.getCriteriaBuilder(); final TaskJoins joins = qc.getJoins(); - associatedJurisdictionValidators.add(CaseJurisdictionPredicateValidator.of(new CaseQueryContext(cb, qc.getQuery(), joins.getCaseJoins()), user)); + associatedJurisdictionValidators + .add(CaseJurisdictionPredicateValidator.of(new CaseQueryContext(cb, qc.getQuery(), joins.getCaseJoins()), user)); associatedJurisdictionValidators .add(ContactJurisdictionPredicateValidator.of(new ContactQueryContext(cb, qc.getQuery(), joins.getContactJoins()), user)); associatedJurisdictionValidators @@ -59,16 +60,16 @@ public static TaskJurisdictionPredicateValidator of(TaskQueryContext qc, User us } @Override - protected Predicate isInJurisdictionOrOwned() { + public Predicate isRootInJurisdictionOrOwned() { final Predicate createdByCurrentUser = cb.and(cb.isNotNull(joins.getCreator()), cb.equal(joins.getCreator().get(User.UUID), user.getUuid())); final Predicate assignedToCurrentUser = cb.and(cb.isNotNull(joins.getAssignee()), cb.equal(joins.getAssignee().get(User.UUID), user.getUuid())); - return cb.or(createdByCurrentUser, assignedToCurrentUser, isInJurisdiction()); + return cb.or(createdByCurrentUser, assignedToCurrentUser, isRootInJurisdiction()); } @Override - protected Predicate isInJurisdiction() { + public Predicate isRootInJurisdiction() { return isInJurisdictionByJurisdictionLevel(user.getJurisdictionLevel()); } diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/therapy/TreatmentFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/therapy/TreatmentFacadeEjb.java index 592450f8198..854a550c3ee 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/therapy/TreatmentFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/therapy/TreatmentFacadeEjb.java @@ -160,7 +160,8 @@ public TreatmentDto saveTreatment(@Valid TreatmentDto source) { @Override @RightsAllowed({ - UserRight._TREATMENT_EDIT }) + UserRight._TREATMENT_EDIT, + UserRight._PRESCRIPTION_DELETE }) public void unlinkPrescriptionFromTreatments(List treatmentUuids) { service.unlinkPrescriptionFromTreatments(treatmentUuids); } @@ -269,7 +270,6 @@ private TreatmentDto convertToDto(Treatment source, Pseudonymizer pseudonymizer) return convertToDto(source, pseudonymizer, inJurisdiction); } - private TreatmentDto convertToDto(Treatment source, Pseudonymizer pseudonymizer, boolean inJurisdiction) { TreatmentDto dto = toDto(source); @@ -286,11 +286,7 @@ private void pseudonymizeDto(Treatment source, TreatmentDto dto, Pseudonymizer p private void restorePseudonymizedDto(TreatmentDto source, Treatment existingTreatment, TreatmentDto existingDto) { if (existingTreatment != null) { Pseudonymizer pseudonymizer = Pseudonymizer.getDefault(userService::hasRight); - pseudonymizer.restorePseudonymizedValues( - TreatmentDto.class, - source, - existingDto, - service.inJurisdictionOrOwned(existingTreatment)); + pseudonymizer.restorePseudonymizedValues(TreatmentDto.class, source, existingDto, service.inJurisdictionOrOwned(existingTreatment)); } } diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/travelentry/TravelEntryJurisdictionPredicateValidator.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/travelentry/TravelEntryJurisdictionPredicateValidator.java index f12e332e798..bc8d93a9917 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/travelentry/TravelEntryJurisdictionPredicateValidator.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/travelentry/TravelEntryJurisdictionPredicateValidator.java @@ -66,18 +66,24 @@ public static TravelEntryJurisdictionPredicateValidator of(TravelEntryQueryConte } @Override - protected Predicate isInJurisdiction() { - return super.isInJurisdiction(); + public Predicate isRootInJurisdiction() { + return super.isRootInJurisdiction(); } @Override - protected Predicate isInJurisdictionOrOwned() { + public Predicate isRootInJurisdictionOrOwned() { final Predicate reportedByCurrentUser = cb.and( cb.isNotNull(joins.getRoot().get(TravelEntry.REPORTING_USER)), user != null ? cb.equal(joins.getRoot().get(TravelEntry.REPORTING_USER).get(User.ID), user.getId()) : cb.equal(joins.getRoot().get(TravelEntry.REPORTING_USER).get(User.ID), userPath.get(User.ID))); - return cb.or(reportedByCurrentUser, isInJurisdiction()); + + return cb.or(reportedByCurrentUser, isRootInJurisdiction()); + } + + @Override + protected Predicate getLimitedDiseasePredicate() { + return cb.equal(joins.getRoot().get(TravelEntry.DISEASE), user.getLimitedDisease()); } @Override diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/user/CurrentUserService.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/user/CurrentUserService.java index c7229eee9e8..b38ed1d878d 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/user/CurrentUserService.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/user/CurrentUserService.java @@ -40,9 +40,10 @@ public CurrentUserService() { /** * Returns the User entity corresponding to the current user. + * + * @TransactionScoped would be better for performance, but is not supported by the CDI based testing framework */ @RequestScoped -// FIXME @TransactionScoped would be better for performance, but is not support by novatec.bean-test (see their github #4) public User getCurrentUser() { final String currentUsername = context.getCallerPrincipal().getName(); diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/user/UserFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/user/UserFacadeEjb.java index d754b4c9578..5aa69d2afde 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/user/UserFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/user/UserFacadeEjb.java @@ -20,6 +20,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.Comparator; import java.util.Date; import java.util.HashSet; import java.util.List; @@ -35,6 +36,7 @@ import javax.enterprise.event.Event; import javax.inject.Inject; import javax.persistence.EntityManager; +import javax.persistence.EntityNotFoundException; import javax.persistence.PersistenceContext; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; @@ -49,6 +51,7 @@ import javax.validation.ValidationException; import org.apache.commons.beanutils.BeanUtils; +import org.apache.commons.lang3.StringUtils; import de.symeda.sormas.api.Disease; import de.symeda.sormas.api.EntityDto; @@ -944,6 +947,24 @@ public List getUsersHavingOnlyRole(UserRoleReferenceDto userRo return userService.getAllWithOnlyRole(userRoleRef).stream().map(UserFacadeEjb::toReferenceDto).collect(Collectors.toList()); } + @Override + @PermitAll + public List getUserRights(String userUuid) { + + User user = StringUtils.isBlank(userUuid) ? currentUserService.getCurrentUser() : userService.getByUuid(userUuid); + + if (user != null) { + if (getCurrentUser().getUuid().equals(user.getUuid()) + || (currentUserService.hasUserRight(UserRight.USER_ROLE_VIEW) && currentUserService.hasUserRight(UserRight.USER_VIEW))) { + return UserRole.getUserRights(user.getUserRoles()).stream().sorted(Comparator.comparing(Enum::name)).collect(Collectors.toList()); + } else { + throw new AccessDeniedException(I18nProperties.getString(Strings.errorForbidden)); + } + } else { + throw new EntityNotFoundException(I18nProperties.getString(Strings.errorNotFound)); + } + } + public interface JurisdictionOverEntitySubqueryBuilder { Subquery buildSubquery(CriteriaBuilder cb, CriteriaQuery cq, Root userRoot); diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/util/BulkOperationHelper.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/util/BulkOperationHelper.java deleted file mode 100644 index 2c291ed165f..00000000000 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/util/BulkOperationHelper.java +++ /dev/null @@ -1,38 +0,0 @@ -package de.symeda.sormas.backend.util; - -import java.time.Duration; -import java.time.Instant; -import java.util.ArrayList; -import java.util.List; -import java.util.function.Consumer; - -import de.symeda.sormas.api.utils.BulkOperationResults; -import de.symeda.sormas.api.utils.DataHelper; - -public class BulkOperationHelper { - - private BulkOperationHelper() { - - } - - public static BulkOperationResults executeWithLimits(List entries, Consumer batchFunction) { - - List remainingEntries = new ArrayList<>(entries); - int processedEntries = 0; - long elapsedTime = 0; - Instant executionStart = Instant.now(); - - for (E entry : entries) { - batchFunction.accept(entry); - processedEntries++; - remainingEntries.remove(entry); - elapsedTime = Duration.between(executionStart, Instant.now()).toMillis(); - - if (processedEntries >= DataHelper.BULK_EDIT_ENTRY_LIMIT || elapsedTime >= DataHelper.BULK_EDIT_TIME_LIMIT) { - break; - } - } - - return new BulkOperationResults<>(processedEntries, elapsedTime, remainingEntries); - } -} diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/util/PredicateJurisdictionValidator.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/util/PredicateJurisdictionValidator.java index e030ccbba6c..eefbeed0c90 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/util/PredicateJurisdictionValidator.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/util/PredicateJurisdictionValidator.java @@ -23,6 +23,7 @@ import de.symeda.sormas.api.user.JurisdictionLevel; import de.symeda.sormas.api.utils.jurisdiction.JurisdictionValidator; +import de.symeda.sormas.backend.common.CriteriaBuilderHelper; import de.symeda.sormas.backend.user.User; public abstract class PredicateJurisdictionValidator extends JurisdictionValidator { @@ -40,11 +41,11 @@ public PredicateJurisdictionValidator(CriteriaBuilder cb, User user, Path userPa @Override protected Predicate or(List jurisdictionTypes) { - return cb.or(jurisdictionTypes.toArray(new Predicate[jurisdictionTypes.size()])); + return CriteriaBuilderHelper.or(cb, jurisdictionTypes.toArray(new Predicate[jurisdictionTypes.size()])); } @Override - protected Predicate isInJurisdiction() { + public Predicate isRootInJurisdiction() { return user != null ? isInJurisdictionByJurisdictionLevel(user.getJurisdictionLevel()) : isInJurisdictionByJurisdictionLevelPath(userPath.get(User.JURISDICTION_LEVEL)); @@ -62,4 +63,21 @@ protected Predicate isInJurisdictionByJurisdictionLevelPath(Path jLP) { .otherwise(false) .in(true); } + + public Predicate hasUserLimitedDisease() { + if (user != null && user.getLimitedDisease() != null) { + return getLimitedDiseasePredicate(); + } else { + return null; + } + } + + protected Predicate getLimitedDiseasePredicate() { + return null; + } + + @Override + protected Predicate and(Predicate condition1, Predicate condition2) { + return CriteriaBuilderHelper.and(cb, condition1, condition2); + } } diff --git a/sormas-backend/src/main/resources/META-INF/ejb-jar.xml b/sormas-backend/src/main/resources/META-INF/ejb-jar.xml index 02712b41728..57b24e68be7 100644 --- a/sormas-backend/src/main/resources/META-INF/ejb-jar.xml +++ b/sormas-backend/src/main/resources/META-INF/ejb-jar.xml @@ -34,5 +34,18 @@ * de.symeda.sormas.backend.util.ValidationConstraintViolationInterceptor + + + javax.validation.ValidationException + true + + + javax.validation.ConstraintViolationException + true + + + javax.persistence.EntityNotFoundException + true + diff --git a/sormas-backend/src/test/java/de/symeda/sormas/backend/ArchitectureTest.java b/sormas-backend/src/test/java/de/symeda/sormas/backend/ArchitectureTest.java index b3b6dfee570..4d7bb014876 100644 --- a/sormas-backend/src/test/java/de/symeda/sormas/backend/ArchitectureTest.java +++ b/sormas-backend/src/test/java/de/symeda/sormas/backend/ArchitectureTest.java @@ -115,7 +115,7 @@ public class ArchitectureTest { new DescribedPredicate("are used as data dictionary entity") { @Override - public boolean apply(JavaClass javaClass) { + public boolean test(JavaClass javaClass) { return InfoFacadeEjb.DATA_DICTIONARY_ENTITIES.stream().anyMatch(e -> javaClass.isEquivalentTo(e.getEntityClass())); } }; @@ -137,7 +137,7 @@ public void testDataDictionaryReferencedClassesAreAnnotated(JavaClasses classes) .haveRawType(new DescribedPredicate("*Dto") { @Override - public boolean apply(JavaClass javaClass) { + public boolean test(JavaClass javaClass) { return javaClass.getSimpleName().toLowerCase().endsWith("dto"); } }) @@ -479,7 +479,7 @@ private void assertFacadeEjbAnnotated(Class facadeEjbClass, AuthMode authMode if (authMode == AuthMode.CLASS_ONLY || authMode == AuthMode.NONE) { notAnnotatedRule.apply(methods.and().haveNameNotMatching(exceptedMethodsMatcher)).check(classes); - annotatedRule.apply(methods.and().haveNameMatching(exceptedMethodsMatcher)).check(classes); + annotatedRule.apply(methods.and().haveNameMatching(exceptedMethodsMatcher)).allowEmptyShould(exceptedMethods.isEmpty()).check(classes); } else { // TODO - add exceptedMethods handling when needed MethodsShouldConjunction methodChecks = annotatedRule.apply(methods); diff --git a/sormas-backend/src/test/java/de/symeda/sormas/backend/MockProducer.java b/sormas-backend/src/test/java/de/symeda/sormas/backend/MockProducer.java index 810d1f631d8..1feeeea26ee 100644 --- a/sormas-backend/src/test/java/de/symeda/sormas/backend/MockProducer.java +++ b/sormas-backend/src/test/java/de/symeda/sormas/backend/MockProducer.java @@ -86,7 +86,7 @@ public class MockProducer implements InitialContextFactory { // Receiving e-mail server is mocked: org. jvnet. mock_javamail. mailbox private static Session mailSession; static { - // Make sure that the default session does not use a local mail server (if mock-javamail is removed) + // Make sure that the default session does not use a local mail server Properties props = new Properties(); props.setProperty("mail.host", "non@existent"); mailSession = Session.getInstance(props); @@ -215,13 +215,11 @@ public static class MockEtcdCentralClientProducer extends EtcdCentralClientProdu public EtcdCentralClient etcdCentralClient(ConfigFacadeEjb.ConfigFacadeEjbLocal configFacadeEjb) { return etcdCentralClient; } - } @Override public Context getInitialContext(Hashtable environment) throws NamingException { when(initialContext.lookup("java:module/CustomizableEnumFacade")).thenReturn(customizableEnumFacadeForConverter); - return initialContext; } diff --git a/sormas-backend/src/test/java/de/symeda/sormas/backend/TestDataCreator.java b/sormas-backend/src/test/java/de/symeda/sormas/backend/TestDataCreator.java index 4adf95d8541..afe75c95fde 100644 --- a/sormas-backend/src/test/java/de/symeda/sormas/backend/TestDataCreator.java +++ b/sormas-backend/src/test/java/de/symeda/sormas/backend/TestDataCreator.java @@ -303,22 +303,6 @@ public UserDto createUser( return createUser(regionUuid, districtUuid, facilityUuid, firstName, lastName, userRole); } - public UserRoleReferenceDto createUserRole(String caption, JurisdictionLevel jurisdictionLevel, UserRight... userRights) { - UserRoleDto userRole = new UserRoleDto(); - userRole.setCaption(caption); - userRole.setJurisdictionLevel(jurisdictionLevel); - userRole.setUserRights(Arrays.stream(userRights).collect(Collectors.toSet())); - return beanTest.getUserRoleFacade().saveUserRole(userRole).toReference(); - } - - public UserRoleReferenceDto createUserRoleWithRequiredRights(String caption, JurisdictionLevel jurisdictionLevel, UserRight... userRights) { - UserRoleDto userRole = new UserRoleDto(); - userRole.setCaption(caption); - userRole.setJurisdictionLevel(jurisdictionLevel); - userRole.setUserRights(UserRight.getWithRequiredUserRights(userRights)); - return beanTest.getUserRoleFacade().saveUserRole(userRole).toReference(); - } - private UserDto createUser( String regionUuid, String districtUuid, @@ -342,6 +326,29 @@ private UserDto createUser( return beanTest.getUserFacade().saveUser(user, false); } + public UserDto createPointOfEntryUser(RDP rdp) { + return createUser( + new RDCF(rdp.region, rdp.district, null, null), + userRoleDtoMap.get(DefaultUserRole.POE_INFORMANT), + user -> user.setPointOfEntry(rdp.pointOfEntry)); + } + + public UserRoleReferenceDto createUserRole(String caption, JurisdictionLevel jurisdictionLevel, UserRight... userRights) { + UserRoleDto userRole = new UserRoleDto(); + userRole.setCaption(caption); + userRole.setJurisdictionLevel(jurisdictionLevel); + userRole.setUserRights(Arrays.stream(userRights).collect(Collectors.toSet())); + return beanTest.getUserRoleFacade().saveUserRole(userRole).toReference(); + } + + public UserRoleReferenceDto createUserRoleWithRequiredRights(String caption, JurisdictionLevel jurisdictionLevel, UserRight... userRights) { + UserRoleDto userRole = new UserRoleDto(); + userRole.setCaption(caption); + userRole.setJurisdictionLevel(jurisdictionLevel); + userRole.setUserRights(UserRight.getWithRequiredUserRights(userRights)); + return beanTest.getUserRoleFacade().saveUserRole(userRole).toReference(); + } + public PersonDto createPerson() { return createPerson("FirstName", "LastName"); } @@ -815,6 +822,10 @@ public ContactDto createContact(UserReferenceDto reportingUser, PersonReferenceD return createContact(reportingUser, null, contactPerson, null, new Date(), null, disease, null); } + public ContactDto createContact(UserReferenceDto reportingUser, PersonReferenceDto contactPerson, Disease disease, RDCF rdcf) { + return createContact(reportingUser, null, contactPerson, null, new Date(), null, disease, null); + } + public ContactDto createContact( UserReferenceDto reportingUser, PersonReferenceDto contactPerson, @@ -1018,6 +1029,15 @@ public EventDto createEvent(UserReferenceDto reportingUser, Disease disease) { null); } + public EventDto createEvent(UserReferenceDto reportingUser, Disease disease, RDCF rdcf) { + + return createEvent(EventStatus.SIGNAL, EventInvestigationStatus.PENDING, "title", "description", reportingUser, rdcf, (event) -> { + event.setReportDateTime(new Date()); + event.setReportingUser(reportingUser); + event.setDisease(disease); + }); + } + public EventDto createEvent(UserReferenceDto reportingUser, Disease disease, Consumer customConfig) { return createEvent(EventStatus.SIGNAL, EventInvestigationStatus.PENDING, "title", "description", reportingUser, null, (event) -> { @@ -1344,6 +1364,14 @@ public SampleDto createSample(EventParticipantReferenceDto associatedEventPartic return createSample(associatedEventParticipant, new Date(), new Date(), reportingUser, SampleMaterial.BLOOD, lab); } + public SampleDto createSample( + EventParticipantReferenceDto associatedEventParticipant, + UserReferenceDto reportingUser, + FacilityReferenceDto lab, + Consumer customConfig) { + return createSample(associatedEventParticipant, new Date(), new Date(), reportingUser, SampleMaterial.BLOOD, lab, customConfig); + } + public SampleDto createSample( EventParticipantReferenceDto associatedEventParticipant, Date sampleDateTime, @@ -1400,6 +1428,20 @@ public PathogenTestDto createPathogenTest( return createPathogenTest(sample, testType, testedDisease, testDateTime, lab, labUser, testResult, testResultText, verified, null); } + public PathogenTestDto createPathogenTest(SampleReferenceDto sample, UserReferenceDto labUser, Consumer extraConfig) { + return createPathogenTest( + sample, + PathogenTestType.ANTIGEN_DETECTION, + null, + new Date(), + (FacilityReferenceDto) null, + labUser, + PathogenTestResultType.PENDING, + null, + true, + extraConfig); + } + public PathogenTestDto createPathogenTest( SampleReferenceDto sample, PathogenTestType testType, @@ -1670,6 +1712,22 @@ public RDCFEntities createRDCFEntities(String regionName, String districtName, S return new RDCFEntities(region, district, community, facility); } + public RDP createRDP() { + + var region = createRegion("Region"); + var district = createDistrict("District", region); + var pointOfEntry = createPointOfEntry("POE", region, district); + + return new RDP( + new RegionReferenceDto(region.getUuid(), region.getName(), region.getExternalID()), + new DistrictReferenceDto(district.getUuid(), district.getName(), district.getExternalID()), + new PointOfEntryReferenceDto( + pointOfEntry.getUuid(), + pointOfEntry.getName(), + pointOfEntry.getPointOfEntryType(), + pointOfEntry.getExternalID())); + } + public Continent createContinent(String name) { Continent continent = new Continent(); continent.setUuid(DataHelper.createUuid()); @@ -2227,4 +2285,17 @@ public RDCF(RDCFEntities rdcfEntities) { new FacilityReferenceDto(rdcfEntities.facility.getUuid(), rdcfEntities.facility.getName(), rdcfEntities.facility.getExternalID()); } } + + public static class RDP { + + public RegionReferenceDto region; + public DistrictReferenceDto district; + public PointOfEntryReferenceDto pointOfEntry; + + public RDP(RegionReferenceDto region, DistrictReferenceDto district, PointOfEntryReferenceDto pointOfEntry) { + this.region = region; + this.district = district; + this.pointOfEntry = pointOfEntry; + } + } } diff --git a/sormas-backend/src/test/java/de/symeda/sormas/backend/deletionconfiguration/CoreEntityDeletionServiceTest.java b/sormas-backend/src/test/java/de/symeda/sormas/backend/deletionconfiguration/CoreEntityDeletionServiceTest.java index 67d8ffb4af8..345a1ee1c07 100644 --- a/sormas-backend/src/test/java/de/symeda/sormas/backend/deletionconfiguration/CoreEntityDeletionServiceTest.java +++ b/sormas-backend/src/test/java/de/symeda/sormas/backend/deletionconfiguration/CoreEntityDeletionServiceTest.java @@ -1,6 +1,7 @@ package de.symeda.sormas.backend.deletionconfiguration; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -9,6 +10,7 @@ import java.io.IOException; import java.sql.Timestamp; import java.util.Date; +import java.util.HashMap; import java.util.List; import javax.persistence.Query; @@ -30,6 +32,9 @@ import de.symeda.sormas.api.event.EventInvestigationStatus; import de.symeda.sormas.api.event.EventParticipantDto; import de.symeda.sormas.api.event.EventStatus; +import de.symeda.sormas.api.feature.FeatureConfigurationIndexDto; +import de.symeda.sormas.api.feature.FeatureType; +import de.symeda.sormas.api.feature.FeatureTypeProperty; import de.symeda.sormas.api.followup.FollowUpLogic; import de.symeda.sormas.api.immunization.ImmunizationCriteria; import de.symeda.sormas.api.immunization.ImmunizationDto; @@ -59,6 +64,7 @@ import de.symeda.sormas.backend.contact.Contact; import de.symeda.sormas.backend.event.Event; import de.symeda.sormas.backend.event.EventParticipant; +import de.symeda.sormas.backend.feature.FeatureConfiguration; import de.symeda.sormas.backend.immunization.entity.Immunization; import de.symeda.sormas.backend.sample.Sample; import de.symeda.sormas.backend.sormastosormas.SormasToSormasTest; @@ -275,6 +281,7 @@ public void testImmunizationAutomaticDeletion() { }); assertEquals(1, getImmunizationService().count()); + assertEquals(1, getVaccinationService().count()); useSystemUser(); getCoreEntityDeletionService().executeAutomaticDeletion(); @@ -282,6 +289,55 @@ public void testImmunizationAutomaticDeletion() { assertEquals(0, getImmunizationService().count()); assertEquals(0, getVaccinationService().count()); + assertEquals(0, getPersonService().count()); + } + + @Test + public void testOrphanReducedImmunizationAutomaticDeletion() { + + createDeletionConfigurations(); + + TestDataCreator.RDCF rdcf = creator.createRDCF(); + UserDto user = creator + .createUser(rdcf, creator.getUserRoleReference(DefaultUserRole.ADMIN), creator.getUserRoleReference(DefaultUserRole.NATIONAL_USER)); + PersonDto person = creator.createPerson(); + ImmunizationDto immunization = creator.createImmunization(Disease.EVD, person.toReference(), user.toReference(), rdcf); + creator.createVaccination(user.toReference(), immunization.toReference()); + + assertEquals(1, getImmunizationService().count()); + assertEquals(1, getVaccinationService().count()); + + useSystemUser(); + getCoreEntityDeletionService().executeAutomaticDeletion(); + loginWith(user); + + assertFalse(getFeatureConfigurationFacade().isPropertyValueTrue(FeatureType.IMMUNIZATION_MANAGEMENT, FeatureTypeProperty.REDUCED)); + assertEquals(1, getImmunizationService().count()); + assertEquals(1, getVaccinationService().count()); + assertEquals(1, getPersonService().count()); + + // change feature configuration to immunization reduced + FeatureConfigurationIndexDto featureConfiguration = + new FeatureConfigurationIndexDto(DataHelper.createUuid(), null, null, null, null, null, true, null); + getFeatureConfigurationFacade().saveFeatureConfiguration(featureConfiguration, FeatureType.IMMUNIZATION_MANAGEMENT); + executeInTransaction(em -> { + Query query = em.createQuery("select f from featureconfiguration f"); + List resultList = (List) query.getResultList(); + + HashMap properties = new HashMap<>(); + properties.put(FeatureTypeProperty.REDUCED, true); + resultList.get(1).setProperties(properties); + em.persist(resultList.get(1)); + }); + + useSystemUser(); + getCoreEntityDeletionService().executeAutomaticDeletion(); + loginWith(user); + + assertTrue(getFeatureConfigurationFacade().isPropertyValueTrue(FeatureType.IMMUNIZATION_MANAGEMENT, FeatureTypeProperty.REDUCED)); + assertEquals(0, getImmunizationService().count()); + assertEquals(0, getVaccinationService().count()); + assertEquals(0, getPersonService().count()); } @Test diff --git a/sormas-backend/src/test/java/de/symeda/sormas/backend/person/PersonFacadeEjbPseudonymizationTest.java b/sormas-backend/src/test/java/de/symeda/sormas/backend/person/PersonFacadeEjbPseudonymizationTest.java index ffcb52497a4..580e0b96799 100644 --- a/sormas-backend/src/test/java/de/symeda/sormas/backend/person/PersonFacadeEjbPseudonymizationTest.java +++ b/sormas-backend/src/test/java/de/symeda/sormas/backend/person/PersonFacadeEjbPseudonymizationTest.java @@ -29,6 +29,8 @@ import java.util.List; import java.util.Optional; +import de.symeda.sormas.api.travelentry.TravelEntryDto; +import de.symeda.sormas.backend.travelentry.TravelEntry; import org.junit.jupiter.api.Test; import de.symeda.sormas.api.Disease; @@ -62,7 +64,7 @@ public class PersonFacadeEjbPseudonymizationTest extends AbstractBeanTest { public void init() { super.init(); - rdcf1 = creator.createRDCF("Region 1", "District 1", "Community 1", "Facility 1"); + rdcf1 = creator.createRDCF("Region 1", "District 1", "Community 1", "Facility 1", "PointOfEntry1"); districtUser1 = creator.createUser( rdcf1.region.getUuid(), rdcf1.district.getUuid(), @@ -71,7 +73,7 @@ public void init() { "Off1", creator.getUserRoleReference(DefaultUserRole.SURVEILLANCE_OFFICER)); - rdcf2 = creator.createRDCF("Region 2", "District 2", "Community 2", "Facility 2"); + rdcf2 = creator.createRDCF("Region 2", "District 2", "Community 2", "Facility 2", "PointOfEntry2"); districtUser2 = creator.createUser( rdcf2.region.getUuid(), rdcf2.district.getUuid(), @@ -274,6 +276,26 @@ public void testGetContactPersonOutsideJurisdiction() { assertNotPseudonymized(getPersonFacade().getByUuid(person.getUuid())); } + @Test + public void testGetTravelEntryPersonOutsideJurisdiction() { + loginWith(districtUser1); + person = createPerson(); + TravelEntryDto travelEntry = creator.createTravelEntry(person.toReference(), districtUser1.toReference(), rdcf1, (t) -> { + t.setDisease(Disease.EVD); + }); + + loginWith(districtUser2); + assertPseudonymised(getPersonFacade().getByUuid(person.getUuid())); + + loginWith(districtUser1); + CaseDataDto caze = creator.createCase(districtUser1.toReference(), person.toReference(), rdcf2); + travelEntry.setResultingCase(caze.toReference()); + getTravelEntryFacade().save(travelEntry); + + loginWith(districtUser2); + assertNotPseudonymized(getPersonFacade().getByUuid(person.getUuid())); + } + @Test public void testUpdateContactPersonInJurisdiction() { loginWith(districtUser2); diff --git a/sormas-backend/src/test/java/de/symeda/sormas/backend/sample/SampleFacadeEjbTest.java b/sormas-backend/src/test/java/de/symeda/sormas/backend/sample/SampleFacadeEjbTest.java index b2a5de73359..89453f30a39 100644 --- a/sormas-backend/src/test/java/de/symeda/sormas/backend/sample/SampleFacadeEjbTest.java +++ b/sormas-backend/src/test/java/de/symeda/sormas/backend/sample/SampleFacadeEjbTest.java @@ -1079,7 +1079,7 @@ public void testCountAndGetSamplesForMap() { }); creator.createSample(caseWithCoord.toReference(), user.toReference(), creator.createRDCF().facility); - ContactDto contactWithParsonCoord = creator.createContact(user.toReference(), personWithCoord.toReference(), Disease.CORONAVIRUS, null); + ContactDto contactWithParsonCoord = creator.createContact(user.toReference(), personWithCoord.toReference(), Disease.CORONAVIRUS); creator.createSample( contactWithParsonCoord.toReference(), new Date(), diff --git a/sormas-backend/src/test/java/de/symeda/sormas/backend/sormastosormas/entities/SormasToSormasCaseFacadeEjbTest.java b/sormas-backend/src/test/java/de/symeda/sormas/backend/sormastosormas/entities/SormasToSormasCaseFacadeEjbTest.java index fbcdf8eea2b..4cb922104f0 100644 --- a/sormas-backend/src/test/java/de/symeda/sormas/backend/sormastosormas/entities/SormasToSormasCaseFacadeEjbTest.java +++ b/sormas-backend/src/test/java/de/symeda/sormas/backend/sormastosormas/entities/SormasToSormasCaseFacadeEjbTest.java @@ -917,6 +917,47 @@ public void testSyncCases() throws SormasToSormasException { .post(eq(SECOND_SERVER_ID), ArgumentMatchers.contains("/cases/sync"), ArgumentMatchers.any(), ArgumentMatchers.any()); } + @Test + public void testSyncSharesWithSampleAddedOnCaseHandedOver() throws SormasToSormasException { + UserReferenceDto officer = creator.createSurveillanceOfficer(rdcf).toReference(); + + SormasToSormasOriginInfoDto originInfo = createAndSaveSormasToSormasOriginInfo(DEFAULT_SERVER_ID, true, o -> o.setWithSamples(true)); + + PersonDto casePerson = creator.createPerson(); + CaseDataDto caze = creator.createCase(officer, casePerson.toReference(), rdcf, c -> { + c.setSormasToSormasOriginInfo(originInfo); + }); + + SampleDto sample = creator.createSample(caze.toReference(), officer, rdcf.facility); + + getSormasToSormasCaseFacade().syncShares(new ShareTreeCriteria(caze.getUuid())); + + Mockito + .when( + MockProducer.getSormasToSormasClient() + .post(eq(DEFAULT_SERVER_ID), ArgumentMatchers.contains("/cases/sync"), ArgumentMatchers.any(), ArgumentMatchers.any())) + .then(invocation -> { + SyncDataDto syncData = invocation.getArgument(2); + + assertThat(syncData.getShareData().getCases().get(0).getEntity().getUuid(), is(caze.getUuid())); + assertThat(syncData.getShareData().getSamples().get(0).getEntity().getUuid(), is(sample.getUuid())); + + return Response.noContent().build(); + }); + + Mockito.verify(MockProducer.getSormasToSormasClient(), Mockito.times(1)) + .post(eq(DEFAULT_SERVER_ID), ArgumentMatchers.contains("/cases/sync"), ArgumentMatchers.any(), ArgumentMatchers.any()); + + List sampleShareInfos = + getSormasToSormasShareInfoFacade().getIndexList(new SormasToSormasShareInfoCriteria().sample(sample.toReference()), null, null); + assertThat(sampleShareInfos, hasSize(1)); + + // no share info should be created for the case because it has an origin info so it's already shared + List caseShareInfos = + getSormasToSormasShareInfoFacade().getIndexList(new SormasToSormasShareInfoCriteria().caze(caze.toReference()), null, null); + assertThat(caseShareInfos, hasSize(0)); + } + @Test public void testGetAllShares() throws SormasToSormasException { UserReferenceDto officer = useSurveillanceOfficerLogin(rdcf).toReference(); diff --git a/sormas-backend/src/test/java/de/symeda/sormas/backend/sormastosormas/validation/InfraValidationSoundnessTest.java b/sormas-backend/src/test/java/de/symeda/sormas/backend/sormastosormas/validation/InfraValidationSoundnessTest.java index 4d349d0c5ba..9884a034988 100644 --- a/sormas-backend/src/test/java/de/symeda/sormas/backend/sormastosormas/validation/InfraValidationSoundnessTest.java +++ b/sormas-backend/src/test/java/de/symeda/sormas/backend/sormastosormas/validation/InfraValidationSoundnessTest.java @@ -1,8 +1,8 @@ package de.symeda.sormas.backend.sormastosormas.validation; -import static org.hibernate.validator.internal.util.Contracts.assertTrue; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.lang.reflect.Constructor; import java.lang.reflect.Field; diff --git a/sormas-backend/src/test/java/de/symeda/sormas/backend/user/UserFacadeEjbTest.java b/sormas-backend/src/test/java/de/symeda/sormas/backend/user/UserFacadeEjbTest.java index 326036eb3d9..6a5cc090302 100644 --- a/sormas-backend/src/test/java/de/symeda/sormas/backend/user/UserFacadeEjbTest.java +++ b/sormas-backend/src/test/java/de/symeda/sormas/backend/user/UserFacadeEjbTest.java @@ -37,6 +37,7 @@ import java.util.UUID; import java.util.stream.Collectors; +import javax.persistence.EntityNotFoundException; import javax.validation.ValidationException; import org.junit.jupiter.api.BeforeEach; @@ -54,6 +55,7 @@ import de.symeda.sormas.api.user.UserFacade; import de.symeda.sormas.api.user.UserReferenceDto; import de.symeda.sormas.api.user.UserRight; +import de.symeda.sormas.api.utils.AccessDeniedException; import de.symeda.sormas.api.utils.SortProperty; import de.symeda.sormas.backend.AbstractBeanTest; import de.symeda.sormas.backend.TestDataCreator.RDCF; @@ -450,4 +452,28 @@ public void testGetUserRefsByDistrictsWithExcludeLimitedDiseaseUsersAndSingleDis equalTo(generalRestUser.toReference()))); } + + @Test + void getUserRights() { + + RDCF rdcf = creator.createRDCF(); + UserDto userWithoutAccess = creator.createSurveillanceOfficer(rdcf); + UserRight[] surveillanceOfficerRights = + UserRole.getUserRights(Collections.singletonList(creator.getUserRole(SURVEILLANCE_OFFICER))).toArray(new UserRight[] {}); + + // Successfully retrieve user rights of other user + loginWith(nationalAdmin); + List userRights = getUserFacade().getUserRights(userWithoutAccess.getUuid()); + assertThat(userRights, containsInAnyOrder(surveillanceOfficerRights)); + // Successfully retrieve own user rights with user without access to the USER_VIEW and USERROLE_VIEW rights + loginWith(userWithoutAccess); + userRights = getUserFacade().getUserRights(null); + assertThat(userRights, containsInAnyOrder(surveillanceOfficerRights)); + // Prevent users without access from retrieving user rights of other users + assertThrows(AccessDeniedException.class, () -> getUserFacade().getUserRights(nationalAdmin.getUuid())); + + // Uuid which does not exist in the system + loginWith(nationalAdmin); + assertThrows(EntityNotFoundException.class, () -> getUserFacade().getUserRights("12345")); + } } diff --git a/sormas-backend/src/test/java/fish/payara/security/openid/OpenIdExtension.java b/sormas-backend/src/test/java/fish/payara/security/openid/OpenIdExtension.java deleted file mode 100644 index d9e79f0ccc6..00000000000 --- a/sormas-backend/src/test/java/fish/payara/security/openid/OpenIdExtension.java +++ /dev/null @@ -1,64 +0,0 @@ -package fish.payara.security.openid; - -import javax.enterprise.inject.spi.BeforeBeanDiscovery; -import javax.enterprise.inject.spi.Extension; - -/** - * Deactivate OpenIdExtension (all @Observes methods) because {@code bean-test} Framework with - * {@link org.jboss.weld.bootstrap.events.BeforeBeanDiscoveryImpl} (version 2.1.2.Final) - * is incompatible with {@link BeforeBeanDiscovery} in CDI 2.0. - */ -public class OpenIdExtension implements Extension { - - //@formatter:off - /* - * I tried to update weld (weld-se 2.1.2.Final -> weld-se-core 3.1.8.Final) but then the JTA transaction did not work anymore. - * Workaround: Deactivate OpenIdExtension in tests (we don't need them here). - * - * Dependency snippets: - - >>> sormas-base/pom.xml - - 1.9.5 - - - info.novatec - bean-test - 0.2.Final - test - - - org.jboss.weld.se - weld-se - - - - - org.jboss.weld.se - weld-se-core - 3.1.8.Final - test - - - org.apache.deltaspike.core - deltaspike-core-impl - ${deltaspike.version} - test - - - org.apache.deltaspike.cdictrl - deltaspike-cdictrl-weld - ${deltaspike.version} - test - - - >>> sormas-backend/pom.xml - - - org.jboss.weld.se - weld-se-core - - - */ - //@formatter:on -} diff --git a/sormas-base/build.xml b/sormas-base/build.xml index 660c3f5d8e8..dd53b26eeb0 100644 --- a/sormas-base/build.xml +++ b/sormas-base/build.xml @@ -111,7 +111,7 @@ Collecting serverlibs - + Collecting config und scripts diff --git a/sormas-base/dependencies/bean-test-0.2.Final.jar b/sormas-base/dependencies/bean-test-0.2.Final.jar deleted file mode 100644 index dbe92b7c89d..00000000000 Binary files a/sormas-base/dependencies/bean-test-0.2.Final.jar and /dev/null differ diff --git a/sormas-base/pom.xml b/sormas-base/pom.xml index ac7cfb602a8..c4e7ed7ebd5 100644 --- a/sormas-base/pom.xml +++ b/sormas-base/pom.xml @@ -5,11 +5,12 @@ de.symeda.sormas sormas-base pom - 1.83.1 + 1.84.0 - 1.8 - 1.8 + 3.6.3 + 11 + none UTF-8 UTF-8 development @@ -25,9 +26,9 @@ 5.2021.10 - 2.3.3 - 1.7.36 - 1.2.10 + 2.3.7 + 2.0.6 + 1.3.5 TODO: Remove bootstrap.js in widgetset 8.14.3 ${vaadin.version} @@ -35,11 +36,12 @@ 1.70 21.0.1 3.15.3.Final - 2.0.3 - 8.3.2 - 0.22.0 - 5.9.1 + 2.0.4 + 8.3.8 + 1.0.1 + 5.9.2 2.2 + 4.11.0 2.6.0 0.4.2 @@ -363,14 +365,14 @@ com.google.guava guava - 31.0.1-jre + 31.1-jre provided com.opencsv opencsv - 5.5.2 + 5.7.1 provided @@ -414,13 +416,13 @@ org.apache.httpcomponents httpclient - 4.5.13 + 4.5.14 provided org.apache.httpcomponents httpcore - 4.4.15 + 4.4.16 provided @@ -433,7 +435,7 @@ org.apache.commons commons-compress - 1.21 + 1.22 provided @@ -452,12 +454,12 @@ org.apache.xmlgraphics fop-events - 2.7 + 2.8 org.apache.xmlgraphics xmlgraphics-commons - 2.7 + 2.8 @@ -479,10 +481,16 @@ provided + + org.checkerframework + checker-qual + 3.29.0 + + org.hibernate hibernate-core - 5.6.5.Final + 5.6.15.Final provided @@ -521,7 +529,7 @@ FastInfoset 1.2.18 provided - + org.glassfish.jaxb @@ -542,18 +550,18 @@ stax-ex 1.8.3 provided - + org.hibernate hibernate-ehcache - 5.6.5.Final + 5.6.15.Final provided com.vladmihalcea hibernate-types-55 - 2.14.0 + 2.21.1 provided @@ -567,14 +575,14 @@ org.jsoup jsoup - 1.14.3 + 1.15.3 provided org.postgresql postgresql - 42.4.1 + 42.5.1 provided @@ -585,8 +593,8 @@ @@ -610,7 +618,7 @@ ca.uhn.hapi.fhir hapi-fhir-structures-r4 - 5.7.0 + 6.2.2 runtime @@ -620,14 +628,14 @@ ca.uhn.hapi.fhir org.hl7.fhir.r4 - 5.6.36 + 5.6.88 compile com.googlecode.libphonenumber libphonenumber - 8.12.43 + 8.13.3 @@ -696,7 +704,7 @@ org.geotools gt-shapefile - 26.2 + 28.2 @@ -831,50 +839,31 @@ com.h2database h2 - 2.1.210 + 2.1.214 test - + org.testcontainers postgresql - 1.17.5 + 1.17.6 test org.testcontainers junit-jupiter - 1.17.5 + 1.17.6 test - - info.novatec - bean-test - 0.2.Final_Local - system - ${project.basedir}/../sormas-base/dependencies/bean-test-0.2.Final.jar - - org.jboss.weld.se - weld-se - 2.1.2.Final - test - - - org.apache.deltaspike.core - deltaspike-core-impl - 1.2.1 - test - - - org.apache.deltaspike.cdictrl - deltaspike-cdictrl-weld - 1.2.1 + weld-se-core + 3.1.9.Final test + @@ -901,28 +890,27 @@ org.mockito mockito-junit-jupiter - 4.11.0 + ${mockito.version} test - org.mockito mockito-inline - 4.11.0 + ${mockito.version} test org.apache.geronimo.config geronimo-config-impl - 1.2.2 + 1.2.3 test org.apache.poi poi-ooxml - 5.2.0 + 5.2.3 @@ -949,7 +937,7 @@ org.hibernate.validator hibernate-validator - 6.1.6.Final + 6.2.5.Final test @@ -962,7 +950,7 @@ org.springframework spring-context - 5.3.25 + 5.3.27 org.springframework @@ -985,7 +973,7 @@ com.github.tomakehurst wiremock-jre8-standalone - 2.34.0 + 2.35.0 test @@ -1002,29 +990,36 @@ test + + uk.co.jemos.podam + podam + 7.2.11.RELEASE + test + + com.ibm.etcd etcd-java - 0.0.19 + 0.0.22 com.google.oauth-client google-oauth-client - 1.33.3 + 1.34.1 com.google.http-client google-http-client - 1.41.4 + 1.42.3 com.google.http-client google-http-client-gson - 1.41.4 + 1.42.3 @@ -1059,6 +1054,10 @@ + + maven-enforcer-plugin + + maven-failsafe-plugin @@ -1070,11 +1069,9 @@ - org.apache.maven.plugins maven-compiler-plugin - org.apache.maven.plugins maven-resources-plugin @@ -1082,29 +1079,74 @@ - org.apache.maven.plugins + maven-antrun-plugin + 3.1.0 + + + + maven-assembly-plugin + 3.4.2 + + + + maven-clean-plugin + 3.2.0 + + + maven-compiler-plugin - 3.8.1 + 3.10.1 + - org.apache.maven.plugins - maven-resources-plugin + maven-dependency-plugin + 3.4.0 + + + + maven-enforcer-plugin + 3.1.0 + + + enforce-versions + + enforce + + + + + ${maven.minimum.version} + + + + + + + + + maven-install-plugin 3.1.0 + + maven-resources-plugin + 3.3.0 + + maven-javadoc-plugin - 3.2.0 + 3.4.1 - -Xdoclint:none + ${maven.javadoc.doclint} + ${java.encoding} org.jacoco jacoco-maven-plugin - 0.8.5 + 0.8.8 true @@ -1144,12 +1186,12 @@ maven-deploy-plugin - 2.8.2 + 3.0.0 maven-failsafe-plugin - 2.19.1 + 3.0.0-M7 integration-test @@ -1170,30 +1212,27 @@ maven-surefire-plugin - 2.22.0 + 3.0.0-M7 - org.apache.maven.plugins maven-ear-plugin - 3.0.1 + 3.3.0 7 lib - org.apache.maven.plugins maven-ejb-plugin - 3.0.1 + 3.2.1 3.2 - org.apache.maven.plugins maven-war-plugin - 3.2.3 + 3.3.2 @{artifactId}@.@{extension}@ false @@ -1205,9 +1244,8 @@ ${vaadin.plugin.version} - org.apache.maven.plugins maven-jar-plugin - 3.1.1 + 3.3.0 @@ -1218,9 +1256,8 @@ - org.apache.maven.plugins maven-source-plugin - 3.1.0 + 3.2.1 @@ -1268,11 +1305,12 @@ maven-project-info-reports-plugin - 3.1.1 + 3.4.1 maven-site-plugin - 3.9.1 + 3.12.1 + UTF-8 UTF-8 @@ -1281,14 +1319,19 @@ org.apache.maven.wagon wagon-ssh - 2.12 + 3.5.3 maven-surefire-report-plugin - 2.22.2 + 3.0.0-M7 + + + org.codehaus.cargo + cargo-maven3-plugin + 1.10.6 org.codehaus.mojo @@ -1298,12 +1341,13 @@ org.codehaus.mojo versions-maven-plugin - 2.8.1 + 2.14.2 org.owasp dependency-check-maven - 6.5.3 + 7.4.4 + 12 HTML,XML @@ -1418,7 +1462,7 @@ gradle - https://repo.gradle.org/gradle/libs-releases-local/ + https://repo.gradle.org/gradle/libs-releases @@ -1481,7 +1525,6 @@ maven-javadoc-plugin - ${java.encoding} 512 512 diff --git a/sormas-base/setup/keycloak/keycloak-setup.sh b/sormas-base/setup/keycloak/keycloak-setup.sh index 7d7a840bf96..89d5d313dbb 100644 --- a/sormas-base/setup/keycloak/keycloak-setup.sh +++ b/sormas-base/setup/keycloak/keycloak-setup.sh @@ -101,7 +101,7 @@ ASADMIN="${PAYARA_HOME}/bin/asadmin --port ${PORT_ADMIN}" # Keycloak settings KEYCLOAK_PORT=7080 if [[ -z "$KEYCLOAK_HOSTNAME" ]]; then - $KEYCLOAK_HOSTNAME="localhost:${KEYCLOAK_PORT}" + KEYCLOAK_HOSTNAME="localhost:${KEYCLOAK_PORT}" echo "Using default KEYCLOAK_HOSTNAME ${KEYCLOAK_HOSTNAME}" fi diff --git a/sormas-base/setup/server-setup.sh b/sormas-base/setup/server-setup.sh index 023f841438b..74ae9641077 100644 --- a/sormas-base/setup/server-setup.sh +++ b/sormas-base/setup/server-setup.sh @@ -451,7 +451,7 @@ echo "---" echo "Please make sure to perform the following steps:" echo " - Adjust the sormas.properties file to your system" if [[ ${DEV_SYSTEM} != true ]]; then - echo " - Execute the sormas-update.sh file to populate the database and deploy the server" + echo " - Execute the server-update.sh file to populate the database and deploy the server" echo " - Configure the apache web server according to the server setup guide" fi echo " - Execute the r-setup.sh file to enable disease network diagrams" \ No newline at end of file diff --git a/sormas-cargoserver/pom.xml b/sormas-cargoserver/pom.xml index 2021d0b11c0..84afb876f40 100644 --- a/sormas-cargoserver/pom.xml +++ b/sormas-cargoserver/pom.xml @@ -3,7 +3,7 @@ de.symeda.sormas sormas-base - 1.83.1 + 1.84.0 ../sormas-base @@ -21,12 +21,10 @@ ch.qos.logback logback-core - ${logback.version} ch.qos.logback logback-classic - ${logback.version} @@ -53,7 +51,6 @@ maven-resources-plugin - 3.2.0 copy-resources-1 @@ -115,9 +112,7 @@ - org.apache.maven.plugins maven-antrun-plugin - 1.8 generate-env @@ -154,8 +149,7 @@ org.codehaus.cargo - cargo-maven2-plugin - 1.8.0 + cargo-maven3-plugin payara diff --git a/sormas-e2e-tests/gradle.properties b/sormas-e2e-tests/gradle.properties index 6213ac47abe..1d070c8916c 100644 --- a/sormas-e2e-tests/gradle.properties +++ b/sormas-e2e-tests/gradle.properties @@ -36,7 +36,7 @@ seleniumhqVersion=4.5.0 truthVersion=1.1.2 formatVersion=0.9 orgAwaitility=4.0.3 -webdrivermanager=5.1.0 +webdrivermanager=5.1.1 assertjCore=3.19.0 restAssured = 3.3.0 jacksonDatatypeJdk8 = 2.10.3 diff --git a/sormas-e2e-tests/src/main/java/org/sormas/e2etests/helpers/parsers/HTMLParser.java b/sormas-e2e-tests/src/main/java/org/sormas/e2etests/helpers/parsers/HTMLParser.java new file mode 100644 index 00000000000..c83b916eed6 --- /dev/null +++ b/sormas-e2e-tests/src/main/java/org/sormas/e2etests/helpers/parsers/HTMLParser.java @@ -0,0 +1,20 @@ +package org.sormas.e2etests.helpers.parsers; + +import org.jsoup.Jsoup; +import org.jsoup.nodes.Element; +import org.jsoup.select.Elements; + +public class HTMLParser { + + public static String getTextFromHtml(String htmlContent, String cssQuery) { + return Jsoup.parse(htmlContent).select(cssQuery).get(0).text(); + } + + public static Element findElement(String htmlContent, String cssQuery) { + return Jsoup.parse(htmlContent).select(cssQuery).get(0); + } + + public static Elements findElements(String htmlContent, String cssQuery) { + return Jsoup.parse(htmlContent).select(cssQuery); + } +} diff --git a/sormas-e2e-tests/src/main/java/org/sormas/e2etests/helpers/parsers/XMLParser.java b/sormas-e2e-tests/src/main/java/org/sormas/e2etests/helpers/parsers/XMLParser.java index 0392cf1f0cc..10b05630880 100644 --- a/sormas-e2e-tests/src/main/java/org/sormas/e2etests/helpers/parsers/XMLParser.java +++ b/sormas-e2e-tests/src/main/java/org/sormas/e2etests/helpers/parsers/XMLParser.java @@ -28,7 +28,7 @@ public static Document findDocumentByName( && filez.getName().endsWith(fileExtension)) .findFirst() .get(); - SAXBuilder saxBuilder = new SAXBuilder(); - return saxBuilder.build(file); + SAXBuilder saxBuilder = new SAXBuilder(); + return saxBuilder.build(file); } } diff --git a/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/AboutPage.java b/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/AboutPage.java index f9eab4dc6d0..2ffd6cffdc8 100644 --- a/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/AboutPage.java +++ b/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/AboutPage.java @@ -20,4 +20,6 @@ public class AboutPage { By.cssSelector(".v-vertical .v-slot:nth-of-type(6) span"); public static final By FULL_CHANGELOG_HYPERLINK = By.cssSelector(".v-vertical .v-slot:nth-of-type(7) span"); + public static final By SURVNET_CONVERTER_VERSION_LABEL = + By.xpath("//div[contains(text(), 'IfSG Meldesystem')]"); } diff --git a/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/aCommonComponents/SideCards.java b/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/aCommonComponents/SideCards.java new file mode 100644 index 00000000000..b0439987845 --- /dev/null +++ b/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/aCommonComponents/SideCards.java @@ -0,0 +1,49 @@ +/* + * SORMAS® - Surveillance Outbreak Response Management & Analysis System + * Copyright © 2016-2022 Helmholtz-Zentrum für Infektionsforschung GmbH (HZI) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.sormas.e2etests.pages.application.aCommonComponents; + +import org.openqa.selenium.By; + +public class SideCards { + + public static final By ADDED_SAMPLES_IN_SAMPLE_CARD = + By.xpath("//*[@location='samples']//*[@class='v-slot v-slot-s-list']/div/div/div/div"); + public static final By EDIT_SAMPLE_BUTTON = By.xpath("//div[contains(@id, 'edit-sample')]"); + + public static By checkTextInHandoverSideComponent(String text) { + return By.xpath(String.format("//div[@location='sormasToSormas']//div[text()='%s']", text)); + } + + public static By checkTextInSampleSideComponent(String text) { + return By.xpath( + String.format("//div[contains(@location,'samples')]//div[contains(text(), '%s')]", text)); + } + + public static By checkTextInImmunizationSideComponent(String text) { + return By.xpath( + String.format( + "//div[contains(@location,'vaccinations')]//div[contains(text(), '%s')]", text)); + } + + public static By checkTextInReportSideComponent(String text) { + return By.xpath( + String.format( + "//div[text()='Meldevorg\u00E4nge']/../../../../../..//div[text()='%s']", text)); + } +} diff --git a/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/cases/EditCasePage.java b/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/cases/EditCasePage.java index ca4797d8658..d7ec1a7d3e1 100644 --- a/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/cases/EditCasePage.java +++ b/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/cases/EditCasePage.java @@ -47,7 +47,6 @@ public class EditCasePage { public static final By EDIT_FIRST_TASK_BUTTON = By.cssSelector("[location='events'] #edit0"); public static final By NEW_SAMPLE_BUTTON = By.cssSelector("[id='New sample']"); public static final By NEW_SAMPLE_BUTTON_DE = By.cssSelector("[id='Neue Probe']"); - public static final By EDIT_SAMPLE_BUTTON = By.xpath("//div[contains(@id, 'edit-sample')]"); public static final By SHOW_SAMPLE_BUTTON = By.xpath( @@ -161,6 +160,7 @@ public class EditCasePage { public static final By GENERAL_COMMENT_TEXTAREA = By.cssSelector("textarea#additionalDetails"); public static final By SAVE_BUTTON = By.id("commit"); public static final By ACTION_CANCEL = By.cssSelector(".popupContent #actionCancel"); + public static final By ACTION_CLOSE = By.cssSelector(".popupContent #actionClose"); public static final By DELETE_BUTTON = By.id("deleteRestore"); public static final By DELETE_POPUP_YES_BUTTON = By.cssSelector(".popupContent #actionConfirm"); public static final By CASE_SAVED_POPUP = By.cssSelector(".v-Notification-caption"); @@ -418,6 +418,11 @@ public static By getEditTaskButtonByNumber(Integer number) { By.cssSelector(".popupContent textarea"); public static final By VACCINATION_STATUS_UPDATE_POPUP_HEADER = By.xpath("//div[@class='popupContent']//*[text()='Impfstatus Aktualisierung']"); + public static final By EDIT_REPORT_BUTTON = + By.xpath("//div[@location='surveillanceReports']//div[contains(@id, 'edit')]"); + public static final By REPORTER_FACILITY_INPUT = By.cssSelector(".popupContent #facility input"); + public static final By REPORTER_FACILITY_DETAILS_INPUT = + By.cssSelector(".popupContent #facilityDetails"); public static By checkIfTextExists(String text) { return By.xpath(String.format("//div[contains(text(),'%s')]", text)); @@ -426,24 +431,4 @@ public static By checkIfTextExists(String text) { public static By SHARE_PENDING_WARNING_DE = By.xpath( "//div[@class='popupContent']//div[contains(text(),'Es gibt bereits eine ausstehende Anfrage an das gleiche Gesundheitsamt. Bitte widerrufen Sie die Anfrage, bevor Sie eine Neue senden.')]"); - - public static By checkTextInReportSideComponent(String text) { - return By.xpath( - String.format( - "//div[text()='Meldevorg\u00E4nge']/../../../../../..//div[text()='%s']", text)); - } - - public static By checkTextInImmunizationSideComponent(String text) { - return By.xpath( - String.format( - "//div[contains(@location,'vaccinations')]//div[contains(text(), '%s')]", text)); - } - - public static By checkTextInSampleSideComponent(String text) { - return By.xpath( - String.format("//div[contains(@location,'samples')]//div[contains(text(), '%s')]", text)); - } - - public static final By ADDED_SAMPLES_IN_SAMPLE_CARD = - By.xpath("//*[@location='samples']//*[@class='v-slot v-slot-s-list']/div/div/div/div"); } diff --git a/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/configuration/FacilitiesTabPage.java b/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/configuration/FacilitiesTabPage.java index 169183257fa..8d4f491d5df 100644 --- a/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/configuration/FacilitiesTabPage.java +++ b/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/configuration/FacilitiesTabPage.java @@ -33,7 +33,7 @@ public class FacilitiesTabPage { By.xpath("//div[@class='v-window-closebox']"); public static final By IMPORT_SUCCESSFUL_FACILITY_IMPORT_CSV = By.xpath("//*[text()='Import successful!']"); - public static final By CLOSE_POPUP_FACILITIES_BUTTON = By.id("actionCancel"); + public static final By CLOSE_POPUP_FACILITIES_BUTTON = By.id("actionClose"); public static final By CLOSE_FACILITIES_IMPORT_BUTTON = By.xpath("//div[@class='v-window-closebox']"); public static final By FACILITIES_NEW_ENTRY_BUTTON = By.id("create"); diff --git a/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/contacts/ContactDirectoryPage.java b/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/contacts/ContactDirectoryPage.java index 4436fbd6959..2b0808ecc15 100644 --- a/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/contacts/ContactDirectoryPage.java +++ b/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/contacts/ContactDirectoryPage.java @@ -93,7 +93,7 @@ public class ContactDirectoryPage { public static final By NEW_ENTRY_EPIDEMIOLOGICAL_DATA = By.id("actionNewEntry"); public static final By FIRST_PERSON_ID = By.xpath("//td[6]//a"); public static final By FIRST_CONTACT_ID = By.xpath("//td[1]//a"); - public static final By BULK_CREATE_QUARANTINE_ORDER = By.id("bulkActions-8"); + public static final By BULK_CREATE_QUARANTINE_ORDER = By.id("bulkActions-10"); public static final By BULK_DELETE_BUTTON_CONTACT_PAGE = By.id("bulkActions-6"); public static final By CONTACT_MERGE_DUPLICATES = By.id("contactMergeDuplicates"); public static final By CONTACT_DISPLAY_FILTER_COMBOBOX = diff --git a/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/entries/TravelEntryPage.java b/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/entries/TravelEntryPage.java index d8a05c33247..84861fbc3ce 100644 --- a/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/entries/TravelEntryPage.java +++ b/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/entries/TravelEntryPage.java @@ -51,7 +51,7 @@ public static By getCheckboxByIndex(String idx) { return By.xpath(String.format("(//td//input[@type=\"checkbox\"])[%s]", idx)); } - public static final By CLOSE_DATA_IMPORT_POPUP_BUTTON = By.id("actionCancel"); + public static final By CLOSE_DATA_IMPORT_POPUP_BUTTON = By.id("actionClose"); public static final By CLOSE_IMPORT_TRAVEL_ENTRY_BUTTON = By.xpath("//div[@class='v-window-closebox']"); public static final By FIRST_NAME_IMPORTED_PERSON = diff --git a/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/events/EventDirectoryPage.java b/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/events/EventDirectoryPage.java index 0f5b34f04e7..a74b9e8ec15 100644 --- a/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/events/EventDirectoryPage.java +++ b/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/events/EventDirectoryPage.java @@ -112,7 +112,7 @@ public class EventDirectoryPage { public static final By IMPORT_BUTTON = By.cssSelector("div#actionImport"); public static final By IMPORT_POPUP_BUTTON = By.cssSelector("[class='v-button']"); public static final By IMPORT_SUCCESS = By.xpath("//*[text()='Import successful!']"); - public static final By IMPORT_POPUP_CLOSE_BUTTON = By.cssSelector(".popupContent #actionCancel"); + public static final By IMPORT_POPUP_CLOSE_BUTTON = By.cssSelector(".popupContent #actionClose"); public static final By IMPORT_WINDOW_CLOSE_BUTTON = By.cssSelector("[class='v-window-closebox']"); public static final By EVENT_REGION_COMBOBOX_INPUT = By.cssSelector("#region div"); public static final By EVENT_DISTRICT_COMBOBOX_INPUT = By.cssSelector("#district div"); diff --git a/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/messages/MessagesDirectoryPage.java b/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/messages/MessagesDirectoryPage.java index 9f5d043c644..98bef6604e2 100644 --- a/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/messages/MessagesDirectoryPage.java +++ b/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/messages/MessagesDirectoryPage.java @@ -121,4 +121,6 @@ public static By getProcessStatusByIndex(int index) { By.xpath("//*[text()='Neuen Kontakt erstellen']"); public static final By CREATE_NEW_EVENT_PARTICIPANT_RADIOBUTTON_DE = By.xpath("//*[text()='Neuen Ereignisteilnehmer erstellen']"); + public static final By LABORATORY_INPUT = By.cssSelector("#lab input"); + public static final By LABORATORY_DETAILS_INPUT = By.cssSelector("#labDetails"); } diff --git a/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/persons/PersonDirectoryPage.java b/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/persons/PersonDirectoryPage.java index 9181fd7b72c..5f46f8072c3 100644 --- a/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/persons/PersonDirectoryPage.java +++ b/sormas-e2e-tests/src/main/java/org/sormas/e2etests/pages/application/persons/PersonDirectoryPage.java @@ -57,6 +57,7 @@ public class PersonDirectoryPage { public static final By EVENT_AGGREGATION_BUTTON_DE = By.id("Ereignisteilnehmer"); public static final By CONTACT_AGGREGATION_BUTTON_DE = By.id("Kontakt"); public static final By ALL_AGGREGATION_BUTTON_DE = By.id("Alle"); + public static final By PERSON_FIRST_RECORD_IN_TABLE = By.cssSelector("[role='gridcell'] a"); public static final By getPersonResultsUuidLocator(String uuid) { return By.cssSelector(String.format("[title = '%s']", uuid)); diff --git a/sormas-e2e-tests/src/main/java/org/sormas/e2etests/webdriver/ChromeDriverFactory.java b/sormas-e2e-tests/src/main/java/org/sormas/e2etests/webdriver/ChromeDriverFactory.java index 215a9661e63..615172f82ca 100644 --- a/sormas-e2e-tests/src/main/java/org/sormas/e2etests/webdriver/ChromeDriverFactory.java +++ b/sormas-e2e-tests/src/main/java/org/sormas/e2etests/webdriver/ChromeDriverFactory.java @@ -58,6 +58,7 @@ public RemoteWebDriver getRemoteWebDriver() { chromePreferences.put("profile.password_manager_enabled", Boolean.FALSE); chromePreferences.put("download.default_directory", userDirProperty + "/downloads"); final ChromeOptions options = new ChromeOptions(); + options.addArguments("--remote-allow-origins=*"); options.merge(desiredCapabilities); options.setHeadless(headless); options.addArguments("--no-default-browser-check"); diff --git a/sormas-e2e-tests/src/main/resources/demisJsonTemplates/labNotificationTemplate.json b/sormas-e2e-tests/src/main/resources/demisJsonTemplates/labNotificationTemplate.json index 3583ab5219c..32c420e608f 100644 --- a/sormas-e2e-tests/src/main/resources/demisJsonTemplates/labNotificationTemplate.json +++ b/sormas-e2e-tests/src/main/resources/demisJsonTemplates/labNotificationTemplate.json @@ -28,6 +28,10 @@ "https://demis.rki.de/fhir/StructureDefinition/NotificationLaboratorySARSCoV2" ] }, + "identifier": { + "system": "https://demis.rki.de/fhir/NamingSystem/NotificationId", + "value": "" + }, "status": "preliminary", "type": { "coding": [ @@ -59,6 +63,18 @@ } ], "title": "SARS-CoV-2 Labormeldung", + "relatesTo": [ + { + "code": "appends", + "targetReference": { + "type": "Composition", + "identifier": { + "system": "https://demis.rki.de/fhir/NamingSystem/NotificationId", + "value": "" + } + } + } + ], "section": [ { "code": { @@ -88,7 +104,7 @@ }, "entry": [ { - "reference": "Observation/16c02776-e54b-44de-9801-ef07ec388247" + "reference": "Observation/" } ] } @@ -307,10 +323,10 @@ } }, { - "fullUrl": "https://demis.rki.de/fhir/Observation/16c02776-e54b-44de-9801-ef07ec388247", + "fullUrl": "https://demis.rki.de/fhir/Observation/", "resource": { "resourceType": "Observation", - "id": "16c02776-e54b-44de-9801-ef07ec388247", + "id": "", "meta": { "profile": [ "https://demis.rki.de/fhir/StructureDefinition/PathogenDetectionSARSCoV2" @@ -359,15 +375,15 @@ "text": "Coronavirus SARS-CoV-2 (PCR)" }, "specimen": { - "reference": "Specimen/d4240515-1e02-414d-ae18-5d3925ea2de6" + "reference": "Specimen/" } } }, { - "fullUrl": "https://demis.rki.de/fhir/Specimen/d4240515-1e02-414d-ae18-5d3925ea2de6", + "fullUrl": "https://demis.rki.de/fhir/Specimen/", "resource": { "resourceType": "Specimen", - "id": "d4240515-1e02-414d-ae18-5d3925ea2de6", + "id": "", "meta": { "profile": [ "https://demis.rki.de/fhir/StructureDefinition/SpecimenSARSCoV2" diff --git a/sormas-e2e-tests/src/main/resources/demisJsonTemplates/labNotificationTemplateOtherFacility.json b/sormas-e2e-tests/src/main/resources/demisJsonTemplates/labNotificationTemplateOtherFacility.json new file mode 100644 index 00000000000..d981195cbf2 --- /dev/null +++ b/sormas-e2e-tests/src/main/resources/demisJsonTemplates/labNotificationTemplateOtherFacility.json @@ -0,0 +1,412 @@ +{ + "resourceType": "Parameters", + "parameter": [ + { + "name": "content", + "resource": { + "resourceType": "Bundle", + "meta": { + "lastUpdated": "2020-08-03T23:32:32.527+02:00", + "profile": [ + "https://demis.rki.de/fhir/StructureDefinition/NotificationBundleLaboratory" + ] + }, + "identifier": { + "system": "http://demis.rki.de/fhir/todo/bundleIdentifier", + "value": "7bb100f2-ccc5-4d2c-842a-be47c8bb2cee" + }, + "type": "document", + "timestamp": "2020-08-03T23:32:32.525+02:00", + "entry": [ + { + "fullUrl": "https://demis.rki.de/fhir/Composition/37bde9c8-13a2-4249-9f16-2f8f2bb0ee0e", + "resource": { + "resourceType": "Composition", + "id": "37bde9c8-13a2-4249-9f16-2f8f2bb0ee0e", + "meta": { + "profile": [ + "https://demis.rki.de/fhir/StructureDefinition/NotificationLaboratorySARSCoV2" + ] + }, + "identifier": { + "system": "https://demis.rki.de/fhir/NamingSystem/NotificationId", + "value": "" + }, + "status": "preliminary", + "type": { + "coding": [ + { + "system": "http://loinc.org", + "code": "34782-3", + "display": "Infectious disease Note" + } + ] + }, + "category": [ + { + "coding": [ + { + "system": "http://loinc.org", + "code": "11502-2", + "display": "Laboratory report" + } + ] + } + ], + "subject": { + "reference": "Patient/c1378c95-57f5-4b2a-8480-aec18443d849" + }, + "date": "2022-05-13T23:32:32+02:00", + "author": [ + { + "reference": "PractitionerRole/4cb85fa7-d789-4e4f-8481-434b4c0c5f5c" + } + ], + "title": "SARS-CoV-2 Labormeldung", + "relatesTo": [ + { + "code": "appends", + "targetReference": { + "type": "Composition", + "identifier": { + "system": "https://demis.rki.de/fhir/NamingSystem/NotificationId", + "value": "" + } + } + } + ], + "section": [ + { + "code": { + "coding": [ + { + "system": "http://loinc.org", + "code": "29308-4", + "display": "Diagnosis" + } + ] + }, + "entry": [ + { + "reference": "Condition/90514b2b-6356-4367-8b96-76086e3a9ead" + } + ] + }, + { + "code": { + "coding": [ + { + "system": "http://loinc.org", + "code": "18725-2", + "display": "Microbiology studies (set)" + } + ] + }, + "entry": [ + { + "reference": "Observation/" + } + ] + } + ] + } + }, + { + "fullUrl": "https://demis.rki.de/fhir/Patient/c1378c95-57f5-4b2a-8480-aec18443d849", + "resource": { + "resourceType": "Patient", + "id": "c1378c95-57f5-4b2a-8480-aec18443d849", + "meta": { + "profile": [ + "https://demis.rki.de/fhir/StructureDefinition/NotifiedPerson" + ] + }, + "name": [ + { + "use": "official", + "family": "", + "given": [ + "" + ] + } + ], + "gender": "male", + "birthDate": "1950-02-11", + "address": [ + { + "extension": [ + { + "url": "https://demis.rki.de/fhir/StructureDefinition/AddressUse", + "valueCoding": { + "system": "https://demis.rki.de/fhir/CodeSystem/addressUse", + "code": "primary" + } + } + ], + "line": [ + "Teststrasse 123" + ], + "city": "Hamburg", + "postalCode": "", + "country": "20422" + } + ] + } + }, + { + "fullUrl": "https://demis.rki.de/fhir/PractitionerRole/4cb85fa7-d789-4e4f-8481-434b4c0c5f5c", + "resource": { + "resourceType": "PractitionerRole", + "id": "4cb85fa7-d789-4e4f-8481-434b4c0c5f5c", + "meta": { + "profile": [ + "https://demis.rki.de/fhir/StructureDefinition/NotifierRole" + ] + }, + "organization": { + "reference": "Organization/f812c7ab-f9d7-4dfd-81eb-71b2408f1c55" + } + } + }, + { + "fullUrl": "https://demis.rki.de/fhir/Organization/f812c7ab-f9d7-4dfd-81eb-71b2408f1c55", + "resource": { + "resourceType": "Organization", + "id": "f812c7ab-f9d7-4dfd-81eb-71b2408f1c55", + "meta": { + "profile": [ + "https://demis.rki.de/fhir/StructureDefinition/NotifierFacility" + ] + }, + "identifier": [ + { + "system": "https://fhir.kbv.de/NamingSystem/KBV_NS_Base_BSNR", + "value": "" + } + ], + "type": [ + { + "coding": [ + { + "system": "https://demis.rki.de/fhir/CodeSystem/organizationType", + "code": "laboratory", + "display": "Erregerdiagnostische Untersuchungsstelle" + } + ] + } + ], + "name": "", + "telecom": [ + { + "system": "phone", + "value": "+49 30 09876543 221", + "use": "work" + }, + { + "system": "fax", + "value": "+49 30 09876543 99221", + "use": "work" + }, + { + "system": "email", + "value": "ifsg@demis-labortest.de", + "use": "work" + }, + { + "system": "url", + "value": "https://www.demis-labortest.de", + "use": "work" + } + ], + "address": [ + { + "line": [ + "Teststraße 123a Dritter Hinterhof" + ], + "city": "Teststadt", + "postalCode": "20095", + "country": "20422" + } + ], + "contact": [ + { + "name": { + "use": "official", + "family": "NachnameAnsprechpartnerIn", + "given": [ + "VornameAnsprechpartnerIn" + ] + } + } + ] + } + }, + { + "fullUrl": "https://demis.rki.de/fhir/PractitionerRole/7c3a75e0-f463-4940-ac5f-7fbb92c8fd5f", + "resource": { + "resourceType": "PractitionerRole", + "id": "7c3a75e0-f463-4940-ac5f-7fbb92c8fd5f", + "meta": { + "profile": [ + "https://demis.rki.de/fhir/StructureDefinition/SubmittingRole" + ] + }, + "organization": { + "reference": "Organization/2fb42482-837d-49bf-af4d-2d701b6a569a" + } + } + }, + { + "fullUrl": "https://demis.rki.de/fhir/Organization/2fb42482-837d-49bf-af4d-2d701b6a569a", + "resource": { + "resourceType": "Organization", + "id": "2fb42482-837d-49bf-af4d-2d701b6a569a", + "meta": { + "profile": [ + "https://demis.rki.de/fhir/StructureDefinition/SubmittingFacility" + ] + }, + "identifier": [ + { + "system": "https://fhir.kbv.de/NamingSystem/KBV_NS_Base_BSNR", + "value": "123456780" + } + ], + "name": "Einsendereinrichtungsname", + "telecom": [ + { + "extension": [ + { + "url": "https://demis.rki.de/fhir/StructureDefinition/Comment", + "valueString": "Herr Vorname Ansprechpartner" + } + ], + "system": "phone", + "value": "+49 30 1234567890", + "use": "work" + } + ], + "address": [ + { + "line": [ + "Einsenderstr. 123" + ], + "city": "Hamburg", + "state": "DE-BE", + "postalCode": "20095", + "country": "20422" + } + ] + } + }, + { + "fullUrl": "https://demis.rki.de/fhir/Condition/90514b2b-6356-4367-8b96-76086e3a9ead", + "resource": { + "resourceType": "Condition", + "id": "90514b2b-6356-4367-8b96-76086e3a9ead", + "meta": { + "profile": [ + "https://demis.rki.de/fhir/StructureDefinition/DiagnoseSARSCoV2" + ] + }, + "code": { + "coding": [ + { + "system": "http://fhir.de/CodeSystem/dimdi/icd-10-gm", + "code": "U07.1!" + } + ] + }, + "subject": { + "reference": "Patient/c1378c95-57f5-4b2a-8480-aec18443d849" + } + } + }, + { + "fullUrl": "https://demis.rki.de/fhir/Observation/", + "resource": { + "resourceType": "Observation", + "id": "", + "meta": { + "profile": [ + "https://demis.rki.de/fhir/StructureDefinition/PathogenDetectionSARSCoV2" + ] + }, + "status": "final", + "category": [ + { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/observation-category", + "code": "laboratory" + } + ] + } + ], + "code": { + "coding": [ + { + "system": "http://loinc.org", + "code": "96757-0", + "display": "SARS-CoV-2 RNA NAA+probe Ql" + } + ] + }, + "subject": { + "reference": "Patient/c1378c95-57f5-4b2a-8480-aec18443d849" + }, + "valueString": "We have heard that rumours that Samwise Gamgee has the Beta variant", + "interpretation": [ + { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation", + "code": "POS" + } + ] + } + ], + "note": [ + { + "text": "Schwache Reaktivität in der SARS-CoV-2-PCR. Die schwache Reaktivität deutet auf eine nur geringe Virusmenge in der Probe hin. Dieses wäre in Zusammenschau mit dem Vorbefund während der späten Phase einer ausheilenden Infektion zu erwarten. Im Falle einer aufgetretenen Pneumonie sollten ergänzend Materialien der tiefen Atemwege wie Bronchial- oder Trachealsekret bzw. BAL-Flüssigkeit untersucht werden. Andernfalls sollten entsprechend den RKI-Empfehlungen weitere Testungen durchgeführt werden, um bei komplett negativen Befunden die Quarantänemaßnahmen nach Maßgabe des zuständigen Gesundheitsamtes aufheben zu können. Die durchgeführte RT-PCR (RIDA GENE SARS-CoV-2) weist die E-Region des Virusgenoms nach und wurde mit den aktuell verfügbaren Möglichkeiten intern validiert." + } + ], + "method": { + "text": "Coronavirus SARS-CoV-2 (PCR)" + }, + "specimen": { + "reference": "Specimen/" + } + } + }, + { + "fullUrl": "https://demis.rki.de/fhir/Specimen/", + "resource": { + "resourceType": "Specimen", + "id": "", + "meta": { + "profile": [ + "https://demis.rki.de/fhir/StructureDefinition/SpecimenSARSCoV2" + ] + }, + "status": "available", + "type": { + "text": "Tupferabstrich" + }, + "subject": { + "reference": "Patient/c1378c95-57f5-4b2a-8480-aec18443d849" + }, + "receivedTime": "2022-04-13T00:00:00+02:00", + "collection": { + "collector": { + "reference": "PractitionerRole/7c3a75e0-f463-4940-ac5f-7fbb92c8fd5f" + }, + "collectedDateTime": "2022-04-12T10:10:00Z" + } + } + } + ] + } + } + ] +} \ No newline at end of file diff --git a/sormas-e2e-tests/src/main/resources/demisJsonTemplates/labNotificationTemplateTelcom.json b/sormas-e2e-tests/src/main/resources/demisJsonTemplates/labNotificationTemplateTelcom.json index 2210a06342d..6e9a5226df1 100644 --- a/sormas-e2e-tests/src/main/resources/demisJsonTemplates/labNotificationTemplateTelcom.json +++ b/sormas-e2e-tests/src/main/resources/demisJsonTemplates/labNotificationTemplateTelcom.json @@ -28,6 +28,10 @@ "https://demis.rki.de/fhir/StructureDefinition/NotificationLaboratorySARSCoV2" ] }, + "identifier": { + "system": "https://demis.rki.de/fhir/NamingSystem/NotificationId", + "value": "" + }, "status": "preliminary", "type": { "coding": [ @@ -59,6 +63,18 @@ } ], "title": "SARS-CoV-2 Labormeldung", + "relatesTo": [ + { + "code": "appends", + "targetReference": { + "type": "Composition", + "identifier": { + "system": "https://demis.rki.de/fhir/NamingSystem/NotificationId", + "value": "" + } + } + } + ], "section": [ { "code": { @@ -88,7 +104,7 @@ }, "entry": [ { - "reference": "Observation/16c02776-e54b-44de-9801-ef07ec388247" + "reference": "Observation/" } ] } @@ -317,10 +333,10 @@ } }, { - "fullUrl": "https://demis.rki.de/fhir/Observation/16c02776-e54b-44de-9801-ef07ec388247", + "fullUrl": "https://demis.rki.de/fhir/Observation/", "resource": { "resourceType": "Observation", - "id": "16c02776-e54b-44de-9801-ef07ec388247", + "id": "", "meta": { "profile": [ "https://demis.rki.de/fhir/StructureDefinition/PathogenDetectionSARSCoV2" @@ -369,15 +385,15 @@ "text": "Coronavirus SARS-CoV-2 (PCR)" }, "specimen": { - "reference": "Specimen/d4240515-1e02-414d-ae18-5d3925ea2de6" + "reference": "Specimen/" } } }, { - "fullUrl": "https://demis.rki.de/fhir/Specimen/d4240515-1e02-414d-ae18-5d3925ea2de6", + "fullUrl": "https://demis.rki.de/fhir/Specimen/", "resource": { "resourceType": "Specimen", - "id": "d4240515-1e02-414d-ae18-5d3925ea2de6", + "id": "", "meta": { "profile": [ "https://demis.rki.de/fhir/StructureDefinition/SpecimenSARSCoV2" diff --git a/sormas-e2e-tests/src/main/resources/demisJsonTemplates/labNotificationWithLoincTemplate.json b/sormas-e2e-tests/src/main/resources/demisJsonTemplates/labNotificationWithLoincTemplate.json index 41b6f08797b..e34984580b6 100644 --- a/sormas-e2e-tests/src/main/resources/demisJsonTemplates/labNotificationWithLoincTemplate.json +++ b/sormas-e2e-tests/src/main/resources/demisJsonTemplates/labNotificationWithLoincTemplate.json @@ -28,6 +28,10 @@ "https://demis.rki.de/fhir/StructureDefinition/NotificationLaboratorySARSCoV2" ] }, + "identifier": { + "system": "https://demis.rki.de/fhir/NamingSystem/NotificationId", + "value": "" + }, "status": "preliminary", "type": { "coding": [ @@ -59,6 +63,18 @@ } ], "title": "SARS-CoV-2 Labormeldung", + "relatesTo": [ + { + "code": "appends", + "targetReference": { + "type": "Composition", + "identifier": { + "system": "https://demis.rki.de/fhir/NamingSystem/NotificationId", + "value": "" + } + } + } + ], "section": [ { "code": { @@ -88,7 +104,7 @@ }, "entry": [ { - "reference": "Observation/16c02776-e54b-44de-9801-ef07ec388247" + "reference": "Observation/" } ] } @@ -307,10 +323,10 @@ } }, { - "fullUrl": "https://demis.rki.de/fhir/Observation/16c02776-e54b-44de-9801-ef07ec388247", + "fullUrl": "https://demis.rki.de/fhir/Observation/", "resource": { "resourceType": "Observation", - "id": "16c02776-e54b-44de-9801-ef07ec388247", + "id": "", "meta": { "profile": [ "https://demis.rki.de/fhir/StructureDefinition/PathogenDetectionSARSCoV2" @@ -359,15 +375,15 @@ "text": "Coronavirus SARS-CoV-2 (PCR)" }, "specimen": { - "reference": "Specimen/d4240515-1e02-414d-ae18-5d3925ea2de6" + "reference": "Specimen/" } } }, { - "fullUrl": "https://demis.rki.de/fhir/Specimen/d4240515-1e02-414d-ae18-5d3925ea2de6", + "fullUrl": "https://demis.rki.de/fhir/Specimen/", "resource": { "resourceType": "Specimen", - "id": "d4240515-1e02-414d-ae18-5d3925ea2de6", + "id": "", "meta": { "profile": [ "https://demis.rki.de/fhir/StructureDefinition/SpecimenSARSCoV2" diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/pojo/helpers/ShortUUIDGenerator.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/pojo/helpers/ShortUUIDGenerator.java new file mode 100644 index 00000000000..93130f97288 --- /dev/null +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/pojo/helpers/ShortUUIDGenerator.java @@ -0,0 +1,32 @@ +package org.sormas.e2etests.entities.pojo.helpers; + +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.UUID; + +public class ShortUUIDGenerator { + + public static String generateShortUUID() throws NoSuchAlgorithmException { + UUID uuid = UUID.randomUUID(); + String uuidStr = uuid.toString(); + MessageDigest md = MessageDigest.getInstance("SHA-256"); + byte[] hashBytes = md.digest(uuidStr.getBytes(StandardCharsets.UTF_8)); + String hashHex = bytesToHex(hashBytes); + return hashHex.substring(0, 6).toUpperCase() + + "-" + + hashHex.substring(6, 12).toUpperCase() + + "-" + + hashHex.substring(12, 18).toUpperCase() + + "-" + + hashHex.substring(18, 26).toUpperCase(); + } + + private static String bytesToHex(byte[] bytes) { + StringBuilder sb = new StringBuilder(); + for (byte b : bytes) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } +} diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/CaseService.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/CaseService.java index 6212572c827..0e9b00ebe61 100644 --- a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/CaseService.java +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/CaseService.java @@ -18,10 +18,12 @@ package org.sormas.e2etests.entities.services; +import static org.sormas.e2etests.entities.pojo.helpers.ShortUUIDGenerator.generateShortUUID; + import com.github.javafaker.Faker; import com.google.inject.Inject; import java.time.LocalDate; -import java.util.UUID; +import lombok.SneakyThrows; import org.sormas.e2etests.entities.pojo.web.Case; import org.sormas.e2etests.enums.CommunityValues; import org.sormas.e2etests.enums.DiseasesValues; @@ -53,6 +55,7 @@ public Case buildEditGeneratedCaseForPositivePathogenTestResult() { .build(); } + @SneakyThrows public Case buildGeneratedCaseForOnePerson( String firstName, String lastName, LocalDate dateOfBirth) { return Case.builder() @@ -60,7 +63,7 @@ public Case buildGeneratedCaseForOnePerson( .lastName(lastName) .caseOrigin("IN-COUNTRY") .dateOfReport(LocalDate.now().minusDays(1)) - .externalId(UUID.randomUUID().toString()) + .externalId(generateShortUUID()) .disease(DiseasesValues.getRandomDiseaseCaption()) .responsibleRegion(RegionsValues.VoreingestellteBundeslander.getName()) .responsibleDistrict(DistrictsValues.VoreingestellterLandkreis.getName()) @@ -93,6 +96,7 @@ public Case buildGeneratedCaseForOnePersonDE( .build(); } + @SneakyThrows public Case buildGeneratedCase() { firstName = faker.name().firstName(); lastName = faker.name().lastName(); @@ -102,8 +106,8 @@ public Case buildGeneratedCase() { .lastName(lastName) .caseOrigin("IN-COUNTRY") .dateOfReport(LocalDate.now().minusDays(1)) - .externalId(UUID.randomUUID().toString()) - .epidNumber(UUID.randomUUID().toString()) + .externalId(generateShortUUID()) + .epidNumber(generateShortUUID()) .disease("COVID-19") .responsibleRegion(RegionsValues.VoreingestellteBundeslander.getName()) .responsibleDistrict(DistrictsValues.VoreingestellterLandkreis.getName()) @@ -124,6 +128,7 @@ public Case buildGeneratedCase() { .build(); } + @SneakyThrows public Case buildGeneratedCaseWithCovidVariant(String covidVariant) { firstName = faker.name().firstName(); @@ -134,8 +139,8 @@ public Case buildGeneratedCaseWithCovidVariant(String covidVariant) { .lastName(lastName) .caseOrigin("IN-COUNTRY") .dateOfReport(LocalDate.now().minusDays(1)) - .externalId(UUID.randomUUID().toString()) - .epidNumber(UUID.randomUUID().toString()) + .externalId(generateShortUUID()) + .epidNumber(generateShortUUID()) .disease("COVID-19") .diseaseVariant(covidVariant) .responsibleRegion(RegionsValues.VoreingestellteBundeslander.getName()) @@ -157,6 +162,7 @@ public Case buildGeneratedCaseWithCovidVariant(String covidVariant) { .build(); } + @SneakyThrows public Case buildGeneratedCaseWithFacility() { firstName = faker.name().firstName(); lastName = faker.name().lastName(); @@ -166,8 +172,8 @@ public Case buildGeneratedCaseWithFacility() { .lastName(lastName) .caseOrigin("IN-COUNTRY") .dateOfReport(LocalDate.now().minusDays(1)) - .externalId(UUID.randomUUID().toString()) - .epidNumber(UUID.randomUUID().toString()) + .externalId(generateShortUUID()) + .epidNumber(generateShortUUID()) .disease("COVID-19") .responsibleRegion(RegionsValues.VoreingestellteBundeslander.getName()) .responsibleDistrict(DistrictsValues.VoreingestellterLandkreis.getName()) @@ -189,6 +195,7 @@ public Case buildGeneratedCaseWithFacility() { .build(); } + @SneakyThrows public Case buildGeneratedCaseWithCreatedFacilityDE( String facilityCategory, String facilityType, String facility) { firstName = faker.name().firstName(); @@ -199,8 +206,8 @@ public Case buildGeneratedCaseWithCreatedFacilityDE( .lastName(lastName) .caseOrigin("IN-COUNTRY") .dateOfReport(LocalDate.now().minusDays(1)) - .externalId(UUID.randomUUID().toString()) - .epidNumber(UUID.randomUUID().toString()) + .externalId(generateShortUUID()) + .epidNumber(generateShortUUID()) .disease("COVID-19") .responsibleRegion(RegionsValues.VoreingestellteBundeslander.getName()) .responsibleDistrict(DistrictsValues.VoreingestellterLandkreis.getName()) @@ -223,6 +230,7 @@ public Case buildGeneratedCaseWithCreatedFacilityDE( .build(); } + @SneakyThrows public Case buildCaseWithFacilityAndDifferentPlaceOfStay() { firstName = faker.name().firstName(); lastName = faker.name().lastName(); @@ -232,7 +240,7 @@ public Case buildCaseWithFacilityAndDifferentPlaceOfStay() { .lastName(lastName) .caseOrigin("IN-COUNTRY") .dateOfReport(LocalDate.now().minusDays(1)) - .externalId(UUID.randomUUID().toString()) + .externalId(generateShortUUID()) .disease("COVID-19") .responsibleRegion("Region1") .responsibleDistrict("District11") @@ -260,7 +268,7 @@ public Case buildCaseWithDisease(String diseaseValue) { .lastName(lastName) .caseOrigin("IN-COUNTRY") .dateOfReport(LocalDate.now().minusDays(1)) - // .externalId(UUID.randomUUID().toString()) + // .externalId(generateShortUUID()) .disease(DiseasesValues.getCaptionFor(diseaseValue)) .responsibleRegion(RegionsValues.VoreingestellteBundeslander.getName()) .responsibleDistrict(DistrictsValues.VoreingestellterLandkreis.getName()) @@ -306,6 +314,7 @@ public Case buildGeneratedCaseWithPointOfEntryDE() { .build(); } + @SneakyThrows public Case buildGeneratedCaseWithDifferentPlaceOfStay() { firstName = faker.name().firstName(); lastName = faker.name().lastName(); @@ -315,7 +324,7 @@ public Case buildGeneratedCaseWithDifferentPlaceOfStay() { .lastName(lastName) .caseOrigin("IN-COUNTRY") .dateOfReport(LocalDate.now().minusDays(1)) - .externalId(UUID.randomUUID().toString()) + .externalId(generateShortUUID()) .disease("COVID-19") .responsibleRegion(RegionsValues.VoreingestellteBundeslander.getName()) .responsibleDistrict(DistrictsValues.VoreingestellterLandkreis.getName()) @@ -338,6 +347,7 @@ public Case buildGeneratedCaseWithDifferentPlaceOfStay() { .build(); } + @SneakyThrows public Case buildCaseWithPointOfEntryAndDifferentPlaceOfStay() { firstName = faker.name().firstName(); lastName = faker.name().lastName(); @@ -347,7 +357,7 @@ public Case buildCaseWithPointOfEntryAndDifferentPlaceOfStay() { .lastName(lastName) .caseOrigin("POINT OF ENTRY") .dateOfReport(LocalDate.now().minusDays(1)) - .externalId(UUID.randomUUID().toString()) + .externalId(generateShortUUID()) .disease("COVID-19") .responsibleRegion("Berlin") .responsibleDistrict("SK Berlin Mitte") @@ -363,6 +373,7 @@ public Case buildCaseWithPointOfEntryAndDifferentPlaceOfStay() { .build(); } + @SneakyThrows public Case buildGeneratedCaseDE() { firstName = faker.name().firstName(); lastName = faker.name().lastName(); @@ -372,7 +383,7 @@ public Case buildGeneratedCaseDE() { .lastName(lastName) .caseOrigin("IM LAND") .dateOfReport(LocalDate.now().minusDays(1)) - .externalId(UUID.randomUUID().toString()) + .externalId(generateShortUUID()) .disease("COVID-19") .diseaseVariant("B.1.617.1") .responsibleRegion(RegionsValues.VoreingestellteBundeslander.getName()) @@ -395,6 +406,7 @@ public Case buildGeneratedCaseDE() { .build(); } + @SneakyThrows public Case buildGeneratedCaseDEDaysAgo(int daysAgo) { firstName = faker.name().firstName(); lastName = faker.name().lastName(); @@ -404,7 +416,7 @@ public Case buildGeneratedCaseDEDaysAgo(int daysAgo) { .lastName(lastName) .caseOrigin("IM LAND") .dateOfReport(LocalDate.now().minusDays(daysAgo)) - .externalId(UUID.randomUUID().toString()) + .externalId(generateShortUUID()) .disease("COVID-19") .diseaseVariant("B.1.617.1") .responsibleRegion(RegionsValues.VoreingestellteBundeslander.getName()) @@ -427,6 +439,7 @@ public Case buildGeneratedCaseDEDaysAgo(int daysAgo) { .build(); } + @SneakyThrows public Case buildGeneratedCaseDEForOnePerson( String firstName, String lastName, @@ -438,7 +451,7 @@ public Case buildGeneratedCaseDEForOnePerson( .lastName(lastName) .caseOrigin("IM LAND") .dateOfReport(reportDate) - .externalId(UUID.randomUUID().toString()) + .externalId(generateShortUUID()) .disease("COVID-19") .diseaseVariant("B.1.617.1") .responsibleRegion(RegionsValues.VoreingestellteBundeslander.getName()) @@ -457,6 +470,7 @@ public Case buildGeneratedCaseDEForOnePerson( .build(); } + @SneakyThrows public Case buildEditGeneratedCase() { return Case.builder() .dateOfReport(LocalDate.now().minusDays(3)) @@ -466,8 +480,8 @@ public Case buildEditGeneratedCase() { .laboratoryDiagnosticConfirmation("Yes") .investigationStatus("INVESTIGATION DONE") .caseOrigin("IN-COUNTRY") - .externalId(UUID.randomUUID().toString()) - .externalToken(UUID.randomUUID().toString()) + .externalId(generateShortUUID()) + .externalToken(generateShortUUID()) .disease("COVID-19") .reinfection("NO") .outcomeOfCase("RECOVERED") diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/ContactService.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/ContactService.java index 9be656deb9a..39f6d0b1a49 100644 --- a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/ContactService.java +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/ContactService.java @@ -18,11 +18,13 @@ package org.sormas.e2etests.entities.services; +import static org.sormas.e2etests.entities.pojo.helpers.ShortUUIDGenerator.generateShortUUID; + import com.github.javafaker.Faker; import com.google.inject.Inject; import java.time.LocalDate; import java.util.Random; -import java.util.UUID; +import lombok.SneakyThrows; import org.sormas.e2etests.entities.pojo.web.Contact; import org.sormas.e2etests.entities.pojo.web.epidemiologicalData.Exposure; import org.sormas.e2etests.enums.CommunityValues; @@ -50,6 +52,7 @@ public ContactService(Faker faker) { this.faker = faker; } + @SneakyThrows public Contact buildGeneratedContactDE() { firstName = faker.name().firstName(); lastName = faker.name().lastName(); @@ -69,7 +72,7 @@ public Contact buildGeneratedContactDE() { .returningTraveler("NEIN") .reportDate(LocalDate.now().minusDays(random.nextInt(5))) .diseaseOfSourceCase("COVID-19") - .caseIdInExternalSystem(UUID.randomUUID().toString()) + .caseIdInExternalSystem(generateShortUUID()) .dateOfFirstContact(LocalDate.now().minusDays(9)) .dateOfLastContact(LocalDate.now().minusDays(6)) .caseOrEventInformation("Automated test dummy description") @@ -85,6 +88,7 @@ public Contact buildGeneratedContactDE() { .build(); } + @SneakyThrows public Contact buildGeneratedContactWithParametrizedPersonDataDE( String firstName, String lastName, LocalDate dateOfBirth, String sex) { @@ -99,7 +103,7 @@ public Contact buildGeneratedContactWithParametrizedPersonDataDE( .returningTraveler("NEIN") .reportDate(LocalDate.now().minusDays(random.nextInt(5))) .diseaseOfSourceCase("COVID-19") - .caseIdInExternalSystem(UUID.randomUUID().toString()) + .caseIdInExternalSystem(generateShortUUID()) .dateOfFirstContact(LocalDate.now().minusDays(9)) .dateOfLastContact(LocalDate.now().minusDays(6)) .caseOrEventInformation("Automated test dummy description") @@ -115,6 +119,7 @@ public Contact buildGeneratedContactWithParametrizedPersonDataDE( .build(); } + @SneakyThrows public Contact buildGeneratedContactWithParametrizedPersonData( String firstName, String lastName, LocalDate dateOfBirth) { return Contact.builder() @@ -128,7 +133,7 @@ public Contact buildGeneratedContactWithParametrizedPersonData( .returningTraveler("NO") .reportDate(LocalDate.now()) .diseaseOfSourceCase("COVID-19") - .caseIdInExternalSystem(UUID.randomUUID().toString()) + .caseIdInExternalSystem(generateShortUUID()) .dateOfFirstContact(LocalDate.now().minusDays(15)) .dateOfLastContact(LocalDate.now().minusDays(13)) .caseOrEventInformation("Automated test dummy description") @@ -145,6 +150,7 @@ public Contact buildGeneratedContactWithParametrizedPersonData( .build(); } + @SneakyThrows public Contact buildGeneratedContact() { firstName = faker.name().firstName(); lastName = faker.name().lastName(); @@ -164,7 +170,7 @@ public Contact buildGeneratedContact() { .returningTraveler("NO") .reportDate(LocalDate.now().minusDays(random.nextInt(10))) .diseaseOfSourceCase("COVID-19") - .caseIdInExternalSystem(UUID.randomUUID().toString()) + .caseIdInExternalSystem(generateShortUUID()) .dateOfFirstContact(LocalDate.now().minusDays(15)) .dateOfLastContact(LocalDate.now().minusDays(13)) .caseOrEventInformation("Automated test dummy description") @@ -181,6 +187,7 @@ public Contact buildGeneratedContact() { .build(); } + @SneakyThrows public Contact buildEditContact() { return Contact.builder() .classification("CONFIRMED CONTACT") @@ -188,15 +195,15 @@ public Contact buildEditContact() { .dateOfFirstContact(LocalDate.now().minusDays(3)) .dateOfLastContact(LocalDate.now().minusDays(1)) .diseaseOfSourceCase("Measles") - .externalId(UUID.randomUUID().toString()) - .externalToken(UUID.randomUUID().toString().substring(0, 8)) + .externalId(generateShortUUID()) + .externalToken(generateShortUUID().substring(0, 8)) .reportDate(LocalDate.now()) .reportingDistrict("District11") .responsibleRegion("Region1") .responsibleDistrict("District12") .responsibleCommunity("") .returningTraveler("YES") - .caseIdInExternalSystem(UUID.randomUUID().toString()) + .caseIdInExternalSystem(generateShortUUID()) .caseOrEventInformation("Random description for case or event") .identificationSource("Other") .identificationSourceDetails("random details") diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/ImmunizationService.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/ImmunizationService.java index c6d6cf380ef..f6e2ce6d7ed 100644 --- a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/ImmunizationService.java +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/ImmunizationService.java @@ -1,9 +1,11 @@ package org.sormas.e2etests.entities.services; +import static org.sormas.e2etests.entities.pojo.helpers.ShortUUIDGenerator.generateShortUUID; + import com.github.javafaker.Faker; import com.google.inject.Inject; import java.time.LocalDate; -import java.util.UUID; +import lombok.SneakyThrows; import org.sormas.e2etests.entities.pojo.web.Immunization; import org.sormas.e2etests.enums.*; import org.sormas.e2etests.enums.immunizations.ImmunizationManagementStatusValues; @@ -22,12 +24,13 @@ public ImmunizationService(Faker faker) { this.faker = faker; } + @SneakyThrows public Immunization buildGeneratedImmunization() { firstName = faker.name().firstName(); lastName = faker.name().lastName(); return Immunization.builder() .dateOfReport(LocalDate.now().minusDays(1)) - .externalId(UUID.randomUUID().toString()) + .externalId(generateShortUUID()) .disease(DiseasesValues.getRandomDiseaseCaption()) .responsibleRegion(RegionsValues.VoreingestellteBundeslander.getName()) .responsibleDistrict(DistrictsValues.VoreingestellterLandkreis.getName()) @@ -69,11 +72,12 @@ public Immunization buildGeneratedImmunizationWithMeansOfImmunizationFromCase( .build(); } + @SneakyThrows public Immunization buildImmunizationWithSpecificResponsibleLocation( String responsibleRegion, String responsibleDistrict) { return Immunization.builder() .dateOfReport(LocalDate.now().minusDays(1)) - .externalId(UUID.randomUUID().toString()) + .externalId(generateShortUUID()) .responsibleRegion(responsibleRegion) .responsibleDistrict(responsibleDistrict) .meansOfImmunization("Vaccination") diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/PersonService.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/PersonService.java index 67aff7a5ac1..8a2909009ae 100644 --- a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/PersonService.java +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/PersonService.java @@ -18,10 +18,12 @@ package org.sormas.e2etests.entities.services; +import static org.sormas.e2etests.entities.pojo.helpers.ShortUUIDGenerator.generateShortUUID; + import com.github.javafaker.Faker; import com.google.inject.Inject; import java.time.LocalDate; -import java.util.UUID; +import lombok.SneakyThrows; import org.sormas.e2etests.entities.pojo.web.Person; import org.sormas.e2etests.enums.CommunityValues; import org.sormas.e2etests.enums.DistrictsValues; @@ -52,6 +54,7 @@ public Person updateExistentPerson( .build(); } + @SneakyThrows public Person buildGeneratedPerson() { firstName = faker.name().firstName(); lastName = faker.name().lastName(); @@ -69,8 +72,8 @@ public Person buildGeneratedPerson() { .emailAddress(ASCIIHelper.convertASCIIToLatin(firstName + "." + lastName + emailDomain)) .phoneNumber(faker.phoneNumber().phoneNumber()) .presentConditionOfPerson("Alive") - .externalId(UUID.randomUUID().toString()) - .externalToken(UUID.randomUUID().toString()) + .externalId(generateShortUUID()) + .externalToken(generateShortUUID()) .typeOfOccupation("Farmer") .staffOfArmedForces("Unknown") .region(RegionsValues.VoreingestellteBundeslander.getName()) diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/SymptomService.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/SymptomService.java index 3f7b9686d23..37aa6fd671d 100644 --- a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/SymptomService.java +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/SymptomService.java @@ -18,13 +18,14 @@ package org.sormas.e2etests.entities.services; +import static org.sormas.e2etests.entities.pojo.helpers.ShortUUIDGenerator.generateShortUUID; import static org.sormas.e2etests.enums.YesNoUnknownOptions.NO; import static org.sormas.e2etests.enums.YesNoUnknownOptions.UNKNOWN; import static org.sormas.e2etests.enums.YesNoUnknownOptions.YES; import com.google.inject.Inject; import java.time.LocalDate; -import java.util.UUID; +import lombok.SneakyThrows; import org.sormas.e2etests.entities.pojo.web.Symptoms; public class SymptomService { @@ -32,6 +33,7 @@ public class SymptomService { @Inject public SymptomService() {} + @SneakyThrows public Symptoms buildEditGeneratedSymptoms() { return Symptoms.builder() .maximumBodyTemperatureInC("35.2") @@ -70,12 +72,13 @@ public Symptoms buildEditGeneratedSymptoms() { .confusedDisoriented(YES.toString()) .seizures(YES.toString()) .otherNonHemorrhagicSymptoms(YES.toString()) - .symptomsComments(UUID.randomUUID().toString()) + .symptomsComments(generateShortUUID()) .firstSymptom("Diarrhea") .dateOfSymptom(LocalDate.now().minusDays(2)) .build(); } + @SneakyThrows public Symptoms buildEditGeneratedSymptomsWithNoOptions() { return Symptoms.builder() .maximumBodyTemperatureInC("35.2") @@ -114,10 +117,11 @@ public Symptoms buildEditGeneratedSymptomsWithNoOptions() { .confusedDisoriented(NO.toString()) .seizures(NO.toString()) .otherComplications(NO.toString()) - .symptomsComments(UUID.randomUUID().toString()) + .symptomsComments(generateShortUUID()) .build(); } + @SneakyThrows public Symptoms buildEditGeneratedSymptomsWithUnknownOptions() { return Symptoms.builder() .maximumBodyTemperatureInC("35.2") @@ -156,7 +160,7 @@ public Symptoms buildEditGeneratedSymptomsWithUnknownOptions() { .confusedDisoriented(UNKNOWN.toString()) .seizures(UNKNOWN.toString()) .otherComplications(UNKNOWN.toString()) - .symptomsComments(UUID.randomUUID().toString()) + .symptomsComments(generateShortUUID()) .build(); } } diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/CaseApiService.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/CaseApiService.java index fb5743b781f..d2114d2bcdc 100644 --- a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/CaseApiService.java +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/CaseApiService.java @@ -18,6 +18,7 @@ package org.sormas.e2etests.entities.services.api; +import static org.sormas.e2etests.entities.pojo.helpers.ShortUUIDGenerator.generateShortUUID; import static org.sormas.e2etests.steps.BaseSteps.locale; import com.google.inject.Inject; @@ -25,7 +26,7 @@ import java.time.ZoneId; import java.util.Date; import java.util.LinkedHashMap; -import java.util.UUID; +import lombok.SneakyThrows; import org.sormas.e2etests.entities.pojo.api.*; import org.sormas.e2etests.enums.*; import org.sormas.e2etests.envconfig.manager.RunningConfiguration; @@ -44,13 +45,14 @@ public CaseApiService( this.runningConfiguration = runningConfiguration; } + @SneakyThrows public Case buildGeneratedCase(Person person) { EnvironmentManager environmentManager = new EnvironmentManager(restAssuredClient); return Case.builder() .disease(DiseasesValues.CORONAVIRUS.getDiseaseName()) .diseaseDetails("Test Disease") .pseudonymized(false) - .uuid(UUID.randomUUID().toString()) + .uuid(generateShortUUID()) .reportDate(new Date()) .reportingUser( ReportingUser.builder() @@ -101,15 +103,15 @@ public Case buildGeneratedCase(Person person) { .caseClassification("NOT_CLASSIFIED") .investigationStatus("PENDING") .outcome("NO_OUTCOME") - .epiData(EpiData.builder().uuid(UUID.randomUUID().toString()).build()) - .hospitalization(Hospitalization.builder().uuid(UUID.randomUUID().toString()).build()) + .epiData(EpiData.builder().uuid(generateShortUUID()).build()) + .hospitalization(Hospitalization.builder().uuid(generateShortUUID()).build()) .symptoms( Symptoms.builder() - .uuid(UUID.randomUUID().toString()) + .uuid(generateShortUUID()) .pseudonymized(true) .symptomatic(false) .build()) - .therapy(Therapy.builder().uuid(UUID.randomUUID().toString()).build()) + .therapy(Therapy.builder().uuid(generateShortUUID()).build()) .healthFacility( HealthFacility.builder() .uuid( @@ -118,13 +120,10 @@ public Case buildGeneratedCase(Person person) { HealthFacilityValues.StandardEinrichtung.getName())) .build()) .maternalHistory( - MaternalHistory.builder() - .uuid(UUID.randomUUID().toString()) - .pseudonymized(true) - .build()) - .portHealthInfo(PortHealthInfo.builder().uuid(UUID.randomUUID().toString()).build()) - .clinicalCourse(ClinicalCourse.builder().uuid(UUID.randomUUID().toString()).build()) - .healthConditions(HealthConditions.builder().uuid(UUID.randomUUID().toString()).build()) + MaternalHistory.builder().uuid(generateShortUUID()).pseudonymized(true).build()) + .portHealthInfo(PortHealthInfo.builder().uuid(generateShortUUID()).build()) + .clinicalCourse(ClinicalCourse.builder().uuid(generateShortUUID()).build()) + .healthConditions(HealthConditions.builder().uuid(generateShortUUID()).build()) .surveillanceOfficer( SurveillanceOfficer.builder() .uuid( @@ -167,6 +166,7 @@ public Case buildGeneratedCase(Person person) { .build(); } + @SneakyThrows public Case buildGeneratedCaseWithCreationDate(Person person, Integer days) { EnvironmentManager environmentManager = new EnvironmentManager(restAssuredClient); return Case.builder() @@ -178,7 +178,7 @@ public Case buildGeneratedCaseWithCreationDate(Person person, Integer days) { .disease(DiseasesValues.CORONAVIRUS.getDiseaseName()) .diseaseDetails("Test Disease") .pseudonymized(false) - .uuid(UUID.randomUUID().toString()) + .uuid(generateShortUUID()) .reportDate(new Date()) .reportingUser( ReportingUser.builder() @@ -227,15 +227,15 @@ public Case buildGeneratedCaseWithCreationDate(Person person, Integer days) { .caseClassification("NOT_CLASSIFIED") .investigationStatus("PENDING") .outcome("NO_OUTCOME") - .epiData(EpiData.builder().uuid(UUID.randomUUID().toString()).build()) - .hospitalization(Hospitalization.builder().uuid(UUID.randomUUID().toString()).build()) + .epiData(EpiData.builder().uuid(generateShortUUID()).build()) + .hospitalization(Hospitalization.builder().uuid(generateShortUUID()).build()) .symptoms( Symptoms.builder() - .uuid(UUID.randomUUID().toString()) + .uuid(generateShortUUID()) .pseudonymized(true) .symptomatic(false) .build()) - .therapy(Therapy.builder().uuid(UUID.randomUUID().toString()).build()) + .therapy(Therapy.builder().uuid(generateShortUUID()).build()) .healthFacility( HealthFacility.builder() .uuid( @@ -244,13 +244,10 @@ public Case buildGeneratedCaseWithCreationDate(Person person, Integer days) { HealthFacilityValues.StandardEinrichtung.getName())) .build()) .maternalHistory( - MaternalHistory.builder() - .uuid(UUID.randomUUID().toString()) - .pseudonymized(true) - .build()) - .portHealthInfo(PortHealthInfo.builder().uuid(UUID.randomUUID().toString()).build()) - .clinicalCourse(ClinicalCourse.builder().uuid(UUID.randomUUID().toString()).build()) - .healthConditions(HealthConditions.builder().uuid(UUID.randomUUID().toString()).build()) + MaternalHistory.builder().uuid(generateShortUUID()).pseudonymized(true).build()) + .portHealthInfo(PortHealthInfo.builder().uuid(generateShortUUID()).build()) + .clinicalCourse(ClinicalCourse.builder().uuid(generateShortUUID()).build()) + .healthConditions(HealthConditions.builder().uuid(generateShortUUID()).build()) .surveillanceOfficer( SurveillanceOfficer.builder() .uuid( @@ -293,6 +290,7 @@ public Case buildGeneratedCaseWithCreationDate(Person person, Integer days) { .build(); } + @SneakyThrows public Case buildGeneratedCaseWithParamRegionAndDistrictAndFacility( Person person, String region, String district, String facility) { EnvironmentManager environmentManager = new EnvironmentManager(restAssuredClient); @@ -300,7 +298,7 @@ public Case buildGeneratedCaseWithParamRegionAndDistrictAndFacility( .disease(DiseasesValues.CORONAVIRUS.getDiseaseName()) .diseaseDetails("Test Disease") .pseudonymized(false) - .uuid(UUID.randomUUID().toString()) + .uuid(generateShortUUID()) .reportDate(new Date()) .reportingUser( ReportingUser.builder() @@ -324,27 +322,24 @@ public Case buildGeneratedCaseWithParamRegionAndDistrictAndFacility( .caseClassification("NOT_CLASSIFIED") .investigationStatus("PENDING") .outcome("NO_OUTCOME") - .epiData(EpiData.builder().uuid(UUID.randomUUID().toString()).build()) - .hospitalization(Hospitalization.builder().uuid(UUID.randomUUID().toString()).build()) + .epiData(EpiData.builder().uuid(generateShortUUID()).build()) + .hospitalization(Hospitalization.builder().uuid(generateShortUUID()).build()) .symptoms( Symptoms.builder() - .uuid(UUID.randomUUID().toString()) + .uuid(generateShortUUID()) .pseudonymized(true) .symptomatic(false) .build()) - .therapy(Therapy.builder().uuid(UUID.randomUUID().toString()).build()) + .therapy(Therapy.builder().uuid(generateShortUUID()).build()) .healthFacility( HealthFacility.builder() .uuid(environmentManager.getHealthFacilityUUID(region, facility)) .build()) .maternalHistory( - MaternalHistory.builder() - .uuid(UUID.randomUUID().toString()) - .pseudonymized(true) - .build()) - .portHealthInfo(PortHealthInfo.builder().uuid(UUID.randomUUID().toString()).build()) - .clinicalCourse(ClinicalCourse.builder().uuid(UUID.randomUUID().toString()).build()) - .healthConditions(HealthConditions.builder().uuid(UUID.randomUUID().toString()).build()) + MaternalHistory.builder().uuid(generateShortUUID()).pseudonymized(true).build()) + .portHealthInfo(PortHealthInfo.builder().uuid(generateShortUUID()).build()) + .clinicalCourse(ClinicalCourse.builder().uuid(generateShortUUID()).build()) + .healthConditions(HealthConditions.builder().uuid(generateShortUUID()).build()) .surveillanceOfficer( SurveillanceOfficer.builder() .uuid( diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/ContactApiService.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/ContactApiService.java index 34bece30050..1abfbc03dff 100644 --- a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/ContactApiService.java +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/ContactApiService.java @@ -18,13 +18,14 @@ package org.sormas.e2etests.entities.services.api; +import static org.sormas.e2etests.entities.pojo.helpers.ShortUUIDGenerator.generateShortUUID; import static org.sormas.e2etests.steps.BaseSteps.locale; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.Date; -import java.util.UUID; import javax.inject.Inject; +import lombok.SneakyThrows; import org.sormas.e2etests.entities.pojo.api.Case; import org.sormas.e2etests.entities.pojo.api.Contact; import org.sormas.e2etests.entities.pojo.api.District; @@ -58,11 +59,12 @@ public ContactApiService( this.runningConfiguration = runningConfiguration; } + @SneakyThrows public Contact buildGeneratedContact(Person person) { environmentManager = new EnvironmentManager(restAssuredClient); return Contact.builder() .disease(DiseasesValues.CORONAVIRUS.getDiseaseName()) - .uuid(UUID.randomUUID().toString()) + .uuid(generateShortUUID()) .reportDateTime(new Date()) .reportingUser( ReportingUser.builder() @@ -94,12 +96,13 @@ public Contact buildGeneratedContact(Person person) { .firstName(person.getFirstName()) .lastName(person.getLastName()) .build()) - .epiData(EpiData.builder().uuid(UUID.randomUUID().toString()).build()) - .healthConditions(HealthConditions.builder().uuid(UUID.randomUUID().toString()).build()) + .epiData(EpiData.builder().uuid(generateShortUUID()).build()) + .healthConditions(HealthConditions.builder().uuid(generateShortUUID()).build()) .relationToCase("SAME_HOUSEHOLD") .build(); } + @SneakyThrows public Contact buildGeneratedContactWithCreationDate(Person person, Integer days) { environmentManager = new EnvironmentManager(restAssuredClient); return Contact.builder() @@ -109,7 +112,7 @@ public Contact buildGeneratedContactWithCreationDate(Person person, Integer days .toInstant() .toEpochMilli()) .disease(DiseasesValues.CORONAVIRUS.getDiseaseName()) - .uuid(UUID.randomUUID().toString()) + .uuid(generateShortUUID()) .reportDateTime(new Date()) .reportingUser( ReportingUser.builder() @@ -141,18 +144,19 @@ public Contact buildGeneratedContactWithCreationDate(Person person, Integer days .firstName(person.getFirstName()) .lastName(person.getLastName()) .build()) - .epiData(EpiData.builder().uuid(UUID.randomUUID().toString()).build()) - .healthConditions(HealthConditions.builder().uuid(UUID.randomUUID().toString()).build()) + .epiData(EpiData.builder().uuid(generateShortUUID()).build()) + .healthConditions(HealthConditions.builder().uuid(generateShortUUID()).build()) .relationToCase("SAME_HOUSEHOLD") .build(); } + @SneakyThrows public Contact buildGeneratedContactWithParamRegionAndDistrictLinkedToPreviousCreatedCase( Person person, Case caze, String region, String district) { environmentManager = new EnvironmentManager(restAssuredClient); return Contact.builder() .disease(DiseasesValues.CORONAVIRUS.getDiseaseName()) - .uuid(UUID.randomUUID().toString()) + .uuid(generateShortUUID()) .reportDateTime(new Date()) .reportingUser( ReportingUser.builder() @@ -172,17 +176,18 @@ public Contact buildGeneratedContactWithParamRegionAndDistrictLinkedToPreviousCr .firstName(person.getFirstName()) .lastName(person.getLastName()) .build()) - .epiData(EpiData.builder().uuid(UUID.randomUUID().toString()).build()) - .healthConditions(HealthConditions.builder().uuid(UUID.randomUUID().toString()).build()) + .epiData(EpiData.builder().uuid(generateShortUUID()).build()) + .healthConditions(HealthConditions.builder().uuid(generateShortUUID()).build()) .relationToCase("SAME_HOUSEHOLD") .caze(Case.builder().uuid(caze.getUuid()).build()) .build(); } + @SneakyThrows public Contact buildGeneratedContactWithLinkedCase(Person person, Case caze) { environmentManager = new EnvironmentManager(restAssuredClient); return Contact.builder() - .uuid(UUID.randomUUID().toString()) + .uuid(generateShortUUID()) .disease(DiseasesValues.CORONAVIRUS.getDiseaseName()) .reportDateTime(new Date()) .reportingUser( @@ -215,8 +220,8 @@ public Contact buildGeneratedContactWithLinkedCase(Person person, Case caze) { .firstName(person.getFirstName()) .lastName(person.getLastName()) .build()) - .epiData(EpiData.builder().uuid(UUID.randomUUID().toString()).build()) - .healthConditions(HealthConditions.builder().uuid(UUID.randomUUID().toString()).build()) + .epiData(EpiData.builder().uuid(generateShortUUID()).build()) + .healthConditions(HealthConditions.builder().uuid(generateShortUUID()).build()) .relationToCase("SAME_HOUSEHOLD") .caze(Case.builder().uuid(caze.getUuid()).build()) .build(); diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/EventApiService.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/EventApiService.java index 7b6729bbc26..b2909244120 100644 --- a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/EventApiService.java +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/EventApiService.java @@ -18,6 +18,7 @@ package org.sormas.e2etests.entities.services.api; +import static org.sormas.e2etests.entities.pojo.helpers.ShortUUIDGenerator.generateShortUUID; import static org.sormas.e2etests.steps.BaseSteps.locale; import com.github.javafaker.Faker; @@ -25,7 +26,7 @@ import java.time.LocalDateTime; import java.time.ZoneId; import java.util.Date; -import java.util.UUID; +import lombok.SneakyThrows; import org.sormas.e2etests.entities.pojo.api.Community; import org.sormas.e2etests.entities.pojo.api.District; import org.sormas.e2etests.entities.pojo.api.Event; @@ -61,10 +62,11 @@ public EventApiService( // this.faker = faker; // } + @SneakyThrows public Event buildGeneratedEvent() { EnvironmentManager environmentManager = new EnvironmentManager(restAssuredClient); return Event.builder() - .uuid(UUID.randomUUID().toString()) + .uuid(generateShortUUID()) .disease(DiseasesValues.CORONAVIRUS.getDiseaseName()) .diseaseVariant( DiseaseVariant.builder() @@ -91,7 +93,7 @@ public Event buildGeneratedEvent() { .eventManagementStatus(EventManagementStatusValues.ONGOING.getValue()) .eventLocation( EventLocation.builder() - .uuid(UUID.randomUUID().toString()) + .uuid(generateShortUUID()) .community( Community.builder() .uuid( @@ -114,6 +116,7 @@ public Event buildGeneratedEvent() { .build(); } + @SneakyThrows public Event buildGeneratedEventWithCreationDate(Integer days) { EnvironmentManager environmentManager = new EnvironmentManager(restAssuredClient); return Event.builder() @@ -122,7 +125,7 @@ public Event buildGeneratedEventWithCreationDate(Integer days) { .atZone(ZoneId.systemDefault()) .toInstant() .toEpochMilli()) - .uuid(UUID.randomUUID().toString()) + .uuid(generateShortUUID()) .disease(DiseasesValues.CORONAVIRUS.getDiseaseName()) .diseaseVariant( DiseaseVariant.builder() @@ -149,7 +152,7 @@ public Event buildGeneratedEventWithCreationDate(Integer days) { .eventManagementStatus(EventManagementStatusValues.ONGOING.getValue()) .eventLocation( EventLocation.builder() - .uuid(UUID.randomUUID().toString()) + .uuid(generateShortUUID()) .community( Community.builder() .uuid( diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/EventParticipantApiService.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/EventParticipantApiService.java index 64e57df70f2..ffd2ee174aa 100644 --- a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/EventParticipantApiService.java +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/EventParticipantApiService.java @@ -18,13 +18,14 @@ package org.sormas.e2etests.entities.services.api; +import static org.sormas.e2etests.entities.pojo.helpers.ShortUUIDGenerator.generateShortUUID; import static org.sormas.e2etests.steps.BaseSteps.locale; import com.github.javafaker.Faker; import com.google.inject.Inject; import java.time.LocalDateTime; import java.time.ZoneId; -import java.util.UUID; +import lombok.SneakyThrows; import org.sormas.e2etests.entities.pojo.api.Event; import org.sormas.e2etests.entities.pojo.api.EventParticipant; import org.sormas.e2etests.entities.pojo.api.Person; @@ -46,6 +47,7 @@ public EventParticipantApiService( this.runningConfiguration = runningConfiguration; } + @SneakyThrows public EventParticipant buildGeneratedEventParticipantWithCreationDate( String eventUUID, Person person, Integer days) { return EventParticipant.builder() @@ -54,7 +56,7 @@ public EventParticipant buildGeneratedEventParticipantWithCreationDate( .atZone(ZoneId.systemDefault()) .toInstant() .toEpochMilli()) - .uuid(UUID.randomUUID().toString()) + .uuid(generateShortUUID()) .reportingUser( ReportingUser.builder() .uuid( diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/ImmunizationApiService.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/ImmunizationApiService.java index 8936058df4d..2f2324942f5 100644 --- a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/ImmunizationApiService.java +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/ImmunizationApiService.java @@ -18,6 +18,7 @@ package org.sormas.e2etests.entities.services.api; +import static org.sormas.e2etests.entities.pojo.helpers.ShortUUIDGenerator.generateShortUUID; import static org.sormas.e2etests.steps.BaseSteps.locale; import com.github.javafaker.Faker; @@ -25,7 +26,7 @@ import java.time.LocalDateTime; import java.time.ZoneId; import java.util.Calendar; -import java.util.UUID; +import lombok.SneakyThrows; import org.sormas.e2etests.entities.pojo.api.Immunization; import org.sormas.e2etests.entities.pojo.api.Person; import org.sormas.e2etests.enums.CommunityValues; @@ -57,10 +58,11 @@ public ImmunizationApiService( this.runningConfiguration = runningConfiguration; } + @SneakyThrows public Immunization buildGeneratedImmunizationForPerson(Person person) { EnvironmentManager environmentManager = new EnvironmentManager(restAssuredClient); return Immunization.builder() - .uuid(UUID.randomUUID().toString()) + .uuid(generateShortUUID()) .pseudonymized(false) .person(person) .reportDate(Calendar.getInstance().getTimeInMillis()) @@ -86,6 +88,7 @@ public Immunization buildGeneratedImmunizationForPerson(Person person) { .build(); } + @SneakyThrows public Immunization buildGeneratedImmunizationForPersonWithCreationDate( Person person, Integer days) { EnvironmentManager environmentManager = new EnvironmentManager(restAssuredClient); @@ -95,7 +98,7 @@ public Immunization buildGeneratedImmunizationForPersonWithCreationDate( .atZone(ZoneId.systemDefault()) .toInstant() .toEpochMilli()) - .uuid(UUID.randomUUID().toString()) + .uuid(generateShortUUID()) .pseudonymized(false) .person(person) .reportDate(Calendar.getInstance().getTimeInMillis()) diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/PersonApiService.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/PersonApiService.java index 73e1de33d98..e9f7da5d6d0 100644 --- a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/PersonApiService.java +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/PersonApiService.java @@ -18,12 +18,14 @@ package org.sormas.e2etests.entities.services.api; +import static org.sormas.e2etests.entities.pojo.helpers.ShortUUIDGenerator.generateShortUUID; + import com.github.javafaker.Faker; import com.google.inject.Inject; import java.util.Collections; import java.util.Random; -import java.util.UUID; import java.util.concurrent.ThreadLocalRandom; +import lombok.SneakyThrows; import org.sormas.e2etests.entities.pojo.api.Person; import org.sormas.e2etests.entities.pojo.api.chunks.Address; import org.sormas.e2etests.entities.pojo.api.chunks.Country; @@ -52,9 +54,10 @@ public PersonApiService(Faker faker, RestAssuredClient restAssuredClient) { this.faker = faker; } + @SneakyThrows public Person buildGeneratedPerson() { EnvironmentManager environmentManager = new EnvironmentManager(restAssuredClient); - String personUUID = UUID.randomUUID().toString(); + String personUUID = generateShortUUID(); firstName = faker.name().firstName(); lastName = faker.name().lastName(); contactFirstName = faker.name().firstName(); @@ -97,7 +100,7 @@ public Person buildGeneratedPerson() { PersonContactDetails personContactDetails = PersonContactDetails.builder() - .uuid(UUID.randomUUID().toString()) + .uuid(generateShortUUID()) .person(Person.builder().uuid(personUUID).build()) .primaryContact(true) .thirdParty(false) @@ -121,9 +124,10 @@ public Person buildGeneratedPerson() { .build(); } + @SneakyThrows public Person buildGeneratedPersonParamRegionAndDistrict(String region, String district) { EnvironmentManager environmentManager = new EnvironmentManager(restAssuredClient); - String personUUID = UUID.randomUUID().toString(); + String personUUID = generateShortUUID(); firstName = faker.name().firstName(); lastName = faker.name().lastName(); contactFirstName = faker.name().firstName(); @@ -159,7 +163,7 @@ public Person buildGeneratedPersonParamRegionAndDistrict(String region, String d PersonContactDetails personContactDetails = PersonContactDetails.builder() - .uuid(UUID.randomUUID().toString()) + .uuid(generateShortUUID()) .person(Person.builder().uuid(personUUID).build()) .primaryContact(true) .thirdParty(false) diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/SampleApiService.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/SampleApiService.java index 5ef634de2e9..10293dfcc9a 100644 --- a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/SampleApiService.java +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/SampleApiService.java @@ -18,11 +18,12 @@ package org.sormas.e2etests.entities.services.api; +import static org.sormas.e2etests.entities.pojo.helpers.ShortUUIDGenerator.generateShortUUID; import static org.sormas.e2etests.steps.BaseSteps.locale; import com.google.inject.Inject; import java.util.Date; -import java.util.UUID; +import lombok.SneakyThrows; import org.sormas.e2etests.entities.pojo.api.AssociatedCase; import org.sormas.e2etests.entities.pojo.api.Case; import org.sormas.e2etests.entities.pojo.api.Lab; @@ -47,10 +48,11 @@ public SampleApiService( this.runningConfiguration = runningConfiguration; } + @SneakyThrows public Sample buildGeneratedSample(Case caze) { EnvironmentManager environmentManager = new EnvironmentManager(restAssuredClient); return Sample.builder() - .uuid(UUID.randomUUID().toString()) + .uuid(generateShortUUID()) .reportingUser( ReportingUser.builder() .uuid( diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/TaskApiService.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/TaskApiService.java index 3b6bfc4eedc..f6116dc7e54 100644 --- a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/TaskApiService.java +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/TaskApiService.java @@ -18,10 +18,12 @@ package org.sormas.e2etests.entities.services.api; +import static org.sormas.e2etests.entities.pojo.helpers.ShortUUIDGenerator.generateShortUUID; + import com.github.javafaker.Faker; import com.google.inject.Inject; import java.util.Date; -import java.util.UUID; +import lombok.SneakyThrows; import org.sormas.e2etests.entities.pojo.api.AssigneeUser; import org.sormas.e2etests.entities.pojo.api.Task; import org.sormas.e2etests.helpers.RestAssuredClient; @@ -38,10 +40,11 @@ public TaskApiService(Faker faker, RestAssuredClient restAssuredClient) { this.faker = faker; } + @SneakyThrows public Task buildGeneratedTask() { EnvironmentManager environmentManager = new EnvironmentManager(restAssuredClient); return Task.builder() - .uuid(UUID.randomUUID().toString()) + .uuid(generateShortUUID()) .taskContext("CONTACT") .taskType("WEEKLY_REPORT_GENERATION") .priority("NORMAL") diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/TravelEntryApiService.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/TravelEntryApiService.java index b1027881376..3de07c44ce2 100644 --- a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/TravelEntryApiService.java +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/TravelEntryApiService.java @@ -18,12 +18,13 @@ package org.sormas.e2etests.entities.services.api; +import static org.sormas.e2etests.entities.pojo.helpers.ShortUUIDGenerator.generateShortUUID; import static org.sormas.e2etests.steps.BaseSteps.locale; import com.google.inject.Inject; import java.time.LocalDateTime; import java.time.ZoneId; -import java.util.UUID; +import lombok.SneakyThrows; import org.sormas.e2etests.entities.pojo.api.District; import org.sormas.e2etests.entities.pojo.api.Person; import org.sormas.e2etests.entities.pojo.api.PointOfEntry; @@ -51,6 +52,7 @@ public TravelEntryApiService( this.runningConfiguration = runningConfiguration; } + @SneakyThrows public TravelEntry buildGeneratedTravelEntryWithCreationDate( String personUUID, String personFirstName, String personLastName, Integer days) { environmentManager = new EnvironmentManager(restAssuredClient); @@ -60,7 +62,7 @@ public TravelEntry buildGeneratedTravelEntryWithCreationDate( .atZone(ZoneId.systemDefault()) .toInstant() .toEpochMilli()) - .uuid(UUID.randomUUID().toString()) + .uuid(generateShortUUID()) .person( Person.builder() .uuid(personUUID) diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/demis/DemisApiService.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/demis/DemisApiService.java index 8f437cf3d2d..d77803f83ad 100644 --- a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/demis/DemisApiService.java +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/entities/services/api/demis/DemisApiService.java @@ -22,6 +22,7 @@ import java.net.SocketTimeoutException; import java.nio.file.Files; import java.nio.file.Paths; +import java.util.UUID; import javax.inject.Inject; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @@ -134,6 +135,9 @@ public String prepareLabNotificationFile(String patientFirstName, String patient json = json.replace("\"\"", "\"" + demisData.getPostalCode() + "\""); json = json.replace("\"\"", "\"" + patientLastName + "\""); json = json.replace("\"\"", "\"" + patientFirstName + "\""); + json = json.replace("", UUID.randomUUID().toString()); + json = json.replace("", UUID.randomUUID().toString()); + json = json.replace("", UUID.randomUUID().toString()); return json; } @@ -146,6 +150,9 @@ public String prepareLabNotificationFileWithLoinc( json = json.replace("\"\"", "\"" + patientLastName + "\""); json = json.replace("\"\"", "\"" + patientFirstName + "\""); json = json.replace("\"\"", "\"" + loincCode + "\""); + json = json.replace("", UUID.randomUUID().toString()); + json = json.replace("", UUID.randomUUID().toString()); + json = json.replace("", UUID.randomUUID().toString()); return json; } @@ -157,6 +164,28 @@ public String prepareLabNotificationFileWithTelcom( json = json.replace("\"\"", "\"" + demisData.getPostalCode() + "\""); json = json.replace("\"\"", "\"" + patientLastName + "\""); json = json.replace("\"\"", "\"" + patientFirstName + "\""); + json = json.replace("", UUID.randomUUID().toString()); + json = json.replace("", UUID.randomUUID().toString()); + json = json.replace("", UUID.randomUUID().toString()); + return json; + } + + public String prepareLabNotificationFileWithOtherFacility( + String patientFirstName, + String patientLastName, + String otherFacilityId, + String otherFacilityName) { + DemisData demisData = runningConfiguration.getDemisData(locale); + String file = "src/main/resources/demisJsonTemplates/labNotificationTemplateOtherFacility.json"; + String json = readFileAsString(file); + json = json.replace("\"\"", "\"" + demisData.getPostalCode() + "\""); + json = json.replace("\"\"", "\"" + patientLastName + "\""); + json = json.replace("\"\"", "\"" + patientFirstName + "\""); + json = json.replace("\"\"", "\"" + otherFacilityId + "\""); + json = json.replace("\"\"", "\"" + otherFacilityName + "\""); + json = json.replace("", UUID.randomUUID().toString()); + json = json.replace("", UUID.randomUUID().toString()); + json = json.replace("", UUID.randomUUID().toString()); return json; } diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/api/commonSteps/ResponseChecksSteps.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/api/commonSteps/ResponseChecksSteps.java index 8c3a7805d7e..2da7e1e84e9 100644 --- a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/api/commonSteps/ResponseChecksSteps.java +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/api/commonSteps/ResponseChecksSteps.java @@ -20,6 +20,7 @@ import cucumber.api.java8.En; import javax.inject.Inject; import org.sormas.e2etests.helpers.RestAssuredClient; +import org.sormas.e2etests.helpers.parsers.HTMLParser; import org.sormas.e2etests.state.ApiState; import org.testng.Assert; @@ -28,43 +29,6 @@ public class ResponseChecksSteps implements En { @Inject public ResponseChecksSteps(ApiState apiState, RestAssuredClient restAssuredClient) { - Then( - "API: I check that POST call body is {string}", - (String expectedBody) -> { - String responseBody = apiState.getResponse().getBody().asString(); - if (responseBody.isEmpty()) { - Assert.fail("Response body call is empty!"); - } - if (responseBody.contains("TRANSACTIONROLLEDBACKEXCEPTION")) { - Assert.fail( - "API call failed due to wrong data used in sent json! [TRANSACTIONROLLEDBACKEXCEPTION]"); - } - String regexUpdatedResponseBody = responseBody.replaceAll("[^a-zA-Z0-9]", ""); - if (expectedBody.equals("OK")) { - Assert.assertEquals( - regexUpdatedResponseBody, "statusCode200", "Request response body is not correct"); - } else { - Assert.assertEquals( - regexUpdatedResponseBody, expectedBody, "Request response body is not correct"); - } - }); - - Then( - "API: I check that GET call body is {string}", - (String expectedBody) -> { - String responseBody = apiState.getResponse().getBody().asString(); - if (responseBody.isEmpty()) { - Assert.fail("Response body call is empty!"); - } - if (responseBody.contains("TRANSACTIONROLLEDBACKEXCEPTION")) { - Assert.fail( - "API call failed due to wrong data used in sent json! [TRANSACTIONROLLEDBACKEXCEPTION]"); - } - String regexUpdatedResponseBody = responseBody.replaceAll("[^a-zA-Z0-9]", ""); - Assert.assertEquals( - regexUpdatedResponseBody, expectedBody, "Request response body is not correct"); - }); - Then( "API: I check that POST call body for bulk request is {string}", (String expectedBody) -> { @@ -92,8 +56,45 @@ public ResponseChecksSteps(ApiState apiState, RestAssuredClient restAssuredClien "API: I check that POST call status code is {int}", (Integer expectedStatus) -> { int responseStatusCode = apiState.getResponse().getStatusCode(); - Assert.assertEquals( - responseStatusCode, expectedStatus.intValue(), "Request status code is not correct"); + String responseBody = apiState.getResponse().getBody().asString(); + + if (responseStatusCode == expectedStatus) { + + if (responseBody.contains("html")) { + responseBody = String.format("[{\"statusCode\":%s}]", responseStatusCode); + } + + String regexUpdatedResponseBody = responseBody.replaceAll("[^a-zA-Z0-9]", ""); + Assert.assertEquals( + regexUpdatedResponseBody, + String.format("statusCode%s", expectedStatus), + "Request response body is not correct"); + } else { + String errorMessage = HTMLParser.getTextFromHtml(responseBody, "body > h1"); + String developmentErrorCause = ""; + switch (responseStatusCode) { + case 400: + developmentErrorCause = "Validation failed, invalid request"; + break; + case 401: + developmentErrorCause = "Unauthorized request"; + break; + case 403: + developmentErrorCause = "User does not have access"; + break; + case 409: + developmentErrorCause = + "Conflict - tried to update data of an entity that was updated in the mean-time"; + break; + case 422: + developmentErrorCause = "Other exceptions (will be defined by developers)"; + break; + } + Assert.fail( + String.format( + "Request failed with status code [%s] and message [%s] which relates to [%s]", + responseStatusCode, errorMessage, developmentErrorCause)); + } }); Then( diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/api/demisSteps/DemisSteps.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/api/demisSteps/DemisSteps.java index 7b581c18a86..e1f0204a8ba 100644 --- a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/api/demisSteps/DemisSteps.java +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/api/demisSteps/DemisSteps.java @@ -34,6 +34,8 @@ import static org.sormas.e2etests.pages.application.messages.MessagesDirectoryPage.CREATE_NEW_PERSON_RADIOBUTTON_DE; import static org.sormas.e2etests.pages.application.messages.MessagesDirectoryPage.FORWARDED_QUICK_FILTER_BUTTON; import static org.sormas.e2etests.pages.application.messages.MessagesDirectoryPage.FORWARDED_QUICK_FILTER_COUNTER; +import static org.sormas.e2etests.pages.application.messages.MessagesDirectoryPage.LABORATORY_DETAILS_INPUT; +import static org.sormas.e2etests.pages.application.messages.MessagesDirectoryPage.LABORATORY_INPUT; import static org.sormas.e2etests.pages.application.messages.MessagesDirectoryPage.MESSAGES_DETAILED_COLUMN_HEADERS; import static org.sormas.e2etests.pages.application.messages.MessagesDirectoryPage.MESSAGES_DETAILED_TABLE_ROWS; import static org.sormas.e2etests.pages.application.messages.MessagesDirectoryPage.MESSAGES_TABLE_DATA; @@ -738,6 +740,40 @@ public DemisSteps( webDriverHelpers.clickOnWebElementBySelector(ACTION_CANCEL); } }); + + When( + "I create and send Laboratory Notification with other facility name {string} and facility ID {string}", + (String otherFacilityName, String otherFacilityId) -> { + patientFirstName = faker.name().firstName(); + patientLastName = faker.name().lastName(); + String json = + demisApiService.prepareLabNotificationFileWithOtherFacility( + patientFirstName, patientLastName, otherFacilityId, otherFacilityName); + + Assert.assertTrue( + demisApiService.sendLabRequest(json, loginToken), + "Failed to send laboratory request"); + }); + + Then( + "^I verify that labor is prefilled with \"([^\"]*)\" in New sample form while processing a DEMIS LabMessage$", + (String laboratoryName) -> { + softly.assertEquals( + webDriverHelpers.getValueFromWebElement(LABORATORY_INPUT), + laboratoryName, + "Laboratory field has incorrect value prefilled"); + softly.assertAll(); + }); + + Then( + "^I verify that labor description is prefilled with \"([^\"]*)\" in New sample form while processing a DEMIS LabMessage$", + (String laboratoryDetails) -> { + softly.assertEquals( + webDriverHelpers.getValueFromWebElement(LABORATORY_DETAILS_INPUT), + laboratoryDetails, + "Laboratory details field has incorrect value prefilled"); + softly.assertAll(); + }); } private List> getTableRowsData() { diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/api/performance/postEntity/CreateEntityResponseTimeSteps.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/api/performance/postEntity/CreateEntityResponseTimeSteps.java index dc029d962c6..f3b0eab3299 100644 --- a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/api/performance/postEntity/CreateEntityResponseTimeSteps.java +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/api/performance/postEntity/CreateEntityResponseTimeSteps.java @@ -250,6 +250,7 @@ private long calculateAverageTime(List list) { private void validateResponseBody(Response response) { String regexUpdatedResponseBody = response.getBody().asString().replaceAll("[^a-zA-Z0-9]", ""); - Assert.assertEquals(regexUpdatedResponseBody, "statusCode200", "Request response body is not correct"); + Assert.assertEquals( + regexUpdatedResponseBody, "statusCode200", "Request response body is not correct"); } } diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/nonBDDactions/BackupSteps.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/nonBDDactions/BackupSteps.java index 62160de81d1..d95ddf4b721 100644 --- a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/nonBDDactions/BackupSteps.java +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/nonBDDactions/BackupSteps.java @@ -1,5 +1,6 @@ package org.sormas.e2etests.steps.nonBDDactions; +import static org.sormas.e2etests.pages.application.NavBarPage.LOGOUT_BUTTON; import static org.sormas.e2etests.pages.application.users.CreateNewUserPage.LANGUAGE_COMBOBOX; import static org.sormas.e2etests.pages.application.users.CreateNewUserPage.SAVE_BUTTON; @@ -25,10 +26,15 @@ public BackupSteps(WebDriverHelpers webDriverHelpers) { public static void setAppLanguageToDefault(String envDefaultLanguage) { By referenceElement = By.xpath("//div[@id='dashboard']/span/span[2]"); webDriverHelpers.waitUntilIdentifiedElementIsVisibleAndClickable(referenceElement); + String currentUser = webDriverHelpers.getTextFromWebElement(LOGOUT_BUTTON); String collectedText = webDriverHelpers.getTextFromWebElement(referenceElement); String langCode = LanguageDetectorHelper.scanLanguage(collectedText); StringBuilder languageToSelect = new StringBuilder(); - if (envDefaultLanguage.equalsIgnoreCase("main")) { + if (envDefaultLanguage.equalsIgnoreCase("main") && currentUser.contains("Nat LanUser")) { + languageToSelect.append(EnvLangsTranslations.getValueFor(langCode).getGermanLang()); + } else if (envDefaultLanguage.equalsIgnoreCase("main")) { + languageToSelect.append(EnvLangsTranslations.getValueFor(langCode).getEnglishLang()); + } else if (envDefaultLanguage.equalsIgnoreCase("de") && currentUser.contains("Nat LanUser")) { languageToSelect.append(EnvLangsTranslations.getValueFor(langCode).getEnglishLang()); } else if (envDefaultLanguage.equalsIgnoreCase("de")) { languageToSelect.append(EnvLangsTranslations.getValueFor(langCode).getGermanLang()); diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/AboutDirectorySteps.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/AboutDirectorySteps.java index dbe2df4b9e0..fe00968b566 100644 --- a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/AboutDirectorySteps.java +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/AboutDirectorySteps.java @@ -256,6 +256,34 @@ public AboutDirectorySteps( LanguageDetectorHelper.checkLanguage( webDriverHelpers.getTextFromWebElement(SURVEILLANCE_DASHBOARD_NAME), language); }); + + Then( + "^I check that the Survnet Converter version is not an unavailable on About directory$", + () -> { + webDriverHelpers.waitUntilIdentifiedElementIsPresent(SURVNET_CONVERTER_VERSION_LABEL); + + softly.assertFalse( + webDriverHelpers + .getTextFromWebElement(SURVNET_CONVERTER_VERSION_LABEL) + .contains("SORMAS (unavailable)"), + "The Sormas Converter is unavailable"); + softly.assertAll(); + }); + + And( + "^I check that the Survnet Converter version is correctly displayed on About directory$", + () -> { + webDriverHelpers.waitUntilIdentifiedElementIsPresent(SORMAS_VERSION_LINK); + String sormasVersion = + webDriverHelpers.getTextFromWebElement(SORMAS_VERSION_LINK).substring(9, 15); + + softly.assertTrue( + webDriverHelpers + .getTextFromWebElement(SURVNET_CONVERTER_VERSION_LABEL) + .contains(sormasVersion), + "Survnet Converter has wrong version"); + softly.assertAll(); + }); } @SneakyThrows diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/aCommonComponents/SideCardsSteps.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/aCommonComponents/SideCardsSteps.java new file mode 100644 index 00000000000..c9b9c061ee0 --- /dev/null +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/aCommonComponents/SideCardsSteps.java @@ -0,0 +1,152 @@ +/* + * SORMAS® - Surveillance Outbreak Response Management & Analysis System + * Copyright © 2016-2022 Helmholtz-Zentrum für Infektionsforschung GmbH (HZI) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.sormas.e2etests.steps.web.application.aCommonComponents; + +import static org.sormas.e2etests.pages.application.aCommonComponents.SideCards.*; +import static org.sormas.e2etests.pages.application.contacts.EditContactPage.NUMBER_OF_TESTS_IN_SAMPLES; +import static org.sormas.e2etests.pages.application.messages.MessagesDirectoryPage.ONE_TEST_IN_SAMPLES_DE; + +import com.github.javafaker.Faker; +import cucumber.api.java8.En; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import javax.inject.Inject; +import lombok.SneakyThrows; +import org.sormas.e2etests.helpers.WebDriverHelpers; +import org.sormas.e2etests.steps.BaseSteps; +import org.testng.asserts.SoftAssert; + +public class SideCardsSteps implements En { + private final WebDriverHelpers webDriverHelpers; + public static Faker faker; + private final BaseSteps baseSteps; + + /** + * This class contains Contacts, Cases etc right side mini components (Tasks, Samples, Events, + * Immunizations etc) + */ + @SneakyThrows + @Inject + public SideCardsSteps( + WebDriverHelpers webDriverHelpers, SoftAssert softly, BaseSteps baseSteps, Faker faker) { + this.webDriverHelpers = webDriverHelpers; + this.faker = faker; + this.baseSteps = baseSteps; + When( + "I check if handover card contains {string} information", + (String information) -> { + softly.assertTrue( + webDriverHelpers.isElementPresent(checkTextInHandoverSideComponent(information)), + information + " text is not present in handover component"); + softly.assertAll(); + }); + + When( + "I check if sample card has {string} information", + (String information) -> { + softly.assertTrue( + webDriverHelpers.isElementPresent(checkTextInSampleSideComponent(information)), + information + " text is not present in sample component"); + softly.assertAll(); + }); + + When( + "I check if Immunization area contains {string}", + (String name) -> { + softly.assertTrue( + webDriverHelpers.isElementPresent(checkTextInImmunizationSideComponent(name)), + "Element is not present"); + softly.assertAll(); + }); + + When( + "I check if Immunization area does not contains {string}", + (String name) -> { + softly.assertFalse( + webDriverHelpers.isElementPresent(checkTextInImmunizationSideComponent(name)), + "Element is present"); + softly.assertAll(); + }); + And( + "I check if report side component in Edit Case has {string}", + (String text) -> { + softly.assertTrue( + webDriverHelpers.isElementPresent(checkTextInReportSideComponent(text))); + softly.assertAll(); + }); + And( + "I check if report side component in Edit Case has today date", + () -> { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy"); + softly.assertTrue( + webDriverHelpers.isElementPresent( + checkTextInReportSideComponent(formatter.format(LocalDate.now())))); + softly.assertAll(); + }); + Then( + "^I check that the number of added samples on the Edit case page is (\\d+)$", + (Integer numberOfSamples) -> { + Integer actualNumberOfSamples = + webDriverHelpers.getNumberOfElements(ADDED_SAMPLES_IN_SAMPLE_CARD); + softly.assertEquals( + actualNumberOfSamples, + numberOfSamples, + "Number of samples added in sample ard is different then expected!"); + softly.assertAll(); + }); + + When( + "I click on edit Sample", + () -> { + webDriverHelpers.waitUntilIdentifiedElementIsVisibleAndClickable(EDIT_SAMPLE_BUTTON); + webDriverHelpers.clickOnWebElementBySelector(EDIT_SAMPLE_BUTTON); + }); + + When( + "I check if edit sample button is unavailable", + () -> { + softly.assertFalse(webDriverHelpers.isElementPresent(EDIT_SAMPLE_BUTTON)); + softly.assertAll(); + }); + + When( + "^I validate only one sample is created with two pathogen tests", + () -> { + softly.assertEquals( + webDriverHelpers.getNumberOfElements(EDIT_SAMPLE_BUTTON), + 1, + "Number of samples is not correct"); + softly.assertEquals( + webDriverHelpers.getTextFromWebElement(NUMBER_OF_TESTS_IN_SAMPLES), + "Number of tests: 2", + "Number of tests is correct!"); + softly.assertAll(); + }); + + When( + "^I check that case created from laboratory message contains a sample with one test", + () -> { + softly.assertEquals( + webDriverHelpers.getNumberOfElements(EDIT_SAMPLE_BUTTON), + 1, + "Number of samples is not correct"); + webDriverHelpers.waitUntilIdentifiedElementIsPresent(ONE_TEST_IN_SAMPLES_DE); + }); + } +} diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/cases/CaseDirectorySteps.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/cases/CaseDirectorySteps.java index eb38ac7aa1b..cceee3df1c2 100644 --- a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/cases/CaseDirectorySteps.java +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/cases/CaseDirectorySteps.java @@ -18,11 +18,12 @@ package org.sormas.e2etests.steps.web.application.cases; +import static org.sormas.e2etests.entities.pojo.helpers.ShortUUIDGenerator.generateShortUUID; import static org.sormas.e2etests.pages.application.cases.CaseDirectoryPage.*; import static org.sormas.e2etests.pages.application.cases.CreateNewCasePage.DATE_OF_REPORT_INPUT; import static org.sormas.e2etests.pages.application.cases.CreateNewCasePage.SAVE_BUTTON; import static org.sormas.e2etests.pages.application.cases.CreateNewCasePage.UUID_EXTERNAL_ID_EXTERNAL_TOKEN_LIKE_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.ACTION_CANCEL; +import static org.sormas.e2etests.pages.application.cases.EditCasePage.ACTION_CLOSE; import static org.sormas.e2etests.pages.application.cases.EditCasePage.ACTION_CONFIRM; import static org.sormas.e2etests.pages.application.cases.EditCasePage.ARCHIVE_RELATED_CONTACTS_CHECKBOX; import static org.sormas.e2etests.pages.application.cases.EditCasePage.BACK_TO_CASES_BUTTON; @@ -56,7 +57,6 @@ import static org.sormas.e2etests.pages.application.entries.TravelEntryPage.SELECT_ANOTHER_PERSON_DE; import static org.sormas.e2etests.pages.application.tasks.TaskManagementPage.BULK_DELETE_BUTTON; import static org.sormas.e2etests.steps.BaseSteps.locale; -import static org.sormas.e2etests.steps.web.application.contacts.ContactDirectorySteps.faker; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; @@ -85,10 +85,10 @@ import java.util.List; import java.util.Locale; import java.util.Map; -import java.util.UUID; import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; import javax.inject.Inject; +import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.openqa.selenium.By; import org.sormas.e2etests.common.DataOperations; @@ -230,7 +230,7 @@ public CaseDirectorySteps( "I check that an import success notification appears in the Import Case popup", () -> { webDriverHelpers.waitUntilIdentifiedElementIsPresent(IMPORT_SUCCESS_DE); - webDriverHelpers.clickOnWebElementBySelector(ACTION_CANCEL); + webDriverHelpers.clickOnWebElementBySelector(ACTION_CLOSE); }); When( "I close Import Cases form", @@ -1264,7 +1264,7 @@ public CaseDirectorySteps( "I check if csv file for detailed case is imported successfully", () -> { webDriverHelpers.isElementVisibleWithTimeout(IMPORT_SUCCESSFUL_FACILITY_IMPORT_CSV, 10); - webDriverHelpers.clickOnWebElementBySelector(ACTION_CANCEL); + webDriverHelpers.clickOnWebElementBySelector(ACTION_CLOSE); webDriverHelpers.clickOnWebElementBySelector(CLOSE_DETAILED_EXPORT_POPUP); }); @@ -1492,6 +1492,7 @@ public Map parseCSVintoPOJODetailedCaseCSV(String fileName) { return detailedCasePojo; } + @SneakyThrows public static void writeCSVFromMapDetailedCase( Map detailedCase, String createdFileName, String disease, String pCondition) { uploadFileDirectoryAndName = userDirPath + "/uploads/" + createdFileName; @@ -1509,13 +1510,13 @@ public static void writeCSVFromMapDetailedCase( List data = new ArrayList(); firstName = faker.name().firstName(); lastName = faker.name().lastName(); - caseUUIDFromCSV = UUID.randomUUID().toString().substring(0, 26).toUpperCase(); - String personUUID = UUID.randomUUID().toString().substring(0, 26).toUpperCase(); + caseUUIDFromCSV = generateShortUUID(); + String personUUID = generateShortUUID(); + String epidNumber = generateShortUUID(); int lRandom = ThreadLocalRandom.current().nextInt(8999999, 9999999 + 1); detailedCase.computeIfPresent("id", (k, v) -> v = String.valueOf(lRandom)); detailedCase.computeIfPresent("uuid", (k, v) -> v = caseUUIDFromCSV); - detailedCase.computeIfPresent( - "epidNumber", (k, v) -> v = UUID.randomUUID().toString().substring(0, 26).toUpperCase()); + detailedCase.computeIfPresent("epidNumber", (k, v) -> v = epidNumber); detailedCase.computeIfPresent("personUuid", (k, v) -> v = personUUID); detailedCase.computeIfPresent("personFirstName", (k, v) -> v = firstName); detailedCase.computeIfPresent("personLastName", (k, v) -> v = lastName); diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/cases/CreateNewCaseSteps.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/cases/CreateNewCaseSteps.java index 366ab4922ba..9fde9adba44 100644 --- a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/cases/CreateNewCaseSteps.java +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/cases/CreateNewCaseSteps.java @@ -19,6 +19,7 @@ package org.sormas.e2etests.steps.web.application.cases; import static org.sormas.e2etests.constants.api.Endpoints.CASES_PATH; +import static org.sormas.e2etests.entities.pojo.helpers.ShortUUIDGenerator.generateShortUUID; import static org.sormas.e2etests.pages.application.cases.CaseDirectoryPage.CASE_APPLY_FILTERS_BUTTON; import static org.sormas.e2etests.pages.application.cases.CaseDirectoryPage.CASE_DIRECTORY_DETAILED_PAGE_FILTER_INPUT; import static org.sormas.e2etests.pages.application.cases.CaseDirectoryPage.CASE_PRESENT_CONDITION_COMBOBOX; @@ -142,7 +143,6 @@ import java.util.Locale; import java.util.Map; import java.util.Random; -import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; @@ -177,6 +177,7 @@ public class CreateNewCaseSteps implements En { private static String phoneNumber; private final RestAssuredClient restAssuredClient; + @SneakyThrows @Inject public CreateNewCaseSteps( WebDriverHelpers webDriverHelpers, @@ -201,8 +202,8 @@ public CreateNewCaseSteps( faker.number().numberBetween(1900, 2002), faker.number().numberBetween(1, 12), faker.number().numberBetween(1, 27)); - UUID randomUUID_first_user = UUID.randomUUID(); - UUID randomUUID_second_user = UUID.randomUUID(); + String randomUUID_first_user = generateShortUUID(); + String randomUUID_second_user = generateShortUUID(); oneCase = caseService.buildGeneratedCaseForOnePerson(firstName, lastName, dateOfBirth); oneCase = oneCase.toBuilder().disease("COVID-19").build(); @@ -249,8 +250,8 @@ public CreateNewCaseSteps( caze = caseService.buildGeneratedCaseForOnePerson(firstName, lastName, dateOfBirth); selectCaseOrigin(caze.getCaseOrigin()); // field that is no longer available - // fillExternalId(randomUUID_first_user.toString()); - fillEpidNumber(randomUUID_first_user.toString()); + // fillExternalId(randomUUID_first_user); + fillEpidNumber(randomUUID_first_user); fillDisease(caze.getDisease()); selectResponsibleRegion(caze.getResponsibleRegion()); selectResponsibleDistrict(caze.getResponsibleDistrict()); @@ -275,8 +276,8 @@ public CreateNewCaseSteps( caze = caseService.buildGeneratedCaseForOnePerson(firstName, lastName, dateOfBirth); selectCaseOrigin(caze.getCaseOrigin()); // field that is no longer available - // fillExternalId(randomUUID_second_user.toString()); - fillEpidNumber(randomUUID_second_user.toString()); + // fillExternalId(randomUUID_second_user); + fillEpidNumber(randomUUID_second_user); fillDisease(caze.getDisease()); selectResponsibleRegion(caze.getResponsibleRegion()); selectResponsibleDistrict(caze.getResponsibleDistrict()); @@ -330,6 +331,7 @@ public CreateNewCaseSteps( casesUUID.add(webDriverHelpers.getValueFromWebElement(UUID_INPUT)); }); + // TODO this method should be refactored since it has 2 logics inside When( "I select ([^\"]*) created case for person from Cases list", (String option) -> { @@ -1397,6 +1399,7 @@ public CreateNewCaseSteps( "^I choose create new case in Pick or create entry form for DE$", () -> { webDriverHelpers.clickOnWebElementBySelector(CREATE_NEW_CASE_CONFIRMATION_BUTTON_DE); + webDriverHelpers.waitUntilIdentifiedElementIsVisibleAndClickable(CONFIRM_BUTTON_POPUP); webDriverHelpers.clickOnWebElementBySelector(CONFIRM_BUTTON_POPUP); }); @@ -1491,7 +1494,7 @@ public CreateNewCaseSteps( () -> { softly.assertTrue( webDriverHelpers.isElementVisibleWithTimeout( - MERGE_DUPLICATED_CASES_WARNING_POPUP_DE, 5)); + MERGE_DUPLICATED_CASES_WARNING_POPUP_DE, 30)); softly.assertAll(); webDriverHelpers.clickOnWebElementBySelector(MERGE_DUPLICATED_CASES_WARNING_POPUP_DE); }); @@ -1508,7 +1511,7 @@ public CreateNewCaseSteps( "I check if popup with merge message in german appears", () -> { softly.assertTrue( - webDriverHelpers.isElementVisibleWithTimeout(MERGE_MESSAGE_HEADER_DE, 5), + webDriverHelpers.isElementVisibleWithTimeout(MERGE_MESSAGE_HEADER_DE, 30), "element was not visible"); softly.assertAll(); }); diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/cases/EditCaseSteps.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/cases/EditCaseSteps.java index 8b3d1585f1b..06fe62d7805 100644 --- a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/cases/EditCaseSteps.java +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/cases/EditCaseSteps.java @@ -46,201 +46,7 @@ import static org.sormas.e2etests.pages.application.cases.CaseDirectoryPage.CONTACTS_DATA_TAB; import static org.sormas.e2etests.pages.application.cases.CaseDirectoryPage.EPIDEMIOLOGICAL_DATA_TAB; import static org.sormas.e2etests.pages.application.cases.CreateNewCasePage.DATE_OF_REPORT_NO_POPUP_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.ACTION_CANCEL; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.ACTION_CONFIRM; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.ADDED_SAMPLES_IN_SAMPLE_CARD; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.ADD_A_PARTICIPANT_HEADER_DE; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.ARCHIVE_CASE_BUTTON; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.ARCHIVE_RELATED_CONTACTS_CHECKBOX; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.BACK_TO_CASES_LIST_BUTTON; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.BLOOD_ORGAN_TISSUE_DONATION_IN_THE_LAST_6_MONTHS_OPTIONS; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.BUTTONS_IN_VACCINATIONS_LOCATION; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.CANCEL_FOLLOW_UP_BUTTON; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.CASE_CLASSIFICATION_COMBOBOX; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.CASE_CLASSIFICATION_RADIOBUTTON; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.CASE_CLASSIFICATION_SPAN; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.CASE_CONFIRMATION_BASIS_COMBOBOX; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.CASE_IDENTIFICATION_SOURCE_COMBOBOX; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.CASE_ORIGIN; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.CASE_PERSON_TAB; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.CASE_SAVED_POPUP; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.CASE_TAB; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.CHANGE_DISEASE_CONFIRMATION_POPUP; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.CLINICAL_CONFIRMATION_COMBOBOX; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.CLINICAL_COURSE_TAB; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.COMMUNITY_COMBOBOX; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.COMMUNITY_COMBOBOX_BY_PLACE_OF_STAY; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.COMMUNITY_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.CONFIRM_ACTION; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.CREATE_DOCUMENT_BUTTON; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.CREATE_DOCUMENT_BUTTON_DE; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.CREATE_DOCUMENT_TEMPLATES; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.CREATE_DOCUMENT_TEMPLATES_POPUP_DE; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.CREATE_QUARANTINE_ORDER_BUTTON; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.CREATE_QUARANTINE_ORDER_BUTTON_DE; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.CURRENT_HOSPITALIZATION_POPUP; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.DATE_OFFICIAL_QUARANTINE_ORDER_WAS_SENT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.DATE_OF_FOLLOW_UP_STATUS_CHANGE; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.DATE_OF_FOLLOW_UP_STATUS_CHANGE_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.DATE_OF_OUTCOME; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.DATE_OF_OUTCOME_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.DATE_OF_THE_VERBAL_ORDER; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.DATE_RECEIVED_AT_DISTRICT_LEVEL_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.DATE_RECEIVED_AT_NATIONAL_LEVEL_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.DATE_RECEIVED_AT_REGION_LEVEL_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.DELETE_BUTTON; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.DELETE_POPUP_YES_BUTTON; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.DELETE_VACCINATION_REASON_POPUP_DE_VERSION; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.DISCARD_BUTTON_POPUP; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.DISEASE_COMBOBOX; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.DISEASE_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.DISEASE_VARIANT_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.DISTRICT_COMBOBOX; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.DISTRICT_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.EDIT_IMMUNIZATION_BUTTON; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.EDIT_SAMPLE_BUTTON; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.EDIT_TASK_BUTTON; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.EDIT_TRAVEL_ENTRY_FROM_CASE_BUTTON; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.EDIT_VACCINATION_BUTTON; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.EPIDEMIOLOGICAL_CONFIRMATION_COMBOBOX; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.EPID_NUMBER_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.ERROR_DESCRIPTION_REQUEST_PROCESSED; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.ERROR_IN_HANDOVER_HEADER_DE; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.EXPECTED_FOLLOWUP_LABEL; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.EXPECTED_FOLLOWUP_POPUP_TEXT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.EXPECTED_FOLLOWUP_VALUE; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.EXPECTED_FOLLOW_UP_UNTIL_DATE_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.EXTERNAL_ID_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.EXTERNAL_TOKEN_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.EXTRA_COMMENT_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.EXTRA_COMMENT_INPUT_SHARE_POPUP; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.FACILITY_ACTIVITY_COMBOBOX; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.FACILITY_CATEGORY_COMBOBOX; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.FACILITY_HEALTH_COMBOBOX; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.FACILITY_HEALTH_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.FACILITY_TYPE_COMBOBOX; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.FOLLOW_UP_COMMENT_FIELD; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.FOLLOW_UP_STATUS_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.FOLLOW_UP_TAB; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.FOLLOW_UP_UNTIL_DATE_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.GENERAL_COMMENT_TEXTAREA; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.GENERAL_COMMENT_TEXT_AREA; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.GENERATED_DOCUMENT_NAME; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.GENERATED_DOCUMENT_NAME_DE; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.HAND_THE_OWNERSHIP_CHECKBOX; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.HOME_BASED_QUARANTINE_POSSIBLE_OPTIONS; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.HOSPITALIZATION_TAB; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.IMMUNIZATION_CARD_IMMUNIZATION_PERIOD_LABEL; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.IMMUNIZATION_CARD_IMMUNIZATION_STATUS_LABEL; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.IMMUNIZATION_CARD_IMMUNIZATION_UUID; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.IMMUNIZATION_CARD_MANAGEMENT_STATUS_LABEL; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.IMMUNIZATION_CARD_MEANS_OF_IMMUNIZATION_LABEL; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.INFRASTRUCTURE_DATA_POPUP; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.INTERNAL_TOKEN_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.INVESTIGATED_DATE_FIELD; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.INVESTIGATION_STATUS_OPTIONS; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.LABORATORY_DIAGNOSTIC_CONFIRMATION_COMBOBOX; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.LINKED_EVENT_TITLE; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.LINKED_SHARED_ORGANIZATION_SELECTED_VALUE; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.LINK_EVENT_BUTTON; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.LINK_EVENT_BUTTON_DE; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.LOST_TO_FOLLOW_UP_BUTTON; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.NEW_IMMUNIZATION_BUTTON; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.NEW_SAMPLE_BUTTON; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.NEW_SAMPLE_BUTTON_DE; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.NEW_TASK_BUTTON; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.NEW_TRAVEL_ENTRY_BUTTON_DE; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.OFFICIAL_QUARANTINE_ORDER_SENT_CHECKBOX_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.OFFICIAL_QUARANTINE_ORDER_SENT_CHECKBOX_LABEL; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.OUTCOME_OF_CASE_OPTIONS; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.OVERWRITE_FOLLOW_UP_UNTIL_DATE_LABEL; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.PLACE_DESCRIPTION_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.PLACE_OF_STAY_CHECKBOX_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.PLACE_OF_STAY_CHECKBOX_LABEL; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.PLACE_OF_STAY_DISTRICT_COMBOBOX; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.PLACE_OF_STAY_DISTRICT_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.PLACE_OF_STAY_OPTIONS; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.PLACE_OF_STAY_REGION_COMBOBOX; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.PLACE_OF_STAY_REGION_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.PLACE_OF_STAY_SELECTED_VALUE; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.POINT_OF_ENTRY_DETAILS; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.POINT_OF_ENTRY_TEXT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.POPUPS_INPUTS; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.PREGNANCY_OPTIONS; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.PROHIBITION_TO_WORK_OPTIONS; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.QUARANTINE_CHANGE_COMMENT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.QUARANTINE_COMBOBOX; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.QUARANTINE_DATE_FROM; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.QUARANTINE_DATE_FROM_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.QUARANTINE_DATE_TO; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.QUARANTINE_DATE_TO_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.QUARANTINE_ORDERED_BY_DOCUMENT_CHECKBOX_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.QUARANTINE_ORDERED_BY_DOCUMENT_CHECKBOX_LABEL; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.QUARANTINE_ORDERED_BY_DOCUMENT_DATE; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.QUARANTINE_ORDERED_VERBALLY_CHECKBOX_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.QUARANTINE_ORDERED_VERBALLY_CHECKBOX_LABEL; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.QUARANTINE_ORDER_COMBOBOX; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.QUARANTINE_ORDER_POPUP_SAMPLE_FIELD; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.QUARANTINE_POPUP_DISCARD_BUTTON; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.QUARANTINE_POPUP_MESSAGE; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.QUARANTINE_POPUP_SAVE_BUTTON; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.QUARANTINE_TYPE_DETAILS; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.REASON_FOR_DELETION_DETAILS_TEXTAREA; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.REFERENCE_DEFINITION_TEXT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.REFER_CASE_FROM_POINT_OF_ENTRY; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.REFER_CASE_FROM_POINT_OF_ENTRY_DISTRICT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.REFER_CASE_FROM_POINT_OF_ENTRY_POPUP_DE; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.REFER_CASE_FROM_POINT_OF_ENTRY_REGION; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.REFER_CASE_FROM_POINT_OF_ENTRY_SAVE_BUTTON; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.REGION_COMBOBOX; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.REGION_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.REINFECTION_OPTIONS; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.REJECT_SHARED_CASE_BUTTON; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.REPORT_DATE_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.REPORT_GPS_ACCURACY_IN_M_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.REPORT_GPS_LATITUDE_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.REPORT_GPS_LONGITUDE_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.RESPONSIBLE_COMMUNITY_COMBOBOX; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.RESPONSIBLE_DISTRICT_COMBOBOX; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.RESPONSIBLE_REGION_COMBOBOX; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.RESPONSIBLE_SURVEILLANCE_OFFICER_COMBOBOX; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.RESPONSIBLE_USER_FOR_FOLLOW_UP_STATUS_CHANGE; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.RESPONSIBLE_USER_FOR_FOLLOW_UP_STATUS_CHANGE_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.RESUME_FOLLOW_UP_BUTTON; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.REVOKE_CASE_POPUP_HEADER; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.SAHRE_SAMPLES_CHECKBOX; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.SAVE_AND_OPEN_HOSPITALIZATION_BUTTON; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.SAVE_POPUP_CONTENT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.SEQUELAE_DETAILS; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.SEQUELAE_OPTIONS; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.SHARE_IMMUNIZATION_CHECKBOX; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.SHARE_ORGANIZATION_POPUP_COMBOBOX; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.SHARE_PENDING_WARNING_DE; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.SHARE_REPORTS_CHECKBOX; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.SHARE_SORMAS_2_SORMAS_BUTTON; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.SHARE_SORMAS_2_SORMAS_POPUP_BUTTON; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.SHOW_SAMPLE_BUTTON; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.SURVEILLANCE_OFFICER_FIELD_ABOVE_GENERAL_COMMENT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.SYMPTOMS_TAB; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.TRIMESTER_OPTIONS; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.UPLOAD_DOCUMENT_CHECKBOX; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.USER_INFORMATION; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.VACCINATION_CARD_INFO_ICON; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.VACCINATION_CARD_INFO_POPUP_TEXT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.VACCINATION_CARD_VACCINATION_DATE; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.VACCINATION_CARD_VACCINATION_NAME; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.VACCINATION_STATUS_COMBOBOX; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.VACCINATION_STATUS_FOR_THIS_DISEASE_COMBOBOX; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.VACCINATION_STATUS_INPUT; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.VACCINATION_STATUS_UPDATE_POPUP_HEADER; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.checkIfTextExists; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.checkTextInImmunizationSideComponent; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.checkTextInReportSideComponent; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.checkTextInSampleSideComponent; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.getByImmunizationUuid; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.getEditTaskButtonByNumber; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.getPreExistingConditionComboboxWithValue_DE; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.getPreExistingConditionCombobox_DE; +import static org.sormas.e2etests.pages.application.cases.EditCasePage.*; import static org.sormas.e2etests.pages.application.cases.EpidemiologicalDataCasePage.CONTACT_TO_BODY_FLUIDS_OPTONS; import static org.sormas.e2etests.pages.application.cases.EpidemiologicalDataCasePage.CONTACT_TO_CASE_COMBOBOX; import static org.sormas.e2etests.pages.application.cases.EpidemiologicalDataCasePage.CONTINENT_COMBOBOX; @@ -1424,13 +1230,6 @@ public EditCaseSteps( "I click on New Sample in German", () -> webDriverHelpers.clickOnWebElementBySelector(NEW_SAMPLE_BUTTON_DE)); - When( - "I click on edit Sample", - () -> { - webDriverHelpers.waitUntilIdentifiedElementIsVisibleAndClickable(EDIT_SAMPLE_BUTTON); - webDriverHelpers.clickOnWebElementBySelector(EDIT_SAMPLE_BUTTON); - }); - When( "I click on view Sample", () -> { @@ -2774,12 +2573,7 @@ public EditCaseSteps( webDriverHelpers.isElementVisibleWithTimeout(ERROR_DESCRIPTION_REQUEST_PROCESSED, 3)); softly.assertAll(); }); - When( - "I check if edit sample button is unavailable", - () -> { - softly.assertFalse(webDriverHelpers.isElementPresent(EDIT_SAMPLE_BUTTON)); - softly.assertAll(); - }); + When( "I check if share warning is displayed", () -> { @@ -2801,62 +2595,8 @@ public EditCaseSteps( webDriverHelpers.isElementGreyedOut(EditCasePage.UUID_INPUT); webDriverHelpers.isElementGreyedOut(EditCasePage.SAVE_BUTTON); }); - And( - "I check if report side component in Edit Case has {string}", - (String text) -> { - softly.assertTrue( - webDriverHelpers.isElementPresent(checkTextInReportSideComponent(text))); - softly.assertAll(); - }); - And( - "I check if report side component in Edit Case has today date", - () -> { - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy"); - softly.assertTrue( - webDriverHelpers.isElementPresent( - checkTextInReportSideComponent(formatter.format(LocalDate.now())))); - softly.assertAll(); - }); - Then( - "^I check that the number of added samples on the Edit case page is (\\d+)$", - (Integer numberOfSamples) -> { - Integer actualNumberOfSamples = - webDriverHelpers.getNumberOfElements(ADDED_SAMPLES_IN_SAMPLE_CARD); - softly.assertEquals( - actualNumberOfSamples, - numberOfSamples, - "Number of samples added in sample ard is different then expected!"); - softly.assertAll(); - }); When("I refresh current page", () -> webDriverHelpers.refreshCurrentPage()); - - When( - "I check if Immunization area contains {string}", - (String name) -> { - softly.assertTrue( - webDriverHelpers.isElementPresent(checkTextInImmunizationSideComponent(name)), - "Element is not present"); - softly.assertAll(); - }); - - When( - "I check if Immunization area does not contains {string}", - (String name) -> { - softly.assertFalse( - webDriverHelpers.isElementPresent(checkTextInImmunizationSideComponent(name)), - "Element is present"); - softly.assertAll(); - }); - - When( - "I check if sample card has {string} information", - (String information) -> { - softly.assertTrue( - webDriverHelpers.isElementPresent(checkTextInSampleSideComponent(information)), - "Element is present"); - softly.assertAll(); - }); } private Vaccination collectVaccinationData() { diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/contacts/ContactDirectorySteps.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/contacts/ContactDirectorySteps.java index 41316c56eef..394f0443926 100644 --- a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/contacts/ContactDirectorySteps.java +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/contacts/ContactDirectorySteps.java @@ -18,6 +18,7 @@ package org.sormas.e2etests.steps.web.application.contacts; +import static org.sormas.e2etests.entities.pojo.helpers.ShortUUIDGenerator.generateShortUUID; import static org.sormas.e2etests.pages.application.cases.CaseDirectoryPage.ACTION_OKAY; import static org.sormas.e2etests.pages.application.cases.CaseDirectoryPage.ALL_RESULTS_CHECKBOX; import static org.sormas.e2etests.pages.application.cases.CaseDirectoryPage.BULK_ACTIONS; @@ -35,7 +36,7 @@ import static org.sormas.e2etests.pages.application.cases.CaseDirectoryPage.SHARE_OPTION_BULK_ACTION_COMBOBOX; import static org.sormas.e2etests.pages.application.cases.CaseDirectoryPage.SHOW_MORE_LESS_FILTERS; import static org.sormas.e2etests.pages.application.cases.CaseDirectoryPage.getMergeDuplicatesButtonById; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.ACTION_CANCEL; +import static org.sormas.e2etests.pages.application.cases.EditCasePage.ACTION_CLOSE; import static org.sormas.e2etests.pages.application.cases.EditCasePage.CREATE_NEW_CASE_CHECKBOX; import static org.sormas.e2etests.pages.application.cases.EditCasePage.DISEASE_COMBOBOX; import static org.sormas.e2etests.pages.application.cases.EditCasePage.DISEASE_INPUT; @@ -184,10 +185,10 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.UUID; import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; import javax.inject.Inject; +import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.openqa.selenium.By; import org.sormas.e2etests.common.DataOperations; @@ -436,7 +437,7 @@ public ContactDirectorySteps( "I check that an import success notification appears in the Import Contact popup for DE", () -> { webDriverHelpers.waitUntilIdentifiedElementIsPresent(IMPORT_SUCCESS_DE); - webDriverHelpers.clickOnWebElementBySelector(ACTION_CANCEL); + webDriverHelpers.clickOnWebElementBySelector(ACTION_CLOSE); }); And( "I filter by {string} as a Person's full name on Contact Directory Page", @@ -1230,7 +1231,7 @@ public ContactDirectorySteps( "I check if csv file for detailed contact is imported successfully", () -> { webDriverHelpers.isElementVisibleWithTimeout(IMPORT_SUCCESSFUL_FACILITY_IMPORT_CSV, 10); - webDriverHelpers.clickOnWebElementBySelector(ACTION_CANCEL); + webDriverHelpers.clickOnWebElementBySelector(ACTION_CLOSE); webDriverHelpers.clickOnWebElementBySelector(CLOSE_DETAILED_EXPORT_POPUP); }); @@ -1348,6 +1349,7 @@ public Map parseCSVintoPOJODetailedContactCSV(String fileName) { return detailedContactPojo; } + @SneakyThrows public static void writeCSVFromMapDetailedContact( Map detailedContact, String createdFileName, @@ -1368,8 +1370,8 @@ public static void writeCSVFromMapDetailedContact( List data = new ArrayList(); firstName = faker.name().firstName(); lastName = faker.name().lastName(); - contactUUIDFromCSV = UUID.randomUUID().toString().substring(0, 26).toUpperCase(); - String personUUID = UUID.randomUUID().toString().substring(0, 26).toUpperCase(); + contactUUIDFromCSV = generateShortUUID(); + String personUUID = generateShortUUID(); int lRandom = ThreadLocalRandom.current().nextInt(8999999, 9999999 + 1); detailedContact.computeIfPresent("uuid", (k, v) -> v = contactUUIDFromCSV); detailedContact.computeIfPresent("personUuid", (k, v) -> v = personUUID); diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/events/EditEventSteps.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/events/EditEventSteps.java index 3180a900d4d..34f022b45f3 100644 --- a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/events/EditEventSteps.java +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/events/EditEventSteps.java @@ -23,7 +23,7 @@ import static org.sormas.e2etests.pages.application.cases.CreateNewCasePage.ACTION_CONFIRM_POPUP_BUTTON; import static org.sormas.e2etests.pages.application.cases.CreateNewCasePage.LINE_LISTING_DISCARD_BUTTON; import static org.sormas.e2etests.pages.application.cases.CreateNewCasePage.PERSON_SEARCH_LOCATOR_BUTTON; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.ACTION_CANCEL; +import static org.sormas.e2etests.pages.application.cases.EditCasePage.ACTION_CLOSE; import static org.sormas.e2etests.pages.application.cases.EditCasePage.BUTTONS_IN_VACCINATIONS_LOCATION; import static org.sormas.e2etests.pages.application.cases.EditCasePage.DELETE_BUTTON; import static org.sormas.e2etests.pages.application.cases.EditCasePage.DELETE_POPUP_YES_BUTTON; @@ -1101,7 +1101,7 @@ public EditEventSteps( "I check that an import success notification appears in the Import Event Participant popup for DE", () -> { webDriverHelpers.waitUntilIdentifiedElementIsPresent(IMPORT_SUCCESS_DE); - webDriverHelpers.clickOnWebElementBySelector(ACTION_CANCEL); + webDriverHelpers.clickOnWebElementBySelector(ACTION_CLOSE); }); When( "I click Delete button on Edit Event page", diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/facilities/ConfigurationFacilitiesSteps.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/facilities/ConfigurationFacilitiesSteps.java index 20c7bdd5f00..4cc35c11e1c 100644 --- a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/facilities/ConfigurationFacilitiesSteps.java +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/facilities/ConfigurationFacilitiesSteps.java @@ -18,6 +18,7 @@ package org.sormas.e2etests.steps.web.application.facilities; +import static org.sormas.e2etests.entities.pojo.helpers.ShortUUIDGenerator.generateShortUUID; import static org.sormas.e2etests.pages.application.configuration.ConfigurationTabsPage.CONFIGURATION_FACILITIES_TAB; import static org.sormas.e2etests.pages.application.configuration.FacilitiesTabPage.CLOSE_DETAILED_EXPORT_POPUP; import static org.sormas.e2etests.pages.application.configuration.FacilitiesTabPage.CLOSE_FACILITIES_IMPORT_BUTTON; @@ -56,7 +57,6 @@ import java.util.List; import java.util.Map; import java.util.Random; -import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; @@ -239,6 +239,7 @@ public FacilityCSV parseCSVintoPOJOFacilityTab(String fileName) { return builder; } + @SneakyThrows public static void writeCSVFromPOJOFacilityTab(FacilityCSV facilityData) { uploadFileDirectoryAndName = userDirPath + "/uploads/testFile.csv"; @@ -261,7 +262,7 @@ public static void writeCSVFromPOJOFacilityTab(FacilityCSV facilityData) { String[] rowdata = { "\"" - + UUID.randomUUID().toString().substring(0, 26).toUpperCase() + + generateShortUUID() + "\",\"" + aFacilityName + "\",\"" diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/persons/PersonDirectorySteps.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/persons/PersonDirectorySteps.java index 49b0bdb3283..8e58e023258 100644 --- a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/persons/PersonDirectorySteps.java +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/persons/PersonDirectorySteps.java @@ -18,6 +18,7 @@ package org.sormas.e2etests.steps.web.application.persons; +import static org.sormas.e2etests.entities.pojo.helpers.ShortUUIDGenerator.generateShortUUID; import static org.sormas.e2etests.pages.application.cases.CaseDirectoryPage.*; import static org.sormas.e2etests.pages.application.cases.EditCasePersonPage.CASE_OF_DEATH_COMBOBOX; import static org.sormas.e2etests.pages.application.cases.EditCasePersonPage.DATE_OF_DEATH_INPUT; @@ -35,7 +36,6 @@ import java.text.DateFormatSymbols; import java.time.LocalDate; import java.time.format.DateTimeFormatter; -import java.util.UUID; import java.util.concurrent.TimeUnit; import javax.inject.Inject; import org.openqa.selenium.By; @@ -334,7 +334,7 @@ public PersonDirectorySteps( "I click Immunization aggregation button on Person Directory Page", () -> { webDriverHelpers.clickOnWebElementBySelector(IMMUNIZATION_AGGREGATION_BUTTON); - webDriverHelpers.waitForPageLoadingSpinnerToDisappear(40); + webDriverHelpers.waitForPageLoadingSpinnerToDisappear(60); }); Then( @@ -465,7 +465,8 @@ public PersonDirectorySteps( When( "I click on first person in person directory", () -> { - webDriverHelpers.clickOnWebElementBySelector(By.cssSelector("[role='gridcell'] a")); + webDriverHelpers.waitUntilIdentifiedElementIsPresent(PERSON_FIRST_RECORD_IN_TABLE); + webDriverHelpers.clickOnWebElementBySelector(PERSON_FIRST_RECORD_IN_TABLE); webDriverHelpers.waitForPageLoadingSpinnerToDisappear(40); }); @@ -558,8 +559,7 @@ public PersonDirectorySteps( "I change {string} information data field for Person", (String searchCriteria) -> { String searchText = ""; - String personUUID = - dataOperations.getPartialUuidFromAssociatedLink(UUID.randomUUID().toString()); + String personUUID = dataOperations.getPartialUuidFromAssociatedLink(generateShortUUID()); switch (searchCriteria) { case "uuid": searchText = personUUID; diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/persons/PersonImportExportSteps.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/persons/PersonImportExportSteps.java index 4818bb32e13..d56c2d86f8d 100644 --- a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/persons/PersonImportExportSteps.java +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/persons/PersonImportExportSteps.java @@ -119,9 +119,7 @@ public PersonImportExportSteps( Path path = Paths.get(file); Files.delete(path); softly.assertEquals( - reader.getUuid().toLowerCase(), - apiState.getLastCreatedPerson().getUuid(), - "UUIDs are not equal"); + reader.getUuid(), apiState.getLastCreatedPerson().getUuid(), "UUIDs are not equal"); softly.assertEquals( reader.getFirstName(), apiState.getLastCreatedPerson().getFirstName(), @@ -174,9 +172,7 @@ public PersonImportExportSteps( Path path = Paths.get(file); Files.delete(path); softly.assertEquals( - reader.getUuid().toLowerCase(), - apiState.getLastCreatedPerson().getUuid(), - "UUIDs are not equal"); + reader.getUuid(), apiState.getLastCreatedPerson().getUuid(), "UUIDs are not equal"); softly.assertEquals( reader.getFirstName(), apiState.getLastCreatedPerson().getFirstName(), diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/samples/CreateNewSampleSteps.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/samples/CreateNewSampleSteps.java index a9005cdaa77..4d48edcfc6a 100644 --- a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/samples/CreateNewSampleSteps.java +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/samples/CreateNewSampleSteps.java @@ -19,17 +19,14 @@ package org.sormas.e2etests.steps.web.application.samples; import static org.sormas.e2etests.pages.application.cases.CreateNewCasePage.ACTION_CONFIRM_POPUP_BUTTON; -import static org.sormas.e2etests.pages.application.cases.EditCasePage.EDIT_SAMPLE_BUTTON; import static org.sormas.e2etests.pages.application.cases.EditCasePage.SAMPLES_CARD_DATE_AND_TIME_OF_RESULT; import static org.sormas.e2etests.pages.application.cases.EditCasePage.SAMPLES_CARD_DATE_OF_COLLECTED_SAMPLE; import static org.sormas.e2etests.pages.application.cases.EditCasePage.SAMPLES_CARD_LABORATORY; import static org.sormas.e2etests.pages.application.cases.EditCasePage.SAMPLES_CARD_NUMBER_OF_TESTS; import static org.sormas.e2etests.pages.application.cases.EditCasePage.SAMPLES_CARD_TEST_TYPE; -import static org.sormas.e2etests.pages.application.contacts.EditContactPage.NUMBER_OF_TESTS_IN_SAMPLES; import static org.sormas.e2etests.pages.application.events.EventDirectoryPage.EVENT_ACTIONS_COLUMN_HEADERS; import static org.sormas.e2etests.pages.application.events.EventDirectoryPage.EVENT_ACTIONS_TABLE_DATA; import static org.sormas.e2etests.pages.application.events.EventDirectoryPage.EVENT_ACTIONS_TABLE_ROW; -import static org.sormas.e2etests.pages.application.messages.MessagesDirectoryPage.ONE_TEST_IN_SAMPLES_DE; import static org.sormas.e2etests.pages.application.samples.CreateNewSamplePage.ADD_PATHOGEN_TEST; import static org.sormas.e2etests.pages.application.samples.CreateNewSamplePage.ADD_PATHOGEN_TEST_BUTTON; import static org.sormas.e2etests.pages.application.samples.CreateNewSamplePage.ANTIGEN_DETECTION_TEST_OPTION_BUTTON; @@ -359,30 +356,6 @@ public CreateNewSampleSteps( webDriverHelpers.clickOnWebElementBySelector(NEW_TEST_RESULTS_BUTTON_FOR_PATHOGEN_TESTS); }); - When( - "^I validate only one sample is created with two pathogen tests", - () -> { - softly.assertEquals( - webDriverHelpers.getNumberOfElements(EDIT_SAMPLE_BUTTON), - 1, - "Number of samples is not correct"); - softly.assertEquals( - webDriverHelpers.getTextFromWebElement(NUMBER_OF_TESTS_IN_SAMPLES), - "Number of tests: 2", - "Number of tests is correct!"); - softly.assertAll(); - }); - - When( - "^I check that case created from laboratory message contains a sample with one test", - () -> { - softly.assertEquals( - webDriverHelpers.getNumberOfElements(EDIT_SAMPLE_BUTTON), - 1, - "Number of samples is not correct"); - webDriverHelpers.waitUntilIdentifiedElementIsPresent(ONE_TEST_IN_SAMPLES_DE); - }); - When( "^I validate the existence of two pathogen tests", () -> { diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/samples/EditSampleSteps.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/samples/EditSampleSteps.java index 1b4f66e4c07..f6de5d21f8c 100644 --- a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/samples/EditSampleSteps.java +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/samples/EditSampleSteps.java @@ -256,6 +256,26 @@ public EditSampleSteps( "Date is inncorect"); softly.assertAll(); }); + + Then( + "^I check that laboratory is set to \"([^\"]*)\" on Edit Sample page$", + (String labor) -> { + softly.assertEquals( + webDriverHelpers.getValueFromWebElement(LABORATORY_INPUT), + labor, + "Laboratory is incorrect"); + softly.assertAll(); + }); + + And( + "^I check that laboratory details is set to \"([^\"]*)\" on edit Sample page$", + (String laborDetails) -> { + softly.assertEquals( + webDriverHelpers.getValueFromWebElement(LABORATORY_NAME_INPUT), + laborDetails, + "Laboratory details are incorrect"); + softly.assertAll(); + }); } private void selectPurposeOfSample(String samplePurpose, By element) { diff --git a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/users/UserManagementSteps.java b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/users/UserManagementSteps.java index 74c4aeb1ac2..f6751025609 100644 --- a/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/users/UserManagementSteps.java +++ b/sormas-e2e-tests/src/test/java/org/sormas/e2etests/steps/web/application/users/UserManagementSteps.java @@ -104,11 +104,11 @@ public UserManagementSteps( When( "^I check if sync message is correct in German$", () -> { - TimeUnit.SECONDS.sleep(25); + TimeUnit.SECONDS.sleep(45); assertHelpers.assertWithPoll( () -> Assert.assertTrue( - webDriverHelpers.isElementVisibleWithTimeout(SYNC_SUCCESS_DE, 25), + webDriverHelpers.isElementVisibleWithTimeout(SYNC_SUCCESS_DE, 15), "Sync of users failed"), 10); }); diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/api/Api.feature b/sormas-e2e-tests/src/test/resources/features/sanity/api/Api.feature index 6e7fba3ff7c..7b0b6260f3c 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/api/Api.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/api/Api.feature @@ -4,76 +4,59 @@ Feature: Check basic POSTs RestApi endpoints @env_main @precon Scenario: Create a new person Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 @env_main @precon Scenario: Create new case Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 @env_main @precon Scenario: Create a new contact Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new contact - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 @env_main @precon Scenario: Create a new contact linked to a case Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new contact linked to the previous created case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 @env_main @precon Scenario: Create a new event Given API: I create a new event - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 @env_main @precon Scenario: Create a new sample Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new sample - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 @env_main @precon Scenario: Create a new task Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new contact - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new task - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 @env_main @precon Scenario Outline: Create Person and attach immunizations Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 When API: I create new immunizations for last created person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Examples: @@ -84,76 +67,59 @@ Feature: Check basic POSTs RestApi endpoints @env_de @precon Scenario: Create a new person on DE market Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 @env_de @precon Scenario: Create new case on DE market Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 @env_de @precon Scenario: Create a new contact on DE market Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new contact - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 @env_de @precon Scenario: Create a new contact linked to a case on DE market Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new contact linked to the previous created case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 @env_de @precon Scenario: Create a new event on DE market Given API: I create a new event - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 @env_de @precon Scenario: Create a new sample on DE market Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new sample - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 @env_de @precon Scenario: Create a new task on DE market Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new contact - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new task - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 @env_de @precon Scenario Outline: Create Person and attach immunizations on DE market Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 When API: I create new immunizations for last created person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Examples: @@ -164,54 +130,42 @@ Feature: Check basic POSTs RestApi endpoints @env_de @oldfake Scenario: Create new case with creation date 10 years ago Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case with creation date 3653 days ago - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 @env_de @oldfake Scenario: Create a new contact with creation date 5 years ago Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new contact with creation date 1827 days ago - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 @env_de @oldfake Scenario: Create a new event with creation date 5 years ago Given API: I create a new event with creation date 1827 days ago - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 @env_main @oldfake Scenario: Create Person and attach immunizations with creation date 10 years ago Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 When API: I create a new immunizations for last created person with creation date 3653 days ago - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 @env_de @oldfake Scenario: Create Event participant with creation date 5 years ago Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new event - And API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new event participant with creation date 1827 days ago - And API: I check that POST call body is "OK" And API: I check that POST call status code is 200 @env_de @oldfake Scenario: Create Travel entry with creation date 14 days ago Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new travel entry with creation date 14 days ago - And API: I check that POST call body is "OK" And API: I check that POST call status code is 200 diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/About.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/About.feature index 5d415262ef9..fe199a5b2f5 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/About.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/About.feature @@ -29,7 +29,7 @@ Feature: About Directory end to end tests Then I click on Case Classification Rules hyperlink and download HTML file in About directory Then I delete Case Classification Html downloaded file from About Directory - @env_de @#9768 @ExcludedFromRelease + @env_de @#9768 Scenario: Check Data Protection Dictionary existence and download Given I log in as a Admin User And I click on the About button from navbar diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/Case.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/Case.feature index fdcef67aef4..52da1c33475 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/Case.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/Case.feature @@ -148,10 +148,8 @@ Feature: Case end to end tests @env_main Scenario: Delete created case When API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User And I open the last created Case via API @@ -162,10 +160,8 @@ Feature: Case end to end tests @tmsLink=SORDEV-5530 @env_main Scenario: Edit all fields from Case Contacts tab Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User When I open the Case Contacts tab of the created case via api @@ -177,10 +173,8 @@ Feature: Case end to end tests @tmsLink=SORQA-100 @env_main Scenario: Edit all fields from Symptoms tab Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User When I am accessing the Symptoms tab using of created case via api @@ -201,10 +195,8 @@ Feature: Case end to end tests @tmsLink=SORDEV-5527 @env_main Scenario: Fill the therapy tab When API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a Admin User And I open the last created Case via API @@ -263,10 +255,8 @@ Feature: Case end to end tests @tmsLink=SORDEV-5529 @env_main Scenario: Fill the clinical course tab When API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a Admin User And I open the last created Case via API @@ -289,10 +279,8 @@ Feature: Case end to end tests @tmsLink=SORDEV-8412 @env_main Scenario: Change of Isolation/Quarantine should be documented When API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a Admin User And I open the last created Case via API @@ -317,10 +305,8 @@ Feature: Case end to end tests Then I click on save case button And I check if Quarantine change comment field was saved correctly When API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new contact - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then I open the last created contact via API Then I set place for Quarantine as Home @@ -359,10 +345,8 @@ Feature: Case end to end tests @tmsLink=SORDEV-7452 @env_main Scenario: Bulk mode for linking/adding cases to new Event When API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 When API: I create 2 new cases - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a Admin User And I click on the Cases button from navbar @@ -386,13 +370,10 @@ Feature: Case end to end tests @tmsLink=SORDEV-7452 @env_main Scenario: Bulk mode for linking/adding case to existing Event Given API: I create a new event - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 When API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 When API: I create 2 new cases - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a Admin User And I click on the Cases button from navbar @@ -569,10 +550,8 @@ Feature: Case end to end tests @tmsLink=SORDEV-6612 @env_main @ignore Scenario: Manually triggered calculation of case classification When API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User And I open the last created Case via API @@ -731,10 +710,8 @@ Feature: Case end to end tests @tmsLink=SORDEV-5479 @env_main Scenario: Test for exporting and importing case contact When API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a Admin User And I open the last created Case via API @@ -812,10 +789,8 @@ Feature: Case end to end tests @tmsLink=SORDEV-5526 @env_main Scenario: Create a contact with source case Given API: I create a new person - And API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And API: I create a new case - And API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And I log in as a National User And I open the last created Case via API @@ -837,10 +812,8 @@ Feature: Case end to end tests @tmsLink=SORDEV-9124 @env_main Scenario: Document Templates create quarantine order When API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a Admin User And I open the last created Case via API @@ -856,10 +829,8 @@ Feature: Case end to end tests @tmsLink=SORDEV-9124 @env_main Scenario: Document Templates create quarantine order for Case bulk When API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a Admin User And I click on the Cases button from navbar @@ -894,13 +865,10 @@ Feature: Case end to end tests @tmsLink=SORDEV-9477 @env_main Scenario: Add a person search option on creation forms Given API: I create a new event - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new person - And API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And I log in as a National User And I click on the Cases button from navbar @@ -960,10 +928,8 @@ Feature: Case end to end tests @tmsLink=SORDEV-10265 @env_main Scenario: Manual archiving for case contacts Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a Admin User When I open the Case Contacts tab of the created case via api @@ -982,7 +948,6 @@ Feature: Case end to end tests @tmsLink=SORDEV-10265 @env_main Scenario: Manual archiving for bulk case contacts When API: I create 2 new cases - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a Admin User When I open the Case Contacts tab of the first created case via api @@ -1014,10 +979,8 @@ Feature: Case end to end tests @tmsLink=SORDEV-9786 @env_main Scenario: Test The "urine p.m." enum value should be hidden when Covid19 is selected as disease When API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a Admin User And I open the last created Case via API @@ -1056,10 +1019,8 @@ Feature: Case end to end tests @tmsLink=SORDEV-7460 @env_main Scenario: Test Extend the exposure and event startDate and endDate to include a startTime and endTime When API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a Admin User And I open the last created Case via API @@ -1200,10 +1161,8 @@ Feature: Case end to end tests @tmsLink=SORDEV-9496 @env_de Scenario: Test Handle person related fields and search button for travel entry forms Given API: I create a new person - And API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And API: I create a new case - And API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User When I open the last created Case via API @@ -1283,10 +1242,8 @@ Feature: Case end to end tests @env_main @#8556 Scenario: Add two positive Pathogen Test Result of different diseases to a Sample of a Case Given API: I create a new person - And API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User Then I navigate to the last created case via the url @@ -1306,10 +1263,8 @@ Feature: Case end to end tests @env_main @#8565 Scenario: Check an archived case if its read only Given API: I create a new person - And API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then I log in as a Admin User Then I open last edited case by API via URL navigation @@ -1341,10 +1296,8 @@ Feature: Case end to end tests @tmsLink=SORDEV-6614 @env_de Scenario: Provide a search alternative aside from the duplicate recognizing Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new contact - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User And I click on the Cases button from navbar @@ -1453,10 +1406,8 @@ Feature: Case end to end tests @tmsLink=SORDEV-10241 @env_de Scenario: Hide Reception dates of paper form Given API: I create a new person - And API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User Then I navigate to the last created case via the url @@ -1556,10 +1507,8 @@ Feature: Case end to end tests @env_main @tmsLink=SORDEV-5104 Scenario: Check if external token is visible on Edit Case Page Given API: I create a new person - And API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User Then I navigate to the last created case via the url @@ -1568,10 +1517,8 @@ Feature: Case end to end tests @env_de @tmsLink=SORDEV-5104 Scenario: Check if external token is visible on Edit Case Page for DE Given API: I create a new person - And API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User Then I navigate to the last created case via the url @@ -1602,10 +1549,8 @@ Feature: Case end to end tests @tmsLink=SORDEV-6185 @env_de Scenario: Test Add information to followup warning message for Cases Given API: I create a new person - And API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User Then I navigate to the last created case via the url @@ -1646,10 +1591,8 @@ Feature: Case end to end tests @tmsLink=SORDEV-5565 @env_de Scenario: Document Templates create quarantine order for Case bulk DE When API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a Admin User And I click on the Cases button from navbar @@ -1737,10 +1680,8 @@ Feature: Case end to end tests @#8558 @env_main Scenario: Verify that Page can not be saved if a future date is set for Date of symptom onset Given API: I create a new person - And API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User Then I navigate to the last created case via the url @@ -1751,27 +1692,6 @@ Feature: Case end to end tests When I click on save case button in Symptoms tab Then I Verify popup message from Symptoms Tab Contains "Date of symptom onset cannot be in the future" - @tmsLink=SORQA-478 @env_s2s_1 - Scenario: Test send case to another instance using S2S connection - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - And API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - Then I navigate to the last created case via the url - And I collect uuid of the case - Then I click on share case button - And I select organization to share with "s2s_2" - And I fill comment in share popup with "shared with automated test" - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment - Given I log in as a Admin User - And I click on the Shares button from navbar - Then I click on the The Eye Icon located in the Shares Page - And I check if received case id is equal with sent - @tmsLink=SORDEV-10230 @env_main Scenario: Test Archived entities should always be read-only Then I log in as a Admin User @@ -1795,10 +1715,8 @@ Feature: Case end to end tests @tmsLink=SORDEV-12441 @env_de Scenario: Hide citizenship and country of birth on Edit Case Person page Given API: I create a new person - And API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User Then I navigate to the last created case via the url @@ -1806,14 +1724,11 @@ Feature: Case end to end tests Then I check that Citizenship is not visible in Contact Information section for DE version And I check that Country of birth is not visible in Contact Information section for DE version - @tmsLink=SORDEV-9789 @env_de Scenario: Test Move health conditions from clinical course to the case Given API: I create a new person - And API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User Then I navigate to the last created case via the url @@ -1855,178 +1770,11 @@ Feature: Case end to end tests And I click on Bulk Actions combobox on Case Directory Page Then I check that Share option is not visible in Bulk Actions dropdown in Case Directory for DE specific - @tmsLink=SORDEV-12087 @env_s2s_1 - Scenario: Delete a case in source system with handing ownership - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - And API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - Then I navigate to the last created case via the url - And I collect uuid of the case - Then I click on share case button - And I click to hand over the ownership of the case in Share popup - And I select organization to share with "s2s_2" - And I fill comment in share popup with "shared with automated test" - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment - Given I log in as a Admin User - And I click on the Shares button from navbar - Then I accept first case in Shares Page - Then I navigate to "s2s_1" environment - And I click on the Cases button from navbar - And I filter by CaseID on Case directory page - And I apply "Alle" to ownership combobox on Case Directory Page - And I apply "Alle aktiven und archivierten Fälle" to combobox on Case Directory Page - And I click APPLY BUTTON in Case Directory Page - And I click on the More button on Case directory page - And I click Enter Bulk Edit Mode on Case directory page - And I click SHOW MORE FILTERS button on Case directory page - And I click checkbox to choose all Case results - And I click on Bulk Actions combobox on Case Directory Page - Then I click on Delete button from Bulk Actions Combobox in Case Directory - And I set Reason for deletion as "Löschen auf Anforderung der betroffenen Person nach DSGVO" - And I click on Yes option in Confirm deletion popup - Then I navigate to "s2s_2" environment - And I click on the Cases button from navbar - And I apply "Alle" to ownership combobox on Case Directory Page - And I apply "Alle aktiven und archivierten Fälle" to combobox on Case Directory Page - Then I click on the APPLY FILTERS button - And I select first created case for person from Cases list - Then I check if editable fields are read only for an archived case - - @tmsLink=SORDEV-12087 @env_s2s_1 - Scenario: Delete a case in target system with handing ownership - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - And API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - Then I navigate to the last created case via the url - And I collect uuid of the case - Then I click on share case button - And I click to hand over the ownership of the case in Share popup - And I select organization to share with "s2s_2" - And I fill comment in share popup with "shared with automated test" - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment - Given I log in as a Admin User - And I click on the Shares button from navbar - Then I accept first case in Shares Page - And I click on the Cases button from navbar - And I select first created case for person from Cases list - Then I click on Delete button from case - And I set Reason for deletion as "Löschen auf Anforderung der betroffenen Person nach DSGVO" - And I click on Yes option in Confirm deletion popup - Then I navigate to "s2s_1" environment - And I click on the Cases button from navbar - And I apply "Alle" to ownership combobox on Case Directory Page - And I apply "Alle aktiven und archivierten Fälle" to combobox on Case Directory Page - Then I click on the APPLY FILTERS button - And I select first created case for person from Cases list - Then I check if editable fields are read only for an archived case - - @tmsLink=SORDEV-12087 @env_s2s_1 - Scenario: Delete a case in source system without handing ownership - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - And API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - Then I navigate to the last created case via the url - And I collect uuid of the case - Then I click on share case button - And I select organization to share with "s2s_2" - And I fill comment in share popup with "shared with automated test" - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment - And I log in as a Admin User - And I click on the Shares button from navbar - Then I accept first case in Shares Page - Then I navigate to "s2s_1" environment - Then I navigate to the last created case via the url - Then I click on Delete button from case - And I set Reason for deletion as "Löschen auf Anforderung der betroffenen Person nach DSGVO" - And I click on Yes option in Confirm deletion popup - Then I navigate to "s2s_2" environment - And I click on the Cases button from navbar - And I apply "Alle" to ownership combobox on Case Directory Page - And I apply "Alle aktiven und archivierten Fälle" to combobox on Case Directory Page - Then I click on the APPLY FILTERS button - And I select first created case for person from Cases list - Then I check if editable fields are read only for an archived case - - @tmsLink=SORDEV-12087 @env_s2s_1 - Scenario: Delete a case in target system without handing ownership - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - And API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - Then I navigate to the last created case via the url - And I collect uuid of the case - Then I click on share case button - And I select organization to share with "s2s_2" - And I fill comment in share popup with "shared with automated test" - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment - Given I log in as a Admin User - And I click on the Shares button from navbar - Then I accept first case in Shares Page - And I click on the Cases button from navbar - And I filter by CaseID on Case directory page - And I apply "Alle" to ownership combobox on Case Directory Page - And I apply "Alle aktiven und archivierten Fälle" to combobox on Case Directory Page - And I click APPLY BUTTON in Case Directory Page - And I click on the More button on Case directory page - And I click Enter Bulk Edit Mode on Case directory page - And I click SHOW MORE FILTERS button on Case directory page - And I click checkbox to choose all Case results - And I click on Bulk Actions combobox on Case Directory Page - Then I click on Delete button from Bulk Actions Combobox in Case Directory - And I set Reason for deletion as "Löschen auf Anforderung der betroffenen Person nach DSGVO" - And I click on Yes option in Confirm deletion popup - Then I navigate to "s2s_1" environment - Then I navigate to the last created case via the url - - @tmsLink=SORDEV-12087 @env_s2s_1 - Scenario: Delete a case in source system with handing ownership before acceptance - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - And API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - Then I navigate to the last created case via the url - Then I click on share case button - And I select organization to share with "s2s_2" - And I fill comment in share popup with "shared with automated test" - Then I click on share button in s2s share popup and wait for share to finish - Then I click on Delete button from case - And I set Reason for deletion as "Löschen auf Anforderung der betroffenen Person nach DSGVO" - And I click on Yes option in Confirm deletion popup - Then I navigate to "s2s_2" environment - Given I log in as a Admin User - And I click on the Shares button from navbar - And I click on the The Eye Icon located in the Shares Page - Then I check that first shared result has different id then deleted shared case - @tmsLink=SORQA-658 @env_de @oldfake Scenario: Check automatic deletion of cases created 3651 days ago Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case with creation date 3651 days ago - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then I log in as a Admin User Then I navigate to the last created case via the url @@ -2044,10 +1792,8 @@ Feature: Case end to end tests @tmsLink=SORQA-663 @env_de @oldfake @precon Scenario: Check if 'Löschung geplant für' is available in Case Edit Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then I log in as a Admin User Then I navigate to the last created case via the url @@ -2056,10 +1802,8 @@ Feature: Case end to end tests @tmsLink=SORQA-682 @env_de @oldfake Scenario: Check automatic deletion NOT of cases created 3645 days ago Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case with creation date 3645 days ago - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then I log in as a Admin User Then I navigate to the last created case via the url @@ -2077,10 +1821,8 @@ Feature: Case end to end tests @env_main @#10418 Scenario: Verify sample timestamp pattern from Quarantine Order popup Given API: I create a new person - And API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User Then I navigate to the last created case via the url @@ -2090,991 +1832,4 @@ Feature: Case end to end tests Then I navigate to the last created case via the url And I click on Create button in Document Templates box in Edit Case directory Then I select "ExampleDocumentTemplateCases.docx" Quarantine Order in Create Quarantine Order form in Edit Case directory - And Sample name timestamp is correct in Create Quarantine Order form from Edit Case directory - - @tmsLink=SORDEV-12081 @env_s2s_1 - Scenario: Accept Reject Special Cases [1] - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - And API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - Then I navigate to the last created case via the url - And I collect uuid of the case - Then I click on share case button - And I select organization to share with "s2s_2" - And I fill comment in share popup with random string - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment - Given I log in as a Admin User - And I click on the Shares button from navbar - And I click on "reject" shared case button with copied case description - Then I fill comment field in Reject share request popup and click confirm - Then I navigate to "s2s_1" environment - Then I navigate to the last created case via the url - And I check if reject share case button in Edit Case is unavailable - - @tmsLink=SORDEV-12081 @env_s2s_1 - Scenario: Accept Reject Special Cases [2] - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - And API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - Then I navigate to the last created case via the url - And I collect uuid of the case - Then I click on share case button - And I select organization to share with "s2s_2" - And I fill comment in share popup with random string - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment in new driver tab - Given I log in as a Admin User - And I click on the Shares button from navbar - And I click on "accept" shared case button with copied case description - Then I back to tab number 1 - And I click on revoke share button - Then I click on Ja button in Revoke case popup - And I check if popup with error with handover displays - - @tmsLink=SORDEV-12081 @env_s2s_1 - Scenario: Accept Reject Special Cases [3] - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - And API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - Then I navigate to the last created case via the url - And I collect uuid of the case - Then I click on share case button - And I select organization to share with "s2s_2" - And I fill comment in share popup with random string - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment - Given I log in as a Admin User - And I click on the Shares button from navbar - And I click on "reject" shared case button with copied case description - Then I fill comment field in Reject share request popup and click confirm - Then I navigate to "s2s_1" environment - Then I navigate to the last created case via the url - Then I click on share case button - And I select organization to share with "s2s_2" - And I fill comment in share popup with random string - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment - And I click on the Shares button from navbar - And I click on "reject" shared case button with copied case description - - @tmsLink=SORDEV-12081 @env_s2s_1 - Scenario: Accept Reject Special Cases [4] - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - And API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - Then I navigate to the last created case via the url - And I collect uuid of the case - Then I click on share case button - And I click to hand over the ownership of the case in Share popup - And I select organization to share with "s2s_2" - And I fill comment in share popup with random string - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment - Given I log in as a Admin User - And I click on the Shares button from navbar - And I click on "accept" shared case button with copied case description - Then I navigate to "s2s_1" environment - Then I navigate to the last created case via the url without check if uuid is enabled - And I check if share case button in Edit Case is unavailable - - @tmsLink=SORDEV-12081 @env_s2s_1 - Scenario: Accept Reject Special Cases [5] - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - And API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - Then I navigate to the last created case via the url - And I collect uuid of the case - Then I click on share case button - And I click to hand over the ownership of the case in Share popup - And I select organization to share with "s2s_2" - And I fill comment in share popup with random string - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment in new driver tab - Given I log in as a Admin User - And I click on the Shares button from navbar - Then I back to tab number 1 - And I click on revoke share button - Then I click on Ja button in Revoke case popup - Then I back to tab number 2 - And I click on "accept" shared case button with copied case description - And I check if popup with error with handover displays - - @tmsLink=SORDEV-12081 @env_s2s_1 - Scenario: Accept Reject Special Cases [6] - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - And API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - Then I navigate to the last created case via the url - And I collect uuid of the case - Then I click on share case button - And I click to hand over the ownership of the case in Share popup - And I select organization to share with "s2s_2" - And I fill comment in share popup with random string - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment in new driver tab - Given I log in as a Admin User - And I click on the Shares button from navbar - Then I back to tab number 1 - And I click on revoke share button - Then I click on Ja button in Revoke case popup - Then I back to tab number 2 - And I click on "reject" shared case button with copied case description - Then I fill comment field in Reject share request popup and click confirm - And I check if popup with error with handover displays - - @tmsLink=SORDEV-12445 @env_d2s - Scenario: S2S_Processed lab messages should be transferred [1] - Given API : Login to DEMIS server - Then I create and send Laboratory Notification - And I log in as a Admin User - Then I click on the Messages button from navbar - And I click on fetch messages button - Then I filter by last created person via API in Messages Directory - And I collect message data from searched record in Messages directory - And I click on process button for 1 result in Message Directory page - And I pick a new person in Pick or create person popup during case creation for DE - And I choose create new case in Pick or create entry form for DE - And I check that create new case form with pathogen detection reporting process is displayed for DE - And I fill only mandatory fields to convert laboratory message into a case for DE - And I click on save button in the case popup - And I check that new sample form with pathogen detection reporting process is displayed - And I click on save sample button - And I click on save sample button - And I click on the Cases button from navbar - And I search the case by last created person via Demis message - Then I click on the first Case ID from Case Directory - Then I click on share case button - And I click to hand over the ownership of the case in Share popup - And I select organization to share with "s2s_3" - And I fill comment in share popup with random string - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_3" environment in new driver tab - Given I log in as a Admin User - And I click on the Shares button from navbar - And I click on "accept" shared case button with copied case description - And I click on the Cases button from navbar - Then I filter by last created person via DEMIS API in Case Directory - Then I click on the first Case ID from Case Directory - And I click on edit Sample - Then I back to tab number 1 - And I click on the Cases button from navbar - And I apply "Zur Ansicht" to ownership combobox on Case Directory Page - And I search the case by last created person via Demis message - Then I click on the first Case ID from Case Directory - And I check if edit sample button is unavailable - - @tmsLink=SORDEV-12445 @env_d2s - Scenario: S2S_Processed lab messages should be transferred [2] - Given API : Login to DEMIS server - Then I create and send Laboratory Notification - And I log in as a Admin User - Then I click on the Messages button from navbar - And I click on fetch messages button - Then I filter by last created person via API in Messages Directory - And I collect message data from searched record in Messages directory - And I click on process button for 1 result in Message Directory page - And I pick a new person in Pick or create person popup during case creation for DE - And I choose create new case in Pick or create entry form for DE - And I check that create new case form with pathogen detection reporting process is displayed for DE - And I fill only mandatory fields to convert laboratory message into a case for DE - And I click on save button in the case popup - And I check that new sample form with pathogen detection reporting process is displayed - And I click on save sample button - And I click on save sample button - And I click on the Cases button from navbar - And I search the case by last created person via Demis message - Then I click on the first Case ID from Case Directory - Then I click on share case button - And I select organization to share with "s2s_3" - And I fill comment in share popup with random string - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_3" environment in new driver tab - Given I log in as a Admin User - And I click on the Shares button from navbar - And I click on "accept" shared case button with copied case description - And I click on the Cases button from navbar - Then I filter by last created person via DEMIS API in Case Directory - And I apply "Zur Ansicht" to ownership combobox on Case Directory Page - Then I click on the first Case ID from Case Directory - And I check if edit sample button is unavailable - Then I back to tab number 1 - And I click on the Cases button from navbar - And I search the case by last created person via Demis message - Then I click on the first Case ID from Case Directory - And I click on edit Sample - - @tmsLink=SORDEV-11838 @env_s2s_1 - Scenario: [S2S] Test Avoiding simultaneous work of two health departments - preventing sharing twice to the same target system as long as the target system has not yet accepted or rejected for case with hand over the ownership [1] - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Then API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - And I open the last created Case via API - When I open the Case Contacts tab - Then I click on new contact button from Case Contacts tab - And I create a new basic contact to from Cases Contacts tab for DE - And I open the last created Case via API - Then I click on share case button - And I click to hand over the ownership of the case in Share popup - And I select organization to share with "s2s_2" - And I fill comment in share popup with random string - Then I click on share button in s2s share popup and wait for share to finish - And I open the last created Case via API - Then I click on share case button - And I select organization to share with "s2s_2" - And I fill comment in share popup with "shared with automated test" - Then I check if share warning is displayed - And I open the last created Case via API - Then I click on share case button - And I select organization to share with "s2s_3" - And I click to hand over the ownership of the case in Share popup - And I fill comment in share popup with "shared with automated test" - Then I click on share button in s2s share popup - And I check if popup with error with handover header displays - And I open the last created Case via API - And I click on revoke share button - Then I click on Ja button in Revoke case popup - Then I click on share case button - And I click to hand over the ownership of the case in Share popup - And I select organization to share with "s2s_2" - And I fill comment in share popup with random string - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment in new driver tab - Given I log in as a Admin User - And I click on the Shares button from navbar - And I click on "accept" shared case button with copied case description - - @tmsLink=SORDEV-11838 @env_s2s_1 - Scenario: [S2S] Test Avoiding simultaneous work of two health departments - preventing sharing twice to the same target system as long as the target system has not yet accepted or rejected for case without hand over the ownership [2] - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Then API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - And I open the last created Case via API - When I open the Case Contacts tab - Then I click on new contact button from Case Contacts tab - And I create a new basic contact to from Cases Contacts tab for DE - And I open the last created Case via API - Then I click on share case button - And I select organization to share with "s2s_2" - And I fill comment in share popup with random string - And I click to share samples of the case in Share popup - And I click to share reports of the case in Share popup - Then I click on share button in s2s share popup and wait for share to finish - And I open the last created Case via API - Then I click on share case button - And I select organization to share with "s2s_2" - And I fill comment in share popup with "shared with automated test" - Then I check if share warning is displayed - And I open the last created Case via API - Then I click on share case button - And I select organization to share with "s2s_3" - And I fill comment in share popup with "shared with automated test" - And I click to share samples of the case in Share popup - And I click to share reports of the case in Share popup - Then I click on share button in s2s share popup - And I open the last created Case via API - And I click on revoke share button - Then I click on Ja button in Revoke case popup - Then I click on share case button - And I select organization to share with "s2s_2" - And I fill comment in share popup with random string - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment in new driver tab - Given I log in as a Admin User - And I click on the Shares button from navbar - And I click on "accept" shared case button with copied case description - Then I back to tab number 1 - Then I click on share case button - And I select organization to share with "s2s_2" - And I fill comment in share popup with random string - And I click to hand over the ownership of the case in Share popup - Then I click on share button in s2s share popup and wait for share to finish - - @tmsLink=SORDEV-11838 @env_s2s_1 - Scenario: [S2S] Test Avoiding simultaneous work of two health departments - preventing sharing twice to the same target system as long as the target system has not yet accepted or rejected for contact with hand over the ownership [3] - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Then API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - And I open the last created Case via API - When I open the Case Contacts tab - Then I click on new contact button from Case Contacts tab - And I create a new basic contact to from Cases Contacts tab for DE - And I open the last created Case via API - Then I click on share case button - And I select organization to share with "s2s_2" - And I fill comment in share popup with random string - And I click to hand over the ownership of the case in Share popup - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to Contacts tab in Edit case page - And I open the first contact from contacts list - Then I click on share contact button - And I click to hand over the ownership of the case in Share popup - And I select organization to share with "s2s_2" - And I fill comment in share popup with random string - Then I click on share button in s2s share popup and wait for share to finish - Then I click on share contact button - And I select organization to share with "s2s_2" - And I fill comment in share popup with "shared with automated test" - Then I check if share warning is displayed - And I open the last created Case via API - Then I navigate to Contacts tab in Edit case page - And I open the first contact from contacts list - And I click on revoke share button - Then I click on Ja button in Revoke case popup - Then I click on share contact button - And I select organization to share with "s2s_2" - And I fill comment in share popup for contact with random string - And I click to hand over the ownership of the case in Share popup - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment in new driver tab - Given I log in as a Admin User - And I click on the Shares button from navbar - And I click on "accept" shared contact button with copied contact description - - @tmsLink=SORDEV-11838 @env_s2s_1 - Scenario: [S2S] Test Avoiding simultaneous work of two health departments - preventing sharing twice to the same target system as long as the target system has not yet accepted or rejected for contact without hand over the ownership [4] - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Then API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - And I open the last created Case via API - When I open the Case Contacts tab - Then I click on new contact button from Case Contacts tab - And I create a new basic contact to from Cases Contacts tab for DE - And I open the last created Case via API - Then I click on share case button - And I select organization to share with "s2s_2" - And I fill comment in share popup with random string - And I click to share samples of the case in Share popup - And I click to share reports of the case in Share popup - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to Contacts tab in Edit case page - And I open the first contact from contacts list - Then I click on share contact button - And I click to share samples of the case in Share popup - And I select organization to share with "s2s_2" - And I fill comment in share popup with random string - Then I click on share button in s2s share popup and wait for share to finish - Then I click on share contact button - And I select organization to share with "s2s_2" - And I fill comment in share popup with "shared with automated test" - Then I check if share warning is displayed - And I open the last created Case via API - Then I navigate to Contacts tab in Edit case page - And I open the first contact from contacts list - And I click on revoke share button - Then I click on Ja button in Revoke case popup - Then I click on share contact button - And I select organization to share with "s2s_2" - And I fill comment in share popup for contact with random string - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment in new driver tab - Given I log in as a Admin User - And I click on the Shares button from navbar - And I click on "accept" shared contact button with copied contact description - Then I back to tab number 1 - Then I click on share contact button - And I select organization to share with "s2s_2" - And I fill comment in share popup for contact with random string - And I click to hand over the ownership of the case in Share popup - Then I click on share button in s2s share popup and wait for share to finish - - @tmsLink=SORDEV-12447 @env_s2s_1 - Scenario: [S2S] S2S_deactivate share parameter 'share associated contacts' (for cases) [1] - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Then API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - And I open the last created Case via API - When I open the Case Contacts tab - Then I click on new contact button from Case Contacts tab - And I create a new basic contact to from Cases Contacts tab for DE - And I open the last created Case via API - Then I click on share case button - And I check that share associated contacts checkbox is not visible in Share form for DE - And I select organization to share with "s2s_2" - And I fill comment in share popup with random string - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment - Given I log in as a Admin User - And I click on the Shares button from navbar - And I click on the The Eye Icon located in the Shares Page - And I check that "KONTAKT-ID" column header is not visible in Share request details window for DE - - @tmsLink=SORDEV-12447 @env_s2s_1 - Scenario: [S2S] S2S_deactivate share parameter 'share associated contacts' (for cases) [2] - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Then API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - And I open the last created Case via API - When I open the Case Contacts tab - Then I click on new contact button from Case Contacts tab - And I create a new basic contact to from Cases Contacts tab for DE - And I open the last created Case via API - Then I click on share case button - And I select organization to share with "s2s_2" - And I fill comment in share popup with random string - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment in new driver tab - Given I log in as a Admin User - And I click on the Shares button from navbar - And I accept first case in Shares Page - Then I back to tab number 1 - When I open the Case Contacts tab - And I click on the first Contact ID from Contacts Directory in Contacts in Case - And I click on share contact button - And I check that share associated contacts checkbox is not visible in Share form for DE - And I select organization to share with "s2s_2" - And I fill comment in share popup with random string - Then I click on share button in s2s share popup and wait for share to finish - And I back to tab number 2 - And I click on the Shares button from navbar - And I click on the The Eye Icon located in the Shares Page - And I check that "FALL-ID" column header is not visible in Share request details window for DE - - @tmsLink=SORDEV-12094 @env_s2s_1 - Scenario: [S2S] Mergen without hand over the ownership - Given I log in as a Admin User - And I click on the Cases button from navbar - And I click on the NEW CASE button - Then I create a new case with mandatory data with person name and "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district for DE version - Then I click on save button in the case popup - Then I navigate to "s2s_2" environment in new driver tab - And I log in as a Admin User - And I click on the Cases button from navbar - And I click on the NEW CASE button - Then I create a new case with mandatory data with person name and "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district for DE version - Then I click on save button in the case popup - Then I back to tab number 1 - Then I click on share case button - And I select organization to share with "s2s_2" - And I fill comment in share popup with random string - Then I click on share button in s2s share popup and wait for share to finish - Then I back to tab number 2 - And I click on the Shares button from navbar - And I click on "accept" shared case button with copied case description - Then I click on Okay button in Potential duplicate popup - And I click on the Cases button from navbar - And I click on the More button on Case directory page - Then I click on Merge Duplicates on Case directory page - And I click to CONFIRM FILTERS on Merge Duplicate Cases page - Then I click on Merge button for target system from received case - And I confirm merge duplicated case - Then I check if popup with merge duplicated case appears - And I click on cancel button in merge duplicated cases popup - Then I click on Merge button for source system from received case - And I confirm merge duplicated case - Then I check if popup with merge message in german appears - - @tmsLink=SORDEV-12094 @env_s2s_1 - Scenario: [S2S] Mergen with hand over the ownership - merge for target system - Given I log in as a Admin User - And I click on the Cases button from navbar - And I click on the NEW CASE button - Then I create a new case with specific person name and "Hessen" region and "LK Fulda" district for DE version - Then I click on save button in the case popup - Then I navigate to "s2s_2" environment in new driver tab - And I log in as a Admin User - And I click on the Cases button from navbar - And I click on the NEW CASE button - Then I create a new case with specific person name and "Hessen" region and "LK Fulda" district for DE version - Then I click on save button in the case popup - Then I back to tab number 1 - Then I click on share case button - And I select organization to share with "s2s_2" - And I click to hand over the ownership of the case in Share popup - And I fill comment in share popup with random string - Then I click on share button in s2s share popup and wait for share to finish - Then I back to tab number 2 - And I click on the Shares button from navbar - And I click on "accept" shared case button with copied case description - Then I click on Okay button in Potential duplicate popup - And I click on the Cases button from navbar - And I click on the More button on Case directory page - Then I click on Merge Duplicates on Case directory page - And I click to CONFIRM FILTERS on Merge Duplicate Cases page - Then I click on Merge button for target system from received case - And I confirm merge duplicated case - Then I check if popup with merge message in german appears - - @tmsLink=SORDEV-12094 @env_s2s_1 - Scenario: [S2S] Mergen with hand over the ownership - merge for source system - Given I log in as a Admin User - And I click on the Cases button from navbar - And I click on the NEW CASE button - Then I create a new case with specific person name and "Hessen" region and "LK Fulda" district for DE version - Then I click on save button in the case popup - Then I navigate to "s2s_2" environment in new driver tab - And I log in as a Admin User - And I click on the Cases button from navbar - And I click on the NEW CASE button - Then I create a new case with specific person name and "Hessen" region and "LK Fulda" district for DE version - Then I click on save button in the case popup - Then I back to tab number 1 - Then I click on share case button - And I select organization to share with "s2s_2" - And I click to hand over the ownership of the case in Share popup - And I fill comment in share popup with random string - Then I click on share button in s2s share popup and wait for share to finish - Then I back to tab number 2 - And I click on the Shares button from navbar - And I click on "accept" shared case button with copied case description - Then I click on Okay button in Potential duplicate popup - And I click on the Cases button from navbar - And I click on the More button on Case directory page - Then I click on Merge Duplicates on Case directory page - And I click to CONFIRM FILTERS on Merge Duplicate Cases page - Then I click on Merge button for source system from received case - And I confirm merge duplicated case - Then I check if popup with merge message in german appears - - @tmsLink=SORDEV-12449 @env_s2s_1 - Scenario: S2S_added sample after sharing a case/contact does not get shared [1] - Given I log in as a Admin User - And I click on the Cases button from navbar - And I click on the NEW CASE button - Then I create a new case with specific person name and "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district for DE version - And I click on save button in the case popup - And I click on New Sample in German - And I create a new Sample with only required fields for DE version - And I click on save sample button - Then I click on share case button - And I select organization to share with "s2s_2" - And I click to share samples of the case in Share popup - And I fill comment in share popup with random string - Then I click on share button in s2s share popup and wait for share to finish - And I click on New Sample in German - And I create a new Sample with only required fields for DE version - And I click on save sample button - Then I navigate to "s2s_2" environment in new driver tab - And I log in as a Admin User - And I click on the Shares button from navbar - Then I accept first case in Shares Page - And I click on the The Eye Icon located in the Shares Page - And I click on the shortened case/contact ID to open the case - Then I check that the number of added samples on the Edit case page is 2 - - @tmsLink=SORDEV-12449 @env_s2s_1 - Scenario: S2S_added sample after sharing a case/contact does not get shared [2] - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Then API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - And I open the last created Case via API - When I open the Case Contacts tab - Then I click on new contact button from Case Contacts tab - And I create a new basic contact to from Cases Contacts tab for DE - And I open the last created Case via API - Then I click on share case button - And I select organization to share with "s2s_2" - And I fill comment in share popup with random string - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment in new driver tab - Given I log in as a Admin User - And I click on the Shares button from navbar - And I accept first case in Shares Page - Then I back to tab number 1 - When I open the Case Contacts tab - And I click on the first Contact ID from Contacts Directory in Contacts in Case - And I click on New Sample in German - And I create a new Sample with only required fields for DE version - And I click on save sample button - And I click on share contact button - And I select organization to share with "s2s_2" - And I click to share samples of the case in Share popup - And I fill comment in share popup with random string - Then I click on share button in s2s share popup and wait for share to finish - And I click on New Sample in German - And I create a new Sample with only required fields for DE version - And I click on save sample button - Then I back to tab number 2 - And I click on the Shares button from navbar - And I accept first contact in Shares Page - And I click on the The Eye Icon located in the Shares Page - And I click on the shortened case/contact ID to open the case - Then I check that the number of added samples on the Edit case page is 2 - Then I back to tab number 1 - Then I check that the number of added samples on the Edit case page is 2 - - @tmsLink=SORDEV-12095 @env_s2s_1 - Scenario: [S2S] Sample and Immunization - Change sample and immunization in target system - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Then API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - And I open the last created Case via API - Then I click on save button in the case popup - And I click NEW VACCINATION button for DE - And I fill new vaccination data in new Vaccination form for DE - And I click SAVE button in new Vaccination form - And I open the last created Case via API - When I click on New Sample in German - And I create a new Sample with positive test result for DE version - And I select the German words for Rapid Antigen Detection Test as Type of Test in the Create New Sample popup - And I save the created sample with pathogen test - And I open the last created Case via API - Then I click on share case button - And I select organization to share with "s2s_2" - And I click to hand over the ownership of the case in Share popup - And I fill comment in share popup with random string - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment in new driver tab - And I log in as a Admin User - And I click on the Shares button from navbar - And I click on "accept" shared case button with copied case description - And I click on the Cases button from navbar - And I filter by CaseID on Case directory page - And I check that number of displayed cases results is 1 - Then I click on the first Case ID from Case Directory - And I click on edit Sample - Then I set type of sample to "Blut" - And I click on Save Button in Sample Edit page - Then I navigate to case tab - And I click on first vaccination edit button - And I set vaccine manufacturer to "Valneva" - Then I click on save button in New Immunization form - Then I back to tab number 1 - And I open the last created Case via API - And I click on first vaccination edit button - Then I check vaccine manufacturer is set to "Valneva" - Then I click on save button in New Immunization form - And I click on edit Sample - Then I check if type of sample is set to "Blut" - - @tmsLink=SORDEV-12095 @env_s2s_1 - Scenario: [S2S] Sample and Immunization - Add sample and immunization in target system - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Then API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - And I open the last created Case via API - Then I click on save button in the case popup - And I click NEW VACCINATION button for DE - And I fill new vaccination data in new Vaccination form for DE - And I click SAVE button in new Vaccination form - And I open the last created Case via API - When I click on New Sample in German - And I create a new Sample with positive test result for DE version - And I select the German words for Rapid Antigen Detection Test as Type of Test in the Create New Sample popup - And I save the created sample with pathogen test - And I open the last created Case via API - Then I click on share case button - And I select organization to share with "s2s_2" - And I click to hand over the ownership of the case in Share popup - And I fill comment in share popup with random string - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment in new driver tab - And I log in as a Admin User - And I click on the Shares button from navbar - And I click on "accept" shared case button with copied case description - And I click on the Cases button from navbar - And I filter by CaseID on Case directory page - And I check that number of displayed cases results is 1 - Then I click on the first Case ID from Case Directory - When I click on New Sample in German - And I create a new Sample with positive test result for DE version with "Testlabor DEMIS" as a labor - And I save the created sample with pathogen test - And I confirm case with positive test result - Then I navigate to case tab - And I click NEW VACCINATION button for DE - And I fill new vaccination data in new Vaccination form for DE with "Comirnaty (COVID-19-mRNA Impfstoff)" as a vaccine name - And I click SAVE button in new Vaccination form - Then I back to tab number 1 - And I refresh current page - Then I check if Immunization area contains "Comirnaty (COVID-19-mRNA Impfstoff)" - Then I check if Immunization area contains "COVID-19 Impfstoff Moderna (mRNA-Impfstoff)" - And I click on See samples for this person button - And I check that number of displayed sample results is 2 - - @tmsLink=SORDEV-12095 @env_s2s_1 - Scenario: [S2S] Sample and Immunization - Change date of sample and immuniation - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Then API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - And I open the last created Case via API - Then I click on save button in the case popup - And I click NEW VACCINATION button for DE - And I fill new vaccination data in new Vaccination form for DE - And I click SAVE button in new Vaccination form - And I open the last created Case via API - When I click on New Sample in German - And I create a new Sample with positive test result for DE version - And I select the German words for Rapid Antigen Detection Test as Type of Test in the Create New Sample popup - And I save the created sample with pathogen test - And I open the last created Case via API - Then I click on share case button - And I select organization to share with "s2s_2" - And I click to hand over the ownership of the case in Share popup - And I fill comment in share popup with random string - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment in new driver tab - And I log in as a Admin User - And I click on the Shares button from navbar - And I click on "accept" shared case button with copied case description - And I click on the Cases button from navbar - And I filter by CaseID on Case directory page - And I check that number of displayed cases results is 1 - Then I click on the first Case ID from Case Directory - And I click on edit Sample - Then I set date sample was collected minus 4 days ago on Sample Edit page - And I click on Save Button in Sample Edit page - Then I navigate to case tab - And I click on first vaccination edit button - Then I change the vaccination date for minus 5 day from today - And I click SAVE button in new Vaccination form - Then I back to tab number 1 - And I refresh current page - And I click on view Sample - And I check if date of sample is set for 4 day ago from today on Edit Sample page for DE version - Then I navigate to case tab - And I click on the Edit Vaccination icon on vaccination card on Edit contact page - Then I check if vaccination date is set for 5 day ago from today on Edit Vaccination page for DE version - - @tmsLink=SORDEV-12095 @env_s2s_1 - Scenario: [S2S] Sample and Immunization - Create sample and immuniation after share the case - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Then API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - And I open the last created Case via API - Then I click on share case button - And I select organization to share with "s2s_2" - And I click to hand over the ownership of the case in Share popup - And I fill comment in share popup with random string - Then I click on share button in s2s share popup and wait for share to finish - And I click NEW VACCINATION button for DE - And I fill new vaccination data in new Vaccination form for DE - And I click SAVE button in new Vaccination form - And I open the last created Case via API - When I click on New Sample in German - And I create a new Sample with positive test result for DE version - And I select the German words for Rapid Antigen Detection Test as Type of Test in the Create New Sample popup - And I save the created sample with pathogen test - And I open the last created Case via API - Then I navigate to "s2s_2" environment in new driver tab - And I log in as a Admin User - And I click on the Shares button from navbar - And I click on "accept" shared case button with copied case description - And I click on the Cases button from navbar - And I filter by CaseID on Case directory page - And I check that number of displayed cases results is 1 - Then I click on the first Case ID from Case Directory - Then I check if Immunization area contains "COVID-19 Impfstoff Moderna (mRNA-Impfstoff)" - And I click on See samples for this person button - And I check that number of displayed sample results is 1 - - @tmsLink=SORDEV-12095 @env_s2s_1 - Scenario: [S2S] Sample and Immunization - Add sample and immunization in source system after accept s2s case without hand over the ownership - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Then API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - And I open the last created Case via API - Then I click on save button in the case popup - And I click NEW VACCINATION button for DE - And I fill new vaccination data in new Vaccination form for DE - And I click SAVE button in new Vaccination form - And I open the last created Case via API - When I click on New Sample in German - And I create a new Sample with positive test result for DE version - And I select the German words for Rapid Antigen Detection Test as Type of Test in the Create New Sample popup - And I save the created sample with pathogen test - And I open the last created Case via API - Then I click on share case button - And I select organization to share with "s2s_2" - And I fill comment in share popup with random string - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment in new driver tab - And I log in as a Admin User - And I click on the Shares button from navbar - And I click on "accept" shared case button with copied case description - Then I open last created Case via API on "s2s_2" instance - Then I back to tab number 1 - When I click on New Sample in German - And I create a new Sample with positive test result for DE version with "Voreingestelltes Labor" as a labor - And I save the created sample with pathogen test - And I confirm case with positive test result - Then I navigate to case tab - And I click NEW VACCINATION button for DE - And I fill new vaccination data in new Vaccination form for DE with "Comirnaty (COVID-19-mRNA Impfstoff)" as a vaccine name - And I click SAVE button in new Vaccination form - Then I back to tab number 2 - And I refresh current page - Then I check if Immunization area does not contains "COVID-19 Impfstoff Moderna (mRNA-Impfstoff)" - And I check if sample card has "Es gibt keine Proben für diesen Fall" information - - @tmsLink=SORDEV-12095 @env_s2s_1 - Scenario: [S2S] Sample and Immunization - Change sample and immunization in target system without hand over the ownership - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Then API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - And I open the last created Case via API - Then I click on save button in the case popup - And I click NEW VACCINATION button for DE - And I fill new vaccination data in new Vaccination form for DE - And I click SAVE button in new Vaccination form - And I open the last created Case via API - When I click on New Sample in German - And I create a new Sample with positive test result for DE version - And I select the German words for Rapid Antigen Detection Test as Type of Test in the Create New Sample popup - And I save the created sample with pathogen test - And I open the last created Case via API - Then I click on share case button - And I select organization to share with "s2s_2" - And I fill comment in share popup with random string - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment in new driver tab - And I log in as a Admin User - And I click on the Shares button from navbar - And I click on "accept" shared case button with copied case description - Then I back to tab number 1 - And I click on edit Sample - Then I set type of sample to "Blut" - And I click on Save Button in Sample Edit page - Then I navigate to case tab - And I click on first vaccination edit button - And I set vaccine manufacturer to "Valneva" - Then I click on save button in New Immunization form - Then I back to tab number 2 - Then I open last created Case via API on "s2s_2" instance - And I check if sample card has "Es gibt keine Proben für diesen Fall" information - And I check if Immunization area contains "Es gibt keine Impfungen für diese Person und Krankheit" - - @tmsLink=SORDEV-12095 @env_s2s_1 - Scenario: [S2S] Sample and Immunization - Add sample and immunization in source system before accept s2s case without hand over the ownership - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Then API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - And I open the last created Case via API - Then I click on save button in the case popup - And I click NEW VACCINATION button for DE - And I fill new vaccination data in new Vaccination form for DE - And I click SAVE button in new Vaccination form - And I open the last created Case via API - When I click on New Sample in German - And I create a new Sample with positive test result for DE version - And I select the German words for Rapid Antigen Detection Test as Type of Test in the Create New Sample popup - And I save the created sample with pathogen test - And I open the last created Case via API - Then I click on share case button - And I select organization to share with "s2s_2" - And I fill comment in share popup with random string - And I click to share samples of the case in Share popup - And I click on share immunizations of the case in Share popup - Then I click on share button in s2s share popup and wait for share to finish - When I click on New Sample in German - And I create a new Sample with positive test result for DE version with "Voreingestelltes Labor" as a labor - And I save the created sample with pathogen test - And I confirm case with positive test result - Then I navigate to case tab - And I click NEW VACCINATION button for DE - And I fill new vaccination data in new Vaccination form for DE with "Comirnaty (COVID-19-mRNA Impfstoff)" as a vaccine name - And I click SAVE button in new Vaccination form - Then I navigate to "s2s_2" environment in new driver tab - And I log in as a Admin User - And I click on the Shares button from navbar - And I click on "accept" shared case button with copied case description - Then I open last created Case via API on "s2s_2" instance - And I refresh current page - Then I check if Immunization area contains "Comirnaty (COVID-19-mRNA Impfstoff)" - Then I check if Immunization area contains "COVID-19 Impfstoff Moderna (mRNA-Impfstoff)" - And I click on See samples for this person button - And I check that number of displayed sample results is 2 - - @tmsLink=SORDEV-13953 @env_s2s_1 - Scenario: S2S - Share a case that was Archived - Given I log in as a Admin User - When I click on the Cases button from navbar - Then I click on the NEW CASE button - And I fill a new case form for DE version with mandatory data with "Berlin" as a region and "SK Berlin Mitte" as a district - And I save a new case - And I collect uuid of the case - Then I click on the Archive case button and confirm popup - And I click on save button from Edit Case page - Then I click on share case button - And I select organization to share with "s2s_2" - And I click to hand over the ownership of the case in Share popup - And I fill comment in share popup with random string - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment in new driver tab - When I log in as a Admin User - And I click on the Shares button from navbar - And I click on "accept" shared case button with copied case description - And I open the last created case with collected UUID by url on "s2s_2" instance - And I check if Archive button changed name to Abschließen - Then I back to tab number 1 - And I open the last created case with collected UUID by url on "s2s_1" instance - And I check if Archive button changed name to Wiedereröffnen \ No newline at end of file + And Sample name timestamp is correct in Create Quarantine Order form from Edit Case directory \ No newline at end of file diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/CaseClasification.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/CaseClasification.feature index 7f549588935..d5ddec53394 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/CaseClasification.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/CaseClasification.feature @@ -4,10 +4,8 @@ Feature: Case Classification functionality @env_de Scenario: Change Case classification from Not Yet Classified to Suspect Case by confirming Sore Throat for DE Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And I log in as a National User Then I open last edited case by API via URL navigation @@ -22,10 +20,8 @@ Feature: Case Classification functionality @env_de Scenario: Change Case classification from Suspect Case to Not Yet Classified for DE Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And I log in as a National User Then I open last edited case by API via URL navigation diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/CaseFilters.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/CaseFilters.feature index 99e2f179fde..dcb06fe8fe0 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/CaseFilters.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/CaseFilters.feature @@ -4,7 +4,6 @@ Feature: Case filter functionality @env_main Scenario: Check Cases on Sample page work as expected Given API: I create 10 new cases - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And I log in as a National User And I click on the Cases button from navbar @@ -18,10 +17,8 @@ Feature: Case filter functionality @tmsLink=SORQA-30 @env_main Scenario: Check Person related fields filter in Case directory page Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User And I click on the Cases button from navbar @@ -58,10 +55,8 @@ Feature: Case filter functionality @tmsLink=SORQA-30 @env_main Scenario: Check Case basic filters on Case directory page Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User And I click on the Cases button from navbar @@ -101,10 +96,8 @@ Feature: Case filter functionality @tmsLink=SORQA-30 @env_main Scenario: Check Case region and facility related filters Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User And I click on the Cases button from navbar @@ -142,10 +135,8 @@ Feature: Case filter functionality @tmsLink=SORQA-30 @env_main Scenario: Check checkboxes filters on Case directory page Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User And I click on the Cases button from navbar @@ -189,10 +180,10 @@ Feature: Case filter functionality @tmsLink=SORQA-30 @env_main Scenario: Check aggregation buttons on Case directory page Given API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User And I click on the Cases button from navbar @@ -213,10 +204,10 @@ Feature: Case filter functionality @tmsLink=SORQA-30 @env_main Scenario: Check Case report date filters on Case directory page Given API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User And I click on the Cases button from navbar @@ -235,10 +226,10 @@ Feature: Case filter functionality @tmsLink=SORQA-30 @env_main Scenario: Check complex filters regarding responsibilities, vaccination and quarantine Given API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User And I click on the Cases button from navbar @@ -430,10 +421,10 @@ Feature: Case filter functionality @tmsLink=SORQA-5969 @env_de Scenario Outline: Test vaccination status filter and columns to case When API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User And I open the last created Case via API diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/CaseFollowUpVisit.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/CaseFollowUpVisit.feature index 1ae3e73ede9..8f4e4161879 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/CaseFollowUpVisit.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/CaseFollowUpVisit.feature @@ -4,10 +4,8 @@ Feature: Follow-up new visit functionality @env_main Scenario: Create a new visit from case follow-up Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And I log in as a National User And I click on the Cases button from navbar @@ -21,10 +19,8 @@ Feature: Follow-up new visit functionality @tmsLink=SORDEV-5528 @env_main Scenario: Fill the therapy tab for follow-up test When API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And I log in as a National User And I open the last created Case via API @@ -66,10 +62,10 @@ Feature: Follow-up new visit functionality @tmsLink=SORDEV-12444 @env_main Scenario: User name from the 'Visit Origin' column is missing when exporting visits Given API: I create a new person - And API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User Then I navigate to the last created case via the url diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/CaseHospitalization.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/CaseHospitalization.feature index 38618a15ef4..09d272f8382 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/CaseHospitalization.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/CaseHospitalization.feature @@ -4,10 +4,8 @@ Feature: Case hospitalization tab e2e test cases @env_main Scenario: Edit all fields from Hospitalization tab Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And I log in as a National User And I navigate to hospitalization tab for case created via api diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/CaseImportExport.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/CaseImportExport.feature index 8266f7688e7..986035cd1c2 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/CaseImportExport.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/CaseImportExport.feature @@ -4,10 +4,10 @@ Feature: Case import and export tests @tmsLink=SORDEV-10042 @env_main Scenario: Case custom export test When API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a Admin User And I click on the Cases button from navbar @@ -24,10 +24,10 @@ Feature: Case import and export tests @tmsLink=SORDEV-10040 @env_main Scenario: Case basic export test When API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a Admin User And I click on the Cases button from navbar @@ -107,10 +107,10 @@ Feature: Case import and export tests @tmsLink=SORDEV-7454 @env_de Scenario: Test Add multiple variables to detailed export When API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National Language User And I click on the Cases button from navbar @@ -122,10 +122,10 @@ Feature: Case import and export tests @tmsLink=SORDEV-7454 @env_de Scenario: Test Add multiple variables to custom export When API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User And I click on the Cases button from navbar @@ -151,10 +151,10 @@ Feature: Case import and export tests @tmsLink=SORDEV-12441 @env_de Scenario: Hide citizenship and country of birth in Detailed Case Export file Given API: I create a new person - And API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a Admin User And I click on the Cases button from navbar diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/CaseSymptoms.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/CaseSymptoms.feature index 1bc963bcced..c03b38d1043 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/CaseSymptoms.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/CaseSymptoms.feature @@ -4,10 +4,10 @@ Feature: Case symptoms tab e2e test cases @tmsLink=SORDEV-5521 @env_main Scenario: Fill the symptoms tab When API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 And I log in as a National User And I open the last created Case via API @@ -36,10 +36,10 @@ Feature: Case symptoms tab e2e test cases @tmsLink=SORDEV-8350 @env_main Scenario: Extend fever validation When API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 And I log in as a National User And I open the last created Case via API diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/CaseViews.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/CaseViews.feature index 5830f2dad46..e185511561a 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/CaseViews.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/CaseViews.feature @@ -4,10 +4,8 @@ Feature: Case view tests @env_main Scenario: Create a new Case and check details in Detailed view table Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 When API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then I log in as a National User Given I click on the Cases button from navbar diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/ContactFilters.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/ContactFilters.feature index 05980c053c7..56c7c562185 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/ContactFilters.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/ContactFilters.feature @@ -4,13 +4,11 @@ Feature: Contact filter functionality @tmsLink=SORDEV-5692 @env_main Scenario: Check Contact basic filters on Contact directory page Given API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new contact linked to the previous created case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User And I click on the Contacts button from navbar @@ -45,13 +43,10 @@ Feature: Contact filter functionality @tmsLink=SORDEV-5692 @env_main Scenario: Check checkbox filters on Contact directory page Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new contact linked to the previous created case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User And I click on the Contacts button from navbar @@ -83,13 +78,10 @@ Feature: Contact filter functionality @tmsLink=SORDEV-5692 @env_main Scenario: Check aggregation buttons on Contact directory page Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new contact linked to the previous created case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User And I click on the Contacts button from navbar @@ -280,10 +272,10 @@ Feature: Contact filter functionality @tmsLink=SORQA-5969 @env_de Scenario Outline: Test vaccination status filter and columns to contact When API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 And API: I create a new contact - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User Then I open the last created contact via API diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/ContactImportExport.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/ContactImportExport.feature index 2de7b119558..56acfea25ae 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/ContactImportExport.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/ContactImportExport.feature @@ -4,10 +4,10 @@ Feature: Contact import and export tests @tmsLink=SORDEV-10043 @env_main Scenario: Contact basic export test When API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then API: I create a new contact - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a Admin User And I click on the Contacts button from navbar @@ -19,10 +19,10 @@ Feature: Contact import and export tests @tmsLink=SORDEV-10046 @env_main Scenario: Contact custom export test When API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then API: I create a new contact - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a Admin User And I click on the Contacts button from navbar @@ -107,10 +107,10 @@ Feature: Contact import and export tests @tmsLink=SORDEV-12441 @env_de Scenario: Hide citizenship and country of birth in Detailed Contact Export file When API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then API: I create a new contact - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a Admin User And I click on the Contacts button from navbar diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/Contacts.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/Contacts.feature index 4b063c6a1e5..41b161215fd 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/Contacts.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/Contacts.feature @@ -15,10 +15,8 @@ Feature: Contacts end to end tests @env_main Scenario: Delete created contact When API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new contact - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User When I click on the Contacts button from navbar @@ -29,10 +27,8 @@ Feature: Contacts end to end tests @env_main Scenario: Edit a created contact When API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And API: I create a new contact - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User Then I open the last created contact via API @@ -43,10 +39,8 @@ Feature: Contacts end to end tests @tmsLink=SORDEV-5476 @env_main Scenario: Add a task from contact and verify the fields Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then I log in as a National User And I click on the Contacts button from navbar @@ -66,16 +60,12 @@ Feature: Contacts end to end tests @env_main Scenario: Source case selected for contact Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 When API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And API: I create a new contact - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User And I open the last created contact via API @@ -90,16 +80,12 @@ Feature: Contacts end to end tests @env_main Scenario: Change the source case contact and then delete Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 When API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And API: I create a new contact - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User And I open the last created contact via API @@ -111,10 +97,8 @@ Feature: Contacts end to end tests When I open the Case Contacts tab of the created case via api Then I check the linked contact information is correctly displayed Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 When I open the last created contact via API And I click on the CHANGE CASE button @@ -129,10 +113,8 @@ Feature: Contacts end to end tests @env_main Scenario: Create Contact and check details in Detailed view table Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new contact - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 When I log in as a National User Then I click on the Contacts button from navbar @@ -143,10 +125,8 @@ Feature: Contacts end to end tests @env_main Scenario: Edit all fields from Follow-up visits tab When API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 When API: I create a new contact - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a Admin User When I am accessing the Follow-up visits tab using of created contact via api @@ -187,10 +167,8 @@ Feature: Contacts end to end tests @tmsLink=SORDEV-5470 @env_main Scenario: Create complex contact Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User And I click on the Contacts button from navbar @@ -208,10 +186,8 @@ Feature: Contacts end to end tests @tmsLink=SORDEV-5641 @env_main Scenario: Fill the epidemiological data tab in Contacts When API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new contact - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User Then I open the last created contact via API @@ -232,10 +208,8 @@ Feature: Contacts end to end tests @tmsLink=SORDEV-5670 @env_main Scenario: Fill the follow-up tab Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new contact - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And I log in as a National User And I am accessing the Follow-up visits tab using of created contact via api @@ -259,10 +233,8 @@ Feature: Contacts end to end tests @tmsLink=SORDEV-7452 @env_main Scenario: Bulk mode for linking/adding contacts to new Event When API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 When API: I create a new contact - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a Admin User And I click on the Contacts button from navbar @@ -282,13 +254,10 @@ Feature: Contacts end to end tests @tmsLink=SORDEV-7452 @env_main Scenario: Bulk mode for linking/adding contacts to existing Event Given API: I create a new event - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 When API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 When API: I create a new contact - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a Admin User And I click on the Contacts button from navbar @@ -308,10 +277,8 @@ Feature: Contacts end to end tests @tmsLink=SORDEV-7425 @env_main Scenario: Adopt the source case in the associated exposure after case conversion Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new contact - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User Then I open the last created contact via API @@ -329,10 +296,8 @@ Feature: Contacts end to end tests @tmsLink=SORDEV-5640 @env_main Scenario: Enter an exposure data in Contacts to testing all available options Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new contact - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then I log in as a National User Then I open the last created contact via API @@ -366,10 +331,8 @@ Feature: Contacts end to end tests @env_main @#7768 Scenario: Create new contact using line listing and select source case Given API: I create a new person - And API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then I log in as a National User When I click on the Contacts button from navbar @@ -384,10 +347,8 @@ Feature: Contacts end to end tests @env_main @#7769 Scenario: Create a new Contact via Line Listing and validate that the selected Source Case data is correctly displayed Given API: I create a new person - And API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then I log in as a National User When I click on the Contacts button from navbar @@ -401,10 +362,8 @@ Feature: Contacts end to end tests @tmsLink=SORDEV-9124 @env_main Scenario: Document Templates create quarantine order in Contacts Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new contact - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a Admin User Then I open the last created contact via API @@ -420,10 +379,8 @@ Feature: Contacts end to end tests @tmsLink=SORDEV-9124 @env_main Scenario: Document Templates create quarantine order for Contact bulk Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new contact - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a Admin User And I click on the Contacts button from navbar @@ -463,10 +420,8 @@ Feature: Contacts end to end tests @tmsLink=SORDEV-9477 @env_main Scenario: Add a person search option on creation forms Then API: I create a new person - And API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And I log in as a National User Then I click on the Contacts button from navbar @@ -487,7 +442,6 @@ Feature: Contacts end to end tests @tmsLink=SORDEV-6140 @env_main Scenario: Ask user to automatically convert some additional contacts and event participants to case Given API: I create a new event - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User When I click on the Contacts button from navbar @@ -519,7 +473,6 @@ Feature: Contacts end to end tests @tmsLink=SORDEV-6140 @env_main Scenario: Ask user to automatically convert all additional contacts and event participants to case Given API: I create a new event - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User When I click on the Contacts button from navbar @@ -550,7 +503,6 @@ Feature: Contacts end to end tests @tmsLink=SORDEV-6140 @env_main Scenario: Ask user to automatically convert no additional contacts and event participants to case Given API: I create a new event - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User When I click on the Contacts button from navbar @@ -581,10 +533,8 @@ Feature: Contacts end to end tests @tmsLink=SORDEV-10265 @env_main Scenario: Manual archiving for contacts When API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new contact - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a Admin User Then I open the last created contact via API @@ -600,10 +550,8 @@ Feature: Contacts end to end tests @tmsLink=SORDEV-9786 @env_main Scenario: Test The "urine p.m." enum value should be hidden when Covid19 is selected as disease When API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new contact - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a Admin User Then I open the last created contact via API @@ -614,10 +562,8 @@ Feature: Contacts end to end tests @env_main @tmsLink=SORDEV-9155 Scenario: Test Vaccinations get lost when merging contacts with duplicate persons Then API: I create a new person - And API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a Admin User And I click on the Contacts button from navbar @@ -655,10 +601,8 @@ Feature: Contacts end to end tests @tmsLink=SORDEV-7460 @env_main Scenario: Test Extend the exposure and event startDate and endDate to include a startTime and endTime Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new contact - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User Then I open the last created contact via API @@ -674,10 +618,8 @@ Feature: Contacts end to end tests @tmsLink=SORDEV-5613 @env_main Scenario: Option to attach document like pdf, word, jpeg to contacts When API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new contact - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User When I click on the Contacts button from navbar @@ -707,10 +649,8 @@ Feature: Contacts end to end tests @tmsLink=SORDEV-10254 @env_main Scenario: Manual archive Cases and Contacts When API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a Admin User When I open the Case Contacts tab of the created case via api @@ -790,13 +730,10 @@ Feature: Contacts end to end tests @env_main @#8565 Scenario: Check an archived contact if its read only Given API: I create a new person - And API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new contact - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then I log in as a Admin User Then I open last edited contact by API via URL navigation @@ -858,10 +795,8 @@ Feature: Contacts end to end tests @tmsLink=SORDEV-6102 @env_main Scenario: Merge duplicate contacts Then API: I create a new person - And API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a Admin User And I click on the Contacts button from navbar @@ -961,10 +896,8 @@ Feature: Contacts end to end tests @tmsLink=SORDEV-10361 @env_main Scenario: Test Hide "buried" within Person present condition for Covid-19 for Contacts Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User And I click on the Contacts button from navbar @@ -1072,10 +1005,8 @@ Feature: Contacts end to end tests @tmsLink=SORDEV-6185 @env_de Scenario: Test Add information to followup warning message for Contacts Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new contact - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User Then I open the last created contact via API @@ -1131,10 +1062,8 @@ Feature: Contacts end to end tests @tmsLink=SORDEV-5565 @env_de Scenario: Document Templates create quarantine order for Contact bulk DE Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new contact - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a Admin User And I click on the Contacts button from navbar @@ -1177,10 +1106,8 @@ Feature: Contacts end to end tests @tmsLink=SORDEV-12441 @env_de Scenario: Hide citizenship and country of birth on Edit Contact Person Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new contact - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User And I open the last created contact via API @@ -1188,226 +1115,6 @@ Feature: Contacts end to end tests Then I check that Citizenship is not visible in Contact Information section for DE version And I check that Country of birth is not visible in Contact Information section for DE version - @tmsLink=SORDEV-12087 @env_s2s_1 @precon @LanguageRisk - Scenario: Delete a contact in source system with handing ownership - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - And API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given API: I create a new contact with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district linked to last created case - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - Then I navigate to the last created case via the url - And I collect uuid of the case - Then I click on share case button - And I select organization to share with "s2s_2" - And I fill comment in share popup with "shared with automated test" - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment - Given I log in as a Admin User - And I click on the Shares button from navbar - Then I accept first case in Shares Page - Then I navigate to "s2s_1" environment - Then I open the last created contact via API - Then I click on share contact button - And I click to hand over the ownership of the contact in Share popup - And I select organization to share with "s2s_2" - And I fill comment in share popup with "shared with automated test" - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment - And I click on the Shares button from navbar - Then I accept first contact in Shares Page - And I click to accept potential duplicate in Shares Page - Then I navigate to "s2s_1" environment - And I click on the Contacts button from navbar - Then I apply Id of last api created Contact on Contact Directory Page - And I apply "Alle" to ownership combobox on Case Directory Page - And I click on the APPLY FILTERS button - Then I click on the More button on Contact directory page - And I click Enter Bulk Edit Mode on Contact directory page - And I click checkbox to choose all Contact results on Contact Directory Page - And I click on Bulk Actions combobox on Contact Directory Page - Then I click on Delete button from Bulk Actions Combobox in Contact Directory - And I set Reason for deletion as "Löschen auf Anforderung der betroffenen Person nach DSGVO" - And I click on Yes option in Confirm deletion popup - Then I navigate to "s2s_2" environment - Then I open the last created contact via API - - @tmsLink=SORDEV-12087 @env_s2s_1 - Scenario: Delete a contact in target system with handing ownership - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - And API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given API: I create a new contact with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district linked to last created case - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - Then I navigate to the last created case via the url - And I collect uuid of the case - Then I click on share case button - And I select organization to share with "s2s_2" - And I fill comment in share popup with "shared with automated test" - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment - Given I log in as a Admin User - And I click on the Shares button from navbar - Then I accept first case in Shares Page - Then I navigate to "s2s_1" environment - Then I open the last created contact via API - Then I click on share contact button - And I click to hand over the ownership of the contact in Share popup - And I select organization to share with "s2s_2" - And I fill comment in share popup with "shared with automated test" - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment - And I click on the Shares button from navbar - Then I accept first contact in Shares Page - And I click to accept potential duplicate in Shares Page - Then I open the last created contact via API - Then I click on Delete button from contact - And I set Reason for deletion as "Löschen auf Anforderung der betroffenen Person nach DSGVO" - And I click on Yes option in Confirm deletion popup - Then I navigate to "s2s_1" environment - And I click on the Contacts button from navbar - Then I apply Id of last api created Contact on Contact Directory Page - And I apply "Alle" to ownership combobox on Case Directory Page - And I click on the APPLY FILTERS button - And I open the first contact from contacts list - And I check if editable fields are read only for shared contact - - @tmsLink=SORDEV-12087 @env_s2s_1 - Scenario: Delete a contact in source system without handing ownership - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - And API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given API: I create a new contact with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district linked to last created case - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - Then I navigate to the last created case via the url - And I collect uuid of the case - Then I click on share case button - And I select organization to share with "s2s_2" - And I fill comment in share popup with "shared with automated test" - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment - Given I log in as a Admin User - And I click on the Shares button from navbar - Then I accept first case in Shares Page - Then I navigate to "s2s_1" environment - Then I open the last created contact via API - Then I click on share contact button - And I select organization to share with "s2s_2" - And I fill comment in share popup with "shared with automated test" - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment - And I click on the Shares button from navbar - Then I accept first contact in Shares Page - And I click to accept potential duplicate in Shares Page - And I navigate to "s2s_1" environment - Then I open the last created contact via API - Then I click on Delete button from contact - And I set Reason for deletion as "Löschen auf Anforderung der betroffenen Person nach DSGVO" - And I click on Yes option in Confirm deletion popup - Then I navigate to "s2s_2" environment - And I click on the Contacts button from navbar - Then I apply Id of last api created Contact on Contact Directory Page - And I apply "Alle" to ownership combobox on Case Directory Page - And I click on the APPLY FILTERS button - And I open the first contact from contacts list - And I check if editable fields are read only for shared contact - - @tmsLink=SORDEV-12087 @env_s2s_1 - Scenario: Delete a contact in target system without handing ownership - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - And API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given API: I create a new contact with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district linked to last created case - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - Then I navigate to the last created case via the url - And I collect uuid of the case - Then I click on share case button - And I select organization to share with "s2s_2" - And I fill comment in share popup with "shared with automated test" - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment - Given I log in as a Admin User - And I click on the Shares button from navbar - Then I accept first case in Shares Page - Then I navigate to "s2s_1" environment - Then I open the last created contact via API - Then I click on share contact button - And I select organization to share with "s2s_2" - And I fill comment in share popup with "shared with automated test" - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment - And I click on the Shares button from navbar - Then I accept first contact in Shares Page - And I click to accept potential duplicate in Shares Page - And I click on the Contacts button from navbar - Then I apply Id of last api created Contact on Contact Directory Page - And I apply "Alle" to ownership combobox on Case Directory Page - And I click on the APPLY FILTERS button - Then I click on the More button on Contact directory page - And I click Enter Bulk Edit Mode on Contact directory page - And I click checkbox to choose all Contact results on Contact Directory Page - And I click on Bulk Actions combobox on Contact Directory Page - Then I click on Delete button from Bulk Actions Combobox in Contact Directory - And I set Reason for deletion as "Löschen auf Anforderung der betroffenen Person nach DSGVO" - And I click on Yes option in Confirm deletion popup - Then I navigate to "s2s_1" environment - Then I open the last created contact via API - - @tmsLink=SORDEV-12087 @env_s2s_1 - Scenario: Delete a contact in source system with handing ownership before acceptance - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - And API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given API: I create a new contact with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district linked to last created case - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - Then I navigate to the last created case via the url - Then I click on share case button - And I select organization to share with "s2s_2" - And I fill comment in share popup with "shared with automated test" - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment - Given I log in as a Admin User - And I click on the Shares button from navbar - Then I accept first case in Shares Page - Then I navigate to "s2s_1" environment - Then I open the last created contact via API - Then I click on share contact button - And I select organization to share with "s2s_2" - And I click to hand over the ownership of the contact in Share popup - And I fill comment in share popup with "shared with automated test" - Then I click on share button in s2s share popup and wait for share to finish - Then I click on Delete button from contact - And I set Reason for deletion as "Löschen auf Anforderung der betroffenen Person nach DSGVO" - And I click on Yes option in Confirm deletion popup - Then I navigate to "s2s_2" environment - And I click on the Shares button from navbar - And I click on the The Eye Icon located in the Shares Page - And I check that first shared result has different id then deleted shared contact - @tmsLink=SORDEV-12446 @env_s2s_1 Scenario: Hide share action in bulk mode for contacts Given I log in as a Admin User @@ -1420,10 +1127,8 @@ Feature: Contacts end to end tests @tmsLink=SORQA-665 @env_de @oldfake Scenario: Check automatic deletion of CONTACT created 1826 days ago Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new contact with creation date 1826 days ago - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then I log in as a Admin User When I click on the Contacts button from navbar @@ -1442,10 +1147,8 @@ Feature: Contacts end to end tests @tmsLink=SORQA-681 @env_de @oldfake Scenario: Check automatic deletion NOT of CONTACT created 1820 days ago Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new contact with creation date 1820 days ago - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then I log in as a Admin User When I click on the Contacts button from navbar @@ -1459,96 +1162,4 @@ Feature: Contacts end to end tests And API: I check that POST call status code is 200 And I click on the Contacts button from navbar And I filter with last created contact using contact UUID - And I check that number of displayed contact results is 1 - - @tmsLink=SORDEV-13951 @env_s2s_1 - Scenario: S2S - Share a Contact without having a sample - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - And API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Then API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Then I log in as a Admin User - When I click on the Contacts button from navbar - And I click on the NEW CONTACT button - And I fill a new contact form for DE version with mandatory data with "Baden-Württemberg" as a region and "LK Alb-Donau-Kreis" as a disctrict - And I click on SAVE new contact button - And I copy url of current contact - And I click on share contact button - Then I check if popup with "Kontakt kann nicht geteilt werden" title appears - And I click on okay button - And I click on the CHOOSE SOURCE CASE button from CONTACT page - Then I search for the last case uuid created via Api in the CHOOSE SOURCE Contact window - And I open the first found result in the CHOOSE SOURCE window for DE version - Then I click SAVE button on Edit Contact Page - And I click on share contact button - And I select organization to share with "s2s_2" - Then I check if warning information with related to the associated case not being shared appears in share contact popup - And I click on discard button - Then I open the Case Contacts tab - And I navigate to case tab - Then I click on share case button - And I select organization to share with "s2s_2" - And I fill comment in share popup with random string - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to Contacts tab in Edit case page - And I open the first contact from contacts list - And I click on share contact button - And I select organization to share with "s2s_2" - And I fill comment in share popup for contact with random string - Then I click on share button in s2s share popup and wait for share to finish - Then I navigate to "s2s_2" environment in new driver tab - And I log in as a Admin User - And I click on the Shares button from navbar - And I click on "accept" shared contact button with copied contact description - Then I check if a warning pop-up message appears that the Case should be accepted first - And I click on "accept" shared case button with copied case description - And I click on "accept" shared contact button with copied contact description - Then I open last created Case via API on "s2s_2" instance - And I check that the value selected from Disease combobox is "COVID-19" on Edit Case page - - @tmsLink=SORDEV-13952 @env_s2s_1 - Scenario: S2S - Share a Contact having a sample - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - And API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Then API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Then I log in as a Admin User - When I click on the Contacts button from navbar - And I click on the NEW CONTACT button - And I fill a new contact form for DE version with mandatory data with "Baden-Württemberg" as a region and "LK Alb-Donau-Kreis" as a disctrict - And I click on SAVE new contact button - And I copy url of current contact - Then I click on New Sample in German - And I create a new Sample with positive test result for DE version with "Voreingestelltes Labor" as a labor - And I save the created sample with pathogen test - And I confirm when a pop-up appears asking user about creating a Case from it in DE - Then I fill a new case form for DE version with mandatory data forced by positive sample with "Berlin" as a region and "SK Berlin Mitte" as a district - And I save a new case - And I collect uuid of the case - Then I back to contact by url - And I click on share contact button - Then I check if popup with "Kontakt kann nicht geteilt werden" header appears - And I click on okay button - Then I click on the CHOOSE SOURCE CASE button from CONTACT page - And I search for the last case uuid created via Api in the CHOOSE SOURCE Contact window - And I open the first found result in the CHOOSE SOURCE window for DE version - Then I click SAVE button on Edit Contact Page - Then I open the Case Contacts tab - Then I navigate to case tab - Then I click on share case button - And I select organization to share with "s2s_2" - And I click to hand over the ownership of the case in Share popup - And I fill comment in share popup with random string - Then I click on share button in s2s share popup and wait for share to finish - Then I open the Case Contacts tab - And I click on the first Contact ID from Contacts Directory in Contacts in Case - And I click on share contact button - And I select organization to share with "s2s_2" - And I click to hand over the ownership of the contact in Share popup - And I fill comment in share popup for contact with random string - Then I click on share button in s2s share popup - And I check if popup with error with handover header displays \ No newline at end of file + And I check that number of displayed contact results is 1 \ No newline at end of file diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/Dashboard.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/Dashboard.feature index f097571ec4e..f1af6c1036c 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/Dashboard.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/Dashboard.feature @@ -9,10 +9,8 @@ Feature: Dashboard counters When I save value for COVID disease counter in Surveillance Dashboard When I save value for New Cases counter in Surveillance Dashboard When API: I create a new person - Then API: I check that POST call body is "OK" Then API: I check that POST call status code is 200 When API: I create a new case - Then API: I check that POST call body is "OK" Then API: I check that POST call status code is 200 When I click on the Dashboard button from navbar and access Surveillance Dashboard When I select "COVID-19" in TabSheet of Surveillance Dashboard @@ -24,10 +22,10 @@ Feature: Dashboard counters When I click on the Dashboard button from navbar and access Contacts Dashboard When I save value for COVID-19 contacts counter in Contacts Dashboard When API: I create a new person - Then API: I check that POST call body is "OK" + Then API: I check that POST call status code is 200 When API: I create a new contact - Then API: I check that POST call body is "OK" + Then API: I check that POST call status code is 200 When I click on the Dashboard button from navbar and access Contacts Dashboard Then I check that previous saved Contacts Dashboard contact counter for COVID-19 has been incremented diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/DemisWeb.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/DemisWeb.feature index d1ee9fd6ef4..36d5af31a34 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/DemisWeb.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/DemisWeb.feature @@ -355,4 +355,35 @@ Scenario: Create and send laboratory request via Demis And I click on fetch messages button Then I filter by last created person via API in Messages Directory And I click on Verarbeiten button in Messages Directory - Then I check if while creating new event participant from demis message there is a possibility to edit first and last name \ No newline at end of file + Then I check if while creating new event participant from demis message there is a possibility to edit first and last name + + @tmsLink=SORQA-959 @env_d2s @LoginKeycloak + Scenario: Test [Lab Message] Demis - Process a Lab message that has no mapped ID for Facility in Sormas + Given API : Login to DEMIS server + When I create and send Laboratory Notification with other facility name "Other Laboratory" and facility ID "928170" + And I log in as a Admin User + Then I click on the Messages button from navbar + And I click on fetch messages button + Then I filter by last created person via API in Messages Directory + And I click on Verarbeiten button in Messages Directory + And I pick a new person in Pick or create person popup during case creation for DE + And I choose create new case in Pick or create entry form for DE + And I check that create new case form with pathogen detection reporting process is displayed for DE + And I fill only mandatory fields to convert laboratory message into a case for DE + And I click on save button in the case popup + Then I check that new sample form with pathogen detection reporting process is displayed + Then I verify that labor is prefilled with "Andere Einrichtung" in New sample form while processing a DEMIS LabMessage + And I verify that labor description is prefilled with "Other Laboratory" in New sample form while processing a DEMIS LabMessage + And I click on save sample button + And I click on save sample button + And I click on the Cases button from navbar + And I search the case by last created person via Demis message + Then I click on the first Case ID from Case Directory + And I click on edit Sample + Then I check that laboratory is set to "Andere Einrichtung" on Edit Sample page + And I check that laboratory details is set to "Other Laboratory" on edit Sample page + When I navigate to case tab + Then I check if report side component in Edit Case has today date + When I click on edit Report on Edit Case page + Then I check that Reporter Facility in Edit report form is set to "Andere Einrichtung (Inaktiv)" + And I check that Reporter Facility Details in Edit report form is set to "Other Laboratory" \ No newline at end of file diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/EpiData.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/EpiData.feature index 34db78b1e21..0392456d269 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/EpiData.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/EpiData.feature @@ -4,10 +4,8 @@ Feature: Cover Epidemiological data Tab from Contacts @env_main Scenario: Cover Epidemiological data Tab from Contacts When API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new contact - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User When I am accessing the Epidemiological tab using of created contact via api @@ -17,10 +15,8 @@ Feature: Cover Epidemiological data Tab from Contacts @tmsLink=SORDEV-5204 @env_main Scenario: Test continent and subcontinent in location entry in exposure Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new contact - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User And I click on the Contacts button from navbar diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/EpidemiologicalDataCase.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/EpidemiologicalDataCase.feature index 8005634aa78..82e89fbd9ef 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/EpidemiologicalDataCase.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/EpidemiologicalDataCase.feature @@ -4,10 +4,8 @@ Feature: Epidemiological data coverage @env_main Scenario: Edit all fields from Epidemiological data tab Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User And I click on the Cases button from navbar @@ -25,10 +23,8 @@ Feature: Epidemiological data coverage @tmsLink=SORDEV-5522 @env_main Scenario: Validate all fields are present and functional on Epidemiological page Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User And I click on the Cases button from navbar @@ -60,10 +56,8 @@ Feature: Epidemiological data coverage @tmsLink=SORDEV-5523 @env_main Scenario: Enter an exposure data in Case Directory When API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User And I click on the Cases button from navbar @@ -188,10 +182,10 @@ Feature: Epidemiological data coverage @tmsLink=SORDEV-5839 @env_main Scenario: Make facility selection on LocationForm more intuitive Given API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 And API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User And I click on the Cases button from navbar @@ -205,10 +199,10 @@ Feature: Epidemiological data coverage @tmsLink=SORDEV-5977 @env_main Scenario: Improve exposure table display Given API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 And API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User And I click on the Cases button from navbar @@ -223,10 +217,10 @@ Feature: Epidemiological data coverage @tmsLink=SORDEV-5524 @env_main @ignore Scenario: Enter an activity as case in Epidemiological data tab in Cases When API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User And I click on the Cases button from navbar @@ -302,10 +296,10 @@ Feature: Epidemiological data coverage @tmsLink=SORDEV-5204 @env_main Scenario: Test continent and subcontinent in location entry in exposure and activity as case Given API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 And API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User And I click on the Cases button from navbar diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/Event.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/Event.feature index c989a213f48..dc82699b81c 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/Event.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/Event.feature @@ -103,7 +103,7 @@ Feature: Create events @env_main Scenario: Add a New action from event and verify the fields Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User Then I open the last created event via api @@ -116,7 +116,7 @@ Feature: Create events @tmsLink=SORDEV-5520 @env_main Scenario: Add a New action from Event Actions tab and verify the fields. Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User Then I navigate to Event Action tab for created Event @@ -131,7 +131,7 @@ Feature: Create events @env_main Scenario: Add a New action for an Event and verify the Action in EventActions table Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User Then I navigate to Event Action tab for created Event @@ -146,7 +146,7 @@ Feature: Create events @tmsLink=SORDEV-5476 @env_main Scenario: Add a Task from event and verify the fields Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User When I am accessing the event tab using the created event via api @@ -195,7 +195,7 @@ Feature: Create events @tmsLink=SORDEV-5571 @env_main Scenario: Event group screen from Event Directory Page Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User And I click on the Events button from navbar @@ -210,7 +210,7 @@ Feature: Create events @tmsLink=SORDEV-5571 @env_main Scenario: Event group screen using Group Id on Edit Event Page Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User And I click on the Events button from navbar @@ -226,7 +226,7 @@ Feature: Create events @tmsLink=SORDEV-5571 @env_main Scenario: Event group screen using Group Id in grid Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User And I click on the Events button from navbar @@ -243,7 +243,7 @@ Feature: Create events @tmsLink=SORDEV-5570 @env_main Scenario: Testing Event screen Impact Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User Then I open the last created event via api @@ -263,7 +263,7 @@ Feature: Create events @tmsLink=SORDEV-5572 @env_main Scenario: Testing Event group adding for new event Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a Admin User Then I open the last created event via api @@ -338,7 +338,7 @@ Feature: Create events @tmsLink=SORDEV-5569 @env_main Scenario: Testing Event groups view filters with sorting actions Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User When I am accessing the event tab using the created event via api @@ -444,7 +444,7 @@ Feature: Create events @tmsLink=SORDEV-10359 @env_main Scenario: Test Access to the event directory filtered on the events of a group Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User When I am accessing the event tab using the created event via api @@ -464,7 +464,7 @@ Feature: Create events @tmsLink=SORDEV-7461 @env_main Scenario: Testing bulk edit of Events Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a Admin User And I click on the Events button from navbar @@ -492,7 +492,7 @@ Feature: Create events @tmsLink=SORDEV-5967 @env_de Scenario: Add evidence fields for event clusters Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User Then I open the last created event via api @@ -538,13 +538,13 @@ Feature: Create events @tmsLink=SORDEV-9477 @env_main Scenario: Add a person search option on creation forms Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then API: I create a new person - And API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 And I log in as a National User Then I open the last created event via api @@ -570,13 +570,13 @@ Feature: Create events @env_main @#8555 Scenario: Add back a person to an event who was previously deleted as event participant Given API: I create a new person - And API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User When I am accessing the event tab using the created event via api @@ -631,7 +631,7 @@ Feature: Create events @tmsLink=SORDEV-10265 @env_main Scenario: Manual archiving for bulk event participants Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a Admin User And I click on the Events button from navbar @@ -674,13 +674,13 @@ Feature: Create events @tmsLink=SORDEV-9786 @env_main Scenario: Test The "urine p.m." enum value should be hidden when Covid19 is selected as disease Given API: I create a new person - And API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User Then I open the last created event via api @@ -733,7 +733,7 @@ Feature: Create events @tmsLink=SORDEV-8667 @env_main Scenario: Test Adjustments to the jurisdiction definition process of event participants Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a Admin User Then I open the last created event via api @@ -788,7 +788,7 @@ Feature: Create events @tmsLink=SORDEV-9788 @env_de Scenario: Test Hide country specific fields in the 'Person search option' pop-up in Event Participant directory Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User When I open the last created event via api @@ -858,13 +858,13 @@ Feature: Create events @env_main @#8556 Scenario: Add two positive Pathogen Test Result of different diseases to a Sample of an Event Participant Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given API: I create a new person - And API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User When I am accessing the event tab using the created event via api @@ -890,7 +890,7 @@ Feature: Create events @env_main @#8565 Scenario: Check an archived event if its read only Given API: I create a new event - And API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then I log in as a Admin User Then I am accessing the event tab using the created event via api @@ -919,7 +919,7 @@ Feature: Create events @tmsLink=SORDEV-7095 @env_main Scenario: Test Addition of a Variant field in the "EVENT" part Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 When I log in as a National User And I click on the Events button from navbar @@ -971,7 +971,7 @@ Feature: Create events @tmsLink=SORDEV-11455 @env_main Scenario: Add reason for deletion to confirmation dialogue Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 When I log in as a National User And I click on the Events button from navbar @@ -1012,7 +1012,7 @@ Feature: Create events @tmsLink=SORQA-7093 @env_main Scenario: Allow the admin surveillance supervisor to delete events Given API: I create a new event - And API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I navigate to SORMAS login page Then I log in as a Admin Surveillance Supervisor @@ -1026,7 +1026,7 @@ Feature: Create events @tmsLink=SORQA-7093 @env_main Scenario: Allow the admin surveillance supervisor to archive events Given API: I create a new event - And API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I navigate to SORMAS login page Then I log in as a Admin Surveillance Supervisor @@ -1174,7 +1174,7 @@ Feature: Create events @tmsLink=SORDEV-10227 @env_de Scenario: Test Permanent deletion for Person for Event Participant Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a Admin User Then I open the last created event via api @@ -1202,7 +1202,7 @@ Feature: Create events @tmsLink=SORDEV-5565 @env_de Scenario: Document Templates create quarantine order for Event Participant bulk DE Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a Admin User Then I open the last created event via api @@ -1267,7 +1267,7 @@ Feature: Create events @tmsLink=SORDEV-12439 @env_main Scenario: Test set 'All Event Participants' as the default value when an event is active Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a Admin User When I am accessing the event tab using the created event via api @@ -1277,7 +1277,7 @@ Feature: Create events @tmsLink=SORDEV-12439 @env_main Scenario: Test set 'Active event participants' as the default value when an event is archived Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a Admin User When I am accessing the event tab using the created event via api @@ -1289,7 +1289,7 @@ Feature: Create events @env_main @#7750 Scenario: Check the map functionality in the Edit Event Page Given API: I create a new event - And API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then I log in as a National User Then I am accessing the event tab using the created event via api @@ -1302,7 +1302,7 @@ Feature: Create events @env_main @#8559 Scenario: Confirm navigation' pop-up is triggered when a user creates a new entry for 'Contact information' and tries to navigate to another page Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User When I open the last created event via api @@ -1318,7 +1318,7 @@ Feature: Create events @tmsLink=SORDEV-12441 @env_de Scenario: Hide citizenship and country of birth on Edit Event Participant Person Page Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a Admin User Then I open the last created event via api @@ -1328,13 +1328,12 @@ Feature: Create events @tmsLink=SORQA-667 @env_de @oldfake Scenario: Check automatic deletion of EVENT_PARTICIPANT created 1826 days ago Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new event - And API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then API: I create a new event participant with creation date 1826 days ago - And API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then I log in as a Admin User Then I open the last created event via api @@ -1353,7 +1352,6 @@ Feature: Create events @tmsLink=SORQA-666 @env_de @oldfake Scenario: Check automatic deletion of EVENT created 1826 days ago Given API: I create a new event with creation date 1826 days ago - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then I log in as a Admin User Then I open the last created event via api @@ -1371,13 +1369,12 @@ Feature: Create events @tmsLink=SORQA-679 @env_de @oldfake Scenario: Check automatic deletion NOT of EVENT_PARTICIPANT created 1820 days ago Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new event - And API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then API: I create a new event participant with creation date 1820 days ago - And API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then I log in as a Admin User Then I open the last created event via api @@ -1396,7 +1393,6 @@ Feature: Create events @tmsLink=SORQA-680 @env_de @oldfake Scenario: Check automatic deletion NOT of EVENT created 1820 days ago Given API: I create a new event with creation date 1820 days ago - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then I log in as a Admin User Then I open the last created event via api @@ -1431,13 +1427,13 @@ Feature: Create events @#5762 @env_main Scenario: Link Event to a Case Given API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User And I open the last created Case via API @@ -1452,13 +1448,13 @@ Feature: Create events @tmsLink=SORDEV-10280 @env_main Scenario Outline: Test Allow "surveillance supervisor" and "contact supervisor" profiles to access the batch edit mode of the directory of participating events Given API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then API: I create a new event - And API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then API: I create a new event participant with creation date 2 days ago - And API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then I log in as a Then I open the last created event via api diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/EventAction.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/EventAction.feature index ebcda7466c8..c91546d4d1f 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/EventAction.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/EventAction.feature @@ -5,7 +5,7 @@ Feature: Create event actions @tmsLink=SORDEV-5564 @env_main Scenario: Event - follow-up of actions: attach documents at the level of the action carried out Given API: I create a new event -Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User Then I navigate to Event Action tab for created Event diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/EventFilters.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/EventFilters.feature index a7f7f9ac9e7..d9c12d7a6a8 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/EventFilters.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/EventFilters.feature @@ -4,7 +4,7 @@ Feature: Event Directory filters check @tmsLink=SORDEV-5915 @env_main Scenario: Check all filters are working properly in Event directory Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 When I log in as a National User And I click on the Events button from navbar @@ -46,7 +46,7 @@ Feature: Event Directory filters check @tmsLink=SORDEV-5917 @env_de Scenario: Check all filters are working properly in Event directory for DE version Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 When I log in as a National User And I click on the Events button from navbar @@ -85,10 +85,10 @@ Feature: Event Directory filters check @tmsLink=SORQA-77 @env_main Scenario: Filters for Region, District, Community, Reporting user and Event statuses on Event Directory Page Given API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 When API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 When I log in as a National User And I open the last created event via api @@ -135,7 +135,7 @@ Feature: Event Directory filters check @tmsLink=SORQA-77 @env_main Scenario: Date filters and aggregation buttons in Event Directory Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 When I log in as a National User And I click on the Events button from navbar diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/EventImportExport.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/EventImportExport.feature index 77fae29aaed..d057ccd34f3 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/EventImportExport.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/EventImportExport.feature @@ -46,7 +46,7 @@ Given I log in as a Admin User @tmsLink=SORDEV-9475 @env_de Scenario: Test Add reduced vaccination module to imports for Event Participants Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User Then I open the last created event via api @@ -106,7 +106,7 @@ Given I log in as a Admin User @tmsLink=SORDEV-12441 @env_de Scenario: Hide citizenship and country of birth in Detailed Event Participant file Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a Admin User Then I open the last created event via api diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/EventUserRoles.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/EventUserRoles.feature index cc514fef2b0..3bfb0b85256 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/EventUserRoles.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/EventUserRoles.feature @@ -4,7 +4,7 @@ Feature: Create events for different user roles @tmsLink=SORDEV-10359 @env_main @ignore Scenario Outline: Test Access to the event directory filtered on the events of a group Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a When I am accessing the event tab using the created event via api diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/Facility.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/Facility.feature index f00352a42c2..1fe55e86c2a 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/Facility.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/Facility.feature @@ -36,7 +36,7 @@ Feature: Facility end to end tests @tmsLink=SORDEV-9206 @env_main Scenario: Checking availability of new categories and types of facility in Edit Event directory Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a Admin User Then I open the last created event via api diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/Immunization.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/Immunization.feature index e82608b6abc..8cfdd98514f 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/Immunization.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/Immunization.feature @@ -70,13 +70,13 @@ Feature: Immunization end to end tests @env_main @#8565 Scenario: Check an archived immunization if its read only Given API: I create a new person - And API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then API: I create a new case - And API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then API: I create 1 new immunizations for last created person - And API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then I log in as a Admin User Then I navigate to last created immunization by API via URL @@ -367,10 +367,8 @@ Feature: Immunization end to end tests @tmsLink=SORQA-668 @env_de @oldfake Scenario: Check automatic deletion of IMMUNIZATION created 3651 days ago Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 When API: I create a new immunizations for last created person with creation date 3651 days ago - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then I log in as a Admin User And I click on the Configuration button from navbar @@ -383,10 +381,8 @@ Feature: Immunization end to end tests @tmsLink=SORQA-677 @env_de @oldfake Scenario: Check automatic deletion NOT of IMMUNIZATION created 3645 days ago Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 When API: I create a new immunizations for last created person with creation date 3645 days ago - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then I log in as a Admin User And I click on the Configuration button from navbar diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/LanguageChecks.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/LanguageChecks.feature index 537d01d7a30..6da7b22630a 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/LanguageChecks.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/LanguageChecks.feature @@ -8,7 +8,7 @@ Feature: Application language checks And I select "Urdu" language from Combobox in User settings Then I check that Surveillance Dashboard header is correctly displayed in Urdu language Then I click on the User Settings button from navbar - And I select "انگریزی" language from Combobox in User settings + And I select "جرمن" language from Combobox in User settings @tmsLink=SORQA-69 @env_de @LanguageRisk Scenario: Check Settings directory is written in German for german market diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/Pathogen.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/Pathogen.feature index 6a38aa93b38..25c1ba4502c 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/Pathogen.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/Pathogen.feature @@ -5,13 +5,10 @@ Feature: Pathogen Functionalities @tmsLink=SORDEV-5492 @env_main Scenario: Add a Pathogen test from Samples with IgM test type and verify the fields Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And API: I create a new sample - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 When I log in as a National User And I click on the Sample button from navbar @@ -25,13 +22,10 @@ Feature: Pathogen Functionalities @tmsLink=SORDEV-5492 @env_main Scenario: Add a Pathogen test from Samples with IgG test type and verify the fields Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And API: I create a new sample - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 When I log in as a National User And I click on the Sample button from navbar @@ -45,13 +39,10 @@ Feature: Pathogen Functionalities @tmsLink=SORDEV-5492 @env_main Scenario: Add a Pathogen test from Samples with PCR RT PCR test type and verify the fields Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And API: I create a new sample - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 When I log in as a National User And I click on the Sample button from navbar @@ -65,13 +56,10 @@ Feature: Pathogen Functionalities @tmsLink=SORDEV-5492 @env_main Scenario: Add a Pathogen test from Samples with CQ Value Detection test type and verify the fields Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And API: I create a new sample - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 When I log in as a National User And I click on the Sample button from navbar @@ -85,13 +73,13 @@ Feature: Pathogen Functionalities @tmsLink=SORDEV-5492 @env_main Scenario: Add a Pathogen test from Samples with Sequencing test type and verify the fields Given API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 And API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 And API: I create a new sample - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 When I log in as a National User And I click on the Sample button from navbar @@ -105,13 +93,13 @@ Feature: Pathogen Functionalities @tmsLink=SORDEV-5492 @env_main Scenario: Add a Pathogen test from Samples with DNA Microarray test type and verify the fields Given API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 And API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 And API: I create a new sample - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 When I log in as a National User And I click on the Sample button from navbar @@ -125,13 +113,13 @@ Feature: Pathogen Functionalities @tmsLink=SORDEV-5492 @env_main Scenario: Add a Pathogen test from Samples with Other test type and verify the fields Given API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 And API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 And API: I create a new sample - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 When I log in as a National User And I click on the Sample button from navbar @@ -145,10 +133,10 @@ Feature: Pathogen Functionalities @tmsLink=SORDEV-8058 @env_main Scenario: Unify pathogen test saving logic between cases and contacts When API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 And API: I create a new contact - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User Then I open the last created contact via API @@ -169,10 +157,10 @@ Feature: Pathogen Functionalities @tmsLink=SORDEV-8058 @env_main Scenario: Unify pathogen test saving logic between cases and event participants When API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User When I am accessing the event tab using the created event via api @@ -196,13 +184,13 @@ Feature: Pathogen Functionalities @tmsLink=SORDEV-7092 @env_de Scenario: Test Enhance availability of pathogen test information Given API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 And API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 And API: I create a new sample - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 When I log in as a National User And I click on the Sample button from navbar diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/PersonImportExport.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/PersonImportExport.feature index 634385424dd..f811b545894 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/PersonImportExport.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/PersonImportExport.feature @@ -4,10 +4,10 @@ Feature: Person import and export tests @tmsLink=SORDEV-8044 @env_main Scenario: Basic person export Given API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 When I log in as a National User When I click on the Persons button from navbar @@ -27,10 +27,10 @@ Scenario: Basic person export @tmsLink=SORDEV-8044 @env_main Scenario: Detailed person export Given API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 When I log in as a Admin User When I click on the Persons button from navbar @@ -50,10 +50,10 @@ Scenario: Detailed person export @tmsLink=SORDEV-8044 @env_main Scenario: Custom person export Given API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 When I log in as a Admin User When I click on the Persons button from navbar diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/Persons.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/Persons.feature index cf74cba662b..13c1fb6b575 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/Persons.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/Persons.feature @@ -23,10 +23,8 @@ Feature: Edit Persons @tmsLink=SORDEV-8466 @env_main Scenario: Check Filters on Person page work as expected Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 When I log in as a National User When I click on the Persons button from navbar @@ -110,18 +108,13 @@ Feature: Edit Persons @tmsLink=SORDEV-8469 @env_main Scenario: Test for navigating through Case, Contact and Immunization cards on Edit Person Page Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new contact linked to the previous created case - Then API: I check that POST call body is "OK" Given API: I create a new event - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create 1 new immunizations for last created person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User When I click on the Contacts button from navbar @@ -148,10 +141,8 @@ Feature: Edit Persons @tmsLink=SORDEV-5630 @env_de Scenario: Test a general comment field in person entity Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User Then I navigate to the last created via api Person page via URL @@ -160,7 +151,7 @@ Feature: Edit Persons @tmsLink=SORDEV-7424 @env_main Scenario: Test event participant person sex required Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 When I log in as a National User And I click on the Events button from navbar @@ -172,7 +163,7 @@ Feature: Edit Persons @tmsLink=SORDEV-10227 @env_de Scenario: Test Permanent deletion for Person for Travel Entry, Event Participant, Case and Contact combined Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a Admin User And I click on the Entries button from navbar @@ -304,201 +295,4 @@ Feature: Edit Persons When I click on the Persons button from navbar And I click on first person in person directory Then I check that Citizenship is not visible in Contact Information section for DE version - And I check that Country of birth is not visible in Contact Information section for DE version - - @tmsLink=SORDEV-12088 @env_s2s_1 - Scenario: [S2S] Simultaneous Work on Person [1] - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - And API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given API: I create a new contact with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district linked to last created case - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - Then I navigate to the last created case via the url - And I collect uuid of the case - Then I click on share case button - And I click to hand over the ownership of the contact in Share popup - And I select organization to share with "s2s_2" - And I fill comment in share popup with "shared with automated test" - Then I click on share button in s2s share popup and wait for share to finish - And I navigate to "s2s_2" environment in new driver tab - Given I log in as a Admin User - And I click on the Shares button from navbar - Then I accept first case in Shares Page - When I back to tab number 1 - Then I navigate to "s2s_1" environment - Then I open the last created contact via API - And I click on share contact button - And I click to hand over the ownership of the contact in Share popup - And I select organization to share with "s2s_2" - And I fill comment in share popup with "shared with automated test" - Then I click on share button in s2s share popup and wait for share to finish - When I back to tab number 2 - And I navigate to "s2s_2" environment - And I click on the Shares button from navbar - Then I accept first contact in Shares Page - And I click to accept potential duplicate in Shares Page - And I click on the Contacts button from navbar - And I open the first contact from contacts list - Then I open Contact Person tab - And I change first name of person from Edit person page - When I back to tab number 2 - Then I navigate to "s2s_2" environment - And I open the last created contact via API - Then I open Contact Person tab - And I check if first name of person has been changed - - @tmsLink=SORDEV-12088 @env_s2s_1 - Scenario: [S2S] Simultaneous Work on Person [2] - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - And API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - Then I navigate to the last created case via the url - And I collect uuid of the case - Then I click on share case button - And I click to hand over the ownership of the contact in Share popup - And I select organization to share with "s2s_2" - And I fill comment in share popup with "shared with automated test" - Then I click on share button in s2s share popup and wait for share to finish - And I navigate to "s2s_2" environment in new driver tab - Given I log in as a Admin User - And I click on the Shares button from navbar - Then I accept first case in Shares Page - And I click on the Cases button from navbar - And I filter Cases by collected case uuid - And I click on the first Case ID from Case Directory - And I navigate to case person tab - And I change first name of person from Edit person page - When I back to tab number 1 - Then I navigate to "s2s_1" environment - And I open the last created case via API and check if Edit case page is read only - And I navigate to case person tab - And I check if first name of person has been changed - - @tmsLink=SORDEV-12088 @env_s2s_1 - Scenario: [S2S] Simultaneous Work on Person [3] - Given I log in as a Admin User - And I click on the Cases button from navbar - And I click on the NEW CASE button - And I fill new case data for duplicates merge with for one person data for DE - And I save a new case - And I collect uuid of the case - Then I click on share case button - And I select organization to share with "s2s_2" - And I fill comment in share popup with "shared with automated test" - Then I click on share button in s2s share popup and wait for share to finish - And I navigate to "s2s_2" environment in new driver tab - Given I log in as a Admin User - And I click on the Shares button from navbar - Then I accept first case in Shares Page - And I click on the The Eye Icon located in the Shares Page - And I click on the shortened case/contact ID to open the case - And I check if editable fields are read only for shared case/contact - And I navigate to case person tab - And I check if editable fields are read only for person case/contact tab - And I click on the Cases button from navbar - And I click on the NEW CASE button - And I fill new case data for duplicates merge with for one person data for DE - And I click on SAVE new case button and choose same person in duplicate detection - And I choose same case in duplicate detection and save for DE - And I check if editable fields are read only for shared case/contact - And I navigate to case person tab - And I check if editable fields are read only for person case/contact tab - And I copy uuid of current person - And I click on the Persons button from navbar - And I search by copied uuid of the person in Person Directory for DE - And I click on first person in person directory - Then I check if editable fields are read only for person - And I click on the Cases button from navbar - And I click on the NEW CASE button - And I fill new case data for duplicates merge with for one person data for DE - And I click on SAVE new case button and choose same person in duplicate detection - And I choose create new case in Pick or create entry form for DE - And I navigate to case person tab - And I change first name of person from Edit person page - And I click on the Persons button from navbar - And I search by copied uuid of the person in Person Directory for DE - And I click on first person in person directory - And I check if first name of person has been changed - When I back to tab number 1 - And I navigate to case person tab - Then I check if first name of person from case has not been changed - - @tmsLink=SORDEV-12088 @env_s2s_1 - Scenario: [S2S] Simultaneous Work on Person [4] - Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district - And API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility - Then API: I check that POST call body is "OK" - And API: I check that POST call status code is 200 - Given I log in as a Admin User - And I click on the Contacts button from navbar - And I click on the NEW CONTACT button - And I fill a new contact form with same person data with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district for DE version - And I click on save Contact button - And I collect contact UUID displayed on Edit Contact Page - And I click on the CHOOSE SOURCE CASE button from CONTACT page - And I click yes on the DISCARD UNSAVED CHANGES popup from CONTACT page - And I search for the last case uuid created via Api in the CHOOSE SOURCE Contact window - And I open the first found result in the CHOOSE SOURCE window for DE version - Then I click SAVE button on Edit Contact Page - Then I navigate to the last created case via the url - Then I click on share case button - And I select organization to share with "s2s_2" - And I fill comment in share popup with "shared with automated test" - Then I click on share button in s2s share popup and wait for share to finish - And I navigate to "s2s_2" environment in new driver tab - Given I log in as a Admin User - And I click on the Shares button from navbar - Then I accept first case in Shares Page - When I back to tab number 1 - And I navigate to Contacts tab in Edit case page - And I open a contact using the collected contact UUID - Then I click on share contact button - And I select organization to share with "s2s_2" - And I fill comment in share popup with "shared with automated test" - Then I click on share button in s2s share popup and wait for share to finish - When I back to tab number 2 - And I click on the Shares button from navbar - Then I accept first contact in Shares Page - And I click on the The Eye Icon located in the Shares Page - And I click on the shortened case/contact ID to open the case - And I check if editable fields are read only for shared case/contact - And I open Contact Person tab - And I check if editable fields are read only for person case/contact tab - And I click on the Contacts button from navbar - And I click on the NEW CONTACT button - And I fill a new contact form with same person data with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district for DE version - And I click on SAVE new case button and choose same person in duplicate detection - And I choose same contact in duplicate detection and save for DE - And I check if editable fields are read only for shared case/contact - And I open Contact Person tab - And I check if editable fields are read only for person case/contact tab - And I copy uuid of current person - And I click on the Persons button from navbar - And I search by copied uuid of the person in Person Directory for DE - And I click on first person in person directory - Then I check if editable fields are read only for person - And I click on the Contacts button from navbar - And I click on the NEW CONTACT button - And I fill a new contact form with same person data with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district for DE version - And I click on SAVE new case button and choose same person in duplicate detection - And I choose create new contact in Pick or create entry form for DE - And I open Contact Person tab - And I change first name of person from Edit person page - And I click on the Persons button from navbar - And I search by copied uuid of the person in Person Directory for DE - And I click on first person in person directory - And I check if first name of person has been changed - When I back to tab number 1 - And I open Contact Person tab - And I check if first name of person from contact has not been changed + And I check that Country of birth is not visible in Contact Information section for DE version \ No newline at end of file diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/PersonsUserRoles.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/PersonsUserRoles.feature index ce4feb98059..3ef22a5bc37 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/PersonsUserRoles.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/PersonsUserRoles.feature @@ -4,18 +4,18 @@ Feature: Edit Persons for different user roles @tmsLink=SORDEV-8469 @env_main @ignore Scenario Outline: Test for navigating through Case, Contact and Immunization cards on Edit Person Page Given API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 And API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given API: I create a new contact linked to the previous created case - Then API: I check that POST call body is "OK" + Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given API: I create 1 new immunizations for last created person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a When I click on the Contacts button from navbar diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/Sample.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/Sample.feature index c5a1a55c296..dcf649a0b71 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/Sample.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/Sample.feature @@ -79,13 +79,10 @@ Feature: Sample Functionalities @env_main Scenario: Add a Pathogen test from Samples and verify the fields Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And API: I create a new sample - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 When I log in as a National User And I click on the Sample button from navbar @@ -97,13 +94,10 @@ Feature: Sample Functionalities @env_main Scenario: Delete created sample Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new sample - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User Then I open the last created sample via API @@ -114,13 +108,10 @@ Feature: Sample Functionalities @tmsLink=SORDEV-10052 @env_main Scenario: Basic export sample Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new sample - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a Admin User When I click on the Sample button from navbar @@ -134,13 +125,10 @@ Feature: Sample Functionalities @tmsLink=SORDEV-10053 @env_main Scenario: Detailed export sample Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new sample - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a Admin User When I click on the Sample button from navbar @@ -155,13 +143,13 @@ Feature: Sample Functionalities @env_main @tmsLink=SORDEV-5493 Scenario: Add a Additional test from Samples and verify the fields Given API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 And API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 And API: I create a new sample - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 When I log in as a Admin User And I click on the Sample button from navbar @@ -173,10 +161,10 @@ Feature: Sample Functionalities @#8556 @env_main Scenario: Add two positive Pathogen Test Result of different diseases to a Sample of a Contact Given API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then API: I create a new contact - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 When I log in as a National User Then I open the last created contact via API @@ -201,10 +189,10 @@ Feature: Sample Functionalities @env_main @#8560 Scenario: Display date and time for pathogen test result on sample card Given API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then API: I create a new contact - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 When I log in as a National User Then I open the last created contact via API @@ -265,10 +253,10 @@ Feature: Sample Functionalities @tmsLink=SORDEV-7427 @env_de Scenario: Test Make date fields in sample creation mask and information non-compulsory When API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User And I open the last created Case via API diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/SampleFilters.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/SampleFilters.feature index 4a6f1b59d1a..58529b6f44c 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/SampleFilters.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/SampleFilters.feature @@ -4,7 +4,6 @@ Feature: Sample filter functionality @env_main Scenario: Check Filters on Sample page work as expected Given API: I create 10 new cases with a new sample foreach of them - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 And I log in as a National User And I click on the Sample button from navbar @@ -18,13 +17,10 @@ Feature: Sample filter functionality @tmsLink=SORDEV-5981 @env_main Scenario: Check all filters are work properly in Samples directory Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new sample - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User When I click on the Sample button from navbar @@ -77,13 +73,10 @@ Feature: Sample filter functionality @tmsLink=SORDEV-5982 @env_de Scenario: Check all filters are work properly in Samples directory for DE version Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given API: I create a new sample - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a National User And I click on the Sample button from navbar diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/SharedCases.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/SharedCases.feature new file mode 100644 index 00000000000..df123cabee5 --- /dev/null +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/SharedCases.feature @@ -0,0 +1,1164 @@ +@UI @Sanity @ShareCases @SharedData +Feature: Sharing cases between environments tests + + @tmsLink=SORQA-962 @env_s2s_1 + Scenario: Delete a shared case + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given I log in as a Admin User + Then I navigate to the last created case via the url + And I collect uuid of the case + Then I click on share case button + And I select organization to share with "s2s_2" + And I fill comment in share popup with "shared to be deleted after" + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment + And I log in as a Admin User + And I click on the Shares button from navbar + Then I accept first case in Shares Page + Then I navigate to "s2s_1" environment + Then I navigate to the last created case via the url + Then I click on Delete button from case + And I set Reason for deletion as "Löschen auf Anforderung der betroffenen Person nach DSGVO" + And I click on Yes option in Confirm deletion popup + And I apply "Alle" to ownership combobox on Case Directory Page + And I apply "Gelöschte Fälle" to combobox on Case Directory Page + Then I click on the APPLY FILTERS button + And I select first created case for person from Cases list + Then I check if editable fields are read only for an archived case + And I check if handover card contains "LK Fulda" information + And I check if handover card contains "Geteilt von: Automation ADMIN" information + And I check if handover card contains "Kommentar: shared to be deleted after" information + Then I navigate to "s2s_2" environment + And I click on the Cases button from navbar + And I apply "Alle" to ownership combobox on Case Directory Page + And I apply "Aktive Fälle" to combobox on Case Directory Page + Then I click on the APPLY FILTERS button + And I select first created case for person from Cases list + Then I check if editable fields are read only for an archived case + And I check if handover card contains "Eigentümer: LK Barnim" information + And I check if handover card contains "Geteilt von: Automation Admin" information + And I check if handover card contains "shared to be deleted after" information + + @tmsLink=SORDEV-13953 @env_s2s_1 + Scenario: S2S - Share a case that was Archived + Given I log in as a Admin User + When I click on the Cases button from navbar + Then I click on the NEW CASE button + And I fill a new case form for DE version with mandatory data with "Berlin" as a region and "SK Berlin Mitte" as a district + And I save a new case + And I collect uuid of the case + Then I click on the Archive case button and confirm popup + And I click on save button from Edit Case page + Then I click on share case button + And I select organization to share with "s2s_2" + And I click to hand over the ownership of the case in Share popup + And I fill comment in share popup with random string + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment in new driver tab + When I log in as a Admin User + And I click on the Shares button from navbar + And I click on "accept" shared case button with copied case description + And I open the last created case with collected UUID by url on "s2s_2" instance + And I check if Archive button changed name to Abschließen + Then I back to tab number 1 + And I open the last created case with collected UUID by url on "s2s_1" instance + And I check if Archive button changed name to Wiedereröffnen + + @tmsLink=SORDEV-12095 @env_s2s_1 + Scenario: [S2S] Sample and Immunization - Add sample and immunization in source system before accept s2s case without hand over the ownership + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Then API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given I log in as a Admin User + And I open the last created Case via API + Then I click on save button in the case popup + And I click NEW VACCINATION button for DE + And I fill new vaccination data in new Vaccination form for DE + And I click SAVE button in new Vaccination form + And I open the last created Case via API + When I click on New Sample in German + And I create a new Sample with positive test result for DE version + And I select the German words for Rapid Antigen Detection Test as Type of Test in the Create New Sample popup + And I save the created sample with pathogen test + And I open the last created Case via API + Then I click on share case button + And I select organization to share with "s2s_2" + And I fill comment in share popup with random string + And I click to share samples of the case in Share popup + And I click on share immunizations of the case in Share popup + Then I click on share button in s2s share popup and wait for share to finish + When I click on New Sample in German + And I create a new Sample with positive test result for DE version with "Voreingestelltes Labor" as a labor + And I save the created sample with pathogen test + And I confirm case with positive test result + Then I navigate to case tab + And I click NEW VACCINATION button for DE + And I fill new vaccination data in new Vaccination form for DE with "Comirnaty (COVID-19-mRNA Impfstoff)" as a vaccine name + And I click SAVE button in new Vaccination form + Then I navigate to "s2s_2" environment in new driver tab + And I log in as a Admin User + And I click on the Shares button from navbar + And I click on "accept" shared case button with copied case description + Then I open last created Case via API on "s2s_2" instance + And I refresh current page + Then I check if Immunization area contains "Comirnaty (COVID-19-mRNA Impfstoff)" + Then I check if Immunization area contains "COVID-19 Impfstoff Moderna (mRNA-Impfstoff)" + And I click on See samples for this person button + And I check that number of displayed sample results is 2 + + @tmsLink=SORDEV-12095 @env_s2s_1 + Scenario: [S2S] Sample and Immunization - Change sample and immunization in target system without hand over the ownership + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Then API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given I log in as a Admin User + And I open the last created Case via API + Then I click on save button in the case popup + And I click NEW VACCINATION button for DE + And I fill new vaccination data in new Vaccination form for DE + And I click SAVE button in new Vaccination form + And I open the last created Case via API + When I click on New Sample in German + And I create a new Sample with positive test result for DE version + And I select the German words for Rapid Antigen Detection Test as Type of Test in the Create New Sample popup + And I save the created sample with pathogen test + And I open the last created Case via API + Then I click on share case button + And I select organization to share with "s2s_2" + And I fill comment in share popup with random string + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment in new driver tab + And I log in as a Admin User + And I click on the Shares button from navbar + And I click on "accept" shared case button with copied case description + Then I back to tab number 1 + And I click on edit Sample + Then I set type of sample to "Blut" + And I click on Save Button in Sample Edit page + Then I navigate to case tab + And I click on first vaccination edit button + And I set vaccine manufacturer to "Valneva" + Then I click on save button in New Immunization form + Then I back to tab number 2 + Then I open last created Case via API on "s2s_2" instance + And I check if sample card has "Es gibt keine Proben für diesen Fall" information + And I check if Immunization area contains "Es gibt keine Impfungen für diese Person und Krankheit" + + @tmsLink=SORDEV-12095 @env_s2s_1 + Scenario: [S2S] Sample and Immunization - Add sample and immunization in source system after accept s2s case without hand over the ownership + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Then API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given I log in as a Admin User + And I open the last created Case via API + Then I click on save button in the case popup + And I click NEW VACCINATION button for DE + And I fill new vaccination data in new Vaccination form for DE + And I click SAVE button in new Vaccination form + And I open the last created Case via API + When I click on New Sample in German + And I create a new Sample with positive test result for DE version + And I select the German words for Rapid Antigen Detection Test as Type of Test in the Create New Sample popup + And I save the created sample with pathogen test + And I open the last created Case via API + Then I click on share case button + And I select organization to share with "s2s_2" + And I fill comment in share popup with random string + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment in new driver tab + And I log in as a Admin User + And I click on the Shares button from navbar + And I click on "accept" shared case button with copied case description + Then I open last created Case via API on "s2s_2" instance + Then I back to tab number 1 + When I click on New Sample in German + And I create a new Sample with positive test result for DE version with "Voreingestelltes Labor" as a labor + And I save the created sample with pathogen test + And I confirm case with positive test result + Then I navigate to case tab + And I click NEW VACCINATION button for DE + And I fill new vaccination data in new Vaccination form for DE with "Comirnaty (COVID-19-mRNA Impfstoff)" as a vaccine name + And I click SAVE button in new Vaccination form + Then I back to tab number 2 + And I refresh current page + Then I check if Immunization area does not contains "COVID-19 Impfstoff Moderna (mRNA-Impfstoff)" + And I check if sample card has "Es gibt keine Proben für diesen Fall" information + + @tmsLink=SORDEV-12095 @env_s2s_1 + Scenario: [S2S] Sample and Immunization - Create sample and immuniation after share the case + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Then API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given I log in as a Admin User + And I open the last created Case via API + Then I click on share case button + And I select organization to share with "s2s_2" + And I click to hand over the ownership of the case in Share popup + And I fill comment in share popup with random string + Then I click on share button in s2s share popup and wait for share to finish + And I click NEW VACCINATION button for DE + And I fill new vaccination data in new Vaccination form for DE + And I click SAVE button in new Vaccination form + And I open the last created Case via API + When I click on New Sample in German + And I create a new Sample with positive test result for DE version + And I select the German words for Rapid Antigen Detection Test as Type of Test in the Create New Sample popup + And I save the created sample with pathogen test + And I open the last created Case via API + Then I navigate to "s2s_2" environment in new driver tab + And I log in as a Admin User + And I click on the Shares button from navbar + And I click on "accept" shared case button with copied case description + And I click on the Cases button from navbar + And I filter by CaseID on Case directory page + And I check that number of displayed cases results is 1 + Then I click on the first Case ID from Case Directory + Then I check if Immunization area contains "COVID-19 Impfstoff Moderna (mRNA-Impfstoff)" + And I click on See samples for this person button + And I check that number of displayed sample results is 1 + + @tmsLink=SORDEV-12095 @env_s2s_1 + Scenario: [S2S] Sample and Immunization - Change date of sample and immuniation + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Then API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given I log in as a Admin User + And I open the last created Case via API + Then I click on save button in the case popup + And I click NEW VACCINATION button for DE + And I fill new vaccination data in new Vaccination form for DE + And I click SAVE button in new Vaccination form + And I open the last created Case via API + When I click on New Sample in German + And I create a new Sample with positive test result for DE version + And I select the German words for Rapid Antigen Detection Test as Type of Test in the Create New Sample popup + And I save the created sample with pathogen test + And I open the last created Case via API + Then I click on share case button + And I select organization to share with "s2s_2" + And I click to hand over the ownership of the case in Share popup + And I fill comment in share popup with random string + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment in new driver tab + And I log in as a Admin User + And I click on the Shares button from navbar + And I click on "accept" shared case button with copied case description + And I click on the Cases button from navbar + And I filter by CaseID on Case directory page + And I check that number of displayed cases results is 1 + Then I click on the first Case ID from Case Directory + And I click on edit Sample + Then I set date sample was collected minus 4 days ago on Sample Edit page + And I click on Save Button in Sample Edit page + Then I navigate to case tab + And I click on first vaccination edit button + Then I change the vaccination date for minus 5 day from today + And I click SAVE button in new Vaccination form + Then I back to tab number 1 + And I refresh current page + And I click on view Sample + And I check if date of sample is set for 4 day ago from today on Edit Sample page for DE version + Then I navigate to case tab + And I click on the Edit Vaccination icon on vaccination card on Edit contact page + Then I check if vaccination date is set for 5 day ago from today on Edit Vaccination page for DE version + + @tmsLink=SORDEV-12095 @env_s2s_1 + Scenario: [S2S] Sample and Immunization - Add sample and immunization in target system + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Then API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given I log in as a Admin User + And I open the last created Case via API + Then I click on save button in the case popup + And I click NEW VACCINATION button for DE + And I fill new vaccination data in new Vaccination form for DE + And I click SAVE button in new Vaccination form + And I open the last created Case via API + When I click on New Sample in German + And I create a new Sample with positive test result for DE version + And I select the German words for Rapid Antigen Detection Test as Type of Test in the Create New Sample popup + And I save the created sample with pathogen test + And I open the last created Case via API + Then I click on share case button + And I select organization to share with "s2s_2" + And I click to hand over the ownership of the case in Share popup + And I fill comment in share popup with random string + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment in new driver tab + And I log in as a Admin User + And I click on the Shares button from navbar + And I click on "accept" shared case button with copied case description + And I click on the Cases button from navbar + And I filter by CaseID on Case directory page + And I check that number of displayed cases results is 1 + Then I click on the first Case ID from Case Directory + When I click on New Sample in German + And I create a new Sample with positive test result for DE version with "Testlabor DEMIS" as a labor + And I save the created sample with pathogen test + And I confirm case with positive test result + Then I navigate to case tab + And I click NEW VACCINATION button for DE + And I fill new vaccination data in new Vaccination form for DE with "Comirnaty (COVID-19-mRNA Impfstoff)" as a vaccine name + And I click SAVE button in new Vaccination form + Then I back to tab number 1 + And I refresh current page + Then I check if Immunization area contains "Comirnaty (COVID-19-mRNA Impfstoff)" + Then I check if Immunization area contains "COVID-19 Impfstoff Moderna (mRNA-Impfstoff)" + And I click on See samples for this person button + And I check that number of displayed sample results is 2 + + @tmsLink=SORDEV-12095 @env_s2s_1 + Scenario: [S2S] Sample and Immunization - Change sample and immunization in target system + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Then API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given I log in as a Admin User + And I open the last created Case via API + Then I click on save button in the case popup + And I click NEW VACCINATION button for DE + And I fill new vaccination data in new Vaccination form for DE + And I click SAVE button in new Vaccination form + And I open the last created Case via API + When I click on New Sample in German + And I create a new Sample with positive test result for DE version + And I select the German words for Rapid Antigen Detection Test as Type of Test in the Create New Sample popup + And I save the created sample with pathogen test + And I open the last created Case via API + Then I click on share case button + And I select organization to share with "s2s_2" + And I click to hand over the ownership of the case in Share popup + And I fill comment in share popup with random string + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment in new driver tab + And I log in as a Admin User + And I click on the Shares button from navbar + And I click on "accept" shared case button with copied case description + And I click on the Cases button from navbar + And I filter by CaseID on Case directory page + And I check that number of displayed cases results is 1 + Then I click on the first Case ID from Case Directory + And I click on edit Sample + Then I set type of sample to "Blut" + And I click on Save Button in Sample Edit page + Then I navigate to case tab + And I click on first vaccination edit button + And I set vaccine manufacturer to "Valneva" + Then I click on save button in New Immunization form + Then I back to tab number 1 + And I open the last created Case via API + And I click on first vaccination edit button + Then I check vaccine manufacturer is set to "Valneva" + Then I click on save button in New Immunization form + And I click on edit Sample + Then I check if type of sample is set to "Blut" + + @tmsLink=SORDEV-12449 @env_s2s_1 + Scenario: S2S_added sample after sharing a case/contact does not get shared [2] + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Then API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given I log in as a Admin User + And I open the last created Case via API + When I open the Case Contacts tab + Then I click on new contact button from Case Contacts tab + And I create a new basic contact to from Cases Contacts tab for DE + And I open the last created Case via API + Then I click on share case button + And I select organization to share with "s2s_2" + And I fill comment in share popup with random string + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment in new driver tab + Given I log in as a Admin User + And I click on the Shares button from navbar + And I accept first case in Shares Page + Then I back to tab number 1 + When I open the Case Contacts tab + And I click on the first Contact ID from Contacts Directory in Contacts in Case + And I click on New Sample in German + And I create a new Sample with only required fields for DE version + And I click on save sample button + And I click on share contact button + And I select organization to share with "s2s_2" + And I click to share samples of the case in Share popup + And I fill comment in share popup with random string + Then I click on share button in s2s share popup and wait for share to finish + And I click on New Sample in German + And I create a new Sample with only required fields for DE version + And I click on save sample button + Then I back to tab number 2 + And I click on the Shares button from navbar + And I accept first contact in Shares Page + And I click on the The Eye Icon located in the Shares Page + And I click on the shortened case/contact ID to open the case + Then I check that the number of added samples on the Edit case page is 2 + Then I back to tab number 1 + Then I check that the number of added samples on the Edit case page is 2 + + @tmsLink=SORDEV-12449 @env_s2s_1 + Scenario: S2S_added sample after sharing a case/contact does not get shared [1] + Given I log in as a Admin User + And I click on the Cases button from navbar + And I click on the NEW CASE button + Then I create a new case with specific person name and "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district for DE version + And I click on save button in the case popup + And I click on New Sample in German + And I create a new Sample with only required fields for DE version + And I click on save sample button + Then I click on share case button + And I select organization to share with "s2s_2" + And I click to share samples of the case in Share popup + And I fill comment in share popup with random string + Then I click on share button in s2s share popup and wait for share to finish + And I click on New Sample in German + And I create a new Sample with only required fields for DE version + And I click on save sample button + Then I navigate to "s2s_2" environment in new driver tab + And I log in as a Admin User + And I click on the Shares button from navbar + Then I accept first case in Shares Page + And I click on the The Eye Icon located in the Shares Page + And I click on the shortened case/contact ID to open the case + Then I check that the number of added samples on the Edit case page is 2 + + @tmsLink=SORDEV-12094 @env_s2s_1 + Scenario: [S2S] Mergen with hand over the ownership - merge for source system + Given I log in as a Admin User + And I click on the Cases button from navbar + And I click on the NEW CASE button + Then I create a new case with specific person name and "Hessen" region and "LK Fulda" district for DE version + Then I click on save button in the case popup + Then I navigate to "s2s_2" environment in new driver tab + And I log in as a Admin User + And I click on the Cases button from navbar + And I click on the NEW CASE button + Then I create a new case with specific person name and "Hessen" region and "LK Fulda" district for DE version + Then I click on save button in the case popup + Then I back to tab number 1 + Then I click on share case button + And I select organization to share with "s2s_2" + And I click to hand over the ownership of the case in Share popup + And I fill comment in share popup with random string + Then I click on share button in s2s share popup and wait for share to finish + Then I back to tab number 2 + And I click on the Shares button from navbar + And I click on "accept" shared case button with copied case description + Then I click on Okay button in Potential duplicate popup + And I click on the Cases button from navbar + And I click on the More button on Case directory page + Then I click on Merge Duplicates on Case directory page + And I click to CONFIRM FILTERS on Merge Duplicate Cases page + Then I click on Merge button for source system from received case + And I confirm merge duplicated case + Then I check if popup with merge message in german appears + + @tmsLink=SORDEV-12094 @env_s2s_1 + Scenario: [S2S] Mergen with hand over the ownership - merge for target system + Given I log in as a Admin User + And I click on the Cases button from navbar + And I click on the NEW CASE button + Then I create a new case with specific person name and "Hessen" region and "LK Fulda" district for DE version + Then I click on save button in the case popup + Then I navigate to "s2s_2" environment in new driver tab + And I log in as a Admin User + And I click on the Cases button from navbar + And I click on the NEW CASE button + Then I create a new case with specific person name and "Hessen" region and "LK Fulda" district for DE version + Then I click on save button in the case popup + Then I back to tab number 1 + Then I click on share case button + And I select organization to share with "s2s_2" + And I click to hand over the ownership of the case in Share popup + And I fill comment in share popup with random string + Then I click on share button in s2s share popup and wait for share to finish + Then I back to tab number 2 + And I click on the Shares button from navbar + And I click on "accept" shared case button with copied case description + Then I click on Okay button in Potential duplicate popup + And I click on the Cases button from navbar + And I click on the More button on Case directory page + Then I click on Merge Duplicates on Case directory page + And I click to CONFIRM FILTERS on Merge Duplicate Cases page + Then I click on Merge button for target system from received case + And I confirm merge duplicated case + Then I check if popup with merge message in german appears + + @tmsLink=SORDEV-12094 @env_s2s_1 + Scenario: [S2S] Mergen without hand over the ownership + Given I log in as a Admin User + And I click on the Cases button from navbar + And I click on the NEW CASE button + Then I create a new case with mandatory data with person name and "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district for DE version + Then I click on save button in the case popup + Then I navigate to "s2s_2" environment in new driver tab + And I log in as a Admin User + And I click on the Cases button from navbar + And I click on the NEW CASE button + Then I create a new case with mandatory data with person name and "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district for DE version + Then I click on save button in the case popup + Then I back to tab number 1 + Then I click on share case button + And I select organization to share with "s2s_2" + And I fill comment in share popup with random string + Then I click on share button in s2s share popup and wait for share to finish + Then I back to tab number 2 + And I click on the Shares button from navbar + And I click on "accept" shared case button with copied case description + Then I click on Okay button in Potential duplicate popup + And I click on the Cases button from navbar + And I click on the More button on Case directory page + Then I click on Merge Duplicates on Case directory page + And I click to CONFIRM FILTERS on Merge Duplicate Cases page + Then I click on Merge button for target system from received case + And I confirm merge duplicated case + Then I check if popup with merge duplicated case appears + And I click on cancel button in merge duplicated cases popup + Then I click on Merge button for source system from received case + And I confirm merge duplicated case + Then I check if popup with merge message in german appears + + @tmsLink=SORDEV-12445 @env_d2s + Scenario: S2S_Processed lab messages should be transferred [2] + Given API : Login to DEMIS server + Then I create and send Laboratory Notification + And I log in as a Admin User + Then I click on the Messages button from navbar + And I click on fetch messages button + Then I filter by last created person via API in Messages Directory + And I collect message data from searched record in Messages directory + And I click on process button for 1 result in Message Directory page + And I pick a new person in Pick or create person popup during case creation for DE + And I choose create new case in Pick or create entry form for DE + And I check that create new case form with pathogen detection reporting process is displayed for DE + And I fill only mandatory fields to convert laboratory message into a case for DE + And I click on save button in the case popup + And I check that new sample form with pathogen detection reporting process is displayed + And I click on save sample button + And I click on save sample button + And I click on the Cases button from navbar + And I search the case by last created person via Demis message + Then I click on the first Case ID from Case Directory + Then I click on share case button + And I select organization to share with "s2s_3" + And I fill comment in share popup with random string + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_3" environment in new driver tab + Given I log in as a Admin User + And I click on the Shares button from navbar + And I click on "accept" shared case button with copied case description + And I click on the Cases button from navbar + Then I filter by last created person via DEMIS API in Case Directory + And I apply "Zur Ansicht" to ownership combobox on Case Directory Page + Then I click on the first Case ID from Case Directory + And I check if edit sample button is unavailable + Then I back to tab number 1 + And I click on the Cases button from navbar + And I search the case by last created person via Demis message + Then I click on the first Case ID from Case Directory + And I click on edit Sample + + @tmsLink=SORDEV-11838 @env_s2s_1 + Scenario: [S2S] Test Avoiding simultaneous work of two health departments - preventing sharing twice to the same target system as long as the target system has not yet accepted or rejected for case with hand over the ownership [1] + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Then API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given I log in as a Admin User + And I open the last created Case via API + When I open the Case Contacts tab + Then I click on new contact button from Case Contacts tab + And I create a new basic contact to from Cases Contacts tab for DE + And I open the last created Case via API + Then I click on share case button + And I click to hand over the ownership of the case in Share popup + And I select organization to share with "s2s_2" + And I fill comment in share popup with random string + Then I click on share button in s2s share popup and wait for share to finish + And I open the last created Case via API + Then I click on share case button + And I select organization to share with "s2s_2" + And I fill comment in share popup with "shared with automated test" + Then I check if share warning is displayed + And I open the last created Case via API + Then I click on share case button + And I select organization to share with "s2s_3" + And I click to hand over the ownership of the case in Share popup + And I fill comment in share popup with "shared with automated test" + Then I click on share button in s2s share popup + And I check if popup with error with handover header displays + And I open the last created Case via API + And I click on revoke share button + Then I click on Ja button in Revoke case popup + Then I click on share case button + And I click to hand over the ownership of the case in Share popup + And I select organization to share with "s2s_2" + And I fill comment in share popup with random string + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment in new driver tab + Given I log in as a Admin User + And I click on the Shares button from navbar + And I click on "accept" shared case button with copied case description + + @tmsLink=SORDEV-11838 @env_s2s_1 + Scenario: [S2S] Test Avoiding simultaneous work of two health departments - preventing sharing twice to the same target system as long as the target system has not yet accepted or rejected for case without hand over the ownership [2] + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Then API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given I log in as a Admin User + And I open the last created Case via API + When I open the Case Contacts tab + Then I click on new contact button from Case Contacts tab + And I create a new basic contact to from Cases Contacts tab for DE + And I open the last created Case via API + Then I click on share case button + And I select organization to share with "s2s_2" + And I fill comment in share popup with random string + And I click to share samples of the case in Share popup + And I click to share reports of the case in Share popup + Then I click on share button in s2s share popup and wait for share to finish + And I open the last created Case via API + Then I click on share case button + And I select organization to share with "s2s_2" + And I fill comment in share popup with "shared with automated test" + Then I check if share warning is displayed + And I open the last created Case via API + Then I click on share case button + And I select organization to share with "s2s_3" + And I fill comment in share popup with "shared with automated test" + And I click to share samples of the case in Share popup + And I click to share reports of the case in Share popup + Then I click on share button in s2s share popup + And I open the last created Case via API + And I click on revoke share button + Then I click on Ja button in Revoke case popup + Then I click on share case button + And I select organization to share with "s2s_2" + And I fill comment in share popup with random string + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment in new driver tab + Given I log in as a Admin User + And I click on the Shares button from navbar + And I click on "accept" shared case button with copied case description + Then I back to tab number 1 + Then I click on share case button + And I select organization to share with "s2s_2" + And I fill comment in share popup with random string + And I click to hand over the ownership of the case in Share popup + Then I click on share button in s2s share popup and wait for share to finish + + @tmsLink=SORDEV-11838 @env_s2s_1 + Scenario: [S2S] Test Avoiding simultaneous work of two health departments - preventing sharing twice to the same target system as long as the target system has not yet accepted or rejected for contact with hand over the ownership [3] + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Then API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given I log in as a Admin User + And I open the last created Case via API + When I open the Case Contacts tab + Then I click on new contact button from Case Contacts tab + And I create a new basic contact to from Cases Contacts tab for DE + And I open the last created Case via API + Then I click on share case button + And I select organization to share with "s2s_2" + And I fill comment in share popup with random string + And I click to hand over the ownership of the case in Share popup + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to Contacts tab in Edit case page + And I open the first contact from contacts list + Then I click on share contact button + And I click to hand over the ownership of the case in Share popup + And I select organization to share with "s2s_2" + And I fill comment in share popup with random string + Then I click on share button in s2s share popup and wait for share to finish + Then I click on share contact button + And I select organization to share with "s2s_2" + And I fill comment in share popup with "shared with automated test" + Then I check if share warning is displayed + And I open the last created Case via API + Then I navigate to Contacts tab in Edit case page + And I open the first contact from contacts list + And I click on revoke share button + Then I click on Ja button in Revoke case popup + Then I click on share contact button + And I select organization to share with "s2s_2" + And I fill comment in share popup for contact with random string + And I click to hand over the ownership of the case in Share popup + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment in new driver tab + Given I log in as a Admin User + And I click on the Shares button from navbar + And I click on "accept" shared contact button with copied contact description + + @tmsLink=SORDEV-11838 @env_s2s_1 + Scenario: [S2S] Test Avoiding simultaneous work of two health departments - preventing sharing twice to the same target system as long as the target system has not yet accepted or rejected for contact without hand over the ownership [4] + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Then API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given I log in as a Admin User + And I open the last created Case via API + When I open the Case Contacts tab + Then I click on new contact button from Case Contacts tab + And I create a new basic contact to from Cases Contacts tab for DE + And I open the last created Case via API + Then I click on share case button + And I select organization to share with "s2s_2" + And I fill comment in share popup with random string + And I click to share samples of the case in Share popup + And I click to share reports of the case in Share popup + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to Contacts tab in Edit case page + And I open the first contact from contacts list + Then I click on share contact button + And I click to share samples of the case in Share popup + And I select organization to share with "s2s_2" + And I fill comment in share popup with random string + Then I click on share button in s2s share popup and wait for share to finish + Then I click on share contact button + And I select organization to share with "s2s_2" + And I fill comment in share popup with "shared with automated test" + Then I check if share warning is displayed + And I open the last created Case via API + Then I navigate to Contacts tab in Edit case page + And I open the first contact from contacts list + And I click on revoke share button + Then I click on Ja button in Revoke case popup + Then I click on share contact button + And I select organization to share with "s2s_2" + And I fill comment in share popup for contact with random string + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment in new driver tab + Given I log in as a Admin User + And I click on the Shares button from navbar + And I click on "accept" shared contact button with copied contact description + Then I back to tab number 1 + Then I click on share contact button + And I select organization to share with "s2s_2" + And I fill comment in share popup for contact with random string + And I click to hand over the ownership of the case in Share popup + Then I click on share button in s2s share popup and wait for share to finish + + @tmsLink=SORDEV-12447 @env_s2s_1 + Scenario: [S2S] S2S_deactivate share parameter 'share associated contacts' (for cases) [1] + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Then API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given I log in as a Admin User + And I open the last created Case via API + When I open the Case Contacts tab + Then I click on new contact button from Case Contacts tab + And I create a new basic contact to from Cases Contacts tab for DE + And I open the last created Case via API + Then I click on share case button + And I check that share associated contacts checkbox is not visible in Share form for DE + And I select organization to share with "s2s_2" + And I fill comment in share popup with random string + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment + Given I log in as a Admin User + And I click on the Shares button from navbar + And I click on the The Eye Icon located in the Shares Page + And I check that "KONTAKT-ID" column header is not visible in Share request details window for DE + + @tmsLink=SORDEV-12447 @env_s2s_1 + Scenario: [S2S] S2S_deactivate share parameter 'share associated contacts' (for cases) [2] + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Then API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given I log in as a Admin User + And I open the last created Case via API + When I open the Case Contacts tab + Then I click on new contact button from Case Contacts tab + And I create a new basic contact to from Cases Contacts tab for DE + And I open the last created Case via API + Then I click on share case button + And I select organization to share with "s2s_2" + And I fill comment in share popup with random string + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment in new driver tab + Given I log in as a Admin User + And I click on the Shares button from navbar + And I accept first case in Shares Page + Then I back to tab number 1 + When I open the Case Contacts tab + And I click on the first Contact ID from Contacts Directory in Contacts in Case + And I click on share contact button + And I check that share associated contacts checkbox is not visible in Share form for DE + And I select organization to share with "s2s_2" + And I fill comment in share popup with random string + Then I click on share button in s2s share popup and wait for share to finish + And I back to tab number 2 + And I click on the Shares button from navbar + And I click on the The Eye Icon located in the Shares Page + And I check that "FALL-ID" column header is not visible in Share request details window for DE + + @tmsLink=SORDEV-12081 @env_s2s_1 + Scenario: Accept Reject Special Cases [1] + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given I log in as a Admin User + Then I navigate to the last created case via the url + And I collect uuid of the case + Then I click on share case button + And I select organization to share with "s2s_2" + And I fill comment in share popup with random string + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment + Given I log in as a Admin User + And I click on the Shares button from navbar + And I click on "reject" shared case button with copied case description + Then I fill comment field in Reject share request popup and click confirm + Then I navigate to "s2s_1" environment + Then I navigate to the last created case via the url + And I check if reject share case button in Edit Case is unavailable + + @tmsLink=SORDEV-12081 @env_s2s_1 + Scenario: Accept Reject Special Cases [2] + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given I log in as a Admin User + Then I navigate to the last created case via the url + And I collect uuid of the case + Then I click on share case button + And I select organization to share with "s2s_2" + And I fill comment in share popup with random string + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment in new driver tab + Given I log in as a Admin User + And I click on the Shares button from navbar + And I click on "accept" shared case button with copied case description + Then I back to tab number 1 + And I click on revoke share button + Then I click on Ja button in Revoke case popup + And I check if popup with error with handover displays + + @tmsLink=SORDEV-12081 @env_s2s_1 + Scenario: Accept Reject Special Cases [3] + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given I log in as a Admin User + Then I navigate to the last created case via the url + And I collect uuid of the case + Then I click on share case button + And I select organization to share with "s2s_2" + And I fill comment in share popup with random string + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment + Given I log in as a Admin User + And I click on the Shares button from navbar + And I click on "reject" shared case button with copied case description + Then I fill comment field in Reject share request popup and click confirm + Then I navigate to "s2s_1" environment + Then I navigate to the last created case via the url + Then I click on share case button + And I select organization to share with "s2s_2" + And I fill comment in share popup with random string + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment + And I click on the Shares button from navbar + And I click on "reject" shared case button with copied case description + + @tmsLink=SORDEV-12081 @env_s2s_1 + Scenario: Accept Reject Special Cases [4] + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given I log in as a Admin User + Then I navigate to the last created case via the url + And I collect uuid of the case + Then I click on share case button + And I click to hand over the ownership of the case in Share popup + And I select organization to share with "s2s_2" + And I fill comment in share popup with random string + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment + Given I log in as a Admin User + And I click on the Shares button from navbar + And I click on "accept" shared case button with copied case description + Then I navigate to "s2s_1" environment + Then I navigate to the last created case via the url without check if uuid is enabled + And I check if share case button in Edit Case is unavailable + + @tmsLink=SORDEV-12081 @env_s2s_1 + Scenario: Accept Reject Special Cases [5] + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given I log in as a Admin User + Then I navigate to the last created case via the url + And I collect uuid of the case + Then I click on share case button + And I click to hand over the ownership of the case in Share popup + And I select organization to share with "s2s_2" + And I fill comment in share popup with random string + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment in new driver tab + Given I log in as a Admin User + And I click on the Shares button from navbar + Then I back to tab number 1 + And I click on revoke share button + Then I click on Ja button in Revoke case popup + Then I back to tab number 2 + And I click on "accept" shared case button with copied case description + And I check if popup with error with handover displays + + @tmsLink=SORDEV-12081 @env_s2s_1 + Scenario: Accept Reject Special Cases [6] + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given I log in as a Admin User + Then I navigate to the last created case via the url + And I collect uuid of the case + Then I click on share case button + And I click to hand over the ownership of the case in Share popup + And I select organization to share with "s2s_2" + And I fill comment in share popup with random string + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment in new driver tab + Given I log in as a Admin User + And I click on the Shares button from navbar + Then I back to tab number 1 + And I click on revoke share button + Then I click on Ja button in Revoke case popup + Then I back to tab number 2 + And I click on "reject" shared case button with copied case description + Then I fill comment field in Reject share request popup and click confirm + And I check if popup with error with handover displays + + @tmsLink=SORDEV-12445 @env_d2s + Scenario: S2S_Processed lab messages should be transferred [1] + Given API : Login to DEMIS server + Then I create and send Laboratory Notification + And I log in as a Admin User + Then I click on the Messages button from navbar + And I click on fetch messages button + Then I filter by last created person via API in Messages Directory + And I collect message data from searched record in Messages directory + And I click on process button for 1 result in Message Directory page + And I pick a new person in Pick or create person popup during case creation for DE + And I choose create new case in Pick or create entry form for DE + And I check that create new case form with pathogen detection reporting process is displayed for DE + And I fill only mandatory fields to convert laboratory message into a case for DE + And I click on save button in the case popup + And I check that new sample form with pathogen detection reporting process is displayed + And I click on save sample button + And I click on save sample button + And I click on the Cases button from navbar + And I search the case by last created person via Demis message + Then I click on the first Case ID from Case Directory + Then I click on share case button + And I click to hand over the ownership of the case in Share popup + And I select organization to share with "s2s_3" + And I fill comment in share popup with random string + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_3" environment in new driver tab + Given I log in as a Admin User + And I click on the Shares button from navbar + And I click on "accept" shared case button with copied case description + And I click on the Cases button from navbar + Then I filter by last created person via DEMIS API in Case Directory + Then I click on the first Case ID from Case Directory + And I click on edit Sample + Then I back to tab number 1 + And I click on the Cases button from navbar + And I apply "Zur Ansicht" to ownership combobox on Case Directory Page + And I search the case by last created person via Demis message + Then I click on the first Case ID from Case Directory + And I check if edit sample button is unavailable + + @tmsLink=SORDEV-12087 @env_s2s_1 + Scenario: Delete a case in source system with handing ownership + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given I log in as a Admin User + Then I navigate to the last created case via the url + And I collect uuid of the case + Then I click on share case button + And I click to hand over the ownership of the case in Share popup + And I select organization to share with "s2s_2" + And I fill comment in share popup with "shared with automated test" + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment + Given I log in as a Admin User + And I click on the Shares button from navbar + Then I accept first case in Shares Page + Then I navigate to "s2s_1" environment + And I click on the Cases button from navbar + And I filter by CaseID on Case directory page + And I apply "Alle" to ownership combobox on Case Directory Page + And I apply "Alle aktiven und archivierten Fälle" to combobox on Case Directory Page + And I click APPLY BUTTON in Case Directory Page + And I click on the More button on Case directory page + And I click Enter Bulk Edit Mode on Case directory page + And I click SHOW MORE FILTERS button on Case directory page + And I click checkbox to choose all Case results + And I click on Bulk Actions combobox on Case Directory Page + Then I click on Delete button from Bulk Actions Combobox in Case Directory + And I set Reason for deletion as "Löschen auf Anforderung der betroffenen Person nach DSGVO" + And I click on Yes option in Confirm deletion popup + Then I navigate to "s2s_2" environment + And I click on the Cases button from navbar + And I apply "Alle" to ownership combobox on Case Directory Page + And I apply "Alle aktiven und archivierten Fälle" to combobox on Case Directory Page + Then I click on the APPLY FILTERS button + And I select first created case for person from Cases list + Then I check if editable fields are read only for an archived case + + @tmsLink=SORDEV-12087 @env_s2s_1 + Scenario: Delete a case in target system with handing ownership + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given I log in as a Admin User + Then I navigate to the last created case via the url + And I collect uuid of the case + Then I click on share case button + And I click to hand over the ownership of the case in Share popup + And I select organization to share with "s2s_2" + And I fill comment in share popup with "shared with automated test" + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment + Given I log in as a Admin User + And I click on the Shares button from navbar + Then I accept first case in Shares Page + And I click on the Cases button from navbar + And I select first created case for person from Cases list + Then I click on Delete button from case + And I set Reason for deletion as "Löschen auf Anforderung der betroffenen Person nach DSGVO" + And I click on Yes option in Confirm deletion popup + Then I navigate to "s2s_1" environment + And I click on the Cases button from navbar + And I apply "Alle" to ownership combobox on Case Directory Page + And I apply "Alle aktiven und archivierten Fälle" to combobox on Case Directory Page + Then I click on the APPLY FILTERS button + And I select first created case for person from Cases list + Then I check if editable fields are read only for an archived case + + @tmsLink=SORDEV-12087 @env_s2s_1 + Scenario: Delete a case in source system without handing ownership + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given I log in as a Admin User + Then I navigate to the last created case via the url + And I collect uuid of the case + Then I click on share case button + And I select organization to share with "s2s_2" + And I fill comment in share popup with "shared with automated test" + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment + And I log in as a Admin User + And I click on the Shares button from navbar + Then I accept first case in Shares Page + Then I navigate to "s2s_1" environment + Then I navigate to the last created case via the url + Then I click on Delete button from case + And I set Reason for deletion as "Löschen auf Anforderung der betroffenen Person nach DSGVO" + And I click on Yes option in Confirm deletion popup + Then I navigate to "s2s_2" environment + And I click on the Cases button from navbar + And I apply "Alle" to ownership combobox on Case Directory Page + And I apply "Alle aktiven und archivierten Fälle" to combobox on Case Directory Page + Then I click on the APPLY FILTERS button + And I select first created case for person from Cases list + Then I check if editable fields are read only for an archived case + + @tmsLink=SORDEV-12087 @env_s2s_1 + Scenario: Delete a case in target system without handing ownership + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given I log in as a Admin User + Then I navigate to the last created case via the url + And I collect uuid of the case + Then I click on share case button + And I select organization to share with "s2s_2" + And I fill comment in share popup with "shared with automated test" + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment + Given I log in as a Admin User + And I click on the Shares button from navbar + Then I accept first case in Shares Page + And I click on the Cases button from navbar + And I filter by CaseID on Case directory page + And I apply "Alle" to ownership combobox on Case Directory Page + And I apply "Alle aktiven und archivierten Fälle" to combobox on Case Directory Page + And I click APPLY BUTTON in Case Directory Page + And I click on the More button on Case directory page + And I click Enter Bulk Edit Mode on Case directory page + And I click SHOW MORE FILTERS button on Case directory page + And I click checkbox to choose all Case results + And I click on Bulk Actions combobox on Case Directory Page + Then I click on Delete button from Bulk Actions Combobox in Case Directory + And I set Reason for deletion as "Löschen auf Anforderung der betroffenen Person nach DSGVO" + And I click on Yes option in Confirm deletion popup + Then I navigate to "s2s_1" environment + Then I navigate to the last created case via the url + + @tmsLink=SORDEV-12087 @env_s2s_1 + Scenario: Delete a case in source system with handing ownership before acceptance + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given I log in as a Admin User + Then I navigate to the last created case via the url + Then I click on share case button + And I select organization to share with "s2s_2" + And I fill comment in share popup with "shared with automated test" + Then I click on share button in s2s share popup and wait for share to finish + Then I click on Delete button from case + And I set Reason for deletion as "Löschen auf Anforderung der betroffenen Person nach DSGVO" + And I click on Yes option in Confirm deletion popup + Then I navigate to "s2s_2" environment + Given I log in as a Admin User + And I click on the Shares button from navbar + And I click on the The Eye Icon located in the Shares Page + Then I check that first shared result has different id then deleted shared case + + @tmsLink=SORQA-478 @env_s2s_1 + Scenario: Test send case to another instance using S2S connection + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given I log in as a Admin User + Then I navigate to the last created case via the url + And I collect uuid of the case + Then I click on share case button + And I select organization to share with "s2s_2" + And I fill comment in share popup with "shared with automated test" + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment + Given I log in as a Admin User + And I click on the Shares button from navbar + Then I click on the The Eye Icon located in the Shares Page + And I check if received case id is equal with sent diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/SharedContacts.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/SharedContacts.feature new file mode 100644 index 00000000000..d1562b8610c --- /dev/null +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/SharedContacts.feature @@ -0,0 +1,298 @@ +@UI @Sanity @ShareContacts @SharedData +Feature: Sharing contacts between environments tests + + @tmsLink=SORDEV-13951 @env_s2s_1 + Scenario: S2S - Share a Contact without having a sample + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Then API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Then I log in as a Admin User + When I click on the Contacts button from navbar + And I click on the NEW CONTACT button + And I fill a new contact form for DE version with mandatory data with "Baden-Württemberg" as a region and "LK Alb-Donau-Kreis" as a disctrict + And I click on SAVE new contact button + And I copy url of current contact + And I click on share contact button + Then I check if popup with "Kontakt kann nicht geteilt werden" title appears + And I click on okay button + And I click on the CHOOSE SOURCE CASE button from CONTACT page + Then I search for the last case uuid created via Api in the CHOOSE SOURCE Contact window + And I open the first found result in the CHOOSE SOURCE window for DE version + Then I click SAVE button on Edit Contact Page + And I click on share contact button + And I select organization to share with "s2s_2" + Then I check if warning information with related to the associated case not being shared appears in share contact popup + And I click on discard button + Then I open the Case Contacts tab + And I navigate to case tab + Then I click on share case button + And I select organization to share with "s2s_2" + And I fill comment in share popup with random string + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to Contacts tab in Edit case page + And I open the first contact from contacts list + And I click on share contact button + And I select organization to share with "s2s_2" + And I fill comment in share popup for contact with random string + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment in new driver tab + And I log in as a Admin User + And I click on the Shares button from navbar + And I click on "accept" shared contact button with copied contact description + Then I check if a warning pop-up message appears that the Case should be accepted first + And I click on "accept" shared case button with copied case description + And I click on "accept" shared contact button with copied contact description + Then I open last created Case via API on "s2s_2" instance + And I check that the value selected from Disease combobox is "COVID-19" on Edit Case page + + @tmsLink=SORDEV-13952 @env_s2s_1 + Scenario: S2S - Share a Contact having a sample + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Then API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Then I log in as a Admin User + When I click on the Contacts button from navbar + And I click on the NEW CONTACT button + And I fill a new contact form for DE version with mandatory data with "Baden-Württemberg" as a region and "LK Alb-Donau-Kreis" as a disctrict + And I click on SAVE new contact button + And I copy url of current contact + Then I click on New Sample in German + And I create a new Sample with positive test result for DE version with "Voreingestelltes Labor" as a labor + And I save the created sample with pathogen test + And I confirm when a pop-up appears asking user about creating a Case from it in DE + Then I fill a new case form for DE version with mandatory data forced by positive sample with "Berlin" as a region and "SK Berlin Mitte" as a district + And I save a new case + And I collect uuid of the case + Then I back to contact by url + And I click on share contact button + Then I check if popup with "Kontakt kann nicht geteilt werden" header appears + And I click on okay button + Then I click on the CHOOSE SOURCE CASE button from CONTACT page + And I search for the last case uuid created via Api in the CHOOSE SOURCE Contact window + And I open the first found result in the CHOOSE SOURCE window for DE version + Then I click SAVE button on Edit Contact Page + Then I open the Case Contacts tab + Then I navigate to case tab + Then I click on share case button + And I select organization to share with "s2s_2" + And I click to hand over the ownership of the case in Share popup + And I fill comment in share popup with random string + Then I click on share button in s2s share popup and wait for share to finish + Then I open the Case Contacts tab + And I click on the first Contact ID from Contacts Directory in Contacts in Case + And I click on share contact button + And I select organization to share with "s2s_2" + And I click to hand over the ownership of the contact in Share popup + And I fill comment in share popup for contact with random string + Then I click on share button in s2s share popup + And I check if popup with error with handover header displays + + @tmsLink=SORDEV-12087 @env_s2s_1 @precon @LanguageRisk + Scenario: Delete a contact in source system with handing ownership + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given API: I create a new contact with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district linked to last created case + And API: I check that POST call status code is 200 + Given I log in as a Admin User + Then I navigate to the last created case via the url + And I collect uuid of the case + Then I click on share case button + And I select organization to share with "s2s_2" + And I fill comment in share popup with "shared with automated test" + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment + Given I log in as a Admin User + And I click on the Shares button from navbar + Then I accept first case in Shares Page + Then I navigate to "s2s_1" environment + Then I open the last created contact via API + Then I click on share contact button + And I click to hand over the ownership of the contact in Share popup + And I select organization to share with "s2s_2" + And I fill comment in share popup with "shared with automated test" + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment + And I click on the Shares button from navbar + Then I accept first contact in Shares Page + And I click to accept potential duplicate in Shares Page + Then I navigate to "s2s_1" environment + And I click on the Contacts button from navbar + Then I apply Id of last api created Contact on Contact Directory Page + And I apply "Alle" to ownership combobox on Case Directory Page + And I click on the APPLY FILTERS button + Then I click on the More button on Contact directory page + And I click Enter Bulk Edit Mode on Contact directory page + And I click checkbox to choose all Contact results on Contact Directory Page + And I click on Bulk Actions combobox on Contact Directory Page + Then I click on Delete button from Bulk Actions Combobox in Contact Directory + And I set Reason for deletion as "Löschen auf Anforderung der betroffenen Person nach DSGVO" + And I click on Yes option in Confirm deletion popup + Then I navigate to "s2s_2" environment + Then I open the last created contact via API + + @tmsLink=SORDEV-12087 @tmsLink=SORQA-961 @env_s2s_1 + Scenario: Delete a contact in target system with handing ownership + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given API: I create a new contact with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district linked to last created case + And API: I check that POST call status code is 200 + Given I log in as a Admin User + Then I navigate to the last created case via the url + And I collect uuid of the case + Then I click on share case button + And I select organization to share with "s2s_2" + And I fill comment in share popup with "shared with automated test" + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment + Given I log in as a Admin User + And I click on the Shares button from navbar + Then I accept first case in Shares Page + Then I navigate to "s2s_1" environment + Then I open the last created contact via API + Then I click on share contact button + And I click to hand over the ownership of the contact in Share popup + And I select organization to share with "s2s_2" + And I fill comment in share popup with "shared with automated test" + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment + And I click on the Shares button from navbar + Then I accept first contact in Shares Page + And I click to accept potential duplicate in Shares Page + Then I open the last created contact via API + Then I click on Delete button from contact + And I set Reason for deletion as "Löschen auf Anforderung der betroffenen Person nach DSGVO" + And I click on Yes option in Confirm deletion popup + Then I navigate to "s2s_1" environment + And I click on the Contacts button from navbar + Then I apply Id of last api created Contact on Contact Directory Page + And I apply "Alle" to ownership combobox on Case Directory Page + And I click on the APPLY FILTERS button + And I open the first contact from contacts list + And I check if editable fields are read only for shared contact + And I check if handover card contains "Eigentümer: LK Fulda" information + And I check if handover card contains "Geteilt von: Automation ADMIN" information + And I check if handover card contains "shared with automated test" information + + @tmsLink=SORDEV-12087 @env_s2s_1 + Scenario: Delete a contact in source system without handing ownership + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given API: I create a new contact with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district linked to last created case + And API: I check that POST call status code is 200 + Given I log in as a Admin User + Then I navigate to the last created case via the url + And I collect uuid of the case + Then I click on share case button + And I select organization to share with "s2s_2" + And I fill comment in share popup with "shared with automated test" + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment + Given I log in as a Admin User + And I click on the Shares button from navbar + Then I accept first case in Shares Page + Then I navigate to "s2s_1" environment + Then I open the last created contact via API + Then I click on share contact button + And I select organization to share with "s2s_2" + And I fill comment in share popup with "shared with automated test" + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment + And I click on the Shares button from navbar + Then I accept first contact in Shares Page + And I click to accept potential duplicate in Shares Page + And I navigate to "s2s_1" environment + Then I open the last created contact via API + Then I click on Delete button from contact + And I set Reason for deletion as "Löschen auf Anforderung der betroffenen Person nach DSGVO" + And I click on Yes option in Confirm deletion popup + Then I navigate to "s2s_2" environment + And I click on the Contacts button from navbar + Then I apply Id of last api created Contact on Contact Directory Page + And I apply "Alle" to ownership combobox on Case Directory Page + And I click on the APPLY FILTERS button + And I open the first contact from contacts list + And I check if editable fields are read only for shared contact + + @tmsLink=SORDEV-12087 @env_s2s_1 + Scenario: Delete a contact in target system without handing ownership + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given API: I create a new contact with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district linked to last created case + And API: I check that POST call status code is 200 + Given I log in as a Admin User + Then I navigate to the last created case via the url + And I collect uuid of the case + Then I click on share case button + And I select organization to share with "s2s_2" + And I fill comment in share popup with "shared with automated test" + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment + Given I log in as a Admin User + And I click on the Shares button from navbar + Then I accept first case in Shares Page + Then I navigate to "s2s_1" environment + Then I open the last created contact via API + Then I click on share contact button + And I select organization to share with "s2s_2" + And I fill comment in share popup with "shared with automated test" + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment + And I click on the Shares button from navbar + Then I accept first contact in Shares Page + And I click to accept potential duplicate in Shares Page + And I click on the Contacts button from navbar + Then I apply Id of last api created Contact on Contact Directory Page + And I apply "Alle" to ownership combobox on Case Directory Page + And I click on the APPLY FILTERS button + Then I click on the More button on Contact directory page + And I click Enter Bulk Edit Mode on Contact directory page + And I click checkbox to choose all Contact results on Contact Directory Page + And I click on Bulk Actions combobox on Contact Directory Page + Then I click on Delete button from Bulk Actions Combobox in Contact Directory + And I set Reason for deletion as "Löschen auf Anforderung der betroffenen Person nach DSGVO" + And I click on Yes option in Confirm deletion popup + Then I navigate to "s2s_1" environment + Then I open the last created contact via API + + @tmsLink=SORDEV-12087 @env_s2s_1 + Scenario: Delete a contact in source system with handing ownership before acceptance + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given API: I create a new contact with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district linked to last created case + And API: I check that POST call status code is 200 + Given I log in as a Admin User + Then I navigate to the last created case via the url + Then I click on share case button + And I select organization to share with "s2s_2" + And I fill comment in share popup with "shared with automated test" + Then I click on share button in s2s share popup and wait for share to finish + Then I navigate to "s2s_2" environment + Given I log in as a Admin User + And I click on the Shares button from navbar + Then I accept first case in Shares Page + Then I navigate to "s2s_1" environment + Then I open the last created contact via API + Then I click on share contact button + And I select organization to share with "s2s_2" + And I click to hand over the ownership of the contact in Share popup + And I fill comment in share popup with "shared with automated test" + Then I click on share button in s2s share popup and wait for share to finish + Then I click on Delete button from contact + And I set Reason for deletion as "Löschen auf Anforderung der betroffenen Person nach DSGVO" + And I click on Yes option in Confirm deletion popup + Then I navigate to "s2s_2" environment + And I click on the Shares button from navbar + And I click on the The Eye Icon located in the Shares Page + And I check that first shared result has different id then deleted shared contact \ No newline at end of file diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/SharedPersons.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/SharedPersons.feature new file mode 100644 index 00000000000..e6810b68cb1 --- /dev/null +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/SharedPersons.feature @@ -0,0 +1,192 @@ +@UI @Sanity @SharePersons @SharedData +Feature: Sharing persons between environments tests + + @tmsLink=SORDEV-12088 @env_s2s_1 + Scenario: [S2S] Simultaneous Work on Person [1] + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given API: I create a new contact with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district linked to last created case + And API: I check that POST call status code is 200 + Given I log in as a Admin User + Then I navigate to the last created case via the url + And I collect uuid of the case + Then I click on share case button + And I click to hand over the ownership of the contact in Share popup + And I select organization to share with "s2s_2" + And I fill comment in share popup with "shared with automated test" + Then I click on share button in s2s share popup and wait for share to finish + And I navigate to "s2s_2" environment in new driver tab + Given I log in as a Admin User + And I click on the Shares button from navbar + Then I accept first case in Shares Page + When I back to tab number 1 + Then I navigate to "s2s_1" environment + Then I open the last created contact via API + And I click on share contact button + And I click to hand over the ownership of the contact in Share popup + And I select organization to share with "s2s_2" + And I fill comment in share popup with "shared with automated test" + Then I click on share button in s2s share popup and wait for share to finish + When I back to tab number 2 + And I navigate to "s2s_2" environment + And I click on the Shares button from navbar + Then I accept first contact in Shares Page + And I click to accept potential duplicate in Shares Page + And I click on the Contacts button from navbar + And I open the first contact from contacts list + Then I open Contact Person tab + And I change first name of person from Edit person page + When I back to tab number 2 + Then I navigate to "s2s_2" environment + And I open the last created contact via API + Then I open Contact Person tab + And I check if first name of person has been changed + + @tmsLink=SORDEV-12088 @env_s2s_1 + Scenario: [S2S] Simultaneous Work on Person [2] + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given I log in as a Admin User + Then I navigate to the last created case via the url + And I collect uuid of the case + Then I click on share case button + And I click to hand over the ownership of the contact in Share popup + And I select organization to share with "s2s_2" + And I fill comment in share popup with "shared with automated test" + Then I click on share button in s2s share popup and wait for share to finish + And I navigate to "s2s_2" environment in new driver tab + Given I log in as a Admin User + And I click on the Shares button from navbar + Then I accept first case in Shares Page + And I click on the Cases button from navbar + And I filter Cases by collected case uuid + And I click on the first Case ID from Case Directory + And I navigate to case person tab + And I change first name of person from Edit person page + When I back to tab number 1 + Then I navigate to "s2s_1" environment + And I open the last created case via API and check if Edit case page is read only + And I navigate to case person tab + And I check if first name of person has been changed + + @tmsLink=SORDEV-12088 @env_s2s_1 + Scenario: [S2S] Simultaneous Work on Person [3] + Given I log in as a Admin User + And I click on the Cases button from navbar + And I click on the NEW CASE button + And I fill new case data for duplicates merge with for one person data for DE + And I save a new case + And I collect uuid of the case + Then I click on share case button + And I select organization to share with "s2s_2" + And I fill comment in share popup with "shared with automated test" + Then I click on share button in s2s share popup and wait for share to finish + And I navigate to "s2s_2" environment in new driver tab + Given I log in as a Admin User + And I click on the Shares button from navbar + Then I accept first case in Shares Page + And I click on the The Eye Icon located in the Shares Page + And I click on the shortened case/contact ID to open the case + And I check if editable fields are read only for shared case/contact + And I navigate to case person tab + And I check if editable fields are read only for person case/contact tab + And I click on the Cases button from navbar + And I click on the NEW CASE button + And I fill new case data for duplicates merge with for one person data for DE + And I click on SAVE new case button and choose same person in duplicate detection + And I choose same case in duplicate detection and save for DE + And I check if editable fields are read only for shared case/contact + And I navigate to case person tab + And I check if editable fields are read only for person case/contact tab + And I copy uuid of current person + And I click on the Persons button from navbar + And I search by copied uuid of the person in Person Directory for DE + And I click on first person in person directory + Then I check if editable fields are read only for person + And I click on the Cases button from navbar + And I click on the NEW CASE button + And I fill new case data for duplicates merge with for one person data for DE + And I click on SAVE new case button and choose same person in duplicate detection + And I choose create new case in Pick or create entry form for DE + And I navigate to case person tab + And I change first name of person from Edit person page + And I click on the Persons button from navbar + And I search by copied uuid of the person in Person Directory for DE + And I click on first person in person directory + And I check if first name of person has been changed + When I back to tab number 1 + And I navigate to case person tab + Then I check if first name of person from case has not been changed + + @tmsLink=SORDEV-12088 @env_s2s_1 + Scenario: [S2S] Simultaneous Work on Person [4] + Given API: I create a new person with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district + And API: I check that POST call status code is 200 + Given API: I create a new case with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district and "General Hospital" facility + And API: I check that POST call status code is 200 + Given I log in as a Admin User + And I click on the Contacts button from navbar + And I click on the NEW CONTACT button + And I fill a new contact form with same person data with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district for DE version + And I click on save Contact button + And I collect contact UUID displayed on Edit Contact Page + And I click on the CHOOSE SOURCE CASE button from CONTACT page + And I click yes on the DISCARD UNSAVED CHANGES popup from CONTACT page + And I search for the last case uuid created via Api in the CHOOSE SOURCE Contact window + And I open the first found result in the CHOOSE SOURCE window for DE version + Then I click SAVE button on Edit Contact Page + Then I navigate to the last created case via the url + Then I click on share case button + And I select organization to share with "s2s_2" + And I fill comment in share popup with "shared with automated test" + Then I click on share button in s2s share popup and wait for share to finish + And I navigate to "s2s_2" environment in new driver tab + Given I log in as a Admin User + And I click on the Shares button from navbar + Then I accept first case in Shares Page + When I back to tab number 1 + And I navigate to Contacts tab in Edit case page + And I open a contact using the collected contact UUID + Then I click on share contact button + And I select organization to share with "s2s_2" + And I fill comment in share popup with "shared with automated test" + Then I click on share button in s2s share popup and wait for share to finish + When I back to tab number 2 + And I click on the Shares button from navbar + Then I accept first contact in Shares Page + And I click on the The Eye Icon located in the Shares Page + And I click on the shortened case/contact ID to open the case + And I check if editable fields are read only for shared case/contact + And I open Contact Person tab + And I check if editable fields are read only for person case/contact tab + And I click on the Contacts button from navbar + And I click on the NEW CONTACT button + And I fill a new contact form with same person data with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district for DE version + And I click on SAVE new case button and choose same person in duplicate detection + And I choose same contact in duplicate detection and save for DE + And I check if editable fields are read only for shared case/contact + And I open Contact Person tab + And I check if editable fields are read only for person case/contact tab + And I copy uuid of current person + And I click on the Persons button from navbar + And I search by copied uuid of the person in Person Directory for DE + And I click on first person in person directory + Then I check if editable fields are read only for person + And I click on the Contacts button from navbar + And I click on the NEW CONTACT button + And I fill a new contact form with same person data with "Baden-Württemberg" region and "LK Alb-Donau-Kreis" district for DE version + And I click on SAVE new case button and choose same person in duplicate detection + And I choose create new contact in Pick or create entry form for DE + And I open Contact Person tab + And I change first name of person from Edit person page + And I click on the Persons button from navbar + And I search by copied uuid of the person in Person Directory for DE + And I click on first person in person directory + And I check if first name of person has been changed + When I back to tab number 1 + And I open Contact Person tab + And I check if first name of person from contact has not been changed \ No newline at end of file diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/Survnet.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/Survnet.feature new file mode 100644 index 00000000000..5ca0bd714a2 --- /dev/null +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/Survnet.feature @@ -0,0 +1,9 @@ +@UI @Sanity @env_survnet +Feature: Survnet tests + + @tmsLink=SORQA-963 @precon + Scenario: Test SurvNet Converter installed correctly + Given I log in as a Admin User + When I click on the About button from navbar + Then I check that the Survnet Converter version is not an unavailable on About directory + And I check that the Survnet Converter version is correctly displayed on About directory \ No newline at end of file diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/Task.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/Task.feature index 7078be9b3d4..88fe8cd992f 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/Task.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/Task.feature @@ -31,13 +31,13 @@ Feature: Tasks functionalities @env_main Scenario: Check all fields from the created Task in the Task Management table Given API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given API: I create a new contact - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 And API: I create a new task - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a Surveillance Officer And I click on the Tasks button from navbar @@ -48,16 +48,16 @@ Feature: Tasks functionalities @tmsLink=SORDEV-6080 @env_main Scenario: Bulk deleting tasks in Task Directory Given API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given API: I create a new contact - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 And API: I create a new task - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 And API: I create a new task - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a Admin User And I click on the Tasks button from navbar @@ -74,16 +74,16 @@ Feature: Tasks functionalities @tmsLink=SORDEV-6080 @env_main Scenario: Bulk archiving tasks in Task Directory Given API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given API: I create a new contact - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 And API: I create a new task - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 And API: I create a new task - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a Admin User And I click on the Tasks button from navbar @@ -100,16 +100,16 @@ Feature: Tasks functionalities @tmsLink=SORDEV-6080 @env_main Scenario: Bulk editing tasks in Task Directory Given API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given API: I create a new contact - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 And API: I create a new task - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 And API: I create a new task - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a Admin User And I click on the Tasks button from navbar @@ -129,13 +129,13 @@ Feature: Tasks functionalities @tmsLink=SORDEV-9156 @env_main Scenario: Check the task observer is added Given API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given API: I create a new contact - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 And API: I create a new task - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User And I click on the Tasks button from navbar @@ -238,13 +238,13 @@ Feature: Tasks functionalities @tmsLink=SORDEV-12438 @env_main Scenario: Test add task status Progress in task edit page Given API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given API: I create a new contact - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 And API: I create a new task - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a National User And I click on the Tasks button from navbar diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/TaskManagementFilter.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/TaskManagementFilter.feature index 1d7cc96c477..6227180967b 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/TaskManagementFilter.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/TaskManagementFilter.feature @@ -36,10 +36,8 @@ Feature: Tasks filtering functionalities @#8554 @env_main Scenario: Verify task displays District and Region in results grid from Case used to create the task Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Given I log in as a Surveillance Officer Then I navigate to the last created case via the url diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/TravelEntry.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/TravelEntry.feature index b23f43395c5..57e7b05cc30 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/TravelEntry.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/TravelEntry.feature @@ -468,10 +468,10 @@ Feature: Create travel entries @tmsLink=SORQA-669 @env_de @oldfake Scenario: Check automatic deletion of TRAVEL_ENTRY origin 16 days ago Given API: I create a new person - And API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then API: I create a new travel entry with creation date 16 days ago - And API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then I log in as a Admin User And I open the last created travel entry via api @@ -488,10 +488,9 @@ Feature: Create travel entries @tmsLink=SORQA-678 @env_de @oldfake Scenario: Check automatic deletion NOT of TRAVEL_ENTRY origin 13 days ago Given API: I create a new person - Then API: I check that POST call body is "OK" And API: I check that POST call status code is 200 Then API: I create a new travel entry with creation date 13 days ago - And API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then I log in as a Admin User And I open the last created travel entry via api diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/UserRightsActions.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/UserRightsActions.feature index 68870595059..2ea29d58011 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/UserRightsActions.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/UserRightsActions.feature @@ -42,7 +42,7 @@ Feature: User actions based on their rights @#8564 @env_main Scenario Outline: Check user can see batch edit mode button for event participants Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a Then I open the last created event via api diff --git a/sormas-e2e-tests/src/test/resources/features/sanity/web/Vaccination.feature b/sormas-e2e-tests/src/test/resources/features/sanity/web/Vaccination.feature index 8508ed6f1a9..e03870e1f2d 100644 --- a/sormas-e2e-tests/src/test/resources/features/sanity/web/Vaccination.feature +++ b/sormas-e2e-tests/src/test/resources/features/sanity/web/Vaccination.feature @@ -4,10 +4,10 @@ Feature: Vaccination tests @tmsLink=SORDEV-9585 @env_de Scenario: Test Add reduced vaccination module to document creation for Contact When API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then API: I create a new contact - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a Admin User And I click on the Configuration button from navbar @@ -32,10 +32,10 @@ Feature: Vaccination tests @tmsLink=SORDEV-9585 @env_de Scenario: Test Add reduced vaccination module to document creation for Case When API: I create a new person - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Then API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a Admin User And I click on the Configuration button from navbar @@ -60,7 +60,7 @@ Feature: Vaccination tests @tmsLink=SORDEV-9585 @env_de Scenario: Test Add reduced vaccination module to document creation for Event Given API: I create a new event - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a Admin User And I click on the Configuration button from navbar @@ -338,10 +338,10 @@ Feature: Vaccination tests @tmsLink=SORDEV-11753 @env_de Scenario: Duplicate detection for vaccinations when merging contacts [1] Given API: I create a new person - And API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a Admin User When I click on the Contacts button from navbar @@ -394,10 +394,10 @@ Feature: Vaccination tests @tmsLink=SORDEV-11753 @env_de Scenario: Duplicate detection for vaccinations when merging contacts [2] Given API: I create a new person - And API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a Admin User When I click on the Contacts button from navbar @@ -451,10 +451,10 @@ Feature: Vaccination tests @tmsLink=SORDEV-11753 @env_de Scenario: Duplicate detection for vaccinations when merging contacts [3] Given API: I create a new person - And API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a Admin User When I click on the Contacts button from navbar @@ -510,10 +510,10 @@ Feature: Vaccination tests @tmsLink=SORDEV-11753 @env_de Scenario: Duplicate detection for vaccinations when merging contacts[4] Given API: I create a new person - And API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a Admin User When I click on the Contacts button from navbar @@ -569,10 +569,10 @@ Feature: Vaccination tests @tmsLink=SORDEV-11753 @env_de Scenario: Duplicate detection for vaccinations when merging contacts[5] Given API: I create a new person - And API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given API: I create a new case - Then API: I check that POST call body is "OK" + And API: I check that POST call status code is 200 Given I log in as a Admin User When I click on the Contacts button from navbar diff --git a/sormas-ear/pom.xml b/sormas-ear/pom.xml index 93c0357f59d..750cee68ad5 100644 --- a/sormas-ear/pom.xml +++ b/sormas-ear/pom.xml @@ -3,7 +3,7 @@ de.symeda.sormas sormas-base - 1.83.1 + 1.84.0 ../sormas-base @@ -43,11 +43,9 @@ - org.apache.maven.plugins maven-compiler-plugin - org.apache.maven.plugins maven-ear-plugin diff --git a/sormas-keycloak-service-provider/pom.xml b/sormas-keycloak-service-provider/pom.xml index 94b68ec774e..e4078f46859 100644 --- a/sormas-keycloak-service-provider/pom.xml +++ b/sormas-keycloak-service-provider/pom.xml @@ -3,7 +3,7 @@ sormas-base de.symeda.sormas - 1.83.1 + 1.84.0 ../sormas-base 4.0.0 @@ -53,7 +53,6 @@ - org.apache.maven.plugins maven-jar-plugin @@ -70,7 +69,6 @@ - org.apache.maven.plugins maven-assembly-plugin diff --git a/sormas-rest/build/templates/resources/openApiConfig.yml b/sormas-rest/build/templates/resources/openApiConfig.yml index 96ee1df98ef..4d105611169 100644 --- a/sormas-rest/build/templates/resources/openApiConfig.yml +++ b/sormas-rest/build/templates/resources/openApiConfig.yml @@ -6,6 +6,7 @@ openAPI: ### Responses - 400: Bad request: The request is not valid, e.g. missing required data - 403: Forbidden: User does not have necessary user rights + - 404: Not found: The requested entity was not found. - 409: Conflict: Tried to update data of an entity that was updated in the mean-time. - 500: Internal server error: Other exceptions version: ${project.version} diff --git a/sormas-rest/pom.xml b/sormas-rest/pom.xml index 1d982cab238..4bcfeb06cc5 100644 --- a/sormas-rest/pom.xml +++ b/sormas-rest/pom.xml @@ -3,7 +3,7 @@ de.symeda.sormas sormas-base - 1.83.1 + 1.84.0 ../sormas-base @@ -97,10 +97,11 @@ com.google.guava guava - 31.0.1-jre + - @@ -109,7 +110,6 @@ - org.apache.maven.plugins maven-war-plugin true diff --git a/sormas-rest/src/main/java/de/symeda/sormas/rest/exception/mappers/CatchAllExceptionMapper.java b/sormas-rest/src/main/java/de/symeda/sormas/rest/exception/mappers/CatchAllExceptionMapper.java index cff57d5f665..36ee251051e 100644 --- a/sormas-rest/src/main/java/de/symeda/sormas/rest/exception/mappers/CatchAllExceptionMapper.java +++ b/sormas-rest/src/main/java/de/symeda/sormas/rest/exception/mappers/CatchAllExceptionMapper.java @@ -31,7 +31,10 @@ public class CatchAllExceptionMapper implements ExceptionMapper { @Override public Response toResponse(Exception exception) { - logger.warn("A specialized ExceptionMapper for {} is missing.", exception.getClass().getName()); + logger.warn( + "A specialized ExceptionMapper for {} is missing. " + + "If the mapper exists, make sure the exception class is declared as a javax.ejb.ApplicationException.", + exception.getClass().getName()); String message = exception.getLocalizedMessage(); return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR) .entity(StringUtils.isNotBlank(message) ? message : "An exception occurred while processing the request.") diff --git a/sormas-rest/src/main/java/de/symeda/sormas/rest/exception/mappers/EntityNotFoundExceptionMapper.java b/sormas-rest/src/main/java/de/symeda/sormas/rest/exception/mappers/EntityNotFoundExceptionMapper.java new file mode 100644 index 00000000000..cec50050d49 --- /dev/null +++ b/sormas-rest/src/main/java/de/symeda/sormas/rest/exception/mappers/EntityNotFoundExceptionMapper.java @@ -0,0 +1,21 @@ +package de.symeda.sormas.rest.exception.mappers; + +import javax.persistence.EntityNotFoundException; +import javax.ws.rs.core.Response; +import javax.ws.rs.ext.ExceptionMapper; +import javax.ws.rs.ext.Provider; + +import org.apache.commons.lang3.StringUtils; +import org.apache.http.HttpStatus; + +@Provider +public class EntityNotFoundExceptionMapper implements ExceptionMapper { + + @Override + public Response toResponse(EntityNotFoundException exception) { + String message = exception.getLocalizedMessage(); + return Response.status(HttpStatus.SC_NOT_FOUND) + .entity(StringUtils.isNotBlank(message) ? message : "The requested entity was not found.") + .build(); + } +} diff --git a/sormas-rest/src/main/java/de/symeda/sormas/rest/resources/UserResource.java b/sormas-rest/src/main/java/de/symeda/sormas/rest/resources/UserResource.java index ae941857a85..fac1ce36b3a 100644 --- a/sormas-rest/src/main/java/de/symeda/sormas/rest/resources/UserResource.java +++ b/sormas-rest/src/main/java/de/symeda/sormas/rest/resources/UserResource.java @@ -1,20 +1,17 @@ /* * SORMAS® - Surveillance Outbreak Response Management & Analysis System * Copyright © 2016-2023 Helmholtz-Zentrum für Infektionsforschung GmbH (HZI) - * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. - * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * * You should have received a copy of the GNU General Public License * along with this program. If not, see . -*/ + */ package de.symeda.sormas.rest.resources; @@ -37,6 +34,7 @@ import de.symeda.sormas.api.user.UserCriteria; import de.symeda.sormas.api.user.UserDto; import de.symeda.sormas.api.user.UserReferenceWithTaskNumbersDto; +import de.symeda.sormas.api.user.UserRight; import io.swagger.v3.oas.annotations.parameters.RequestBody; /** @@ -87,4 +85,16 @@ public UserDto getByUuid(@PathParam("uuid") String uuid) { public List getUsersWithTaskNumbers(@RequestBody TaskContextIndexCriteria taskContextIndexCriteria) { return FacadeProvider.getUserFacade().getAssignableUsersWithTaskNumbers(taskContextIndexCriteria); } + + @GET + @Path("/rights") + public List getUserRightsForCurrentUser() { + return FacadeProvider.getUserFacade().getUserRights(null); + } + + @GET + @Path("/rights/{uuid}") + public List getUserRights(@PathParam("uuid") String uuid) { + return FacadeProvider.getUserFacade().getUserRights(uuid); + } } diff --git a/sormas-rest/swagger.json b/sormas-rest/swagger.json index 36d430933d2..963dac8107b 100644 --- a/sormas-rest/swagger.json +++ b/sormas-rest/swagger.json @@ -1,13 +1,13 @@ { "openapi" : "3.0.1", "info" : { - "description" : "[Readme of the module on GitHub](https://github.com/hzi-braunschweig/SORMAS-Project/tree/development/sormas-rest). \n### Responses\n- 400: Bad request: The request is not valid, e.g. missing required data\n- 403: Forbidden: User does not have necessary user rights\n- 409: Conflict: Tried to update data of an entity that was updated in the mean-time.\n- 500: Internal server error: Other exceptions\n", + "description" : "[Readme of the module on GitHub](https://github.com/hzi-braunschweig/SORMAS-Project/tree/development/sormas-rest). \n### Responses\n- 400: Bad request: The request is not valid, e.g. missing required data\n- 403: Forbidden: User does not have necessary user rights\n- 404: Not found: The requested entity was not found.\n- 409: Conflict: Tried to update data of an entity that was updated in the mean-time.\n- 500: Internal server error: Other exceptions\n", "license" : { "name" : "GPL v3", "url" : "https://www.gnu.org/licenses/gpl-3.0.html" }, "title" : "SORMAS REST API", - "version" : "1.83.0-SNAPSHOT" + "version" : "1.84.0-SNAPSHOT" }, "servers" : [ { "url" : "/sormas-rest" @@ -9468,6 +9468,58 @@ "tags" : [ "User Controller" ] } }, + "/users/rights" : { + "get" : { + "operationId" : "getUserRightsForCurrentUser", + "responses" : { + "default" : { + "content" : { + "application/json; charset=UTF-8" : { + "schema" : { + "type" : "array", + "items" : { + "type" : "string", + "enum" : [ "CASE_VIEW", "CASE_CREATE", "CASE_EDIT", "CASE_ARCHIVE", "CASE_DELETE", "CASE_IMPORT", "CASE_EXPORT", "CASE_INVESTIGATE", "CASE_CLASSIFY", "CASE_CHANGE_DISEASE", "CASE_CHANGE_EPID_NUMBER", "CASE_TRANSFER", "CASE_REFER_FROM_POE", "CASE_MERGE", "CASE_SHARE", "CASE_RESPONSIBLE", "IMMUNIZATION_VIEW", "IMMUNIZATION_CREATE", "IMMUNIZATION_EDIT", "IMMUNIZATION_ARCHIVE", "IMMUNIZATION_DELETE", "PERSON_VIEW", "PERSON_EDIT", "PERSON_DELETE", "PERSON_EXPORT", "PERSON_CONTACT_DETAILS_DELETE", "PERSON_MERGE", "SAMPLE_VIEW", "SAMPLE_CREATE", "SAMPLE_EDIT", "SAMPLE_DELETE", "SAMPLE_EXPORT", "SAMPLE_TRANSFER", "SAMPLE_EDIT_NOT_OWNED", "PERFORM_BULK_OPERATIONS_CASE_SAMPLES", "PATHOGEN_TEST_CREATE", "PATHOGEN_TEST_EDIT", "PATHOGEN_TEST_DELETE", "ADDITIONAL_TEST_VIEW", "ADDITIONAL_TEST_CREATE", "ADDITIONAL_TEST_EDIT", "ADDITIONAL_TEST_DELETE", "CONTACT_VIEW", "CONTACT_CREATE", "CONTACT_EDIT", "CONTACT_ARCHIVE", "CONTACT_DELETE", "CONTACT_IMPORT", "CONTACT_EXPORT", "CONTACT_CONVERT", "CONTACT_REASSIGN_CASE", "CONTACT_MERGE", "CONTACT_RESPONSIBLE", "VISIT_CREATE", "VISIT_EDIT", "VISIT_DELETE", "VISIT_EXPORT", "TASK_VIEW", "TASK_CREATE", "TASK_EDIT", "TASK_DELETE", "TASK_EXPORT", "TASK_ASSIGN", "TASK_ARCHIVE", "ACTION_CREATE", "ACTION_DELETE", "ACTION_EDIT", "EVENT_VIEW", "EVENT_CREATE", "EVENT_EDIT", "EVENT_ARCHIVE", "EVENT_DELETE", "EVENT_IMPORT", "EVENT_EXPORT", "PERFORM_BULK_OPERATIONS_EVENT", "EVENT_RESPONSIBLE", "EVENTPARTICIPANT_VIEW", "EVENTPARTICIPANT_CREATE", "EVENTPARTICIPANT_EDIT", "EVENTPARTICIPANT_ARCHIVE", "EVENTPARTICIPANT_DELETE", "EVENTPARTICIPANT_IMPORT", "PERFORM_BULK_OPERATIONS_EVENTPARTICIPANT", "EVENTGROUP_CREATE", "EVENTGROUP_EDIT", "EVENTGROUP_ARCHIVE", "EVENTGROUP_DELETE", "EVENTGROUP_LINK", "USER_VIEW", "USER_CREATE", "USER_EDIT", "USER_ROLE_VIEW", "USER_ROLE_EDIT", "USER_ROLE_DELETE", "STATISTICS_ACCESS", "STATISTICS_EXPORT", "INFRASTRUCTURE_VIEW", "INFRASTRUCTURE_CREATE", "INFRASTRUCTURE_EDIT", "INFRASTRUCTURE_ARCHIVE", "INFRASTRUCTURE_IMPORT", "INFRASTRUCTURE_EXPORT", "POPULATION_MANAGE", "DASHBOARD_SURVEILLANCE_VIEW", "DASHBOARD_CONTACT_VIEW", "DASHBOARD_CONTACT_VIEW_TRANSMISSION_CHAINS", "DASHBOARD_CAMPAIGNS_VIEW", "DASHBOARD_SAMPLES_VIEW", "CASE_CLINICIAN_VIEW", "THERAPY_VIEW", "PRESCRIPTION_CREATE", "PRESCRIPTION_EDIT", "PRESCRIPTION_DELETE", "TREATMENT_CREATE", "TREATMENT_EDIT", "TREATMENT_DELETE", "CLINICAL_COURSE_VIEW", "CLINICAL_COURSE_EDIT", "CLINICAL_VISIT_CREATE", "CLINICAL_VISIT_EDIT", "CLINICAL_VISIT_DELETE", "PORT_HEALTH_INFO_VIEW", "PORT_HEALTH_INFO_EDIT", "WEEKLYREPORT_VIEW", "WEEKLYREPORT_CREATE", "AGGREGATE_REPORT_VIEW", "AGGREGATE_REPORT_EDIT", "AGGREGATE_REPORT_EXPORT", "SEE_PERSONAL_DATA_IN_JURISDICTION", "SEE_PERSONAL_DATA_OUTSIDE_JURISDICTION", "SEE_SENSITIVE_DATA_IN_JURISDICTION", "SEE_SENSITIVE_DATA_OUTSIDE_JURISDICTION", "CAMPAIGN_VIEW", "CAMPAIGN_EDIT", "CAMPAIGN_ARCHIVE", "CAMPAIGN_DELETE", "CAMPAIGN_FORM_DATA_VIEW", "CAMPAIGN_FORM_DATA_EDIT", "CAMPAIGN_FORM_DATA_ARCHIVE", "CAMPAIGN_FORM_DATA_DELETE", "CAMPAIGN_FORM_DATA_EXPORT", "TRAVEL_ENTRY_MANAGEMENT_ACCESS", "TRAVEL_ENTRY_VIEW", "TRAVEL_ENTRY_CREATE", "TRAVEL_ENTRY_EDIT", "TRAVEL_ENTRY_ARCHIVE", "TRAVEL_ENTRY_DELETE", "DOCUMENT_VIEW", "DOCUMENT_UPLOAD", "DOCUMENT_DELETE", "PERFORM_BULK_OPERATIONS", "PERFORM_BULK_OPERATIONS_PSEUDONYM", "QUARANTINE_ORDER_CREATE", "SORMAS_REST", "SORMAS_UI", "DATABASE_EXPORT_ACCESS", "EXPORT_DATA_PROTECTION_DATA", "BAG_EXPORT", "SEND_MANUAL_EXTERNAL_MESSAGES", "MANAGE_EXTERNAL_SYMPTOM_JOURNAL", "EXTERNAL_VISITS", "SORMAS_TO_SORMAS_CLIENT", "SORMAS_TO_SORMAS_SHARE", "SORMAS_TO_SORMAS_PROCESS", "EXTERNAL_SURVEILLANCE_SHARE", "EXTERNAL_SURVEILLANCE_DELETE", "EXTERNAL_MESSAGE_VIEW", "EXTERNAL_MESSAGE_PROCESS", "EXTERNAL_MESSAGE_DELETE", "PERFORM_BULK_OPERATIONS_EXTERNAL_MESSAGES", "OUTBREAK_VIEW", "OUTBREAK_EDIT", "MANAGE_PUBLIC_EXPORT_CONFIGURATION", "DOCUMENT_TEMPLATE_MANAGEMENT", "LINE_LISTING_CONFIGURE", "DEV_MODE" ] + } + } + } + }, + "description" : "default response" + } + }, + "tags" : [ "User Controller" ] + } + }, + "/users/rights/{uuid}" : { + "get" : { + "operationId" : "getUserRights", + "parameters" : [ { + "in" : "path", + "name" : "uuid", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "default" : { + "content" : { + "application/json; charset=UTF-8" : { + "schema" : { + "type" : "array", + "items" : { + "type" : "string", + "enum" : [ "CASE_VIEW", "CASE_CREATE", "CASE_EDIT", "CASE_ARCHIVE", "CASE_DELETE", "CASE_IMPORT", "CASE_EXPORT", "CASE_INVESTIGATE", "CASE_CLASSIFY", "CASE_CHANGE_DISEASE", "CASE_CHANGE_EPID_NUMBER", "CASE_TRANSFER", "CASE_REFER_FROM_POE", "CASE_MERGE", "CASE_SHARE", "CASE_RESPONSIBLE", "IMMUNIZATION_VIEW", "IMMUNIZATION_CREATE", "IMMUNIZATION_EDIT", "IMMUNIZATION_ARCHIVE", "IMMUNIZATION_DELETE", "PERSON_VIEW", "PERSON_EDIT", "PERSON_DELETE", "PERSON_EXPORT", "PERSON_CONTACT_DETAILS_DELETE", "PERSON_MERGE", "SAMPLE_VIEW", "SAMPLE_CREATE", "SAMPLE_EDIT", "SAMPLE_DELETE", "SAMPLE_EXPORT", "SAMPLE_TRANSFER", "SAMPLE_EDIT_NOT_OWNED", "PERFORM_BULK_OPERATIONS_CASE_SAMPLES", "PATHOGEN_TEST_CREATE", "PATHOGEN_TEST_EDIT", "PATHOGEN_TEST_DELETE", "ADDITIONAL_TEST_VIEW", "ADDITIONAL_TEST_CREATE", "ADDITIONAL_TEST_EDIT", "ADDITIONAL_TEST_DELETE", "CONTACT_VIEW", "CONTACT_CREATE", "CONTACT_EDIT", "CONTACT_ARCHIVE", "CONTACT_DELETE", "CONTACT_IMPORT", "CONTACT_EXPORT", "CONTACT_CONVERT", "CONTACT_REASSIGN_CASE", "CONTACT_MERGE", "CONTACT_RESPONSIBLE", "VISIT_CREATE", "VISIT_EDIT", "VISIT_DELETE", "VISIT_EXPORT", "TASK_VIEW", "TASK_CREATE", "TASK_EDIT", "TASK_DELETE", "TASK_EXPORT", "TASK_ASSIGN", "TASK_ARCHIVE", "ACTION_CREATE", "ACTION_DELETE", "ACTION_EDIT", "EVENT_VIEW", "EVENT_CREATE", "EVENT_EDIT", "EVENT_ARCHIVE", "EVENT_DELETE", "EVENT_IMPORT", "EVENT_EXPORT", "PERFORM_BULK_OPERATIONS_EVENT", "EVENT_RESPONSIBLE", "EVENTPARTICIPANT_VIEW", "EVENTPARTICIPANT_CREATE", "EVENTPARTICIPANT_EDIT", "EVENTPARTICIPANT_ARCHIVE", "EVENTPARTICIPANT_DELETE", "EVENTPARTICIPANT_IMPORT", "PERFORM_BULK_OPERATIONS_EVENTPARTICIPANT", "EVENTGROUP_CREATE", "EVENTGROUP_EDIT", "EVENTGROUP_ARCHIVE", "EVENTGROUP_DELETE", "EVENTGROUP_LINK", "USER_VIEW", "USER_CREATE", "USER_EDIT", "USER_ROLE_VIEW", "USER_ROLE_EDIT", "USER_ROLE_DELETE", "STATISTICS_ACCESS", "STATISTICS_EXPORT", "INFRASTRUCTURE_VIEW", "INFRASTRUCTURE_CREATE", "INFRASTRUCTURE_EDIT", "INFRASTRUCTURE_ARCHIVE", "INFRASTRUCTURE_IMPORT", "INFRASTRUCTURE_EXPORT", "POPULATION_MANAGE", "DASHBOARD_SURVEILLANCE_VIEW", "DASHBOARD_CONTACT_VIEW", "DASHBOARD_CONTACT_VIEW_TRANSMISSION_CHAINS", "DASHBOARD_CAMPAIGNS_VIEW", "DASHBOARD_SAMPLES_VIEW", "CASE_CLINICIAN_VIEW", "THERAPY_VIEW", "PRESCRIPTION_CREATE", "PRESCRIPTION_EDIT", "PRESCRIPTION_DELETE", "TREATMENT_CREATE", "TREATMENT_EDIT", "TREATMENT_DELETE", "CLINICAL_COURSE_VIEW", "CLINICAL_COURSE_EDIT", "CLINICAL_VISIT_CREATE", "CLINICAL_VISIT_EDIT", "CLINICAL_VISIT_DELETE", "PORT_HEALTH_INFO_VIEW", "PORT_HEALTH_INFO_EDIT", "WEEKLYREPORT_VIEW", "WEEKLYREPORT_CREATE", "AGGREGATE_REPORT_VIEW", "AGGREGATE_REPORT_EDIT", "AGGREGATE_REPORT_EXPORT", "SEE_PERSONAL_DATA_IN_JURISDICTION", "SEE_PERSONAL_DATA_OUTSIDE_JURISDICTION", "SEE_SENSITIVE_DATA_IN_JURISDICTION", "SEE_SENSITIVE_DATA_OUTSIDE_JURISDICTION", "CAMPAIGN_VIEW", "CAMPAIGN_EDIT", "CAMPAIGN_ARCHIVE", "CAMPAIGN_DELETE", "CAMPAIGN_FORM_DATA_VIEW", "CAMPAIGN_FORM_DATA_EDIT", "CAMPAIGN_FORM_DATA_ARCHIVE", "CAMPAIGN_FORM_DATA_DELETE", "CAMPAIGN_FORM_DATA_EXPORT", "TRAVEL_ENTRY_MANAGEMENT_ACCESS", "TRAVEL_ENTRY_VIEW", "TRAVEL_ENTRY_CREATE", "TRAVEL_ENTRY_EDIT", "TRAVEL_ENTRY_ARCHIVE", "TRAVEL_ENTRY_DELETE", "DOCUMENT_VIEW", "DOCUMENT_UPLOAD", "DOCUMENT_DELETE", "PERFORM_BULK_OPERATIONS", "PERFORM_BULK_OPERATIONS_PSEUDONYM", "QUARANTINE_ORDER_CREATE", "SORMAS_REST", "SORMAS_UI", "DATABASE_EXPORT_ACCESS", "EXPORT_DATA_PROTECTION_DATA", "BAG_EXPORT", "SEND_MANUAL_EXTERNAL_MESSAGES", "MANAGE_EXTERNAL_SYMPTOM_JOURNAL", "EXTERNAL_VISITS", "SORMAS_TO_SORMAS_CLIENT", "SORMAS_TO_SORMAS_SHARE", "SORMAS_TO_SORMAS_PROCESS", "EXTERNAL_SURVEILLANCE_SHARE", "EXTERNAL_SURVEILLANCE_DELETE", "EXTERNAL_MESSAGE_VIEW", "EXTERNAL_MESSAGE_PROCESS", "EXTERNAL_MESSAGE_DELETE", "PERFORM_BULK_OPERATIONS_EXTERNAL_MESSAGES", "OUTBREAK_VIEW", "OUTBREAK_EDIT", "MANAGE_PUBLIC_EXPORT_CONFIGURATION", "DOCUMENT_TEMPLATE_MANAGEMENT", "LINE_LISTING_CONFIGURE", "DEV_MODE" ] + } + } + } + }, + "description" : "default response" + } + }, + "tags" : [ "User Controller" ] + } + }, "/users/userReferenceWithNoOfTask" : { "post" : { "operationId" : "getUsersWithTaskNumbers", @@ -11733,7 +11785,7 @@ "enum" : [ "YES", "NO", "UNKNOWN" ] } }, - "required" : [ "caseClassification", "disease", "investigationStatus", "person", "reportDate", "responsibleDistrict", "responsibleRegion" ] + "required" : [ "disease", "person", "reportDate", "responsibleDistrict", "responsibleRegion" ] }, "CaseFollowUpCriteria" : { "type" : "object", @@ -13409,7 +13461,7 @@ "enum" : [ "VACCINATED", "UNVACCINATED", "UNKNOWN" ] } }, - "required" : [ "contactClassification", "disease", "epiData", "healthConditions", "multiDayContact", "person", "reportDateTime" ] + "required" : [ "disease", "person", "reportDateTime" ] }, "ContactIndexDetailedDto" : { "type" : "object", @@ -17986,7 +18038,7 @@ "format" : "date-time" } }, - "required" : [ "disease", "immunizationManagementStatus", "immunizationStatus", "meansOfImmunization", "person", "reportDate", "responsibleDistrict", "responsibleRegion" ] + "required" : [ "disease", "meansOfImmunization", "person", "reportDate", "responsibleDistrict", "responsibleRegion" ] }, "ImmunizationIndexDto" : { "type" : "object", @@ -19748,7 +19800,7 @@ "type" : "boolean" } }, - "required" : [ "lab", "labUser", "sample", "testResult", "testResultVerified", "testType", "testedDisease" ] + "required" : [ "lab", "sample", "testResult", "testResultVerified", "testType", "testedDisease" ] }, "PeriodDto" : { "type" : "object", diff --git a/sormas-rest/swagger.yaml b/sormas-rest/swagger.yaml index 1f31f249700..d800401430a 100644 --- a/sormas-rest/swagger.yaml +++ b/sormas-rest/swagger.yaml @@ -3,13 +3,14 @@ info: description: "[Readme of the module on GitHub](https://github.com/hzi-braunschweig/SORMAS-Project/tree/development/sormas-rest).\ \ \n### Responses\n- 400: Bad request: The request is not valid, e.g. missing\ \ required data\n- 403: Forbidden: User does not have necessary user rights\n\ - - 409: Conflict: Tried to update data of an entity that was updated in the mean-time.\n\ - - 500: Internal server error: Other exceptions\n" + - 404: Not found: The requested entity was not found.\n- 409: Conflict: Tried\ + \ to update data of an entity that was updated in the mean-time.\n- 500: Internal\ + \ server error: Other exceptions\n" license: name: GPL v3 url: https://www.gnu.org/licenses/gpl-3.0.html title: SORMAS REST API - version: 1.83.0-SNAPSHOT + version: 1.84.0-SNAPSHOT servers: - url: /sormas-rest paths: @@ -6715,6 +6716,394 @@ paths: description: default response tags: - User Controller + /users/rights: + get: + operationId: getUserRightsForCurrentUser + responses: + default: + content: + application/json; charset=UTF-8: + schema: + type: array + items: + type: string + enum: + - CASE_VIEW + - CASE_CREATE + - CASE_EDIT + - CASE_ARCHIVE + - CASE_DELETE + - CASE_IMPORT + - CASE_EXPORT + - CASE_INVESTIGATE + - CASE_CLASSIFY + - CASE_CHANGE_DISEASE + - CASE_CHANGE_EPID_NUMBER + - CASE_TRANSFER + - CASE_REFER_FROM_POE + - CASE_MERGE + - CASE_SHARE + - CASE_RESPONSIBLE + - IMMUNIZATION_VIEW + - IMMUNIZATION_CREATE + - IMMUNIZATION_EDIT + - IMMUNIZATION_ARCHIVE + - IMMUNIZATION_DELETE + - PERSON_VIEW + - PERSON_EDIT + - PERSON_DELETE + - PERSON_EXPORT + - PERSON_CONTACT_DETAILS_DELETE + - PERSON_MERGE + - SAMPLE_VIEW + - SAMPLE_CREATE + - SAMPLE_EDIT + - SAMPLE_DELETE + - SAMPLE_EXPORT + - SAMPLE_TRANSFER + - SAMPLE_EDIT_NOT_OWNED + - PERFORM_BULK_OPERATIONS_CASE_SAMPLES + - PATHOGEN_TEST_CREATE + - PATHOGEN_TEST_EDIT + - PATHOGEN_TEST_DELETE + - ADDITIONAL_TEST_VIEW + - ADDITIONAL_TEST_CREATE + - ADDITIONAL_TEST_EDIT + - ADDITIONAL_TEST_DELETE + - CONTACT_VIEW + - CONTACT_CREATE + - CONTACT_EDIT + - CONTACT_ARCHIVE + - CONTACT_DELETE + - CONTACT_IMPORT + - CONTACT_EXPORT + - CONTACT_CONVERT + - CONTACT_REASSIGN_CASE + - CONTACT_MERGE + - CONTACT_RESPONSIBLE + - VISIT_CREATE + - VISIT_EDIT + - VISIT_DELETE + - VISIT_EXPORT + - TASK_VIEW + - TASK_CREATE + - TASK_EDIT + - TASK_DELETE + - TASK_EXPORT + - TASK_ASSIGN + - TASK_ARCHIVE + - ACTION_CREATE + - ACTION_DELETE + - ACTION_EDIT + - EVENT_VIEW + - EVENT_CREATE + - EVENT_EDIT + - EVENT_ARCHIVE + - EVENT_DELETE + - EVENT_IMPORT + - EVENT_EXPORT + - PERFORM_BULK_OPERATIONS_EVENT + - EVENT_RESPONSIBLE + - EVENTPARTICIPANT_VIEW + - EVENTPARTICIPANT_CREATE + - EVENTPARTICIPANT_EDIT + - EVENTPARTICIPANT_ARCHIVE + - EVENTPARTICIPANT_DELETE + - EVENTPARTICIPANT_IMPORT + - PERFORM_BULK_OPERATIONS_EVENTPARTICIPANT + - EVENTGROUP_CREATE + - EVENTGROUP_EDIT + - EVENTGROUP_ARCHIVE + - EVENTGROUP_DELETE + - EVENTGROUP_LINK + - USER_VIEW + - USER_CREATE + - USER_EDIT + - USER_ROLE_VIEW + - USER_ROLE_EDIT + - USER_ROLE_DELETE + - STATISTICS_ACCESS + - STATISTICS_EXPORT + - INFRASTRUCTURE_VIEW + - INFRASTRUCTURE_CREATE + - INFRASTRUCTURE_EDIT + - INFRASTRUCTURE_ARCHIVE + - INFRASTRUCTURE_IMPORT + - INFRASTRUCTURE_EXPORT + - POPULATION_MANAGE + - DASHBOARD_SURVEILLANCE_VIEW + - DASHBOARD_CONTACT_VIEW + - DASHBOARD_CONTACT_VIEW_TRANSMISSION_CHAINS + - DASHBOARD_CAMPAIGNS_VIEW + - DASHBOARD_SAMPLES_VIEW + - CASE_CLINICIAN_VIEW + - THERAPY_VIEW + - PRESCRIPTION_CREATE + - PRESCRIPTION_EDIT + - PRESCRIPTION_DELETE + - TREATMENT_CREATE + - TREATMENT_EDIT + - TREATMENT_DELETE + - CLINICAL_COURSE_VIEW + - CLINICAL_COURSE_EDIT + - CLINICAL_VISIT_CREATE + - CLINICAL_VISIT_EDIT + - CLINICAL_VISIT_DELETE + - PORT_HEALTH_INFO_VIEW + - PORT_HEALTH_INFO_EDIT + - WEEKLYREPORT_VIEW + - WEEKLYREPORT_CREATE + - AGGREGATE_REPORT_VIEW + - AGGREGATE_REPORT_EDIT + - AGGREGATE_REPORT_EXPORT + - SEE_PERSONAL_DATA_IN_JURISDICTION + - SEE_PERSONAL_DATA_OUTSIDE_JURISDICTION + - SEE_SENSITIVE_DATA_IN_JURISDICTION + - SEE_SENSITIVE_DATA_OUTSIDE_JURISDICTION + - CAMPAIGN_VIEW + - CAMPAIGN_EDIT + - CAMPAIGN_ARCHIVE + - CAMPAIGN_DELETE + - CAMPAIGN_FORM_DATA_VIEW + - CAMPAIGN_FORM_DATA_EDIT + - CAMPAIGN_FORM_DATA_ARCHIVE + - CAMPAIGN_FORM_DATA_DELETE + - CAMPAIGN_FORM_DATA_EXPORT + - TRAVEL_ENTRY_MANAGEMENT_ACCESS + - TRAVEL_ENTRY_VIEW + - TRAVEL_ENTRY_CREATE + - TRAVEL_ENTRY_EDIT + - TRAVEL_ENTRY_ARCHIVE + - TRAVEL_ENTRY_DELETE + - DOCUMENT_VIEW + - DOCUMENT_UPLOAD + - DOCUMENT_DELETE + - PERFORM_BULK_OPERATIONS + - PERFORM_BULK_OPERATIONS_PSEUDONYM + - QUARANTINE_ORDER_CREATE + - SORMAS_REST + - SORMAS_UI + - DATABASE_EXPORT_ACCESS + - EXPORT_DATA_PROTECTION_DATA + - BAG_EXPORT + - SEND_MANUAL_EXTERNAL_MESSAGES + - MANAGE_EXTERNAL_SYMPTOM_JOURNAL + - EXTERNAL_VISITS + - SORMAS_TO_SORMAS_CLIENT + - SORMAS_TO_SORMAS_SHARE + - SORMAS_TO_SORMAS_PROCESS + - EXTERNAL_SURVEILLANCE_SHARE + - EXTERNAL_SURVEILLANCE_DELETE + - EXTERNAL_MESSAGE_VIEW + - EXTERNAL_MESSAGE_PROCESS + - EXTERNAL_MESSAGE_DELETE + - PERFORM_BULK_OPERATIONS_EXTERNAL_MESSAGES + - OUTBREAK_VIEW + - OUTBREAK_EDIT + - MANAGE_PUBLIC_EXPORT_CONFIGURATION + - DOCUMENT_TEMPLATE_MANAGEMENT + - LINE_LISTING_CONFIGURE + - DEV_MODE + description: default response + tags: + - User Controller + /users/rights/{uuid}: + get: + operationId: getUserRights + parameters: + - in: path + name: uuid + required: true + schema: + type: string + responses: + default: + content: + application/json; charset=UTF-8: + schema: + type: array + items: + type: string + enum: + - CASE_VIEW + - CASE_CREATE + - CASE_EDIT + - CASE_ARCHIVE + - CASE_DELETE + - CASE_IMPORT + - CASE_EXPORT + - CASE_INVESTIGATE + - CASE_CLASSIFY + - CASE_CHANGE_DISEASE + - CASE_CHANGE_EPID_NUMBER + - CASE_TRANSFER + - CASE_REFER_FROM_POE + - CASE_MERGE + - CASE_SHARE + - CASE_RESPONSIBLE + - IMMUNIZATION_VIEW + - IMMUNIZATION_CREATE + - IMMUNIZATION_EDIT + - IMMUNIZATION_ARCHIVE + - IMMUNIZATION_DELETE + - PERSON_VIEW + - PERSON_EDIT + - PERSON_DELETE + - PERSON_EXPORT + - PERSON_CONTACT_DETAILS_DELETE + - PERSON_MERGE + - SAMPLE_VIEW + - SAMPLE_CREATE + - SAMPLE_EDIT + - SAMPLE_DELETE + - SAMPLE_EXPORT + - SAMPLE_TRANSFER + - SAMPLE_EDIT_NOT_OWNED + - PERFORM_BULK_OPERATIONS_CASE_SAMPLES + - PATHOGEN_TEST_CREATE + - PATHOGEN_TEST_EDIT + - PATHOGEN_TEST_DELETE + - ADDITIONAL_TEST_VIEW + - ADDITIONAL_TEST_CREATE + - ADDITIONAL_TEST_EDIT + - ADDITIONAL_TEST_DELETE + - CONTACT_VIEW + - CONTACT_CREATE + - CONTACT_EDIT + - CONTACT_ARCHIVE + - CONTACT_DELETE + - CONTACT_IMPORT + - CONTACT_EXPORT + - CONTACT_CONVERT + - CONTACT_REASSIGN_CASE + - CONTACT_MERGE + - CONTACT_RESPONSIBLE + - VISIT_CREATE + - VISIT_EDIT + - VISIT_DELETE + - VISIT_EXPORT + - TASK_VIEW + - TASK_CREATE + - TASK_EDIT + - TASK_DELETE + - TASK_EXPORT + - TASK_ASSIGN + - TASK_ARCHIVE + - ACTION_CREATE + - ACTION_DELETE + - ACTION_EDIT + - EVENT_VIEW + - EVENT_CREATE + - EVENT_EDIT + - EVENT_ARCHIVE + - EVENT_DELETE + - EVENT_IMPORT + - EVENT_EXPORT + - PERFORM_BULK_OPERATIONS_EVENT + - EVENT_RESPONSIBLE + - EVENTPARTICIPANT_VIEW + - EVENTPARTICIPANT_CREATE + - EVENTPARTICIPANT_EDIT + - EVENTPARTICIPANT_ARCHIVE + - EVENTPARTICIPANT_DELETE + - EVENTPARTICIPANT_IMPORT + - PERFORM_BULK_OPERATIONS_EVENTPARTICIPANT + - EVENTGROUP_CREATE + - EVENTGROUP_EDIT + - EVENTGROUP_ARCHIVE + - EVENTGROUP_DELETE + - EVENTGROUP_LINK + - USER_VIEW + - USER_CREATE + - USER_EDIT + - USER_ROLE_VIEW + - USER_ROLE_EDIT + - USER_ROLE_DELETE + - STATISTICS_ACCESS + - STATISTICS_EXPORT + - INFRASTRUCTURE_VIEW + - INFRASTRUCTURE_CREATE + - INFRASTRUCTURE_EDIT + - INFRASTRUCTURE_ARCHIVE + - INFRASTRUCTURE_IMPORT + - INFRASTRUCTURE_EXPORT + - POPULATION_MANAGE + - DASHBOARD_SURVEILLANCE_VIEW + - DASHBOARD_CONTACT_VIEW + - DASHBOARD_CONTACT_VIEW_TRANSMISSION_CHAINS + - DASHBOARD_CAMPAIGNS_VIEW + - DASHBOARD_SAMPLES_VIEW + - CASE_CLINICIAN_VIEW + - THERAPY_VIEW + - PRESCRIPTION_CREATE + - PRESCRIPTION_EDIT + - PRESCRIPTION_DELETE + - TREATMENT_CREATE + - TREATMENT_EDIT + - TREATMENT_DELETE + - CLINICAL_COURSE_VIEW + - CLINICAL_COURSE_EDIT + - CLINICAL_VISIT_CREATE + - CLINICAL_VISIT_EDIT + - CLINICAL_VISIT_DELETE + - PORT_HEALTH_INFO_VIEW + - PORT_HEALTH_INFO_EDIT + - WEEKLYREPORT_VIEW + - WEEKLYREPORT_CREATE + - AGGREGATE_REPORT_VIEW + - AGGREGATE_REPORT_EDIT + - AGGREGATE_REPORT_EXPORT + - SEE_PERSONAL_DATA_IN_JURISDICTION + - SEE_PERSONAL_DATA_OUTSIDE_JURISDICTION + - SEE_SENSITIVE_DATA_IN_JURISDICTION + - SEE_SENSITIVE_DATA_OUTSIDE_JURISDICTION + - CAMPAIGN_VIEW + - CAMPAIGN_EDIT + - CAMPAIGN_ARCHIVE + - CAMPAIGN_DELETE + - CAMPAIGN_FORM_DATA_VIEW + - CAMPAIGN_FORM_DATA_EDIT + - CAMPAIGN_FORM_DATA_ARCHIVE + - CAMPAIGN_FORM_DATA_DELETE + - CAMPAIGN_FORM_DATA_EXPORT + - TRAVEL_ENTRY_MANAGEMENT_ACCESS + - TRAVEL_ENTRY_VIEW + - TRAVEL_ENTRY_CREATE + - TRAVEL_ENTRY_EDIT + - TRAVEL_ENTRY_ARCHIVE + - TRAVEL_ENTRY_DELETE + - DOCUMENT_VIEW + - DOCUMENT_UPLOAD + - DOCUMENT_DELETE + - PERFORM_BULK_OPERATIONS + - PERFORM_BULK_OPERATIONS_PSEUDONYM + - QUARANTINE_ORDER_CREATE + - SORMAS_REST + - SORMAS_UI + - DATABASE_EXPORT_ACCESS + - EXPORT_DATA_PROTECTION_DATA + - BAG_EXPORT + - SEND_MANUAL_EXTERNAL_MESSAGES + - MANAGE_EXTERNAL_SYMPTOM_JOURNAL + - EXTERNAL_VISITS + - SORMAS_TO_SORMAS_CLIENT + - SORMAS_TO_SORMAS_SHARE + - SORMAS_TO_SORMAS_PROCESS + - EXTERNAL_SURVEILLANCE_SHARE + - EXTERNAL_SURVEILLANCE_DELETE + - EXTERNAL_MESSAGE_VIEW + - EXTERNAL_MESSAGE_PROCESS + - EXTERNAL_MESSAGE_DELETE + - PERFORM_BULK_OPERATIONS_EXTERNAL_MESSAGES + - OUTBREAK_VIEW + - OUTBREAK_EDIT + - MANAGE_PUBLIC_EXPORT_CONFIGURATION + - DOCUMENT_TEMPLATE_MANAGEMENT + - LINE_LISTING_CONFIGURE + - DEV_MODE + description: default response + tags: + - User Controller /users/userReferenceWithNoOfTask: post: operationId: getUsersWithTaskNumbers @@ -9138,9 +9527,7 @@ components: - "NO" - UNKNOWN required: - - caseClassification - disease - - investigationStatus - person - reportDate - responsibleDistrict @@ -11191,11 +11578,7 @@ components: - UNVACCINATED - UNKNOWN required: - - contactClassification - disease - - epiData - - healthConditions - - multiDayContact - person - reportDateTime ContactIndexDetailedDto: @@ -17095,8 +17478,6 @@ components: format: date-time required: - disease - - immunizationManagementStatus - - immunizationStatus - meansOfImmunization - person - reportDate @@ -18826,7 +19207,6 @@ components: type: boolean required: - lab - - labUser - sample - testResult - testResultVerified diff --git a/sormas-serverlibs/pom.xml b/sormas-serverlibs/pom.xml index 8adcb133064..4f574dce3c3 100644 --- a/sormas-serverlibs/pom.xml +++ b/sormas-serverlibs/pom.xml @@ -3,7 +3,7 @@ sormas-base de.symeda.sormas - 1.83.1 + 1.84.0 ../sormas-base 4.0.0 diff --git a/sormas-ui/pom.xml b/sormas-ui/pom.xml index b2763d2d2e4..ecb3e2a9763 100644 --- a/sormas-ui/pom.xml +++ b/sormas-ui/pom.xml @@ -3,7 +3,7 @@ sormas-base de.symeda.sormas - 1.83.1 + 1.84.0 ../sormas-base 4.0.0 @@ -131,20 +131,8 @@ - info.novatec - bean-test - - - org.jboss.weld.se - weld-se - - - org.apache.deltaspike.core - deltaspike-core-impl - - - org.apache.deltaspike.cdictrl - deltaspike-cdictrl-weld + de.hilling.junit.cdi + cdi-test-core @@ -194,7 +182,6 @@ - org.apache.maven.plugins maven-war-plugin @@ -109,11 +109,6 @@ - - diff --git a/sormas-ui/src/test/resources/META-INF/services/javax.enterprise.inject.spi.Extension b/sormas-ui/src/test/resources/META-INF/services/javax.enterprise.inject.spi.Extension new file mode 100644 index 00000000000..d567e05406b --- /dev/null +++ b/sormas-ui/src/test/resources/META-INF/services/javax.enterprise.inject.spi.Extension @@ -0,0 +1 @@ +de.symeda.junit.cdi.jee.ejb.TransactionalEjbAnnotatorExtension \ No newline at end of file diff --git a/sormas-ui/src/test/resources/cdi-test-annotations.properties b/sormas-ui/src/test/resources/cdi-test-annotations.properties new file mode 100644 index 00000000000..1977873ad48 --- /dev/null +++ b/sormas-ui/src/test/resources/cdi-test-annotations.properties @@ -0,0 +1,7 @@ +# test annotations for integration test +javax.ejb.EJB:javax.inject.Inject +javax.annotation.Resource:javax.inject.Inject +javax.persistence.PersistenceContext:javax.inject.Inject +javax.ejb.Stateful:javax.enterprise.context.ApplicationScoped +javax.ejb.Singleton:javax.enterprise.context.ApplicationScoped +javax.ejb.Stateless:javax.enterprise.context.RequestScoped \ No newline at end of file diff --git a/sormas-widgetset/pom.xml b/sormas-widgetset/pom.xml index ec7b559a9fc..3a5979937b1 100644 --- a/sormas-widgetset/pom.xml +++ b/sormas-widgetset/pom.xml @@ -3,7 +3,7 @@ sormas-base de.symeda.sormas - 1.83.1 + 1.84.0 ../sormas-base 4.0.0 @@ -75,7 +75,6 @@ - org.apache.maven.plugins maven-source-plugin @@ -85,15 +84,7 @@ - - org.apache.maven.plugins maven-jar-plugin