diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateCloneService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateCloneService.java index 80d4824bb..9c30aa12b 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateCloneService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateCloneService.java @@ -8,6 +8,7 @@ import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.List; import java.util.UUID; +import java.util.stream.Collectors; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; @@ -24,14 +25,19 @@ import com.iqser.red.service.persistence.management.v1.processor.exception.Confl import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DictionaryPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierAttributeConfigPersistenceService; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierStatusPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.EntryPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileAttributeConfigPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.LegalBasisMappingPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ReportTemplatePersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.RulesPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplateStatus; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierStatusRequest; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatusInfo; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.legalbasis.LegalBasis; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.DictionaryEntryType; import com.iqser.red.storage.commons.service.StorageService; import lombok.RequiredArgsConstructor; @@ -48,11 +54,13 @@ public class DossierTemplateCloneService { private final DossierTemplatePersistenceService dossierTemplatePersistenceService; private final DossierAttributeConfigPersistenceService dossierAttributeConfigPersistenceService; private final DictionaryPersistenceService dictionaryPersistenceService; + private final EntryPersistenceService entryPersistenceService; private final FileAttributeConfigPersistenceService fileAttributeConfigPersistenceService; private final ReportTemplatePersistenceService reportTemplatePersistenceService; private final WatermarkService watermarkService; private final ColorsService colorsService; private final StorageService storageService; + private final DossierStatusPersistenceService dossierStatusPersistenceService; public DossierTemplateEntity cloneDossierTemplate(String dossierTemplateId, String nameOfClonedDossierTemplate, String cloningUserId) { @@ -86,7 +94,7 @@ public class DossierTemplateCloneService { dossierTemplateRepository.save(clonedDossierTemplate); //set dictionaries - clonedDossierTemplate.setDossierTypes(cloneDictionaries(dossierTemplate.getId(), clonedDossierTemplate.getId())); + clonedDossierTemplate.setDossierTypes(cloneDictionariesWithEntries(dossierTemplate.getId(), clonedDossierTemplate.getId())); //set dossier attributes cloneDossierAttributesConfig(dossierTemplate.getId(), clonedDossierTemplate.getId()); @@ -105,6 +113,9 @@ public class DossierTemplateCloneService { //set colors cloneColors(dossierTemplate.getId(), clonedDossierTemplate.getId()); + //set dossier status + cloneDossierStates(dossierTemplate.getId(), clonedDossierTemplate.getId()); + dossierTemplateRepository.save(clonedDossierTemplate); }, () -> { @@ -126,7 +137,7 @@ public class DossierTemplateCloneService { } - private List cloneDictionaries(String dossierTemplateId, String clonedDossierTemplateId) { + private List cloneDictionariesWithEntries(String dossierTemplateId, String clonedDossierTemplateId) { List clonedTypes = new ArrayList<>(); var types = dictionaryPersistenceService.getAllTypesForDossierTemplate(dossierTemplateId); @@ -134,6 +145,11 @@ public class DossierTemplateCloneService { TypeEntity te = dictionaryPersistenceService.addType(t.getType(), clonedDossierTemplateId, t.getHexColor(), t.getRecommendationHexColor(), t.getRank(), t.isHint(), t.isCaseInsensitive(), t.isRecommendation(), t.getDescription(), t.isAddToDictionaryAction(), t.getLabel(), null, t.isHasDictionary(), t.isSystemManaged()); te.setDossierTemplateId(clonedDossierTemplateId); clonedTypes.add(te); + for (DictionaryEntryType det : DictionaryEntryType.values()) { + var baseDictionaryEntries = entryPersistenceService.getEntries(t.getId(), det, null); + List entries = baseDictionaryEntries.stream().map(baseDictionaryEntry -> baseDictionaryEntry.getValue()).collect(Collectors.toList()); + entryPersistenceService.addEntry(te.getId(), entries, te.getVersion(), det); + } } return clonedTypes; } @@ -234,4 +250,20 @@ public class DossierTemplateCloneService { colorsService.saveColors(clonedColors); } + + private void cloneDossierStates(String dossierTemplateId, String clonedDossierTemplateId) { + + var states = dossierStatusPersistenceService.getAllDossierStatusForTemplate(dossierTemplateId); + for (var state : states) { + var clonedState = CreateOrUpdateDossierStatusRequest.builder() + .name(state.getName()) + .description(state.getDescription()) + .color(state.getColor()) + .dossierTemplateId(clonedDossierTemplateId) + .rank(state.getRank()) + .build(); + dossierStatusPersistenceService.createOrUpdateDossierStatus(clonedState); + } + } + } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java index 52231e876..5ea7e8773 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java @@ -21,6 +21,7 @@ import org.springframework.boot.test.mock.mockito.MockBean; import com.iqser.red.service.peristence.v1.server.integration.client.DictionaryClient; import com.iqser.red.service.peristence.v1.server.integration.client.DossierAttributeConfigClient; import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient; +import com.iqser.red.service.peristence.v1.server.integration.client.DossierStatusClient; import com.iqser.red.service.peristence.v1.server.integration.client.DossierTemplateClient; import com.iqser.red.service.peristence.v1.server.integration.client.FileAttributeConfigClient; import com.iqser.red.service.peristence.v1.server.integration.client.ReportTemplateClient; @@ -50,10 +51,13 @@ import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.Re import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.Colors; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.Watermark; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.WatermarkOrientation; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierStatusRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierAttributeType; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatusInfo; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileAttributeConfig; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileAttributeType; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.DictionaryEntry; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.DictionaryEntryType; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.Type; import feign.FeignException; @@ -87,6 +91,9 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { @Autowired private WatermarkClient watermarkClient; + @Autowired + private DossierStatusClient dossierStatusClient; + @Test public void testDossierTemplate() { @@ -145,8 +152,7 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); Type type = Type.builder() - .id("t.id") - .type("t.getType()") + .type("t") .dossierTemplateId(dossierTemplate.getId()) .hexColor("#ddddd") .recommendationHexColor("#cccccc") @@ -163,7 +169,30 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { .falsePositiveEntries(List.of(DictionaryEntry.builder().entryId(2001).value("dictEntry2").version(23).deleted(false).typeId("t.getType()").build())) .falseRecommendationEntries(List.of(DictionaryEntry.builder().entryId(3001).value("dictEntry3").version(23).deleted(false).typeId("t.getType()").build())) .build(); - dictionaryClient.addType(type); + Type type2 = Type.builder() + .type("t2") + .dossierTemplateId(dossierTemplate.getId()) + .hexColor("#12345") + .recommendationHexColor("#6789a") + .rank(1002) + .isHint(false) + .isRecommendation(false) + .isCaseInsensitive(false) + .description("t2.getDescription()") + .addToDictionaryAction(true) + .label("t2.getLabel()") + .dossierId(null) + .version(23) + .entries(List.of(DictionaryEntry.builder().entryId(1001).value("dictEntry1").version(23).deleted(false).typeId("t2.getType()").build())) + .falsePositiveEntries(List.of(DictionaryEntry.builder().entryId(2001).value("dictEntry2").version(23).deleted(false).typeId("t2.getType()").build())) + .falseRecommendationEntries(List.of(DictionaryEntry.builder().entryId(3001).value("dictEntry3").version(23).deleted(false).typeId("t2.getType()").build())) + .build(); + var createdType1 = dictionaryClient.addType(type); + var createdType2 = dictionaryClient.addType(type2); + var loadedType1 = dictionaryClient.getDictionaryForType(createdType1.getId(), null); + var loadedType2 = dictionaryClient.getDictionaryForType(createdType2.getId(), null); + dictionaryClient.addEntries(loadedType1.getTypeId(), List.of("entry1", "entry2"), false, false, DictionaryEntryType.ENTRY); + dictionaryClient.addEntries(loadedType2.getTypeId(), List.of("entry3", "entry4"), false, false, DictionaryEntryType.FALSE_POSITIVE); dossierAttributeConfigClient.setDossierAttributesConfig(dossierTemplate.getId(), List.of(DossierAttributeConfig.builder() .dossierTemplateId(dossierTemplate.getId()) .editable(false) @@ -200,7 +229,13 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { .storageId("storageId") .uploadDate(OffsetDateTime.now()) .build(); - reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder().template("some text".getBytes(StandardCharsets.UTF_8)).dossierTemplateId(dossierTemplate.getId()).fileName("Report Template").activeByDefault(true).multiFileReport(false).build()); + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .template("some text".getBytes(StandardCharsets.UTF_8)) + .dossierTemplateId(dossierTemplate.getId()) + .fileName("Report Template") + .activeByDefault(true) + .multiFileReport(false) + .build()); watermarkClient.saveWatermark(dossierTemplate.getId(), Watermark.builder() .dossierTemplateId(dossierTemplate.getId()) .fontSize(10) @@ -225,6 +260,14 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { .manualRedactionColor("#bbbbbb") .build(); dictionaryClient.setColors(dossierTemplate.getId(), col); + var dossierStatus = CreateOrUpdateDossierStatusRequest.builder() + .name("dossStatus1") + .description("ds description") + .color("#115599") + .rank(456) + .dossierTemplateId(dossierTemplate.getId()) + .build(); + dossierStatusClient.createOrUpdateDossierStatus(dossierStatus); var allTemplates = dossierTemplateClient.getAllDossierTemplates(); assertThat(allTemplates.size()).isEqualTo(1); @@ -242,12 +285,25 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { assertThat(loadedTemplate.getModifiedBy()).isEqualTo("user"); assertThat(loadedTemplate.getCreatedBy()).isEqualTo("user"); - assertThat(dossierAttributeConfigClient.getDossierAttributes(dossierTemplate.getId()).get(0).getLabel()).isEqualTo(dossierAttributeConfigClient.getDossierAttributes(clonedDT.getId()).get(0).getLabel()); - assertThat(fileAttributeConfigClient.getFileAttributeConfigs(dossierTemplate.getId()).get(0).getCsvColumnHeader()).isEqualTo(fileAttributeConfigClient.getFileAttributeConfigs(clonedDT.getId()).get(0).getCsvColumnHeader()); - assertThat(fileAttributeConfigClient.getFileAttributesGeneralConfig(dossierTemplate.getId()).getFilenameMappingColumnHeaderName()).isEqualTo(fileAttributeConfigClient.getFileAttributesGeneralConfig(clonedDT.getId()).getFilenameMappingColumnHeaderName()); - assertThat(reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()).get(0).getFileName()).isEqualTo(reportTemplateClient.getAvailableReportTemplates(clonedDT.getId()).get(0).getFileName()); + assertThat(dossierAttributeConfigClient.getDossierAttributes(dossierTemplate.getId()) + .get(0) + .getLabel()).isEqualTo(dossierAttributeConfigClient.getDossierAttributes(clonedDT.getId()).get(0).getLabel()); + assertThat(fileAttributeConfigClient.getFileAttributeConfigs(dossierTemplate.getId()) + .get(0) + .getCsvColumnHeader()).isEqualTo(fileAttributeConfigClient.getFileAttributeConfigs(clonedDT.getId()).get(0).getCsvColumnHeader()); + assertThat(fileAttributeConfigClient.getFileAttributesGeneralConfig(dossierTemplate.getId()) + .getFilenameMappingColumnHeaderName()).isEqualTo(fileAttributeConfigClient.getFileAttributesGeneralConfig(clonedDT.getId()).getFilenameMappingColumnHeaderName()); + assertThat(reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()) + .get(0) + .getFileName()).isEqualTo(reportTemplateClient.getAvailableReportTemplates(clonedDT.getId()).get(0).getFileName()); assertThat(watermarkClient.getWatermark(dossierTemplate.getId()).getText()).isEqualTo(watermarkClient.getWatermark(clonedDT.getId()).getText()); assertThat(dictionaryClient.getColors(dossierTemplate.getId()).getRequestAdd()).isEqualTo(dictionaryClient.getColors(clonedDT.getId()).getRequestAdd()); + assertThat(dictionaryClient.getAllTypesForDossierTemplate(dossierTemplate.getId()) + .get(0) + .getRank()).isEqualTo(dictionaryClient.getAllTypesForDossierTemplate(clonedDT.getId()).get(0).getRank()); + assertThat(dossierStatusClient.getAllDossierStatuses(List.of(dossierTemplate.getId())) + .get(0) + .getDescription()).isEqualTo(dossierStatusClient.getAllDossierStatuses(List.of(clonedDT.getId())).get(0).getDescription()); } }