Skip to content
This repository was archived by the owner on May 5, 2021. It is now read-only.

Commit 4294320

Browse files
syntakkerJoshuaRenckensJonasCirs8jorencDavidBaldsiefen
authored
[IMIS] SORMAS-Foundation#2696 document generation quarantine (SORMAS-Foundation#3184)
* move TemplateEngineService to new branch (#8) * TemplateEngineService EJB Test (#8) * Generic test cases for TemplateEngineService (#8) * use system's default charset (#8) * revert: use system's default charset (#8) * normalize Windows line ending (#8) * normalize Windows line ending (#8) * move TemplateEngineService to new branch (#8) * TemplateEngineService EJB Test (#8) * Generic test cases for TemplateEngineService (#8) * use system's default charset (#8) * revert: use system's default charset (#8) * normalize Windows line ending (#8) * normalize Windows line ending (#8) * rudimentary QuarantineOrderFacade + Test (#8) * add quarantine button mockup (#8) * technical Durchstich :-) (#8) * extra template testcase written in Word * remove obsolete line ending cleanup (#8) * Change wording to "Quarantine order" (#8) * Create GUIDE_DOCUMENT_GENERATION.md * Quarantine test docx, Issue #8 * EntityDtoAccessHelper for variable name mapping (#8) * EntityDtoAccessHelper for variable name mapping (#8) * EntityDtoAccessHelper property as String (#8) * Fixes and test case (#8) * Quarantine.docx in cargo server (#8) * cleanup * Fix docx templates (#8) * Fix docx templates (#8) * Allow property access in templates (#8) * read available templates (#8) * added proper i18n label and caption * template selection (#9) * template selection (cleanup) (#9) * preliminary template upload (#5) * added rudimentary template-management-ui (#6) * Merge * template variables + preliminary template delete (#5) * assert sucessful template deletion (#5) * read additional variables (#8) * Added rudimentary template management and ui (#6 and #4) * integrate additional variables in UI (#9) * textfield width (#9) * fix deselect template (#9) * Improved Template-Management UI (#6) * QuarantineOrderFacade.getTemplate (#8) * Added functionality to view-template buttn (#6) * Validate templates (#8) * Check if template exists (#8) * Replace IllegalArgumentException by ValidationException (#8) * Fix QuarantineOrderComponent (#9) * Added error handling (#6)(#4) * improved error messages #6 * Various Template UI improvements (#6) * Added user right DOCUMENT_TEMPLATE_MANAGEMENT (#4) * Refactored 'Template...' to 'DocumentTemplate...' * Popup window for document generation (#9) * Fix validateTemplateTest for Windows (#8) * Added full i18n support (#6) * Document Template Guide (#4) * Link to Document Template Guide in UI (#9) * Fix typo (#9) * Quarantine order for contacts (#9) Fix I18N test * Test for wrong ReferenceDto type (#8) * User Right QUARANTINE_ORDER_CREATE (#9) * cleanup (#9) * hide quarantine box unless quarantine is HOME or INSTITUTIONELL (#9) * cleanup Strings and Captions (#9) * cleanup Strings and Captions (#9) * fix merge * refactor (#9) * fix translation DE (#9) * exclude admin from QUARANTINE_ORDER_CREATE (only pseudonymized data access) (#9) * Secure against writing outside template directory (#8) * Complete I18N (#9) * QuarantineType.isQuarantineInEffect, unify with visibility of quarantine fields (#9) * reset I18nConstantsUpdatedTest (#9) * Update SORMAS_Data_Dictionary.xlsx and SORMAS_User_Rights.xlsx (#9) * fix merge (#9) * merge bugfix SORMAS-Foundation#3198 * fix onValueChange (fixes SORMAS-Foundation#3198) * Document Example Templates (#9) * script ui build and redeploy (#9) * Document Example Template Word (#9) * PR SORMAS-Foundation#3184 remove de.symeda.sormas.ui.configuration.infrastructure.QuarantineTemplatesGrid * PR SORMAS-Foundation#3184 fix import order * PR SORMAS-Foundation#3184 remove obsolete condition * PR SORMAS-Foundation#3184 use StringUtils.isNotBlank * PR SORMAS-Foundation#3184 fix issues from comments * PR SORMAS-Foundation#3184 remove obsolete redeployUI.sh * PR SORMAS-Foundation#3184 fix issues from comments * PR SORMAS-Foundation#3184 rename MS Word to Microsoft Word * PR SORMAS-Foundation#3184 remove logging * PR SORMAS-Foundation#3184 add explanation of ROOT_ENTITY_NAME * PR SORMAS-Foundation#3184 use specific exception types * PR SORMAS-Foundation#3184 UI fixes * PR SORMAS-Foundation#3184 adjust spacing in UI * PR SORMAS-Foundation#3184 delete obsolete password.txt * PR SORMAS-Foundation#3184 update SORMAS_Data_Dictionary and SORMAS_User_Rights after merge Co-authored-by: Joshua <[email protected]> Co-authored-by: Jonas Cirotzki <[email protected]> Co-authored-by: s8jorenc <[email protected]> Co-authored-by: David <[email protected]>
1 parent bd5e7dd commit 4294320

56 files changed

Lines changed: 1969 additions & 136 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
package de.symeda.sormas.api;
2+
3+
import java.lang.reflect.InvocationTargetException;
4+
import java.lang.reflect.Method;
5+
import java.util.Arrays;
6+
import java.util.HashMap;
7+
import java.util.Map;
8+
9+
import de.symeda.sormas.api.utils.DataHelper;
10+
11+
public class EntityDtoAccessHelper {
12+
13+
public static Object getPropertyValue(HasUuid entity, String propertyKey) throws InvocationTargetException, IllegalAccessException {
14+
if (entity == null) {
15+
return null;
16+
}
17+
Class<? extends HasUuid> entityClass = entity.getClass();
18+
while (entityClass != null) {
19+
Method[] declaredMethods = entityClass.getDeclaredMethods();
20+
for (Method method : declaredMethods) {
21+
String methodName = method.getName();
22+
if (methodName.startsWith("get") || methodName.startsWith("is")) {
23+
String propertyName = methodName.replaceAll("(^(is|get))|((Reference)?Dto$)", "").toUpperCase();
24+
if (propertyName.equals(propertyKey.toUpperCase())) {
25+
return method.invoke(entity);
26+
}
27+
}
28+
}
29+
Class<?> superclass = entityClass.getSuperclass();
30+
entityClass = HasUuid.class.isAssignableFrom(superclass) ? (Class<? extends HasUuid>) superclass : null;
31+
}
32+
throw new IllegalArgumentException("No property " + propertyKey + " in class " + entity.getClass().getSimpleName());
33+
}
34+
35+
public static Object getPropertyPathValue(HasUuid entity, String propertyPath) {
36+
return getPropertyPathValue(entity, propertyPath, null);
37+
}
38+
39+
public static Object getPropertyPathValue(HasUuid entity, String propertyPath, IReferenceDtoResolver referenceDtoResolver) {
40+
String[] propertyKeys = propertyPath.split("[.]");
41+
Object currentEntity = entity;
42+
for (int i = 0; i < propertyKeys.length; i++) {
43+
if (currentEntity == null) {
44+
return null;
45+
}
46+
boolean isResolvable = referenceDtoResolver != null && ReferenceDto.class.isAssignableFrom(currentEntity.getClass());
47+
48+
if (!HasUuid.class.isAssignableFrom(currentEntity.getClass())) {
49+
String errorPropertyPath = entity.getClass().getSimpleName() + "." + String.join(".", Arrays.copyOfRange(propertyKeys, 0, i));
50+
throw new IllegalArgumentException(errorPropertyPath + " is not an EntityDto or ReferenceDto");
51+
}
52+
Object propertyValue = null;
53+
try {
54+
propertyValue = getPropertyValue((HasUuid) currentEntity, propertyKeys[i]);
55+
} catch (InvocationTargetException | IllegalAccessException e) {
56+
throw new IllegalArgumentException(e);
57+
} catch (IllegalArgumentException e) {
58+
if (!isResolvable) {
59+
throw e;
60+
}
61+
}
62+
if (propertyValue != null) {
63+
currentEntity = propertyValue;
64+
} else {
65+
if (isResolvable) {
66+
try {
67+
currentEntity = getPropertyValue(referenceDtoResolver.resolve((ReferenceDto) currentEntity), propertyKeys[i]);
68+
} catch (InvocationTargetException | IllegalAccessException e) {
69+
throw new IllegalArgumentException(e);
70+
}
71+
} else {
72+
currentEntity = null;
73+
}
74+
}
75+
}
76+
return currentEntity;
77+
}
78+
79+
public static String getPropertyPathValueString(HasUuid entity, String propertyPath, IReferenceDtoResolver referenceDtoResolver) {
80+
return DataHelper.valueToString(getPropertyPathValue(entity, propertyPath, referenceDtoResolver));
81+
}
82+
83+
public interface IReferenceDtoResolver {
84+
85+
EntityDto resolve(ReferenceDto referenceDto);
86+
}
87+
88+
public static class CachedReferenceDtoResolver implements IReferenceDtoResolver {
89+
90+
private Map<String, EntityDto> referenceCache = new HashMap<>();
91+
private IReferenceDtoResolver referenceDtoResolver;
92+
93+
public CachedReferenceDtoResolver(IReferenceDtoResolver referenceDtoResolver) {
94+
this.referenceDtoResolver = referenceDtoResolver;
95+
}
96+
97+
public EntityDto resolve(ReferenceDto referenceDto) {
98+
if (referenceDto != null) {
99+
EntityDto entityDto = referenceCache.get(referenceDto.getUuid());
100+
if (entityDto != null) {
101+
return entityDto;
102+
}
103+
}
104+
if (referenceDtoResolver != null) {
105+
EntityDto resolvedEntity = referenceDtoResolver.resolve(referenceDto);
106+
addReference(referenceDto, resolvedEntity);
107+
return resolvedEntity;
108+
}
109+
return null;
110+
}
111+
112+
public void addReference(ReferenceDto referenceDto, EntityDto entityDto) {
113+
if (referenceDto != null && entityDto != null) {
114+
referenceCache.put(referenceDto.getUuid(), entityDto);
115+
}
116+
}
117+
}
118+
}

sormas-api/src/main/java/de/symeda/sormas/api/FacadeProvider.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import de.symeda.sormas.api.contact.ContactFacade;
3737
import de.symeda.sormas.api.disease.DiseaseConfigurationFacade;
3838
import de.symeda.sormas.api.disease.DiseaseFacade;
39+
import de.symeda.sormas.api.docgeneneration.QuarantineOrderFacade;
3940
import de.symeda.sormas.api.epidata.EpiDataFacade;
4041
import de.symeda.sormas.api.event.EventFacade;
4142
import de.symeda.sormas.api.event.EventParticipantFacade;
@@ -305,11 +306,15 @@ public static AreaFacade getAreaFacade() {
305306
return get().lookupEjbRemote(AreaFacade.class);
306307
}
307308

308-
public static ExternalJournalFacade getExternalJournalFacade() {
309+
public static QuarantineOrderFacade getQuarantineOrderFacade() {
310+
return get().lookupEjbRemote(QuarantineOrderFacade.class);
311+
}
312+
313+
public static ExternalJournalFacade getExternalJournalFacade() {
309314
return get().lookupEjbRemote(ExternalJournalFacade.class);
310-
}
315+
}
311316

312-
@SuppressWarnings("unchecked")
317+
@SuppressWarnings("unchecked")
313318
public <P> P lookupEjbRemote(Class<P> clazz) {
314319
try {
315320
return (P) get().ic.lookup(buildJndiLookupName(clazz));

sormas-api/src/main/java/de/symeda/sormas/api/contact/QuarantineType.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package de.symeda.sormas.api.contact;
22

3+
import java.util.Arrays;
4+
import java.util.List;
5+
36
import de.symeda.sormas.api.CountryHelper;
47
import de.symeda.sormas.api.i18n.I18nProperties;
58
import de.symeda.sormas.api.utils.HideForCountriesExcept;
@@ -18,6 +21,12 @@ public enum QuarantineType {
1821
UNKNOWN,
1922
OTHER;
2023

24+
public static final List<QuarantineType> QUARANTINE_IN_EFFECT = Arrays.asList(HOME, INSTITUTIONELL, HOSPITAL, HOTEL, ASYLUM_ACCOMMODATION);
25+
26+
public static boolean isQuarantineInEffect(QuarantineType quarantineType) {
27+
return QUARANTINE_IN_EFFECT.contains(quarantineType);
28+
}
29+
2130
public String toString() {
2231
return I18nProperties.getEnumCaption(this);
2332
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package de.symeda.sormas.api.docgeneneration;
2+
3+
import java.io.IOException;
4+
import java.util.List;
5+
import java.util.Properties;
6+
7+
import javax.ejb.Remote;
8+
9+
import de.symeda.sormas.api.ReferenceDto;
10+
11+
@Remote
12+
public interface QuarantineOrderFacade {
13+
14+
byte[] getGeneratedDocument(String templateName, ReferenceDto rootEntityReference, Properties extraProperties) throws IOException;
15+
16+
byte[] getTemplate(String templateName) throws IOException;
17+
18+
List<String> getAvailableTemplates();
19+
20+
boolean isExistingTemplate(String templateName);
21+
22+
List<String> getAdditionalVariables(String templateName) throws IOException;
23+
24+
void writeQuarantineTemplate(String fileName, byte[] document) throws IOException;
25+
26+
boolean deleteQuarantineTemplate(String fileName);
27+
}

sormas-api/src/main/java/de/symeda/sormas/api/i18n/Captions.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,7 @@ public interface Captions {
287287
String CaseData_wasInQuarantineBeforeIsolation = "CaseData.wasInQuarantineBeforeIsolation";
288288
String caseDefaultView = "caseDefaultView";
289289
String caseDetailedView = "caseDetailedView";
290+
String caseDocuments = "caseDocuments";
290291
String caseEditData = "caseEditData";
291292
String caseEvents = "caseEvents";
292293
String caseEventsResetDateFilter = "caseEventsResetDateFilter";
@@ -700,6 +701,15 @@ public interface Captions {
700701
String districtAllDistricts = "districtAllDistricts";
701702
String districtArchivedDistricts = "districtArchivedDistricts";
702703
String districtName = "districtName";
704+
String DocumentTemplate = "DocumentTemplate";
705+
String DocumentTemplate_documentTemplateGuide = "DocumentTemplate.documentTemplateGuide";
706+
String DocumentTemplate_exampleTemplateLibreOffice = "DocumentTemplate.exampleTemplateLibreOffice";
707+
String DocumentTemplate_exampleTemplateWord = "DocumentTemplate.exampleTemplateWord";
708+
String DocumentTemplate_plural = "DocumentTemplate.plural";
709+
String DocumentTemplate_QuarantineOrder = "DocumentTemplate.QuarantineOrder";
710+
String DocumentTemplate_QuarantineOrder_create = "DocumentTemplate.QuarantineOrder.create";
711+
String DocumentTemplate_QuarantineOrder_templates = "DocumentTemplate.QuarantineOrder.templates";
712+
String DocumentTemplate_uploadTemplate = "DocumentTemplate.uploadTemplate";
703713
String EpiData = "EpiData";
704714
String EpiData_animalCondition = "EpiData.animalCondition";
705715
String EpiData_animalVaccinationStatus = "EpiData.animalVaccinationStatus";
@@ -1666,6 +1676,8 @@ public interface Captions {
16661676
String View_configuration_devMode_short = "View.configuration.devMode.short";
16671677
String View_configuration_districts = "View.configuration.districts";
16681678
String View_configuration_districts_short = "View.configuration.districts.short";
1679+
String View_configuration_documentTemplates = "View.configuration.documentTemplates";
1680+
String View_configuration_documentTemplates_short = "View.configuration.documentTemplates.short";
16691681
String View_configuration_facilities = "View.configuration.facilities";
16701682
String View_configuration_facilities_short = "View.configuration.facilities.short";
16711683
String View_configuration_laboratories = "View.configuration.laboratories";
@@ -1680,6 +1692,8 @@ public interface Captions {
16801692
String View_configuration_populationdata_short = "View.configuration.populationdata.short";
16811693
String View_configuration_regions = "View.configuration.regions";
16821694
String View_configuration_regions_short = "View.configuration.regions.short";
1695+
String View_configuration_templates = "View.configuration.templates";
1696+
String View_configuration_templates_short = "View.configuration.templates.short";
16831697
String View_configuration_userrights = "View.configuration.userrights";
16841698
String View_configuration_userrights_short = "View.configuration.userrights.short";
16851699
String View_contacts = "View.contacts";

sormas-api/src/main/java/de/symeda/sormas/api/i18n/Strings.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ public interface Strings {
8989
String confirmationDeleteEntity = "confirmationDeleteEntity";
9090
String confirmationDeleteEventParticipants = "confirmationDeleteEventParticipants";
9191
String confirmationDeleteEvents = "confirmationDeleteEvents";
92+
String confirmationDeleteFile = "confirmationDeleteFile";
9293
String confirmationDeletePathogenTests = "confirmationDeletePathogenTests";
9394
String confirmationDeletePrescriptions = "confirmationDeletePrescriptions";
9495
String confirmationDeleteSamples = "confirmationDeleteSamples";
@@ -145,6 +146,7 @@ public interface Strings {
145146
String entityPathogenTests = "entityPathogenTests";
146147
String entityPrescription = "entityPrescription";
147148
String entityPrescriptions = "entityPrescriptions";
149+
String entityQuarantineOrder = "entityQuarantineOrder";
148150
String entityRegion = "entityRegion";
149151
String entitySample = "entitySample";
150152
String entitySamples = "entitySamples";
@@ -158,14 +160,21 @@ public interface Strings {
158160
String errorAccessDenied = "errorAccessDenied";
159161
String errorCaseDuplicateDeletion = "errorCaseDuplicateDeletion";
160162
String errorCaseMerging = "errorCaseMerging";
163+
String errorDeletingDocumentTemplate = "errorDeletingDocumentTemplate";
164+
String errorDocumentGeneration = "errorDocumentGeneration";
161165
String errorEntityOutdated = "errorEntityOutdated";
162166
String errorFieldValidationFailed = "errorFieldValidationFailed";
167+
String errorFileNotFound = "errorFileNotFound";
168+
String errorIllegalFilename = "errorIllegalFilename";
163169
String errorIntegerFieldValidationFailed = "errorIntegerFieldValidationFailed";
164170
String errorInvalidValue = "errorInvalidValue";
165171
String errorNoAccessToWeb = "errorNoAccessToWeb";
166172
String errorNotRequiredRights = "errorNotRequiredRights";
167173
String errorOccurred = "errorOccurred";
168174
String errorProblemOccurred = "errorProblemOccurred";
175+
String errorProcessingTemplate = "errorProcessingTemplate";
176+
String errorQuarantineOnlyCaseAndContacts = "errorQuarantineOnlyCaseAndContacts";
177+
String errorReadingTemplate = "errorReadingTemplate";
169178
String errorSetFeverRequired = "errorSetFeverRequired";
170179
String errorSormasToSormasCertNotGenerated = "errorSormasToSormasCertNotGenerated";
171180
String errorSormasToSormasConnection = "errorSormasToSormasConnection";
@@ -179,6 +188,7 @@ public interface Strings {
179188
String errorSormasToSormasShare = "errorSormasToSormasShare";
180189
String errorViewNotFound = "errorViewNotFound";
181190
String errorWasReported = "errorWasReported";
191+
String fileName = "fileName";
182192
String forCase = "forCase";
183193
String forContact = "forContact";
184194
String forEventParticipant = "forEventParticipant";
@@ -258,6 +268,7 @@ public interface Strings {
258268
String headingDefineOutbreakDistricts = "headingDefineOutbreakDistricts";
259269
String headingDisableLineListing = "headingDisableLineListing";
260270
String headingDiscardUnsavedChanges = "headingDiscardUnsavedChanges";
271+
String headingDownloadDocumentTemplateGuide = "headingDownloadDocumentTemplateGuide";
261272
String headingDownloadErrorReport = "headingDownloadErrorReport";
262273
String headingDownloadImportGuide = "headingDownloadImportGuide";
263274
String headingDownloadImportTemplate = "headingDownloadImportTemplate";
@@ -290,6 +301,7 @@ public interface Strings {
290301
String headingExportFailed = "headingExportFailed";
291302
String headingExtendFollowUp = "headingExtendFollowUp";
292303
String headingExtendQuarantine = "headingExtendQuarantine";
304+
String headingFileExists = "headingFileExists";
293305
String headingFilters = "headingFilters";
294306
String headingFollowUpCanceled = "headingFollowUpCanceled";
295307
String headingFollowUpStatus = "headingFollowUpStatus";
@@ -390,6 +402,7 @@ public interface Strings {
390402
String headingTreatmentsDeleted = "headingTreatmentsDeleted";
391403
String headingUnderFollowUp = "headingUnderFollowUp";
392404
String headingUpdatePassword = "headingUpdatePassword";
405+
String headingUploadSuccess = "headingUploadSuccess";
393406
String headingUserData = "headingUserData";
394407
String headingUserSettings = "headingUserSettings";
395408
String headingViewNotFound = "headingViewNotFound";
@@ -428,7 +441,9 @@ public interface Strings {
428441
String infoDetailedExport = "infoDetailedExport";
429442
String infoDeveloperOptions = "infoDeveloperOptions";
430443
String infoDisplayNetworkDiagram = "infoDisplayNetworkDiagram";
444+
String infoDocumentAlreadyExists = "infoDocumentAlreadyExists";
431445
String infoDownloadCaseImportTemplate = "infoDownloadCaseImportTemplate";
446+
String infoDownloadDocumentTemplateImportGuide = "infoDownloadDocumentTemplateImportGuide";
432447
String infoDownloadErrorReport = "infoDownloadErrorReport";
433448
String infoDownloadExport = "infoDownloadExport";
434449
String infoDownloadImportGuide = "infoDownloadImportGuide";
@@ -478,6 +493,7 @@ public interface Strings {
478493
String infoStatisticsFilter = "infoStatisticsFilter";
479494
String infoStatisticsResults = "infoStatisticsResults";
480495
String infoSurveillanceDashboard = "infoSurveillanceDashboard";
496+
String infoUploadDocumentTemplate = "infoUploadDocumentTemplate";
481497
String infoUsageOfEditableCampaignGrids = "infoUsageOfEditableCampaignGrids";
482498
String infoUserEmail = "infoUserEmail";
483499
String infoUserPhoneNumber = "infoUserPhoneNumber";
@@ -488,6 +504,7 @@ public interface Strings {
488504
String labelNumberOfFacilities = "labelNumberOfFacilities";
489505
String labelNumberOfPointofEntry = "labelNumberOfPointofEntry";
490506
String labelNumberOfRegions = "labelNumberOfRegions";
507+
String labelNumberOfTemplates = "labelNumberOfTemplates";
491508
String labelNumberOfUsers = "labelNumberOfUsers";
492509
String lastTwoDays = "lastTwoDays";
493510
String lastTwoWeeks = "lastTwoWeeks";
@@ -626,6 +643,7 @@ public interface Strings {
626643
String messageNoClinicalVisitsSelected = "messageNoClinicalVisitsSelected";
627644
String messageNoContactsSelected = "messageNoContactsSelected";
628645
String messageNoCsvFile = "messageNoCsvFile";
646+
String messageNoDocumentTemplateUploadFile = "messageNoDocumentTemplateUploadFile";
629647
String messageNoEndDate = "messageNoEndDate";
630648
String messageNoEventFound = "messageNoEventFound";
631649
String messageNoEventParticipantsSelected = "messageNoEventParticipantsSelected";
@@ -677,6 +695,7 @@ public interface Strings {
677695
String messageTreatmentSaved = "messageTreatmentSaved";
678696
String messageTreatmentsDeleted = "messageTreatmentsDeleted";
679697
String messageUnknownFilterAttributeForPopulationData = "messageUnknownFilterAttributeForPopulationData";
698+
String messageUploadSuccessful = "messageUploadSuccessful";
680699
String messageUserRoleCombination = "messageUserRoleCombination";
681700
String messageVisitsDeleted = "messageVisitsDeleted";
682701
String messageWrongFileType = "messageWrongFileType";

sormas-api/src/main/java/de/symeda/sormas/api/user/UserRight.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1008,6 +1008,16 @@ public enum UserRight {
10081008
POPULATION_MANAGE(
10091009
ADMIN
10101010
),
1011+
DOCUMENT_TEMPLATE_MANAGEMENT(
1012+
ADMIN
1013+
),
1014+
QUARANTINE_ORDER_CREATE(
1015+
SURVEILLANCE_SUPERVISOR,
1016+
CASE_SUPERVISOR,
1017+
CASE_OFFICER,
1018+
CONTACT_SUPERVISOR,
1019+
CONTACT_OFFICER
1020+
),
10111021
LINE_LISTING_CONFIGURE(
10121022
ADMIN,
10131023
NATIONAL_USER,

0 commit comments

Comments
 (0)