Skip to content

Commit 14a8b20

Browse files
Merge pull request #13923 from SORMAS-Foundation/bugfix-13653-disabling-a-disease-variant-for-a-disease-leads-to-error
Bugfix 13653 disabling a disease variant for a disease leads to error
2 parents 5ba0cd0 + 81acf7b commit 14a8b20

4 files changed

Lines changed: 50 additions & 0 deletions

File tree

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public interface Validations {
5151
String contactFollowUpUntilDateSoftValidation = "contactFollowUpUntilDateSoftValidation";
5252
String contactWithoutInfrastructureData = "contactWithoutInfrastructureData";
5353
String customizableEnumValueAllowedCharacters = "customizableEnumValueAllowedCharacters";
54+
String customizableEnumValueAlreadyInUse = "customizableEnumValueAlreadyInUse";
5455
String customizableEnumValueDuplicateLanguage = "customizableEnumValueDuplicateLanguage";
5556
String customizableEnumValueDuplicateValue = "customizableEnumValueDuplicateValue";
5657
String customizableEnumValueEmptyTranslations = "customizableEnumValueEmptyTranslations";

sormas-api/src/main/resources/validations.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,3 +332,4 @@ smsAuthKeyValueValidation = SMS Auth key value is not valid
332332
smsAuthSecretValueValidation = SMS Auth secret value is not valid
333333
systemConfigurationValueValidationInvalidBackgroundColor = Pre-defined values are: green, red, indigo, gray, default (case-sensitive) otherwise must match hexadecimal format (with or without hash "#"), example: #dd2b0e or #4AA or dd2b0e
334334
systemConfigurationValueValidationMenuSubtitle = Can be empty or up to 16 (any) characters. Can be used to define name of the environment: PRODUCTION - TEST etc.
335+
customizableEnumValueAlreadyInUse = The customizable value %s is being used by case IDs %s and therefore cannot be deleted or deactivated. Please remove all references to this value before attempting to deactivate.

sormas-backend/src/main/java/de/symeda/sormas/backend/customizableenum/CustomizableEnumFacadeEjb.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import java.util.HashMap;
2727
import java.util.List;
2828
import java.util.Map;
29+
import java.util.Objects;
2930
import java.util.Optional;
3031
import java.util.Set;
3132
import java.util.concurrent.ConcurrentHashMap;
@@ -168,6 +169,25 @@ public CustomizableEnumValueDto save(CustomizableEnumValueDto dto) {
168169
validate(dto);
169170

170171
CustomizableEnumValue existingEntity = service.getByUuid(dto.getUuid());
172+
// if existingEntity disease removed and it is mapped to the cases, shouldn't allow to save the entity
173+
174+
if (existingEntity != null && CollectionUtils.isNotEmpty(existingEntity.getDiseases())) {
175+
Set<Disease> incomingDiseases = dto.getDiseases() != null ? dto.getDiseases() : Collections.emptySet();
176+
for (Disease removedDisease : existingEntity.getDiseases()) {
177+
if (!incomingDiseases.contains(removedDisease)) {
178+
List<String> uuids = service.areCasesUsingCustomizableEnumValue(
179+
removedDisease,
180+
getEnumValue(dto.getDataType(), removedDisease, existingEntity.getValue()));
181+
if (!uuids.isEmpty()) {
182+
throw new ValidationRuntimeException(
183+
I18nProperties.getValidationError(
184+
Validations.customizableEnumValueAlreadyInUse,
185+
removedDisease.getName(),
186+
uuids.stream().filter(Objects::nonNull).collect(Collectors.joining(", "))));
187+
}
188+
}
189+
}
190+
}
171191

172192
for (Disease disease : dto.getDiseases()) {
173193
List<String> dataTypeValues = enumValues.get(dto.getDataType()).getOrDefault(disease, Collections.emptyList());

sormas-backend/src/main/java/de/symeda/sormas/backend/customizableenum/CustomizableEnumValueService.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515

1616
package de.symeda.sormas.backend.customizableenum;
1717

18+
import java.util.List;
19+
import java.util.stream.Collectors;
20+
21+
import javax.ejb.EJB;
1822
import javax.ejb.LocalBean;
1923
import javax.ejb.Stateless;
2024
import javax.persistence.criteria.CriteriaBuilder;
@@ -23,15 +27,23 @@
2327
import javax.persistence.criteria.Predicate;
2428
import javax.persistence.criteria.Root;
2529

30+
import de.symeda.sormas.api.Disease;
31+
import de.symeda.sormas.api.caze.CaseCriteria;
2632
import de.symeda.sormas.api.customizableenum.CustomizableEnumCriteria;
33+
import de.symeda.sormas.api.disease.DiseaseVariant;
2734
import de.symeda.sormas.api.utils.DataHelper;
35+
import de.symeda.sormas.backend.caze.Case;
36+
import de.symeda.sormas.backend.caze.CaseService;
2837
import de.symeda.sormas.backend.common.AdoServiceWithUserFilterAndJurisdiction;
2938
import de.symeda.sormas.backend.common.CriteriaBuilderHelper;
3039

3140
@Stateless
3241
@LocalBean
3342
public class CustomizableEnumValueService extends AdoServiceWithUserFilterAndJurisdiction<CustomizableEnumValue> {
3443

44+
@EJB
45+
private CaseService caseService;
46+
3547
public CustomizableEnumValueService() {
3648
super(CustomizableEnumValue.class);
3749
}
@@ -70,4 +82,20 @@ public Predicate buildCriteriaFilter(CustomizableEnumCriteria criteria, Criteria
7082
return filter;
7183
}
7284

85+
/**
86+
* Get all cases for a specific disease and disease variant that are using a customizable enum value. This is used to determine whether
87+
* a customizable enum value can be deleted or not.
88+
*
89+
* @param disease
90+
* @param diseaseVariant
91+
* @return
92+
*/
93+
public List<String> areCasesUsingCustomizableEnumValue(Disease disease, DiseaseVariant diseaseVariant) {
94+
CaseCriteria caseCriteria = new CaseCriteria();
95+
caseCriteria.setDisease(disease);
96+
caseCriteria.setDiseaseVariant(diseaseVariant);
97+
List<Case> result = caseService.findBy(caseCriteria, true);
98+
return result.stream().map(Case::getUuid).collect(Collectors.toList());
99+
}
100+
73101
}

0 commit comments

Comments
 (0)