documentTemplates = new HashMap<>(testCasesHtml.length);
for (File testCaseHtml : testCasesHtml) {
String testcaseBasename = FilenameUtils.getBaseName(testCaseHtml.getName());
+ DocumentTemplate documentTemplate = createDocumentTemplate(DocumentWorkflow.EVENT_HANDOUT, testcaseBasename + ".html");
+ documentTemplates.put(testcaseBasename, documentTemplate);
+ }
+
+ for (File testCaseHtml : testCasesHtml) {
+ String testcaseBasename = FilenameUtils.getBaseName(testCaseHtml.getName());
+ DocumentTemplate documentTemplate = documentTemplates.get(testcaseBasename);
String htmlText =
- eventDocumentFacade.getGeneratedDocument(testcaseBasename + ".html", eventDto.toReference(), new Properties(), Boolean.FALSE);
+ eventDocumentFacade.getGeneratedDocument(toReference(documentTemplate), eventDto.toReference(), new Properties(), Boolean.FALSE);
String actual = cleanLineSeparators(
htmlText.replaceAll("Event-ID: [A-Z0-9-]*
", "Event-ID: STN3WX-5JTGYV-IU2LRM-4UHCSOEE
"));
diff --git a/sormas-backend/src/test/java/de/symeda/sormas/backend/docgeneration/QuarantineOrderFacadeEjbTest.java b/sormas-backend/src/test/java/de/symeda/sormas/backend/docgeneration/QuarantineOrderFacadeEjbTest.java
index 5dac8076044..a885d1ecf9c 100644
--- a/sormas-backend/src/test/java/de/symeda/sormas/backend/docgeneration/QuarantineOrderFacadeEjbTest.java
+++ b/sormas-backend/src/test/java/de/symeda/sormas/backend/docgeneration/QuarantineOrderFacadeEjbTest.java
@@ -44,6 +44,7 @@
import de.symeda.sormas.api.caze.CaseReferenceDto;
import de.symeda.sormas.api.contact.ContactDto;
import de.symeda.sormas.api.contact.ContactReferenceDto;
+import de.symeda.sormas.api.docgeneneration.DocumentTemplateDto;
import de.symeda.sormas.api.docgeneneration.DocumentTemplateException;
import de.symeda.sormas.api.docgeneneration.DocumentVariables;
import de.symeda.sormas.api.docgeneneration.DocumentWorkflow;
@@ -69,9 +70,7 @@
import de.symeda.sormas.api.travelentry.TravelEntryReferenceDto;
import de.symeda.sormas.api.user.DefaultUserRole;
import de.symeda.sormas.api.user.UserDto;
-import de.symeda.sormas.backend.MockProducer;
import de.symeda.sormas.backend.TestDataCreator;
-import de.symeda.sormas.backend.common.ConfigFacadeEjb;
public class QuarantineOrderFacadeEjbTest extends AbstractDocGenerationTest {
@@ -85,6 +84,11 @@ public class QuarantineOrderFacadeEjbTest extends AbstractDocGenerationTest {
private SampleDto sampleDto;
private PathogenTestDto pathogenTestDto;
+ private DocumentTemplate caseDocumentTemplate;
+ private DocumentTemplate contactDocumentTemplate;
+ private DocumentTemplate eventParticipantDocumentTemplate;
+ private DocumentTemplate travelEntryDocumentTemplate;
+
@BeforeEach
public void setup() throws URISyntaxException {
TestDataCreator.RDCF rdcf = creator.createRDCF("Region", "District", "Community", "Facility", "PointOfEntry");
@@ -167,6 +171,12 @@ public void setup() throws URISyntaxException {
travelEntryDto.setResponsibleRegion(rdcf.region);
travelEntryDto.setResponsibleDistrict(rdcf.district);
travelEntryDto = getTravelEntryFacade().save(travelEntryDto);
+
+ caseDocumentTemplate = createDocumentTemplate(DocumentWorkflow.QUARANTINE_ORDER_CASE, "Quarantine.docx");
+ createDocumentTemplate(DocumentWorkflow.QUARANTINE_ORDER_CASE, "FaultyTemplate.docx");
+ contactDocumentTemplate = createDocumentTemplate(DocumentWorkflow.QUARANTINE_ORDER_CONTACT, "Quarantine.docx");
+ eventParticipantDocumentTemplate = createDocumentTemplate(DocumentWorkflow.QUARANTINE_ORDER_EVENT_PARTICIPANT, "Quarantine.docx");
+ travelEntryDocumentTemplate = createDocumentTemplate(DocumentWorkflow.QUARANTINE_ORDER_TRAVEL_ENTRY, "Quarantine.docx");
}
private Date parseDate(String dateString) {
@@ -182,7 +192,7 @@ public void generateQuarantineOrderCaseTest() throws IOException, DocumentTempla
generateQuarantineOrderTest(
RootEntityType.ROOT_CASE,
caseDataDto.toReference(),
- DocumentWorkflow.QUARANTINE_ORDER_CASE,
+ caseDocumentTemplate,
sampleDto.toReference(),
pathogenTestDto.toReference(),
"QuarantineCase.cmp");
@@ -193,7 +203,7 @@ public void generateQuarantineOrderContactTest() throws IOException, DocumentTem
generateQuarantineOrderTest(
RootEntityType.ROOT_CONTACT,
contactDto.toReference(),
- DocumentWorkflow.QUARANTINE_ORDER_CONTACT,
+ contactDocumentTemplate,
null,
null,
"QuarantineContact.cmp");
@@ -204,7 +214,7 @@ public void generateQuarantineOrderEventParticipantTest() throws IOException, Do
generateQuarantineOrderTest(
RootEntityType.ROOT_EVENT_PARTICIPANT,
eventParticipantDto.toReference(),
- DocumentWorkflow.QUARANTINE_ORDER_EVENT_PARTICIPANT,
+ eventParticipantDocumentTemplate,
null,
null,
"QuarantineEvent.cmp");
@@ -215,7 +225,7 @@ public void generateQuarantineOrderTravelEntryTest() throws IOException, Documen
generateQuarantineOrderTest(
RootEntityType.ROOT_TRAVEL_ENTRY,
travelEntryDto.toReference(),
- DocumentWorkflow.QUARANTINE_ORDER_TRAVEL_ENTRY,
+ travelEntryDocumentTemplate,
null,
null,
"QuarantineTravelEntry.cmp");
@@ -229,7 +239,7 @@ public void generateQuarantineOrderCustomNullReplacementTest() throws IOExceptio
generateQuarantineOrderTest(
RootEntityType.ROOT_CASE,
rootEntityReference,
- DocumentWorkflow.QUARANTINE_ORDER_CASE,
+ caseDocumentTemplate,
null,
null,
"QuarantineCaseEmptyNullReplacement.cmp");
@@ -238,7 +248,7 @@ public void generateQuarantineOrderCustomNullReplacementTest() throws IOExceptio
generateQuarantineOrderTest(
RootEntityType.ROOT_CASE,
rootEntityReference,
- DocumentWorkflow.QUARANTINE_ORDER_CASE,
+ caseDocumentTemplate,
null,
null,
"QuarantineCaseCustomNullReplacement.cmp");
@@ -252,11 +262,10 @@ public void testBulkCaseDocumentCreation() throws DocumentTemplateException, IOE
properties.setProperty("extraremark1", "the first remark");
properties.setProperty("extra.remark.no3", "the third remark");
- DocumentWorkflow workflow = DocumentWorkflow.QUARANTINE_ORDER_CASE;
Map documentContents = quarantineOrderFacadeEjb
- .getGeneratedDocuments("Quarantine.docx", workflow, Collections.singletonList(rootEntityReference), properties, false);
+ .getGeneratedDocuments(toReference(caseDocumentTemplate), Collections.singletonList(rootEntityReference), properties, false);
- verifyGeneratedDocument(rootEntityReference, workflow, "QuarantineCase.cmp", documentContents.get(rootEntityReference));
+ verifyGeneratedDocument(rootEntityReference, caseDocumentTemplate, "QuarantineCase.cmp", documentContents.get(rootEntityReference));
}
@Test
@@ -266,11 +275,10 @@ public void testBulkContactDocumentCreation() throws DocumentTemplateException,
properties.setProperty("extraremark1", "the first remark");
properties.setProperty("extra.remark.no3", "the third remark");
- DocumentWorkflow workflow = DocumentWorkflow.QUARANTINE_ORDER_CONTACT;
Map documentContents = quarantineOrderFacadeEjb
- .getGeneratedDocuments("Quarantine.docx", workflow, Collections.singletonList(rootEntityReference), properties, false);
+ .getGeneratedDocuments(toReference(contactDocumentTemplate), Collections.singletonList(rootEntityReference), properties, false);
- verifyGeneratedDocument(rootEntityReference, workflow, "QuarantineContact.cmp", documentContents.get(rootEntityReference));
+ verifyGeneratedDocument(rootEntityReference, contactDocumentTemplate, "QuarantineContact.cmp", documentContents.get(rootEntityReference));
}
@Test
@@ -281,21 +289,24 @@ public void testBulkEventParticipantDocumentCreation() throws DocumentTemplateEx
properties.setProperty("extraremark1", "the first remark");
properties.setProperty("extra.remark.no3", "the third remark");
- DocumentWorkflow workflow = DocumentWorkflow.QUARANTINE_ORDER_EVENT_PARTICIPANT;
Map documentContents = quarantineOrderFacadeEjb.getGeneratedDocumentsForEventParticipants(
- "Quarantine.docx",
+ toReference(eventParticipantDocumentTemplate),
Collections.singletonList(rootEntityReference),
eventDto.getDisease(),
properties,
false);
- verifyGeneratedDocument(rootEntityReference, workflow, "QuarantineEvent.cmp", documentContents.get(rootEntityReference));
+ verifyGeneratedDocument(
+ rootEntityReference,
+ eventParticipantDocumentTemplate,
+ "QuarantineEvent.cmp",
+ documentContents.get(rootEntityReference));
}
private void generateQuarantineOrderTest(
RootEntityType rootEntityType,
ReferenceDto rootEntityReference,
- DocumentWorkflow documentWorkflow,
+ DocumentTemplate template,
SampleReferenceDto sampleReference,
PathogenTestReferenceDto pathogenTest,
String comparisonFile)
@@ -308,11 +319,10 @@ private void generateQuarantineOrderTest(
verifyGeneratedDocument(
rootEntityReference,
- documentWorkflow,
+ template,
comparisonFile,
quarantineOrderFacadeEjb.getGeneratedDocument(
- "Quarantine.docx",
- documentWorkflow,
+ toReference(template),
rootEntityType,
rootEntityReference,
sampleReference,
@@ -324,19 +334,19 @@ private void generateQuarantineOrderTest(
private void verifyGeneratedDocument(
ReferenceDto rootEntityReference,
- DocumentWorkflow documentWorkflow,
+ DocumentTemplate docuembtTemplate,
String comparisonFile,
byte[] documentContent)
throws IOException, DocumentTemplateException {
- DocumentVariables documentVariables = quarantineOrderFacadeEjb.getDocumentVariables(documentWorkflow, "Quarantine.docx");
+ DocumentVariables documentVariables = quarantineOrderFacadeEjb.getDocumentVariables(toReference(docuembtTemplate));
List additionalVariables = documentVariables.getAdditionalVariables();
String rootEntityName;
List expectedVariables = Arrays.asList("extraremark1", "extra.remark2", "extra.remark.no3");
List expectedUsedEntities = new ArrayList<>(Arrays.asList("person", "user", "sample", "pathogenTest"));
- switch (documentWorkflow) {
+ switch (docuembtTemplate.getWorkflow()) {
case QUARANTINE_ORDER_CASE:
rootEntityName = "case";
break;
@@ -391,17 +401,11 @@ private void verifyGeneratedDocument(
}
@Test
- public void getAvailableTemplatesTest() throws URISyntaxException {
- List availableTemplates = quarantineOrderFacadeEjb.getAvailableTemplates(DocumentWorkflow.QUARANTINE_ORDER_CASE);
+ public void getAvailableTemplatesTest() {
+ List availableTemplates = quarantineOrderFacadeEjb.getAvailableTemplates(DocumentWorkflow.QUARANTINE_ORDER_CASE, null);
assertEquals(2, availableTemplates.size());
- assertTrue(availableTemplates.contains("Quarantine.docx"));
- assertTrue(availableTemplates.contains("FaultyTemplate.docx"));
-
- MockProducer.getProperties().setProperty(ConfigFacadeEjb.CUSTOM_FILES_PATH, "thisDirectoryDoesNotExist");
-
- assertTrue(quarantineOrderFacadeEjb.getAvailableTemplates(DocumentWorkflow.QUARANTINE_ORDER_CASE).isEmpty());
-
- resetCustomPath();
+ assertTrue(availableTemplates.stream().anyMatch(dt -> dt.getFileName().equals("Quarantine.docx")));
+ assertTrue(availableTemplates.stream().anyMatch(dt -> dt.getFileName().equals("FaultyTemplate.docx")));
}
private DocumentWorkflow getDocumentWorkflow(ReferenceDto reference) {
diff --git a/sormas-backend/src/test/java/de/symeda/sormas/backend/externalemail/ExternalEmailFacadeEjbTest.java b/sormas-backend/src/test/java/de/symeda/sormas/backend/externalemail/ExternalEmailFacadeEjbTest.java
index a5a811d255c..efe9c0f1122 100644
--- a/sormas-backend/src/test/java/de/symeda/sormas/backend/externalemail/ExternalEmailFacadeEjbTest.java
+++ b/sormas-backend/src/test/java/de/symeda/sormas/backend/externalemail/ExternalEmailFacadeEjbTest.java
@@ -62,6 +62,7 @@
import de.symeda.sormas.api.caze.CaseReferenceDto;
import de.symeda.sormas.api.contact.ContactDto;
import de.symeda.sormas.api.contact.ContactStatus;
+import de.symeda.sormas.api.docgeneneration.DocumentTemplateDto;
import de.symeda.sormas.api.docgeneneration.DocumentTemplateException;
import de.symeda.sormas.api.docgeneneration.DocumentWorkflow;
import de.symeda.sormas.api.docgeneneration.EmailAttachementDto;
@@ -96,6 +97,7 @@
import de.symeda.sormas.backend.common.messaging.InvalidPhoneNumberException;
import de.symeda.sormas.backend.common.messaging.SmsService;
import de.symeda.sormas.backend.docgeneration.AbstractDocGenerationTest;
+import de.symeda.sormas.backend.docgeneration.DocumentTemplate;
import de.symeda.sormas.backend.document.Document;
import de.symeda.sormas.backend.document.DocumentRelatedEntity;
@@ -107,6 +109,10 @@ public class ExternalEmailFacadeEjbTest extends AbstractDocGenerationTest {
private PersonDto personDto;
private LocationDto locationDto2;
+ private DocumentTemplate caseEmailTemplate;
+ private DocumentTemplate quarantineOrderTemplate;
+ private DocumentTemplate contactEmailTemplate;
+
@Mock
private EmailService emailService;
@Mock
@@ -154,6 +160,10 @@ public void init() {
personDto.setEmailAddress("testEmail@email.com");
getPersonFacade().save(personDto);
+
+ caseEmailTemplate = createDocumentTemplate(DocumentWorkflow.CASE_EMAIL, "CaseEmail.txt");
+ quarantineOrderTemplate = createDocumentTemplate(DocumentWorkflow.QUARANTINE_ORDER_CASE, "Quarantine.docx");
+ contactEmailTemplate = createDocumentTemplate(DocumentWorkflow.CONTACT_EMAIL, "ContactEmail.txt");
}
@BeforeEach
@@ -165,21 +175,28 @@ public void setup() throws URISyntaxException {
public void testGetAvailableTemplates() throws DocumentTemplateException {
loginWith(admin);
- getDocumentTemplateFacade()
- .writeDocumentTemplate(DocumentWorkflow.CASE_EMAIL, "CaseEmailMock.txt", "#Subject\nContent".getBytes(StandardCharsets.UTF_8));
- getDocumentTemplateFacade()
- .writeDocumentTemplate(DocumentWorkflow.CONTACT_EMAIL, "ContactEmailMock.txt", "#Subject\nContent".getBytes(StandardCharsets.UTF_8));
+ getDocumentTemplateFacade().saveDocumentTemplate(
+ DocumentTemplateDto.build(DocumentWorkflow.CASE_EMAIL, "CaseEmailMock.txt"),
+ "#Subject\nContent".getBytes(StandardCharsets.UTF_8));
+ getDocumentTemplateFacade().saveDocumentTemplate(
+ DocumentTemplateDto.build(DocumentWorkflow.CONTACT_EMAIL, "ContactEmailMock.txt"),
+ "#Subject\nContent".getBytes(StandardCharsets.UTF_8));
loginWith(userDto);
- List templateNames = getExternalEmailFacade().getTemplateNames(DocumentWorkflow.CASE_EMAIL);
+ List templates = getExternalEmailFacade().getTemplates(DocumentWorkflow.CASE_EMAIL);
- assertThat(templateNames.size(), is(2));
+ assertThat(templates.size(), is(2));
// should return predefined test template "CaseEmail.txt" and the one just created by the test
- assertThat(templateNames, containsInAnyOrder("CaseEmail.txt", "CaseEmailMock.txt"));
+ assertThat(
+ templates.stream().map(DocumentTemplateDto::getFileName).collect(Collectors.toList()),
+ containsInAnyOrder("CaseEmail.txt", "CaseEmailMock.txt"));
assertThat(
- getExternalEmailFacade().getTemplateNames(DocumentWorkflow.CONTACT_EMAIL),
+ getExternalEmailFacade().getTemplates(DocumentWorkflow.CONTACT_EMAIL)
+ .stream()
+ .map(DocumentTemplateDto::getFileName)
+ .collect(Collectors.toList()),
containsInAnyOrder("ContactEmail.txt", "ContactEmailMock.txt"));
}
@@ -297,7 +314,7 @@ public void testSendEmailToCasePerson()
}).when(emailService).sendEmail(any(), any(), any(), any());
ExternalEmailOptionsDto options = new ExternalEmailOptionsDto(DocumentWorkflow.CASE_EMAIL, RootEntityType.ROOT_CASE, caze.toReference());
- options.setTemplateName("CaseEmail.txt");
+ options.setTemplate(toReference(caseEmailTemplate));
options.setRecipientEmail("test@mail.com");
getExternalEmailFacade().sendEmail(options);
@@ -336,7 +353,7 @@ public void testSendEmailToContactPerson()
ExternalEmailOptionsDto options =
new ExternalEmailOptionsDto(DocumentWorkflow.CONTACT_EMAIL, RootEntityType.ROOT_CONTACT, contact.toReference());
- options.setTemplateName("ContactEmail.txt");
+ options.setTemplate(toReference(contactEmailTemplate));
options.setRecipientEmail("test@mail.com");
getExternalEmailFacade().sendEmail(options);
@@ -397,7 +414,7 @@ public void testSendEmailWithAttachments()
}).when(emailService).sendEmail(any(), any(), any(), any());
ExternalEmailOptionsDto options = new ExternalEmailOptionsDto(DocumentWorkflow.CASE_EMAIL, RootEntityType.ROOT_CASE, caze.toReference());
- options.setTemplateName("CaseEmail.txt");
+ options.setTemplate(toReference(caseEmailTemplate));
options.setRecipientEmail("test@mail.com");
options.setAttachedDocuments(documents.stream().map(DocumentDto::toReference).collect(Collectors.toSet()));
@@ -476,7 +493,7 @@ public void testEncryptAttachmentsWithRandomPassword()
}).when(smsService).sendSms(any(), any());
ExternalEmailOptionsDto options = new ExternalEmailOptionsDto(DocumentWorkflow.CASE_EMAIL, RootEntityType.ROOT_CASE, caze.toReference());
- options.setTemplateName("CaseEmail.txt");
+ options.setTemplate(toReference(caseEmailTemplate));
options.setRecipientEmail("test@mail.com");
options.setAttachedDocuments(documents.stream().map(DocumentDto::toReference).collect(Collectors.toSet()));
@@ -497,7 +514,7 @@ public void testSendEmailWithUnsupportedAttachment() throws MessagingException,
createDocument("SomeDocument.txt", DocumentRelatedEntityType.CASE, caze.getUuid(), "Some content".getBytes(StandardCharsets.UTF_8));
ExternalEmailOptionsDto options = new ExternalEmailOptionsDto(DocumentWorkflow.CASE_EMAIL, RootEntityType.ROOT_CASE, caze.toReference());
- options.setTemplateName("CaseEmail.txt");
+ options.setTemplate(toReference(caseEmailTemplate));
options.setRecipientEmail("test@mail.com");
options.setAttachedDocuments(Collections.singleton(document.toReference()));
@@ -518,7 +535,7 @@ public void testSendAttachmentWithUnavailablePassword() throws MessagingExceptio
createDocument("SomeDocument.txt", DocumentRelatedEntityType.CASE, caze.getUuid(), "Some content".getBytes(StandardCharsets.UTF_8));
ExternalEmailOptionsDto options = new ExternalEmailOptionsDto(DocumentWorkflow.CASE_EMAIL, RootEntityType.ROOT_CASE, caze.toReference());
- options.setTemplateName("CaseEmail.txt");
+ options.setTemplate(toReference(caseEmailTemplate));
options.setRecipientEmail("test@mail.com");
options.setAttachedDocuments(Collections.singleton(document.toReference()));
@@ -541,7 +558,7 @@ public void testSendAttachmentNotRelatedToEntity() throws MessagingException, IO
createDocument("SomeDocument.txt", DocumentRelatedEntityType.CONTACT, "mock-uuid", "Some content".getBytes(StandardCharsets.UTF_8));
ExternalEmailOptionsDto options = new ExternalEmailOptionsDto(DocumentWorkflow.CASE_EMAIL, RootEntityType.ROOT_CASE, caze.toReference());
- options.setTemplateName("CaseEmail.txt");
+ options.setTemplate(toReference(caseEmailTemplate));
options.setRecipientEmail("test@mail.com");
options.setAttachedDocuments(Collections.singleton(document.toReference()));
@@ -613,7 +630,7 @@ public void testSendBulkEmailToCasePerson() throws MessagingException, IOExcepti
ExternalEmailOptionsWithAttachmentsDto options =
new ExternalEmailOptionsWithAttachmentsDto(DocumentWorkflow.CASE_EMAIL, RootEntityType.ROOT_CASE);
- options.setTemplateName("CaseEmail.txt");
+ options.setTemplate(toReference(caseEmailTemplate));
DocumentDto documentDto = DocumentDto.build();
documentDto.setUploadingUser(admin.toReference());
@@ -702,10 +719,10 @@ public void testSendBulkEmailToCasePersonAttachmentsAndTemplateDocument() throws
ExternalEmailOptionsWithAttachmentsDto options =
new ExternalEmailOptionsWithAttachmentsDto(DocumentWorkflow.CASE_EMAIL, RootEntityType.ROOT_CASE);
- options.setTemplateName("CaseEmail.txt");
+ options.setTemplate(toReference(caseEmailTemplate));
QuarantineOrderDocumentOptionsDto quarantineOrderDocumentOptions = new QuarantineOrderDocumentOptionsDto();
- quarantineOrderDocumentOptions.setTemplateFile("Quarantine.docx");
+ quarantineOrderDocumentOptions.setTemplate(toReference(quarantineOrderTemplate));
quarantineOrderDocumentOptions.setExtraProperties(new Properties());
quarantineOrderDocumentOptions.setShouldUploadGeneratedDoc(false);
quarantineOrderDocumentOptions.setDocumentWorkflow(DocumentWorkflow.QUARANTINE_ORDER_CASE);
@@ -799,9 +816,9 @@ public void testSendBulkEmailToCasePersonTemplateDocument() throws MessagingExce
ExternalEmailOptionsWithAttachmentsDto options =
new ExternalEmailOptionsWithAttachmentsDto(DocumentWorkflow.CASE_EMAIL, RootEntityType.ROOT_CASE);
- options.setTemplateName("CaseEmail.txt");
+ options.setTemplate(toReference(caseEmailTemplate));
QuarantineOrderDocumentOptionsDto quarantineOrderDocumentOptions = new QuarantineOrderDocumentOptionsDto();
- quarantineOrderDocumentOptions.setTemplateFile("Quarantine.docx");
+ quarantineOrderDocumentOptions.setTemplate(toReference(quarantineOrderTemplate));
quarantineOrderDocumentOptions.setExtraProperties(new Properties());
quarantineOrderDocumentOptions.setShouldUploadGeneratedDoc(true);
quarantineOrderDocumentOptions.setDocumentWorkflow(DocumentWorkflow.QUARANTINE_ORDER_CASE);
diff --git a/sormas-backend/src/test/java/de/symeda/sormas/backend/importexport/DatabaseExportServiceTest.java b/sormas-backend/src/test/java/de/symeda/sormas/backend/importexport/DatabaseExportServiceTest.java
index e6b42ec468c..0746186095b 100644
--- a/sormas-backend/src/test/java/de/symeda/sormas/backend/importexport/DatabaseExportServiceTest.java
+++ b/sormas-backend/src/test/java/de/symeda/sormas/backend/importexport/DatabaseExportServiceTest.java
@@ -26,6 +26,7 @@
import de.symeda.sormas.backend.adverseeventsfollowingimmunization.entity.AdverseEvents;
import de.symeda.sormas.backend.adverseeventsfollowingimmunization.entity.Aefi;
import de.symeda.sormas.backend.adverseeventsfollowingimmunization.entity.AefiInvestigation;
+import de.symeda.sormas.backend.docgeneration.DocumentTemplate;
import de.symeda.sormas.backend.environment.Environment;
import de.symeda.sormas.backend.environment.environmentsample.EnvironmentSample;
import de.symeda.sormas.backend.immunization.entity.DirectoryImmunization;
@@ -70,7 +71,8 @@ public void testGetConfigFullyDefined() {
SelfReport.class,
Aefi.class,
AdverseEvents.class,
- AefiInvestigation.class);
+ AefiInvestigation.class,
+ DocumentTemplate.class);
@Test
public void test_all_entities_have_export_configuration() {
diff --git a/sormas-backend/src/test/resources/META-INF/persistence.xml b/sormas-backend/src/test/resources/META-INF/persistence.xml
index 3d878a502f2..5182f469a14 100644
--- a/sormas-backend/src/test/resources/META-INF/persistence.xml
+++ b/sormas-backend/src/test/resources/META-INF/persistence.xml
@@ -89,6 +89,7 @@
de.symeda.sormas.backend.externalmessage.labmessage.SampleReport
de.symeda.sormas.backend.specialcaseaccess.SpecialCaseAccess
de.symeda.sormas.backend.selfreport.SelfReport
+ de.symeda.sormas.backend.docgeneration.DocumentTemplate
true
diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/MainScreen.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/MainScreen.java
index 00ecea96b08..260e045d60f 100644
--- a/sormas-ui/src/main/java/de/symeda/sormas/ui/MainScreen.java
+++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/MainScreen.java
@@ -315,7 +315,7 @@ && permitted(FeatureType.ADVERSE_EVENTS_FOLLOWING_IMMUNIZATION_MANAGEMENT, UserR
}
if (permitted(FeatureType.TRAVEL_ENTRIES, UserRight.TRAVEL_ENTRY_MANAGEMENT_ACCESS)
- && FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY)) {
+ && FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG)) {
ControllerProvider.getTravelEntryController().registerViews(navigator);
menu.addView(
TravelEntriesView.class,
diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/docgeneration/DocumentTemplateSection.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/docgeneration/DocumentTemplateSection.java
index 4b6509ca069..f141b16e31c 100644
--- a/sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/docgeneration/DocumentTemplateSection.java
+++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/docgeneration/DocumentTemplateSection.java
@@ -39,15 +39,15 @@ public class DocumentTemplateSection extends VerticalLayout {
private static final long serialVersionUID = 379271838736314055L;
- public DocumentTemplateSection(DocumentWorkflow documentWorkflow) {
+ public DocumentTemplateSection(DocumentWorkflow documentWorkflow, boolean hasDisease) {
HorizontalLayout sectionHeader = new HorizontalLayout();
- DocumentTemplatesGrid documentTemplatesGrid = new DocumentTemplatesGrid(documentWorkflow);
+ DocumentTemplatesGrid documentTemplatesGrid = new DocumentTemplatesGrid(documentWorkflow, hasDisease);
documentTemplatesGrid.setWidth(700, Unit.PIXELS);
Label quarantineTemplatesLabel = new Label(documentWorkflow.toString());
quarantineTemplatesLabel.addStyleName(H3);
- Button uploadButton = buildUploadButton(documentWorkflow, documentTemplatesGrid);
+ Button uploadButton = buildUploadButton(documentWorkflow, documentTemplatesGrid, hasDisease);
sectionHeader.addComponents(quarantineTemplatesLabel, uploadButton);
sectionHeader.setComponentAlignment(uploadButton, Alignment.MIDDLE_RIGHT);
sectionHeader.setWidth(700, Unit.PIXELS);
@@ -57,9 +57,9 @@ public DocumentTemplateSection(DocumentWorkflow documentWorkflow) {
setExpandRatio(documentTemplatesGrid, 1F);
}
- private Button buildUploadButton(DocumentWorkflow documentWorkflow, DocumentTemplatesGrid documentTemplatesGrid) {
+ private Button buildUploadButton(DocumentWorkflow documentWorkflow, DocumentTemplatesGrid documentTemplatesGrid, boolean hasDisease) {
return ButtonHelper.createIconButton(I18nProperties.getCaption(Captions.DocumentTemplate_uploadTemplate), VaadinIcons.UPLOAD, e -> {
- Window window = VaadinUiUtil.showPopupWindow(new DocumentTemplateUploadLayout(documentWorkflow));
+ Window window = VaadinUiUtil.showPopupWindow(new DocumentTemplateUploadLayout(documentWorkflow, hasDisease));
window.setCaption(String.format(I18nProperties.getCaption(Captions.DocumentTemplate_uploadWorkflowTemplate), documentWorkflow));
window.addCloseListener(c -> documentTemplatesGrid.reload());
}, ValoTheme.BUTTON_PRIMARY);
diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/docgeneration/DocumentTemplateUploadLayout.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/docgeneration/DocumentTemplateUploadLayout.java
index bf8a1c4fb78..05391e5c8ff 100644
--- a/sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/docgeneration/DocumentTemplateUploadLayout.java
+++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/docgeneration/DocumentTemplateUploadLayout.java
@@ -16,15 +16,19 @@
package de.symeda.sormas.ui.configuration.docgeneration;
import java.util.Map;
+import java.util.function.Supplier;
import com.vaadin.icons.VaadinIcons;
import com.vaadin.server.ClassResource;
import com.vaadin.server.FileDownloader;
import com.vaadin.ui.Button;
+import com.vaadin.ui.ComboBox;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.themes.ValoTheme;
import com.vaadin.v7.ui.Upload;
+import de.symeda.sormas.api.Disease;
+import de.symeda.sormas.api.FacadeProvider;
import de.symeda.sormas.api.docgeneneration.DocumentWorkflow;
import de.symeda.sormas.api.i18n.Captions;
import de.symeda.sormas.api.i18n.I18nProperties;
@@ -42,6 +46,7 @@ public class DocumentTemplateUploadLayout extends VerticalLayout {
protected Upload upload;
private ImportLayoutComponent importGuideComponent;
private final DocumentWorkflow documentWorkflow;
+ private final boolean hasDisease;
private static final Map templateInfoData = Map.ofEntries(
Map.entry(
@@ -79,9 +84,10 @@ public class DocumentTemplateUploadLayout extends VerticalLayout {
DocumentTemplateInfoData
.forEmailTemplate(Captions.DocumentTemplate_exampleTemplateTravelEntryEmail, "ExampleDocumentTemplateTravelEntryEmail.txt")));
- public DocumentTemplateUploadLayout(DocumentWorkflow documentWorkflow) {
+ public DocumentTemplateUploadLayout(DocumentWorkflow documentWorkflow, boolean hasDisease) {
super();
this.documentWorkflow = documentWorkflow;
+ this.hasDisease = hasDisease;
addDownloadResourcesComponent();
addUploadResourceComponent();
}
@@ -116,13 +122,30 @@ private void addUploadResourceComponent() {
ImportLayoutComponent uploadTemplateComponent = new ImportLayoutComponent(2, headline, infoText, null, null);
addComponent(uploadTemplateComponent);
- DocumentTemplateReceiver receiver = new DocumentTemplateReceiver(documentWorkflow);
+ VerticalLayout uploadLatout = new VerticalLayout();
+ uploadLatout.setMargin(false);
+ uploadLatout.setSpacing(false);
+ uploadLatout.setSizeFull();
+ addComponent(uploadLatout);
+
+ Supplier diseaseSupplier = () -> null;
+ if (hasDisease) {
+ ComboBox diseaseComboBox = new ComboBox<>();
+ diseaseComboBox.setCaption(I18nProperties.getCaption(Captions.disease));
+ diseaseComboBox.setItems(FacadeProvider.getDiseaseConfigurationFacade().getAllDiseases(true, true, true));
+ diseaseComboBox.setPlaceholder(I18nProperties.getString(Strings.all));
+ diseaseComboBox.setEmptySelectionAllowed(true);
+ uploadLatout.addComponent(diseaseComboBox);
+ diseaseSupplier = diseaseComboBox::getValue;
+ }
+
+ DocumentTemplateReceiver receiver = new DocumentTemplateReceiver(documentWorkflow, diseaseSupplier);
upload = new Upload("", receiver);
upload.setButtonCaption(I18nProperties.getCaption(Captions.DocumentTemplate_buttonUploadTemplate));
CssStyles.style(upload, CssStyles.VSPACE_2);
upload.addStartedListener(receiver);
upload.addSucceededListener(receiver);
- addComponent(upload);
+ uploadLatout.addComponent(upload);
}
private void addDownloadResource(String caption, VaadinIcons icon, ClassResource resource) {
diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/docgeneration/DocumentTemplatesGrid.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/docgeneration/DocumentTemplatesGrid.java
index 24978bdfb57..706301cd92e 100644
--- a/sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/docgeneration/DocumentTemplatesGrid.java
+++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/docgeneration/DocumentTemplatesGrid.java
@@ -31,6 +31,7 @@
import com.vaadin.ui.Notification;
import de.symeda.sormas.api.FacadeProvider;
+import de.symeda.sormas.api.docgeneneration.DocumentTemplateDto;
import de.symeda.sormas.api.docgeneneration.DocumentTemplateException;
import de.symeda.sormas.api.docgeneneration.DocumentWorkflow;
import de.symeda.sormas.api.i18n.Captions;
@@ -39,23 +40,30 @@
import de.symeda.sormas.ui.utils.ButtonHelper;
import de.symeda.sormas.ui.utils.VaadinUiUtil;
-public class DocumentTemplatesGrid extends Grid {
+public class DocumentTemplatesGrid extends Grid {
private static final long serialVersionUID = 2589713987152595369L;
private final DocumentWorkflow documentWorkflow;
- public DocumentTemplatesGrid(DocumentWorkflow documentWorkflow) {
- super(String.class);
+ public DocumentTemplatesGrid(DocumentWorkflow documentWorkflow, boolean hasDisease) {
+ super(DocumentTemplateDto.class);
this.documentWorkflow = documentWorkflow;
setSizeFull();
- List availableTemplates = FacadeProvider.getDocumentTemplateFacade().getAvailableTemplates(documentWorkflow);
- ListDataProvider dataProvider = DataProvider.fromStream(availableTemplates.stream());
+ List availableTemplates = FacadeProvider.getDocumentTemplateFacade().getAvailableTemplates(documentWorkflow, null);
+ ListDataProvider dataProvider = DataProvider.fromStream(availableTemplates.stream());
setDataProvider(dataProvider);
- removeAllColumns();
- addColumn(String::toString).setCaption(I18nProperties.getString(Strings.fileName)).setExpandRatio(1);
+ setColumns(DocumentTemplateDto.FILE_NAME);
+ if (hasDisease) {
+ addColumn(DocumentTemplateDto.DISEASE);
+ }
+
+ for (Column, ?> column : getColumns()) {
+ column.setCaption(I18nProperties.getPrefixCaption(DocumentTemplateDto.I18N_PREFIX, column.getId(), column.getCaption()));
+ }
+
addComponentColumn(this::buildActionButtons).setCaption(I18nProperties.getCaption(Captions.eventActionsView))
.setWidth(100)
.setStyleGenerator(item -> "v-align-center");
@@ -67,20 +75,20 @@ public DocumentTemplatesGrid(DocumentWorkflow documentWorkflow) {
public void reload() {
// This is bad practice but it works (unlike refreshAll), and in this case its sufficient
- List availableTemplates = FacadeProvider.getDocumentTemplateFacade().getAvailableTemplates(documentWorkflow);
+ List availableTemplates = FacadeProvider.getDocumentTemplateFacade().getAvailableTemplates(documentWorkflow, null);
setItems(availableTemplates);
getDataProvider().refreshAll();
setHeightByRows(Math.max(1, availableTemplates.size()));
}
- private Button buildDeleteButton(String templateFileName) {
+ private Button buildDeleteButton(DocumentTemplateDto template) {
return ButtonHelper.createIconButton(
"",
VaadinIcons.TRASH,
e -> VaadinUiUtil
- .showDeleteConfirmationWindow(String.format(I18nProperties.getString(Strings.confirmationDeleteFile), templateFileName), () -> {
+ .showDeleteConfirmationWindow(String.format(I18nProperties.getString(Strings.confirmationDeleteFile), template.getFileName()), () -> {
try {
- FacadeProvider.getDocumentTemplateFacade().deleteDocumentTemplate(documentWorkflow, templateFileName);
+ FacadeProvider.getDocumentTemplateFacade().deleteDocumentTemplate(template.toReference());
} catch (DocumentTemplateException ex) {
new Notification(
I18nProperties.getString(Strings.errorDeletingDocumentTemplate),
@@ -92,21 +100,21 @@ private Button buildDeleteButton(String templateFileName) {
}));
}
- private Button buildViewDocumentButton(String templateFileName) {
+ private Button buildViewDocumentButton(DocumentTemplateDto template) {
Button viewButton = ButtonHelper.createIconButton(VaadinIcons.DOWNLOAD);
StreamResource streamResource = new StreamResource((StreamResource.StreamSource) () -> {
try {
- return new ByteArrayInputStream(FacadeProvider.getDocumentTemplateFacade().getDocumentTemplate(documentWorkflow, templateFileName));
+ return new ByteArrayInputStream(FacadeProvider.getDocumentTemplateFacade().getDocumentTemplateContent(template.toReference()));
} catch (DocumentTemplateException e) {
new Notification(
- String.format(I18nProperties.getString(Strings.errorReadingTemplate), templateFileName),
+ String.format(I18nProperties.getString(Strings.errorReadingTemplate), template.getFileName()),
e.getMessage(),
Notification.Type.ERROR_MESSAGE,
false).show(Page.getCurrent());
return null;
}
- }, templateFileName);
+ }, template.getFileName());
FileDownloader fileDownloader = new FileDownloader(streamResource);
fileDownloader.extend(viewButton);
fileDownloader.setFileDownloadResource(streamResource);
@@ -114,11 +122,11 @@ private Button buildViewDocumentButton(String templateFileName) {
return viewButton;
}
- private HorizontalLayout buildActionButtons(String s) {
+ private HorizontalLayout buildActionButtons(DocumentTemplateDto template) {
HorizontalLayout horizontalLayout = new HorizontalLayout();
- horizontalLayout.addComponent(buildViewDocumentButton(s));
- horizontalLayout.addComponent(buildDeleteButton(s));
+ horizontalLayout.addComponent(buildViewDocumentButton(template));
+ horizontalLayout.addComponent(buildDeleteButton(template));
horizontalLayout.setSpacing(false);
horizontalLayout.setMargin(false);
diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/docgeneration/DocumentTemplatesView.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/docgeneration/DocumentTemplatesView.java
index 3f5fcaf0220..fea59946f8b 100644
--- a/sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/docgeneration/DocumentTemplatesView.java
+++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/docgeneration/DocumentTemplatesView.java
@@ -37,11 +37,11 @@ public DocumentTemplatesView() {
super(VIEW_NAME);
gridLayout = new VerticalLayout(
- new DocumentTemplateSection(QUARANTINE_ORDER_CASE),
- new DocumentTemplateSection(QUARANTINE_ORDER_CONTACT),
- new DocumentTemplateSection(QUARANTINE_ORDER_EVENT_PARTICIPANT),
- new DocumentTemplateSection(QUARANTINE_ORDER_TRAVEL_ENTRY),
- new DocumentTemplateSection(EVENT_HANDOUT));
+ new DocumentTemplateSection(QUARANTINE_ORDER_CASE, true),
+ new DocumentTemplateSection(QUARANTINE_ORDER_CONTACT, true),
+ new DocumentTemplateSection(QUARANTINE_ORDER_EVENT_PARTICIPANT, true),
+ new DocumentTemplateSection(QUARANTINE_ORDER_TRAVEL_ENTRY, true),
+ new DocumentTemplateSection(EVENT_HANDOUT, true));
gridLayout.setWidth(100, Unit.PERCENTAGE);
gridLayout.setMargin(true);
diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/docgeneration/emailtemplate/EmailTemplatesView.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/docgeneration/emailtemplate/EmailTemplatesView.java
index 3ae757f1033..4e989fef819 100644
--- a/sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/docgeneration/emailtemplate/EmailTemplatesView.java
+++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/docgeneration/emailtemplate/EmailTemplatesView.java
@@ -37,10 +37,10 @@ public EmailTemplatesView() {
super(VIEW_NAME);
VerticalLayout gridLayout = new VerticalLayout(
- new DocumentTemplateSection(CASE_EMAIL),
- new DocumentTemplateSection(CONTACT_EMAIL),
- new DocumentTemplateSection(EVENT_PARTICIPANT_EMAIL),
- new DocumentTemplateSection(TRAVEL_ENTRY_EMAIL));
+ new DocumentTemplateSection(CASE_EMAIL, false),
+ new DocumentTemplateSection(CONTACT_EMAIL, false),
+ new DocumentTemplateSection(EVENT_PARTICIPANT_EMAIL, false),
+ new DocumentTemplateSection(TRAVEL_ENTRY_EMAIL, false));
gridLayout.setWidth(100, Unit.PERCENTAGE);
gridLayout.setMargin(true);
diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactDataView.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactDataView.java
index f0745c2c774..a374a345851 100644
--- a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactDataView.java
+++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactDataView.java
@@ -28,7 +28,6 @@
import de.symeda.sormas.api.EditPermissionType;
import de.symeda.sormas.api.FacadeProvider;
import de.symeda.sormas.api.caze.CaseDataDto;
-import de.symeda.sormas.api.caze.CaseReferenceDto;
import de.symeda.sormas.api.contact.ContactClassification;
import de.symeda.sormas.api.contact.ContactDto;
import de.symeda.sormas.api.contact.ContactLogic;
@@ -293,7 +292,12 @@ protected void initView(String params) {
layout.addSidePanelComponent(new SideComponentLayout(documentList), DOCUMENTS_LOC);
}
- QuarantineOrderDocumentsComponent.addComponentToLayout(layout, contactDto, documentList);
+ Disease disease = contactDto.getDisease();
+ if (disease == null && caseDto != null) {
+ disease = caseDto.getDisease();
+ }
+
+ QuarantineOrderDocumentsComponent.addComponentToLayout(layout, contactDto, disease, documentList);
if (UiUtil.permitted(FeatureType.EXTERNAL_EMAILS, UserRight.EXTERNAL_EMAIL_SEND)) {
ExternalEmailSideComponent externalEmailSideComponent =
diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/docgeneration/AbstractDocgenerationLayout.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/docgeneration/AbstractDocgenerationLayout.java
index 7e67258e814..742c36004ed 100644
--- a/sormas-ui/src/main/java/de/symeda/sormas/ui/docgeneration/AbstractDocgenerationLayout.java
+++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/docgeneration/AbstractDocgenerationLayout.java
@@ -20,7 +20,6 @@
import java.util.Properties;
import java.util.function.Function;
-import org.apache.commons.lang3.StringUtils;
import org.slf4j.LoggerFactory;
import com.vaadin.icons.VaadinIcons;
@@ -41,7 +40,11 @@
import com.vaadin.ui.Window;
import com.vaadin.ui.themes.ValoTheme;
+import de.symeda.sormas.api.Disease;
+import de.symeda.sormas.api.FacadeProvider;
+import de.symeda.sormas.api.docgeneneration.DocumentTemplateDto;
import de.symeda.sormas.api.docgeneneration.DocumentTemplateException;
+import de.symeda.sormas.api.docgeneneration.DocumentTemplateReferenceDto;
import de.symeda.sormas.api.docgeneneration.DocumentVariables;
import de.symeda.sormas.api.i18n.Captions;
import de.symeda.sormas.api.i18n.I18nProperties;
@@ -56,23 +59,24 @@ public abstract class AbstractDocgenerationLayout extends VerticalLayout {
protected final Button createButton;
protected final Button cancelButton;
- public ComboBox templateSelector;
+ public ComboBox templateSelector;
public final VerticalLayout additionalVariablesComponent;
public final VerticalLayout additionalParametersComponent;
public FileDownloader fileDownloader;
public DocumentVariables documentVariables;
public CheckBox checkBoxUploadGeneratedDoc;
public HorizontalLayout buttonBar;
+ private Disease defaultDisease;
- public boolean isCheckBoxAfterTemplateSelector;
-
- public AbstractDocgenerationLayout(
+ protected AbstractDocgenerationLayout(
+ Disease defaultDisease,
String captionTemplateSelector,
- Function fileNameFunction,
+ Function fileNameFunction,
boolean isMultiFilesMode,
- boolean isCheckBoxAfterTemplateSelector) {
+ boolean uploadCheckboxFirst) {
+
+ this.defaultDisease = defaultDisease;
- this.isCheckBoxAfterTemplateSelector = isCheckBoxAfterTemplateSelector;
additionalVariablesComponent = new VerticalLayout();
additionalVariablesComponent.setSpacing(false);
additionalVariablesComponent.setMargin(new MarginInfo(false, false, true, false));
@@ -84,11 +88,13 @@ public AbstractDocgenerationLayout(
hideTextfields();
hideAdditionalParameters();
- if (isCheckBoxAfterTemplateSelector) {
+ if (uploadCheckboxFirst) {
+ addDiseaseSelector(defaultDisease);
addTemplateSelector(captionTemplateSelector, fileNameFunction);
addCheckboxUploadButton(isMultiFilesMode);
} else {
addCheckboxUploadButton(isMultiFilesMode);
+ addDiseaseSelector(defaultDisease);
addTemplateSelector(captionTemplateSelector, fileNameFunction);
}
@@ -125,19 +131,40 @@ private void addCheckboxUploadButton(boolean isMultiFilesMode) {
}
}
- private void addTemplateSelector(String captionTemplateSelector, Function fileNameFunction) {
+ private void addDiseaseSelector(Disease defaultDisease) {
+ ComboBox diseaseSelector = new ComboBox<>();
+ diseaseSelector.setCaption(I18nProperties.getCaption(Captions.disease));
+ diseaseSelector.setItems(FacadeProvider.getDiseaseConfigurationFacade().getAllDiseases(true, true, true));
+ diseaseSelector.setPlaceholder(I18nProperties.getString(Strings.all));
+ diseaseSelector.setEmptySelectionAllowed(true);
+ diseaseSelector.setWidth(100F, Unit.PERCENTAGE);
+ diseaseSelector.addStyleName(CssStyles.SOFT_REQUIRED);
+ diseaseSelector.setValue(defaultDisease);
+
+ diseaseSelector.addValueChangeListener(e -> {
+ Disease disease = e.getValue();
+ templateSelector.setValue(null);
+
+ templateSelector.setItems(getAvailableTemplates(disease));
+ templateSelector.setItemCaptionGenerator(DocumentTemplateDto::getFileName);
+ });
+
+ addComponent(diseaseSelector);
+ }
+
+ private void addTemplateSelector(String captionTemplateSelector, Function fileNameFunction) {
templateSelector = new ComboBox<>(captionTemplateSelector);
templateSelector.setWidth(100F, Unit.PERCENTAGE);
templateSelector.addValueChangeListener(e -> {
- String templateFile = e.getValue();
- boolean isValidTemplateFile = StringUtils.isNotBlank(templateFile);
+ DocumentTemplateDto template = e.getValue();
+ boolean isValidTemplateFile = template != null;
createButton.setEnabled(isValidTemplateFile);
additionalVariablesComponent.removeAllComponents();
hideTextfields();
documentVariables = null;
if (isValidTemplateFile) {
try {
- documentVariables = getDocumentVariables(templateFile);
+ documentVariables = getDocumentVariables(template.toReference());
List additionalVariables = documentVariables.getAdditionalVariables();
if (additionalVariables != null && !additionalVariables.isEmpty()) {
for (String variable : additionalVariables) {
@@ -149,7 +176,7 @@ private void addTemplateSelector(String captionTemplateSelector, Function function) {
}
}
- private void setStreamResource(String templateFile, String fileName) {
- StreamResource streamResource = createStreamResource(templateFile, fileName);
+ private void setStreamResource(DocumentTemplateDto template, String fileName) {
+ StreamResource streamResource = createStreamResource(template, fileName);
if (fileDownloader == null) {
fileDownloader = new FileDownloader(streamResource);
fileDownloader.extend(createButton);
@@ -235,19 +263,12 @@ protected boolean shouldUploadGeneratedDocument() {
return checkBoxUploadGeneratedDoc != null && Boolean.TRUE.equals(checkBoxUploadGeneratedDoc.getValue());
}
- protected abstract List getAvailableTemplates();
+ protected abstract List getAvailableTemplates(Disease disease);
- protected abstract DocumentVariables getDocumentVariables(String templateFile) throws IOException, DocumentTemplateException;
+ protected abstract DocumentVariables getDocumentVariables(DocumentTemplateReferenceDto templateReference)
+ throws IOException, DocumentTemplateException;
- protected abstract StreamResource createStreamResource(String templateFile, String filename);
+ protected abstract StreamResource createStreamResource(DocumentTemplateDto template, String filename);
protected abstract String getWindowCaption();
-
- public boolean isCheckBoxAfterTemplateSelector() {
- return isCheckBoxAfterTemplateSelector;
- }
-
- public void setCheckBoxAfterTemplateSelector(boolean checkBoxAfterTemplateSelector) {
- isCheckBoxAfterTemplateSelector = checkBoxAfterTemplateSelector;
- }
}
diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/docgeneration/DocGenerationController.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/docgeneration/DocGenerationController.java
index 95086c7a8ef..cd73d296e73 100644
--- a/sormas-ui/src/main/java/de/symeda/sormas/ui/docgeneration/DocGenerationController.java
+++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/docgeneration/DocGenerationController.java
@@ -39,10 +39,12 @@
import de.symeda.sormas.api.Disease;
import de.symeda.sormas.api.FacadeProvider;
import de.symeda.sormas.api.ReferenceDto;
+import de.symeda.sormas.api.docgeneneration.DocumentTemplateDto;
import de.symeda.sormas.api.docgeneneration.DocumentWorkflow;
import de.symeda.sormas.api.docgeneneration.EventDocumentFacade;
import de.symeda.sormas.api.docgeneneration.QuarantineOrderFacade;
import de.symeda.sormas.api.docgeneneration.RootEntityType;
+import de.symeda.sormas.api.event.EventDto;
import de.symeda.sormas.api.event.EventParticipantReferenceDto;
import de.symeda.sormas.api.event.EventReferenceDto;
import de.symeda.sormas.api.i18n.Captions;
@@ -65,22 +67,23 @@ public void showQuarantineOrderDocumentDialog(
RootEntityType rootEntityType,
ReferenceDto referenceDto,
DocumentWorkflow workflow,
+ Disease defaultDisease,
SampleCriteria sampleCriteria,
VaccinationCriteria vaccinationCriteria,
DocumentListComponent documentListComponent) {
showDialog(
new QuarantineOrderLayout(
workflow,
+ defaultDisease,
sampleCriteria,
vaccinationCriteria,
documentListComponent,
- (templateFile, sample, pathogenTest, vaccination, extraProperties, shouldUploadGeneratedDoc) -> {
+ (template, sample, pathogenTest, vaccination, extraProperties, shouldUploadGeneratedDoc) -> {
QuarantineOrderFacade quarantineOrderFacade = FacadeProvider.getQuarantineOrderFacade();
return new ByteArrayInputStream(
quarantineOrderFacade.getGeneratedDocument(
- templateFile,
- workflow,
+ template.toReference(),
rootEntityType,
referenceDto,
sample,
@@ -89,7 +92,7 @@ public void showQuarantineOrderDocumentDialog(
extraProperties,
shouldUploadGeneratedDoc));
},
- (templateFile) -> getDocumentFileName(referenceDto, templateFile)));
+ (template) -> getDocumentFileName(referenceDto, template)));
}
public void showBulkQuarantineOrderDocumentDialog(List referenceDtos, DocumentWorkflow workflow) {
@@ -100,13 +103,14 @@ public void showBulkQuarantineOrderDocumentDialog(List referenceDt
null,
null,
null,
- (templateFile, sample, pathogenTest, vaccination, extraProperties, shouldUploadGeneratedDoc) -> {
+ null,
+ (template, sample, pathogenTest, vaccination, extraProperties, shouldUploadGeneratedDoc) -> {
QuarantineOrderFacade quarantineOrderFacade = FacadeProvider.getQuarantineOrderFacade();
Map generatedDocumentContents =
- quarantineOrderFacade.getGeneratedDocuments(templateFile, workflow, referenceDtos, extraProperties, shouldUploadGeneratedDoc);
+ quarantineOrderFacade.getGeneratedDocuments(template.toReference(), referenceDtos, extraProperties, shouldUploadGeneratedDoc);
- return generateZip(templateFile, shouldUploadGeneratedDoc, generatedDocumentContents);
+ return generateZip(template, shouldUploadGeneratedDoc, generatedDocumentContents);
},
(templateFile) -> filename));
@@ -117,27 +121,28 @@ public void showBulkEventParticipantQuarantineOrderDocumentDialog(List {
+ (template, sample, pathogenTest, vaccination, extraProperties, shouldUploadGeneratedDoc) -> {
QuarantineOrderFacade quarantineOrderFacade = FacadeProvider.getQuarantineOrderFacade();
Map generatedDocumentContents = quarantineOrderFacade.getGeneratedDocumentsForEventParticipants(
- templateFile,
+ template.toReference(),
referenceDtos,
eventDisease,
extraProperties,
shouldUploadGeneratedDoc);
- return generateZip(templateFile, shouldUploadGeneratedDoc, generatedDocumentContents);
+ return generateZip(template, shouldUploadGeneratedDoc, generatedDocumentContents);
},
(templateFile) -> filename));
}
private ByteArrayInputStream generateZip(
- String templateFile,
+ DocumentTemplateDto template,
Boolean shouldUploadGeneratedDoc,
Map generatedDocumentContents) {
long fileSizeLimitMB = FacadeProvider.getConfigFacade().getDocumentUploadSizeLimitMb();
@@ -149,7 +154,7 @@ private ByteArrayInputStream generateZip(
for (Map.Entry referenceDocumentContent : generatedDocumentContents.entrySet()) {
ReferenceDto referenceDto = referenceDocumentContent.getKey();
- ZipEntry entry = new ZipEntry(getDocumentFileName(referenceDto, templateFile));
+ ZipEntry entry = new ZipEntry(getDocumentFileName(referenceDto, template));
zos.putNextEntry(entry);
byte[] document = referenceDocumentContent.getValue();
@@ -206,16 +211,17 @@ private void buildDocumentUploadWarningWindow(List fileSizeLimitExceeded
window.setWidth(1024, Sizeable.Unit.PIXELS);
}
- public void showEventDocumentDialog(EventReferenceDto eventReferenceDto, DocumentListComponent documentListComponent) {
+ public void showEventDocumentDialog(EventDto event, DocumentListComponent documentListComponent) {
showDialog(
new EventDocumentLayout(
+ event.getDisease(),
documentListComponent,
- (templateFileName) -> getDocumentFileName(eventReferenceDto, templateFileName),
- (templateFile, properties, shouldUploadGeneratedDoc) -> {
+ (template) -> getDocumentFileName(event.toReference(), template),
+ (template, properties, shouldUploadGeneratedDoc) -> {
EventDocumentFacade eventDocumentFacade = FacadeProvider.getEventDocumentFacade();
return new ByteArrayInputStream(
- eventDocumentFacade.getGeneratedDocument(templateFile, eventReferenceDto, properties, shouldUploadGeneratedDoc)
+ eventDocumentFacade.getGeneratedDocument(template.toReference(), event.toReference(), properties, shouldUploadGeneratedDoc)
.getBytes(StandardCharsets.UTF_8));
}));
}
@@ -223,13 +229,13 @@ public void showEventDocumentDialog(EventReferenceDto eventReferenceDto, Documen
public void showEventDocumentDialog(List referenceDtos) {
String filename = DownloadUtil.createFileNameWithCurrentDate(ExportEntityName.EVENTS, ".zip");
- showDialog(new EventDocumentLayout(null, (templateFile) -> filename, (templateFile, properties, shouldUploadGeneratedDoc) -> {
+ showDialog(new EventDocumentLayout(null, null, (templateFile) -> filename, (template, properties, shouldUploadGeneratedDoc) -> {
EventDocumentFacade eventDocumentFacade = FacadeProvider.getEventDocumentFacade();
Map generatedDocumentContents =
- eventDocumentFacade.getGeneratedDocuments(templateFile, referenceDtos, properties, shouldUploadGeneratedDoc);
+ eventDocumentFacade.getGeneratedDocuments(template.toReference(), referenceDtos, properties, shouldUploadGeneratedDoc);
- return generateZip(templateFile, shouldUploadGeneratedDoc, generatedDocumentContents);
+ return generateZip(template, shouldUploadGeneratedDoc, generatedDocumentContents);
}));
}
@@ -240,7 +246,7 @@ private void showDialog(AbstractDocgenerationLayout docgenerationLayout) {
window.setCaption(I18nProperties.getCaption(docgenerationLayout.getWindowCaption()));
}
- private String getDocumentFileName(ReferenceDto eventReferenceDto, String templateFileName) {
- return DataHelper.getShortUuid(eventReferenceDto) + '-' + templateFileName;
+ private String getDocumentFileName(ReferenceDto eventReferenceDto, DocumentTemplateDto template) {
+ return DataHelper.getShortUuid(eventReferenceDto) + '-' + template.getFileName();
}
}
diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/docgeneration/EventDocumentLayout.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/docgeneration/EventDocumentLayout.java
index 5ed024ae1fc..2ff77315502 100644
--- a/sormas-ui/src/main/java/de/symeda/sormas/ui/docgeneration/EventDocumentLayout.java
+++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/docgeneration/EventDocumentLayout.java
@@ -27,8 +27,11 @@
import com.vaadin.server.StreamResource;
import com.vaadin.ui.Notification;
+import de.symeda.sormas.api.Disease;
import de.symeda.sormas.api.FacadeProvider;
+import de.symeda.sormas.api.docgeneneration.DocumentTemplateDto;
import de.symeda.sormas.api.docgeneneration.DocumentTemplateException;
+import de.symeda.sormas.api.docgeneneration.DocumentTemplateReferenceDto;
import de.symeda.sormas.api.docgeneneration.DocumentVariables;
import de.symeda.sormas.api.i18n.Captions;
import de.symeda.sormas.api.i18n.I18nProperties;
@@ -41,10 +44,16 @@ public class EventDocumentLayout extends AbstractDocgenerationLayout {
private DocumentListComponent documentListComponent;
public EventDocumentLayout(
+ Disease defaultDisease,
DocumentListComponent documentListComponent,
- Function fileNameFunction,
+ Function fileNameFunction,
DocumentInputStreamSupplier documentInputStreamSupplier) {
- super(I18nProperties.getCaption(Captions.DocumentTemplate_EventHandout), fileNameFunction, isNull(documentListComponent), false);
+ super(
+ defaultDisease,
+ I18nProperties.getCaption(Captions.DocumentTemplate_EventHandout),
+ fileNameFunction,
+ isNull(documentListComponent),
+ false);
this.documentListComponent = documentListComponent;
this.documentInputStreamSupplier = documentInputStreamSupplier;
@@ -53,20 +62,20 @@ public EventDocumentLayout(
}
@Override
- protected List getAvailableTemplates() {
- return FacadeProvider.getEventDocumentFacade().getAvailableTemplates();
+ protected List getAvailableTemplates(Disease disease) {
+ return FacadeProvider.getEventDocumentFacade().getAvailableTemplates(disease);
}
@Override
- protected DocumentVariables getDocumentVariables(String templateFile) throws DocumentTemplateException {
- return FacadeProvider.getEventDocumentFacade().getDocumentVariables(templateFile);
+ protected DocumentVariables getDocumentVariables(DocumentTemplateReferenceDto templateReference) throws DocumentTemplateException {
+ return FacadeProvider.getEventDocumentFacade().getDocumentVariables(templateReference);
}
@Override
- protected StreamResource createStreamResource(String templateFile, String filename) {
+ protected StreamResource createStreamResource(DocumentTemplateDto template, String filename) {
return new StreamResource((StreamResource.StreamSource) () -> {
try {
- return documentInputStreamSupplier.get(templateFile, readAdditionalVariables(), shouldUploadGeneratedDocument());
+ return documentInputStreamSupplier.get(template, readAdditionalVariables(), shouldUploadGeneratedDocument());
} catch (Exception e) {
new Notification(I18nProperties.getString(Strings.errorProcessingTemplate), e.getMessage(), Notification.Type.ERROR_MESSAGE)
.show(Page.getCurrent());
@@ -86,6 +95,6 @@ protected String getWindowCaption() {
interface DocumentInputStreamSupplier {
- InputStream get(String templateFile, Properties properties, Boolean shouldUploadGeneratedDoc) throws DocumentTemplateException;
+ InputStream get(DocumentTemplateDto template, Properties properties, Boolean shouldUploadGeneratedDoc) throws DocumentTemplateException;
}
}
diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/docgeneration/EventDocumentsComponent.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/docgeneration/EventDocumentsComponent.java
index 334d1f1d3f3..1f474c4724a 100644
--- a/sormas-ui/src/main/java/de/symeda/sormas/ui/docgeneration/EventDocumentsComponent.java
+++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/docgeneration/EventDocumentsComponent.java
@@ -1,6 +1,6 @@
package de.symeda.sormas.ui.docgeneration;
-import de.symeda.sormas.api.event.EventReferenceDto;
+import de.symeda.sormas.api.event.EventDto;
import de.symeda.sormas.api.i18n.Captions;
import de.symeda.sormas.api.i18n.I18nProperties;
import de.symeda.sormas.ui.ControllerProvider;
@@ -10,11 +10,11 @@ public class EventDocumentsComponent extends AbstractDocumentGenerationComponent
public static final String DOCGENERATION_LOC = "docgeneration";
- public EventDocumentsComponent(EventReferenceDto eventReferenceDto, DocumentListComponent documentListComponent) {
+ public EventDocumentsComponent(EventDto event, DocumentListComponent documentListComponent) {
super();
if (DocGenerationHelper.isDocGenerationAllowed()) {
addDocumentBar(
- () -> ControllerProvider.getDocGenerationController().showEventDocumentDialog(eventReferenceDto, documentListComponent),
+ () -> ControllerProvider.getDocGenerationController().showEventDocumentDialog(event, documentListComponent),
I18nProperties.getCaption(Captions.DocumentTemplate_EventHandout_create));
}
}
diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/docgeneration/QuarantineOrderDocumentsComponent.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/docgeneration/QuarantineOrderDocumentsComponent.java
index b67a41076de..6f1d830e937 100644
--- a/sormas-ui/src/main/java/de/symeda/sormas/ui/docgeneration/QuarantineOrderDocumentsComponent.java
+++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/docgeneration/QuarantineOrderDocumentsComponent.java
@@ -17,6 +17,7 @@
import static de.symeda.sormas.ui.docgeneration.DocGenerationHelper.isDocGenerationAllowed;
+import de.symeda.sormas.api.Disease;
import de.symeda.sormas.api.ReferenceDto;
import de.symeda.sormas.api.caze.CaseDataDto;
import de.symeda.sormas.api.contact.ContactDto;
@@ -33,18 +34,21 @@
public class QuarantineOrderDocumentsComponent extends AbstractDocumentGenerationComponent {
+ private static final long serialVersionUID = 85800761803338225L;
+
public static final String QUARANTINE_LOC = "quarantine";
- public QuarantineOrderDocumentsComponent(
+ private QuarantineOrderDocumentsComponent(
RootEntityType rootEntityType,
ReferenceDto referenceDto,
DocumentWorkflow workflow,
+ Disease defaultDisease,
SampleCriteria sampleCriteria,
VaccinationCriteria vaccinationCriteria) {
super();
addDocumentBar(
() -> ControllerProvider.getDocGenerationController()
- .showQuarantineOrderDocumentDialog(rootEntityType, referenceDto, workflow, sampleCriteria, vaccinationCriteria, null),
+ .showQuarantineOrderDocumentDialog(rootEntityType, referenceDto, workflow, defaultDisease, sampleCriteria, vaccinationCriteria, null),
Captions.DocumentTemplate_QuarantineOrder);
}
@@ -56,12 +60,17 @@ public static void addComponentToLayout(LayoutWithSidePanel targetLayout, CaseDa
RootEntityType.ROOT_CASE,
caze.toReference(),
DocumentWorkflow.QUARANTINE_ORDER_CASE,
+ caze.getDisease(),
sampleCriteria,
vaccinationCriteria,
documentList);
}
- public static void addComponentToLayout(LayoutWithSidePanel targetLayout, ContactDto contact, DocumentListComponent documentList) {
+ public static void addComponentToLayout(
+ LayoutWithSidePanel targetLayout,
+ ContactDto contact,
+ Disease defaultDisease,
+ DocumentListComponent documentList) {
VaccinationCriteria vaccinationCriteria = new VaccinationCriteria.Builder(contact.getPerson()).withDisease(contact.getDisease()).build();
SampleCriteria sampleCriteria = new SampleCriteria().contact(contact.toReference());
@@ -70,6 +79,7 @@ public static void addComponentToLayout(LayoutWithSidePanel targetLayout, Contac
RootEntityType.ROOT_CONTACT,
contact.toReference(),
DocumentWorkflow.QUARANTINE_ORDER_CONTACT,
+ defaultDisease,
sampleCriteria,
vaccinationCriteria,
documentList);
@@ -81,6 +91,7 @@ public static void addComponentToLayout(LayoutWithSidePanel targetLayout, Travel
RootEntityType.ROOT_TRAVEL_ENTRY,
travelEntry.toReference(),
DocumentWorkflow.QUARANTINE_ORDER_TRAVEL_ENTRY,
+ travelEntry.getDisease(),
null,
null,
documentList);
@@ -91,21 +102,23 @@ public static void addComponentToLayout(
RootEntityType rootEntityType,
ReferenceDto referenceDto,
DocumentWorkflow workflow,
+ Disease defaultDisease,
SampleCriteria sampleCriteria,
VaccinationCriteria vaccinationCriteria) {
if (isDocGenerationAllowed()) {
QuarantineOrderDocumentsComponent docGenerationComponent =
- new QuarantineOrderDocumentsComponent(rootEntityType, referenceDto, workflow, sampleCriteria, vaccinationCriteria);
+ new QuarantineOrderDocumentsComponent(rootEntityType, referenceDto, workflow, defaultDisease, sampleCriteria, vaccinationCriteria);
docGenerationComponent.addStyleName(CssStyles.SIDE_COMPONENT);
targetLayout.addSidePanelComponent(docGenerationComponent, QUARANTINE_LOC);
}
}
- public static void addComponentToLayout(
+ private static void addComponentToLayout(
LayoutWithSidePanel targetLayout,
RootEntityType rootEntityType,
ReferenceDto referenceDto,
DocumentWorkflow workflow,
+ Disease defaultDisease,
SampleCriteria sampleCriteria,
VaccinationCriteria vaccinationCriteria,
DocumentListComponent documentListComponent) {
@@ -114,6 +127,7 @@ public static void addComponentToLayout(
rootEntityType,
referenceDto,
workflow,
+ defaultDisease,
sampleCriteria,
vaccinationCriteria,
documentListComponent);
@@ -122,10 +136,11 @@ public static void addComponentToLayout(
}
}
- public QuarantineOrderDocumentsComponent(
+ private QuarantineOrderDocumentsComponent(
RootEntityType rootEntityType,
ReferenceDto referenceDto,
DocumentWorkflow workflow,
+ Disease defaultDisease,
SampleCriteria sampleCriteria,
VaccinationCriteria vaccinationCriteria,
DocumentListComponent documentListComponent) {
@@ -136,6 +151,7 @@ public QuarantineOrderDocumentsComponent(
rootEntityType,
referenceDto,
workflow,
+ defaultDisease,
sampleCriteria,
vaccinationCriteria,
documentListComponent),
diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/docgeneration/QuarantineOrderLayout.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/docgeneration/QuarantineOrderLayout.java
index b31f8320381..86119927bd9 100644
--- a/sormas-ui/src/main/java/de/symeda/sormas/ui/docgeneration/QuarantineOrderLayout.java
+++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/docgeneration/QuarantineOrderLayout.java
@@ -26,7 +26,6 @@
import javax.annotation.Nullable;
-import de.symeda.sormas.ui.utils.CssStyles;
import org.slf4j.LoggerFactory;
import com.vaadin.server.Page;
@@ -35,8 +34,11 @@
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.Notification;
+import de.symeda.sormas.api.Disease;
import de.symeda.sormas.api.FacadeProvider;
+import de.symeda.sormas.api.docgeneneration.DocumentTemplateDto;
import de.symeda.sormas.api.docgeneneration.DocumentTemplateException;
+import de.symeda.sormas.api.docgeneneration.DocumentTemplateReferenceDto;
import de.symeda.sormas.api.docgeneneration.DocumentVariables;
import de.symeda.sormas.api.docgeneneration.DocumentWorkflow;
import de.symeda.sormas.api.docgeneneration.QuarantineOrderDocumentOptionsDto;
@@ -56,6 +58,7 @@
import de.symeda.sormas.api.vaccination.VaccinationListEntryDto;
import de.symeda.sormas.api.vaccination.VaccinationReferenceDto;
import de.symeda.sormas.ui.document.DocumentListComponent;
+import de.symeda.sormas.ui.utils.CssStyles;
public class QuarantineOrderLayout extends AbstractDocgenerationLayout {
@@ -71,12 +74,14 @@ public class QuarantineOrderLayout extends AbstractDocgenerationLayout {
public QuarantineOrderLayout(
DocumentWorkflow workflow,
+ Disease defaultDisease,
@Nullable SampleCriteria sampleCriteria,
@Nullable VaccinationCriteria vaccinationCriteria,
DocumentListComponent documentListComponent,
DocumentStreamSupplier documentStreamSupplier,
- Function fileNameFunction) {
+ Function fileNameFunction) {
super(
+ defaultDisease,
I18nProperties.getCaption(Captions.DocumentTemplate_QuarantineOrder),
fileNameFunction,
isNull(sampleCriteria) && isNull(documentListComponent),
@@ -99,7 +104,7 @@ public QuarantineOrderLayout(
}
public QuarantineOrderLayout(DocumentWorkflow workflow) {
- super(I18nProperties.getCaption(Captions.DocumentTemplate_QuarantineOrder), null, true, true);
+ super(null, I18nProperties.getCaption(Captions.DocumentTemplate_QuarantineOrder), null, true, true);
this.workflow = workflow;
this.documentStreamSupplier = null;
@@ -164,9 +169,9 @@ protected void createVaccinationSelector(VaccinationCriteria vaccinationCriteria
}
@Override
- protected List getAvailableTemplates() {
+ protected List getAvailableTemplates(Disease disease) {
try {
- return FacadeProvider.getQuarantineOrderFacade().getAvailableTemplates(workflow);
+ return FacadeProvider.getQuarantineOrderFacade().getAvailableTemplates(workflow, disease);
} catch (Exception e) {
new Notification(I18nProperties.getString(Strings.errorProcessingTemplate), e.getMessage(), Notification.Type.ERROR_MESSAGE)
.show(Page.getCurrent());
@@ -175,12 +180,12 @@ protected List getAvailableTemplates() {
}
@Override
- protected DocumentVariables getDocumentVariables(String templateFile) throws DocumentTemplateException {
- return FacadeProvider.getQuarantineOrderFacade().getDocumentVariables(workflow, templateFile);
+ protected DocumentVariables getDocumentVariables(DocumentTemplateReferenceDto templateReference) throws DocumentTemplateException {
+ return FacadeProvider.getQuarantineOrderFacade().getDocumentVariables(templateReference);
}
@Override
- protected StreamResource createStreamResource(String templateFile, String filename) {
+ protected StreamResource createStreamResource(DocumentTemplateDto template, String filename) {
return new StreamResource((StreamSource) () -> {
SampleReferenceDto sampleReference =
sampleSelector != null && sampleSelector.getValue() != null ? sampleSelector.getValue().toReference() : null;
@@ -192,7 +197,7 @@ protected StreamResource createStreamResource(String templateFile, String filena
try {
InputStream stream = documentStreamSupplier.getStream(
- templateFile,
+ template,
sampleReference,
pathogenTestReference,
vaccinationReference,
@@ -260,7 +265,7 @@ public QuarantineOrderDocumentOptionsDto getFieldValues() {
options.setPathogenTest(new PathogenTestReferenceDto(pathogenTestSelector.getValue().getUuid()));
}
if (templateSelector != null) {
- options.setTemplateFile(templateSelector.getValue());
+ options.setTemplate(templateSelector.getValue().toReference());
}
options.setShouldUploadGeneratedDoc(shouldUploadGeneratedDocument());
@@ -275,7 +280,7 @@ public QuarantineOrderDocumentOptionsDto getFieldValues() {
public interface DocumentStreamSupplier {
InputStream getStream(
- String templateFile,
+ DocumentTemplateDto template,
SampleReferenceDto sample,
PathogenTestReferenceDto pathogenTest,
VaccinationReferenceDto vaccinationReference,
diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/email/ExternalBulkEmailOptionsForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/email/ExternalBulkEmailOptionsForm.java
index d1021d75aa2..1cb156d7f63 100644
--- a/sormas-ui/src/main/java/de/symeda/sormas/ui/email/ExternalBulkEmailOptionsForm.java
+++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/email/ExternalBulkEmailOptionsForm.java
@@ -44,6 +44,7 @@
import de.symeda.sormas.api.DocumentHelper;
import de.symeda.sormas.api.FacadeProvider;
+import de.symeda.sormas.api.docgeneneration.DocumentTemplateDto;
import de.symeda.sormas.api.docgeneneration.DocumentWorkflow;
import de.symeda.sormas.api.docgeneneration.EmailAttachementDto;
import de.symeda.sormas.api.docgeneneration.RootEntityType;
@@ -113,7 +114,7 @@ protected String createHtmlLayout() {
protected void addFields() {
ComboBox templateCombo = addField(ExternalEmailOptionsWithAttachmentsDto.TEMPLATE_NAME, ComboBox.class);
templateCombo.setRequired(true);
- List templateNames = FacadeProvider.getExternalEmailFacade().getTemplateNames(documentWorkflow);
+ List templateNames = FacadeProvider.getExternalEmailFacade().getTemplates(documentWorkflow);
FieldHelper.updateItems(templateCombo, templateNames);
if (Arrays.asList(DocumentWorkflow.CASE_EMAIL, DocumentWorkflow.CONTACT_EMAIL, DocumentWorkflow.TRAVEL_ENTRY_EMAIL)
diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/email/ExternalEmailOptionsForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/email/ExternalEmailOptionsForm.java
index 5a9787a8007..507bf0385b4 100644
--- a/sormas-ui/src/main/java/de/symeda/sormas/ui/email/ExternalEmailOptionsForm.java
+++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/email/ExternalEmailOptionsForm.java
@@ -18,6 +18,7 @@
import static de.symeda.sormas.ui.utils.LayoutUtil.fluidRowLocs;
import java.util.List;
+import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;
@@ -27,6 +28,8 @@
import com.vaadin.v7.ui.ComboBox;
import de.symeda.sormas.api.FacadeProvider;
+import de.symeda.sormas.api.docgeneneration.DocumentTemplateDto;
+import de.symeda.sormas.api.docgeneneration.DocumentTemplateReferenceDto;
import de.symeda.sormas.api.docgeneneration.DocumentWorkflow;
import de.symeda.sormas.api.document.DocumentReferenceDto;
import de.symeda.sormas.api.document.DocumentRelatedEntityType;
@@ -43,28 +46,28 @@
public class ExternalEmailOptionsForm extends AbstractEditForm {
- private static final String ATTACHMENT_NOT_AVAILABLE_INFO_LOC = "attachmentNotAvailableInfoLoc";
- private static final String HTML_LAYOUT = fluidRowLocs(ExternalEmailOptionsDto.TEMPLATE_NAME)
- + fluidRowLocs(ExternalEmailOptionsDto.RECIPIENT_EMAIL)
- + fluidRowLocs(ExternalEmailOptionsDto.ATTACHED_DOCUMENTS)
- + fluidRowLocs(ATTACHMENT_NOT_AVAILABLE_INFO_LOC);
+ private static final String ATTACHMENT_NOT_AVAILABLE_INFO_LOC = "attachmentNotAvailableInfoLoc";
+ private static final String HTML_LAYOUT = fluidRowLocs(ExternalEmailOptionsDto.TEMPLATE)
+ + fluidRowLocs(ExternalEmailOptionsDto.RECIPIENT_EMAIL)
+ + fluidRowLocs(ExternalEmailOptionsDto.ATTACHED_DOCUMENTS)
+ + fluidRowLocs(ATTACHMENT_NOT_AVAILABLE_INFO_LOC);
private final DocumentWorkflow documentWorkflow;
- private final DocumentRelatedEntityType documentRelatedEntityType;
+ private final DocumentRelatedEntityType documentRelatedEntityType;
private final PersonDto person;
- private final boolean isAttachmentAvailable;
- private MultiSelect attachedDocumentsField;
-
- protected ExternalEmailOptionsForm(
- DocumentWorkflow documentWorkflow,
- DocumentRelatedEntityType documentRelatedEntityType,
- PersonDto person,
- boolean isAttachmentAvailable) {
+ private final boolean isAttachmentAvailable;
+ private MultiSelect attachedDocumentsField;
+
+ protected ExternalEmailOptionsForm(
+ DocumentWorkflow documentWorkflow,
+ DocumentRelatedEntityType documentRelatedEntityType,
+ PersonDto person,
+ boolean isAttachmentAvailable) {
super(ExternalEmailOptionsDto.class, ExternalEmailOptionsDto.I18N_PREFIX, false);
this.documentWorkflow = documentWorkflow;
- this.documentRelatedEntityType = documentRelatedEntityType;
+ this.documentRelatedEntityType = documentRelatedEntityType;
this.person = person;
- this.isAttachmentAvailable = isAttachmentAvailable;
+ this.isAttachmentAvailable = isAttachmentAvailable;
addFields();
hideValidationUntilNextCommit();
@@ -77,10 +80,14 @@ protected String createHtmlLayout() {
@Override
protected void addFields() {
- ComboBox templateCombo = addField(ExternalEmailOptionsDto.TEMPLATE_NAME, ComboBox.class);
+ ComboBox templateCombo = addField(ExternalEmailOptionsDto.TEMPLATE, ComboBox.class);
templateCombo.setRequired(true);
- List templateNames = FacadeProvider.getExternalEmailFacade().getTemplateNames(documentWorkflow);
- FieldHelper.updateItems(templateCombo, templateNames);
+ List templates = FacadeProvider.getExternalEmailFacade()
+ .getTemplates(documentWorkflow)
+ .stream()
+ .map(DocumentTemplateDto::toReference)
+ .collect(Collectors.toList());
+ FieldHelper.updateItems(templateCombo, templates);
ComboBox recipientEmailCombo = addField(ExternalEmailOptionsDto.RECIPIENT_EMAIL, ComboBox.class);
recipientEmailCombo.setRequired(true);
@@ -89,30 +96,30 @@ protected void addFields() {
String primaryEmailAddress = person.getEmailAddress(true);
if (StringUtils.isNotBlank(primaryEmailAddress)) {
recipientEmailCombo
- .setItemCaption(primaryEmailAddress, primaryEmailAddress + " (" + I18nProperties.getCaption(Captions.primarySuffix) + ")");
+ .setItemCaption(primaryEmailAddress, primaryEmailAddress + " (" + I18nProperties.getCaption(Captions.primarySuffix) + ")");
}
- if (documentRelatedEntityType != null) {
- attachedDocumentsField = addField(ExternalEmailOptionsDto.ATTACHED_DOCUMENTS, MultiSelect.class);
- if (!isAttachmentAvailable) {
- attachedDocumentsField.setEnabled(false);
-
- MultilineLabel attachmentUnavailableInfo = new MultilineLabel(
- VaadinIcons.INFO_CIRCLE.getHtml() + " " + I18nProperties.getString(Strings.messageExternalEmailAttachmentNotAvailableInfo),
- ContentMode.HTML);
- attachmentUnavailableInfo.addStyleNames(CssStyles.VSPACE_2, CssStyles.VSPACE_TOP_4);
- getContent().addComponent(attachmentUnavailableInfo, ATTACHMENT_NOT_AVAILABLE_INFO_LOC);
- }
- }
- }
-
- @Override
- public void setValue(ExternalEmailOptionsDto newFieldValue) throws ReadOnlyException, Converter.ConversionException {
- super.setValue(newFieldValue);
-
- if (attachedDocumentsField != null) {
- attachedDocumentsField.setItems(
- FacadeProvider.getExternalEmailFacade().getAttachableDocuments(documentWorkflow, newFieldValue.getRootEntityReference().getUuid()));
- }
+ if (documentRelatedEntityType != null) {
+ attachedDocumentsField = addField(ExternalEmailOptionsDto.ATTACHED_DOCUMENTS, MultiSelect.class);
+ if (!isAttachmentAvailable) {
+ attachedDocumentsField.setEnabled(false);
+
+ MultilineLabel attachmentUnavailableInfo = new MultilineLabel(
+ VaadinIcons.INFO_CIRCLE.getHtml() + " " + I18nProperties.getString(Strings.messageExternalEmailAttachmentNotAvailableInfo),
+ ContentMode.HTML);
+ attachmentUnavailableInfo.addStyleNames(CssStyles.VSPACE_2, CssStyles.VSPACE_TOP_4);
+ getContent().addComponent(attachmentUnavailableInfo, ATTACHMENT_NOT_AVAILABLE_INFO_LOC);
+ }
+ }
+ }
+
+ @Override
+ public void setValue(ExternalEmailOptionsDto newFieldValue) throws ReadOnlyException, Converter.ConversionException {
+ super.setValue(newFieldValue);
+
+ if (attachedDocumentsField != null) {
+ attachedDocumentsField.setItems(
+ FacadeProvider.getExternalEmailFacade().getAttachableDocuments(documentWorkflow, newFieldValue.getRootEntityReference().getUuid()));
+ }
}
}
diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventDataView.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventDataView.java
index cb2733d9a47..46db076f7db 100644
--- a/sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventDataView.java
+++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventDataView.java
@@ -140,7 +140,7 @@ protected void initView(String params) {
layout.addSidePanelComponent(new SideComponentLayout(documentList), DOCUMENTS_LOC);
}
- EventDocumentsComponent eventDocuments = new EventDocumentsComponent(getEventRef(), documentList);
+ EventDocumentsComponent eventDocuments = new EventDocumentsComponent(event, documentList);
eventDocuments.addStyleName(CssStyles.SIDE_COMPONENT);
layout.addSidePanelComponent(eventDocuments, EventDocumentsComponent.DOCGENERATION_LOC);
diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventParticipantDataView.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventParticipantDataView.java
index 0e067d6f6bc..f34e16f0225 100644
--- a/sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventParticipantDataView.java
+++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventParticipantDataView.java
@@ -151,6 +151,7 @@ protected void initView(String params) {
RootEntityType.ROOT_EVENT_PARTICIPANT,
eventParticipantRef,
DocumentWorkflow.QUARANTINE_ORDER_EVENT_PARTICIPANT,
+ event.getDisease(),
sampleCriteria,
vaccinationCriteria);
diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/importer/DocumentTemplateReceiver.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/importer/DocumentTemplateReceiver.java
index b8336e890c4..dda954b2d26 100644
--- a/sormas-ui/src/main/java/de/symeda/sormas/ui/importer/DocumentTemplateReceiver.java
+++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/importer/DocumentTemplateReceiver.java
@@ -10,13 +10,16 @@
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Date;
+import java.util.function.Supplier;
import com.vaadin.server.Page;
import com.vaadin.ui.Label;
import com.vaadin.ui.Notification;
import com.vaadin.v7.ui.Upload.StartedEvent;
+import de.symeda.sormas.api.Disease;
import de.symeda.sormas.api.FacadeProvider;
+import de.symeda.sormas.api.docgeneneration.DocumentTemplateDto;
import de.symeda.sormas.api.docgeneneration.DocumentWorkflow;
import de.symeda.sormas.api.i18n.Captions;
import de.symeda.sormas.api.i18n.I18nProperties;
@@ -35,9 +38,11 @@ public class DocumentTemplateReceiver
private File file;
private String fName;
private final DocumentWorkflow documentWorkflow;
+ private final Supplier diseaseSupplier;
- public DocumentTemplateReceiver(DocumentWorkflow documentWorkflow) {
+ public DocumentTemplateReceiver(DocumentWorkflow documentWorkflow, Supplier diseaseSupplier) {
this.documentWorkflow = documentWorkflow;
+ this.diseaseSupplier = diseaseSupplier;
}
@Override
@@ -89,7 +94,7 @@ public void uploadSucceeded(com.vaadin.v7.ui.Upload.SucceededEvent succeededEven
}
// Check for duplicate files
- if (FacadeProvider.getDocumentTemplateFacade().isExistingTemplate(documentWorkflow, fName)) {
+ if (FacadeProvider.getDocumentTemplateFacade().isExistingTemplateFile(documentWorkflow, diseaseSupplier.get(), fName)) {
VaadinUiUtil.showConfirmationPopup(
I18nProperties.getString(Strings.headingFileExists),
new Label(String.format(I18nProperties.getString(Strings.infoDocumentAlreadyExists), fName)),
@@ -108,8 +113,9 @@ public void uploadSucceeded(com.vaadin.v7.ui.Upload.SucceededEvent succeededEven
private void writeTemplateFile() {
try {
- byte[] filecontent = Files.readAllBytes(file.toPath());
- FacadeProvider.getDocumentTemplateFacade().writeDocumentTemplate(documentWorkflow, fName, filecontent);
+ byte[] fileContent = Files.readAllBytes(file.toPath());
+ DocumentTemplateDto documentTemplateDto = DocumentTemplateDto.build(documentWorkflow, fName, diseaseSupplier.get());
+ FacadeProvider.getDocumentTemplateFacade().saveDocumentTemplate(documentTemplateDto, fileContent);
VaadinUiUtil.showSimplePopupWindow(
I18nProperties.getString(Strings.headingUploadSuccess),
I18nProperties.getString(Strings.messageUploadSuccessful));
diff --git a/sormas-ui/src/test/resources/META-INF/persistence.xml b/sormas-ui/src/test/resources/META-INF/persistence.xml
index f0c6e5b197e..0242f19fa99 100644
--- a/sormas-ui/src/test/resources/META-INF/persistence.xml
+++ b/sormas-ui/src/test/resources/META-INF/persistence.xml
@@ -89,6 +89,7 @@
de.symeda.sormas.backend.environment.environmentsample.EnvironmentSample
de.symeda.sormas.backend.specialcaseaccess.SpecialCaseAccess
de.symeda.sormas.backend.selfreport.SelfReport
+ de.symeda.sormas.backend.docgeneration.DocumentTemplate
true