From d8d397c656b22b4d3bc0b3e8f2b93e0600f96b9a Mon Sep 17 00:00:00 2001 From: Karnaiah Pesula Date: Wed, 15 Oct 2025 16:16:43 +0200 Subject: [PATCH] Minor issue fixes --- .../symeda/sormas/api/epidata/EpiDataDto.java | 30 +++++++++++++++++-- .../de/symeda/sormas/api/i18n/Captions.java | 2 ++ .../src/main/resources/captions.properties | 2 ++ .../sormas/backend/epidata/EpiData.java | 24 +++++++++++++++ .../backend/epidata/EpiDataFacadeEjb.java | 9 +++++- .../src/main/resources/sql/sormas_schema.sql | 7 ++++- .../symeda/sormas/ui/epidata/EpiDataForm.java | 12 ++++++-- 7 files changed, 80 insertions(+), 6 deletions(-) diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/epidata/EpiDataDto.java b/sormas-api/src/main/java/de/symeda/sormas/api/epidata/EpiDataDto.java index c0416cba670..8d0bafeb2fe 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/epidata/EpiDataDto.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/epidata/EpiDataDto.java @@ -32,6 +32,7 @@ import de.symeda.sormas.api.exposure.ModeOfTransmission; import de.symeda.sormas.api.feature.FeatureType; import de.symeda.sormas.api.i18n.Validations; +import de.symeda.sormas.api.infrastructure.country.CountryReferenceDto; import de.symeda.sormas.api.utils.DataHelper; import de.symeda.sormas.api.utils.DependingOnFeatureType; import de.symeda.sormas.api.utils.Diseases; @@ -65,6 +66,8 @@ public class EpiDataDto extends PseudonymizableDto { public static final String MODE_OF_TRANSMISSION_TYPE = "modeOfTransmissionType"; public static final String INFECTION_SOURCE = "infectionSource"; public static final String INFECTION_SOURCE_TEXT = "infectionSourceText"; + public static final String IMPORTED_CASE = "importedCase"; + public static final String COUNTRY = "country"; private YesNoUnknown exposureDetailsKnown; private YesNoUnknown activityAsCaseDetailsKnown; @@ -72,10 +75,13 @@ public class EpiDataDto extends PseudonymizableDto { private YesNoUnknown highTransmissionRiskArea; private YesNoUnknown largeOutbreaksArea; @Diseases({ - Disease.MEASLES, - Disease.GIARDIASIS }) + Disease.MEASLES }) private CaseImportedStatus caseImportedStatus; + @Diseases({ + Disease.GIARDIASIS }) + private YesNoUnknown importedCase; + @HideForCountriesExcept(countries = { CountryHelper.COUNTRY_CODE_LUXEMBOURG }) @Diseases({ @@ -124,6 +130,10 @@ public class EpiDataDto extends PseudonymizableDto { Disease.CRYPTOSPORIDIOSIS }) private String infectionSourceText; + @Diseases({ + Disease.GIARDIASIS }) + private CountryReferenceDto country; + @Valid private List exposures = new ArrayList<>(); @@ -267,6 +277,22 @@ public void setModeOfTransmissionType(String modeOfTransmissionType) { this.modeOfTransmissionType = modeOfTransmissionType; } + public YesNoUnknown getImportedCase() { + return importedCase; + } + + public void setImportedCase(YesNoUnknown importedCase) { + this.importedCase = importedCase; + } + + public CountryReferenceDto getCountry() { + return country; + } + + public void setCountry(CountryReferenceDto country) { + this.country = country; + } + @Override public EpiDataDto clone() throws CloneNotSupportedException { EpiDataDto clone = (EpiDataDto) super.clone(); diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/i18n/Captions.java b/sormas-api/src/main/java/de/symeda/sormas/api/i18n/Captions.java index f61e6b7f71c..3175042e52f 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/i18n/Captions.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/i18n/Captions.java @@ -1566,9 +1566,11 @@ public interface Captions { String EpiData_clusterType = "EpiData.clusterType"; String EpiData_clusterTypeText = "EpiData.clusterTypeText"; String EpiData_contactWithSourceCaseKnown = "EpiData.contactWithSourceCaseKnown"; + String EpiData_country = "EpiData.country"; String EpiData_exposureDetailsKnown = "EpiData.exposureDetailsKnown"; String EpiData_exposures = "EpiData.exposures"; String EpiData_highTransmissionRiskArea = "EpiData.highTransmissionRiskArea"; + String EpiData_importedCase = "EpiData.importedCase"; String EpiData_infectionSource = "EpiData.infectionSource"; String EpiData_infectionSourceText = "EpiData.infectionSourceText"; String EpiData_largeOutbreaksArea = "EpiData.largeOutbreaksArea"; diff --git a/sormas-api/src/main/resources/captions.properties b/sormas-api/src/main/resources/captions.properties index 0fa52c64251..a3d7629edee 100644 --- a/sormas-api/src/main/resources/captions.properties +++ b/sormas-api/src/main/resources/captions.properties @@ -1153,6 +1153,8 @@ EpiData.modeOfTransmission=Mode of transmission EpiData.modeOfTransmissionType= Specify mode of transmission EpiData.infectionSource= Suspected vehicle or source of infection EpiData.infectionSourceText= Specify source of infection +EpiData.importedCase= Imported Case +EpiData.country= Country of contamination #Therapy Therapy.directlyObservedTreatment = Directly observed treatment Therapy.mdrXdrTuberculosis = MDR/XDR tuberculosis diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/epidata/EpiData.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/epidata/EpiData.java index a4649abd0eb..db3998f5f8f 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/epidata/EpiData.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/epidata/EpiData.java @@ -26,6 +26,8 @@ import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; +import javax.persistence.FetchType; +import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import de.symeda.sormas.api.epidata.CaseImportedStatus; @@ -37,6 +39,7 @@ import de.symeda.sormas.backend.common.AbstractDomainObject; import de.symeda.sormas.backend.common.NotExposedToApi; import de.symeda.sormas.backend.exposure.Exposure; +import de.symeda.sormas.backend.infrastructure.country.Country; @Entity public class EpiData extends AbstractDomainObject { @@ -56,6 +59,7 @@ public class EpiData extends AbstractDomainObject { private YesNoUnknown largeOutbreaksArea; private YesNoUnknown areaInfectedAnimals; + private YesNoUnknown importedCase; private CaseImportedStatus caseImportedStatus; private ClusterType clusterType; private String clusterTypeText; @@ -67,6 +71,8 @@ public class EpiData extends AbstractDomainObject { private ModeOfTransmission modeOfTransmission; private String modeOfTransmissionType; + private Country country; + private List exposures = new ArrayList<>(); private List activitiesAsCase = new ArrayList<>(); @NotExposedToApi @@ -223,4 +229,22 @@ public String getInfectionSourceText() { public void setInfectionSourceText(String infectionSourceText) { this.infectionSourceText = infectionSourceText; } + + @Enumerated(EnumType.STRING) + public YesNoUnknown getImportedCase() { + return importedCase; + } + + public void setImportedCase(YesNoUnknown importedCase) { + this.importedCase = importedCase; + } + + @ManyToOne(fetch = FetchType.LAZY) + public Country getCountry() { + return country; + } + + public void setCountry(Country country) { + this.country = country; + } } diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/epidata/EpiDataFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/epidata/EpiDataFacadeEjb.java index f32079770cf..277cd3a4659 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/epidata/EpiDataFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/epidata/EpiDataFacadeEjb.java @@ -39,6 +39,8 @@ import de.symeda.sormas.backend.contact.ContactService; import de.symeda.sormas.backend.exposure.Exposure; import de.symeda.sormas.backend.exposure.ExposureService; +import de.symeda.sormas.backend.infrastructure.country.CountryFacadeEjb; +import de.symeda.sormas.backend.infrastructure.country.CountryService; import de.symeda.sormas.backend.location.LocationFacadeEjb; import de.symeda.sormas.backend.location.LocationFacadeEjb.LocationFacadeEjbLocal; import de.symeda.sormas.backend.user.UserFacadeEjb; @@ -58,6 +60,8 @@ public class EpiDataFacadeEjb implements EpiDataFacade { private ContactService contactService; @EJB private UserService userService; + @EJB + private CountryService countryService; public EpiData fillOrBuildEntity(EpiDataDto source, EpiData target, boolean checkChangeDate) { if (source == null) { @@ -108,6 +112,8 @@ public EpiData fillOrBuildEntity(EpiDataDto source, EpiData target, boolean chec target.setModeOfTransmissionType(source.getModeOfTransmissionType()); target.setInfectionSource(source.getInfectionSource()); target.setInfectionSourceText(source.getInfectionSourceText()); + target.setCountry(countryService.getByReferenceDto(source.getCountry())); + target.setImportedCase(source.getImportedCase()); return target; } @@ -272,7 +278,8 @@ public static EpiDataDto toDto(EpiData epiData) { target.setModeOfTransmissionType(source.getModeOfTransmissionType()); target.setInfectionSource(source.getInfectionSource()); target.setInfectionSourceText(source.getInfectionSourceText()); - + target.setCountry(CountryFacadeEjb.toReferenceDto(source.getCountry())); + target.setImportedCase(source.getImportedCase()); return target; } diff --git a/sormas-backend/src/main/resources/sql/sormas_schema.sql b/sormas-backend/src/main/resources/sql/sormas_schema.sql index f4a3f6f3a89..36b32d18966 100644 --- a/sormas-backend/src/main/resources/sql/sormas_schema.sql +++ b/sormas-backend/src/main/resources/sql/sormas_schema.sql @@ -14665,6 +14665,7 @@ alter table symptoms add column if not exists symptomCurrentStatus varchar(255); alter table symptoms add column if not exists durationOfSymptoms integer; alter table symptoms add column if not exists overnightStayRequired varchar(255); alter table symptoms add column if not exists bloating varchar(255); +ALTER TABLE symptoms ALTER COLUMN weightlossamount TYPE float4 USING weightlossamount::float4; alter table exposures add column if not exists travelAccommodation varchar(255); alter table exposures add column if not exists travelAccommodationType varchar(255); alter table exposures add column if not exists swimmingLocation varchar(255); @@ -14677,11 +14678,12 @@ alter table exposures add column if not exists rawfoodcontact varchar(255); alter table exposures add column if not exists rawfoodcontacttext varchar(255); alter table exposures add column if not exists symptomaticindividualtext varchar(255); ALTER TABLE hospitalization ADD COLUMN IF NOT EXISTS durationOfHospitalization integer; - alter table epidata add column if not exists modeOfTransmission varchar(255); alter table epidata add column if not exists modeOfTransmissionType varchar(255); alter table epidata add column if not exists infectionSource varchar(255); alter table epidata add column if not exists infectionSourcetext varchar(255); +alter table epidata add column if not exists importedCase varchar(255); +alter table epidata add column if not exists country_id bigint; ALTER TABLE person ADD COLUMN IF NOT EXISTS workplace varchar(255); ALTER TABLE person ADD COLUMN IF NOT EXISTS workplacetext varchar(255); @@ -14693,6 +14695,7 @@ alter table symptoms_history add column if not exists symptomCurrentStatus varch alter table symptoms_history add column if not exists durationOfSymptoms integer; alter table symptoms_history add column if not exists overnightStayRequired varchar(255); alter table symptoms_history add column if not exists bloating varchar(255); +ALTER TABLE symptoms_history ALTER COLUMN weightlossamount TYPE float4 USING weightlossamount::float4; alter table exposures_history add column if not exists travelAccommodation varchar(255); alter table exposures_history add column if not exists travelAccommodationType varchar(255); alter table exposures_history add column if not exists swimmingLocation varchar(255); @@ -14705,6 +14708,8 @@ alter table epidata_history add column if not exists modeOfTransmission varchar( alter table epidata_history add column if not exists modeOfTransmissionType varchar(255); alter table epidata_history add column if not exists infectionSource varchar(255); alter table epidata_history add column if not exists infectionSourcetext varchar(255); +alter table epidata_history add column if not exists importedCase varchar(255); +alter table epidata_history add column if not exists country_id bigint; alter table exposures_history add column if not exists rawfoodcontact varchar(255); alter table exposures_history add column if not exists rawfoodcontacttext varchar(255); alter table exposures_history add column if not exists symptomaticindividualtext varchar(255); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/epidata/EpiDataForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/epidata/EpiDataForm.java index fad57ee88d5..ab55d4f2b70 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/epidata/EpiDataForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/epidata/EpiDataForm.java @@ -34,6 +34,7 @@ import org.apache.commons.collections4.CollectionUtils; import com.vaadin.shared.ui.ContentMode; +import com.vaadin.v7.ui.ComboBox; import com.vaadin.v7.ui.Field; import com.vaadin.v7.ui.TextField; @@ -50,6 +51,7 @@ import de.symeda.sormas.api.exposure.ModeOfTransmission; import de.symeda.sormas.api.i18n.I18nProperties; import de.symeda.sormas.api.i18n.Strings; +import de.symeda.sormas.api.infrastructure.country.CountryReferenceDto; import de.symeda.sormas.api.utils.YesNoUnknown; import de.symeda.sormas.api.utils.fieldaccess.UiFieldAccessCheckers; import de.symeda.sormas.api.utils.fieldvisibility.FieldVisibilityCheckers; @@ -80,6 +82,7 @@ public class EpiDataForm extends AbstractEditForm { loc(EpiDataDto.EXPOSURES) + loc(LOC_CONCLUSION_HEADING) + fluidRowLocs(6,EpiDataDto.CASE_IMPORTED_STATUS,6,"") + + fluidRowLocs(6, EpiDataDto.IMPORTED_CASE, 6, EpiDataDto.COUNTRY)+ fluidRowLocs(EpiDataDto.MODE_OF_TRANSMISSION, EpiDataDto.MODE_OF_TRANSMISSION_TYPE) + fluidRowLocs(EpiDataDto.INFECTION_SOURCE, EpiDataDto.INFECTION_SOURCE_TEXT) + loc(LOC_ACTIVITY_AS_CASE_INVESTIGATION_HEADING) + @@ -169,11 +172,15 @@ protected void addFields() { addField(EpiDataDto.MODE_OF_TRANSMISSION_TYPE); addField(EpiDataDto.INFECTION_SOURCE); addField(EpiDataDto.INFECTION_SOURCE_TEXT); + addField(EpiDataDto.IMPORTED_CASE, NullableOptionGroup.class); + List countries = FacadeProvider.getCountryFacade().getAllActiveAsReference(); + ComboBox country = addInfrastructureField(EpiDataDto.COUNTRY); + country.addItems(countries); - TextField clustorTypeTF = addField(EpiDataDto.CLUSTER_TYPE_TEXT); + TextField clusterTypeTF = addField(EpiDataDto.CLUSTER_TYPE_TEXT); FieldHelper .setVisibleWhen(getFieldGroup(), EpiDataDto.CLUSTER_TYPE, EpiDataDto.CLUSTER_RELATED, Collections.singletonList(Boolean.TRUE), true); - FieldHelper.setVisibleWhen(getField(EpiDataDto.CLUSTER_TYPE), Arrays.asList(clustorTypeTF), Arrays.asList(ClusterType.OTHER), true); + FieldHelper.setVisibleWhen(getField(EpiDataDto.CLUSTER_TYPE), Arrays.asList(clusterTypeTF), Arrays.asList(ClusterType.OTHER), true); FieldHelper.setVisibleWhen( getFieldGroup(), EpiDataDto.EXPOSURES, @@ -183,6 +190,7 @@ protected void addFields() { FieldHelper .setVisibleWhen(getFieldGroup(), EpiDataDto.MODE_OF_TRANSMISSION_TYPE, EpiDataDto.MODE_OF_TRANSMISSION, ModeOfTransmission.OTHER, true); FieldHelper.setVisibleWhen(getFieldGroup(), EpiDataDto.INFECTION_SOURCE_TEXT, EpiDataDto.INFECTION_SOURCE, InfectionSource.OTHER, true); + FieldHelper.setVisibleWhen(getFieldGroup(), EpiDataDto.COUNTRY, EpiDataDto.IMPORTED_CASE, YesNoUnknown.YES, true); initializeVisibilitiesAndAllowedVisibilities(); initializeAccessAndAllowedAccesses();