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

Commit c8f3c87

Browse files
author
Martin Wahnschaffe
committed
Merge branch 'development' into feature-3005-campaign-data-import-duplicate-detection
2 parents 35c05ae + ff4957c commit c8f3c87

29 files changed

Lines changed: 304 additions & 141 deletions
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package de.symeda.sormas.api.campaign;
2+
3+
import de.symeda.sormas.api.IntegerRange;
4+
import de.symeda.sormas.api.i18n.I18nProperties;
5+
6+
/**
7+
* Not used yet
8+
*/
9+
public enum CampaignPhase {
10+
11+
PRE,
12+
INTRA,
13+
POST;
14+
15+
public String toString() {
16+
return I18nProperties.getEnumCaption(this);
17+
}
18+
}

sormas-api/src/main/java/de/symeda/sormas/api/feature/FeatureType.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ public enum FeatureType {
3636
CASE_FOLLOWUP(true, false, null),
3737
TASK_NOTIFICATIONS(true, true, null),
3838
OTHER_NOTIFICATIONS(true, true, null),
39-
DOCUMENTS(true, false, null);
39+
DOCUMENTS(true, false, null),
40+
OUTBREAKS(true, true, null);
4041

4142
/**
4243
* Server feature means that the feature only needs to be configured once per server since they define the way the system

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,8 +164,10 @@ public interface Captions {
164164
String CampaignFormData_area = "CampaignFormData.area";
165165
String CampaignFormData_campaign = "CampaignFormData.campaign";
166166
String CampaignFormData_campaignFormMeta = "CampaignFormData.campaignFormMeta";
167+
String CampaignFormData_edit = "CampaignFormData.edit";
167168
String CampaignFormData_formDate = "CampaignFormData.formDate";
168169
String campaignNewCampaign = "campaignNewCampaign";
170+
String campaignSearch = "campaignSearch";
169171
String campaignValidateForms = "campaignValidateForms";
170172
String caseActiveCases = "caseActiveCases";
171173
String caseAllCases = "caseAllCases";

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,7 @@ campaignDashboardSubTabName=Sub-tab name
210210
campaignDashboardChartWidth=Width in %
211211
campaignDashboardChartHeight=Height in %
212212
campaignDashboardOrder=Order
213+
campaignSearch=Search Campaign
213214

214215
Campaign=Campaign
215216
Campaign.name=Name
@@ -227,6 +228,7 @@ CampaignFormData.campaign = Campaign
227228
CampaignFormData.campaignFormMeta = Form
228229
CampaignFormData.formDate = Form date
229230
CampaignFormData.area = Area
231+
CampaignFormData.edit=Edit
230232

231233
# CaseData
232234
caseCasesList=Cases list

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818

1919
# Descriptions used to detail captions
2020

21+
# Campaign
22+
Campaign.campaignPhase = This is a preview for a feature that will be implemented later
23+
2124
# CaseData
2225
CaseData.caseClassification = Select the case status for the person
2326
CaseData.clinicianDetails = Please specify the name, phone number and email address of the clinician responsible for this case

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,11 @@ ArrivalOrDeparture.UNKNOWN = Unknown
101101
BurialConductor.FAMILY_COMMUNITY = Family/Community
102102
BurialConductor.OUTBREAK_TEAM = Outbreak burial team
103103

104+
# CampaignPhase
105+
CampaignPhase.PRE = Pre-Campaign
106+
CampaignPhase.INTRA = Intra-Campaign
107+
CampaignPhase.POST = Post-Campaign
108+
104109
# CaseClassification
105110
CaseClassification.CONFIRMED = Confirmed case
106111
CaseClassification.CONFIRMED_NO_SYMPTOMS = Confirmed case with no symptoms

sormas-backend/src/main/java/de/symeda/sormas/backend/campaign/CampaignFacadeEjb.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ public CampaignReferenceDto getLastStartedCampaign() {
132132
final CriteriaQuery<Campaign> query = cb.createQuery(Campaign.class);
133133
final Root<Campaign> from = query.from(Campaign.class);
134134
query.select(from);
135-
query.where(cb.lessThanOrEqualTo(from.get(Campaign.START_DATE), new Date()));
135+
query.where(cb.and(campaignService.createActiveCampaignsFilter(cb, from), cb.lessThanOrEqualTo(from.get(Campaign.START_DATE), new Date())));
136136
query.orderBy(cb.desc(from.get(Campaign.START_DATE)));
137137

138138
final TypedQuery<Campaign> q = em.createQuery(query);

sormas-backend/src/main/java/de/symeda/sormas/backend/campaign/CampaignService.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public List<String> getAllActiveUuids() {
8181

8282
if (getCurrentUser() != null) {
8383
Predicate userFilter = createUserFilter(cb, cq, from);
84-
filter = AbstractAdoService.and(cb, cb.isFalse(from.get(Campaign.ARCHIVED)), userFilter);
84+
filter = AbstractAdoService.and(cb, createActiveCampaignsFilter(cb, from), userFilter);
8585
}
8686

8787
cq.where(filter);
@@ -119,9 +119,13 @@ public List<Campaign> getAllActive() {
119119
CriteriaBuilder cb = em.getCriteriaBuilder();
120120
CriteriaQuery<Campaign> cq = cb.createQuery(getElementClass());
121121
Root<Campaign> from = cq.from(getElementClass());
122-
cq.where(cb.isFalse(from.get(Campaign.DELETED)));
122+
cq.where(createActiveCampaignsFilter(cb, from));
123123
cq.orderBy(cb.desc(from.get(AbstractDomainObject.CHANGE_DATE)));
124124

125125
return em.createQuery(cq).getResultList();
126126
}
127+
128+
public Predicate createActiveCampaignsFilter(CriteriaBuilder cb, Root<Campaign> root) {
129+
return cb.and(cb.isFalse(root.get(Campaign.ARCHIVED)), cb.isFalse(root.get(Campaign.DELETED)));
130+
}
127131
}

sormas-backend/src/main/java/de/symeda/sormas/backend/disease/DiseaseFacadeEjb.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package de.symeda.sormas.backend.disease;
1919

2020
import java.util.Date;
21+
import java.util.HashMap;
2122
import java.util.List;
2223
import java.util.Map;
2324
import java.util.stream.Collectors;
@@ -31,12 +32,14 @@
3132
import de.symeda.sormas.api.disease.DiseaseBurdenDto;
3233
import de.symeda.sormas.api.disease.DiseaseFacade;
3334
import de.symeda.sormas.api.event.EventCriteria;
35+
import de.symeda.sormas.api.feature.FeatureType;
3436
import de.symeda.sormas.api.outbreak.OutbreakCriteria;
3537
import de.symeda.sormas.api.region.DistrictReferenceDto;
3638
import de.symeda.sormas.api.region.RegionReferenceDto;
3739
import de.symeda.sormas.backend.caze.CaseFacadeEjb.CaseFacadeEjbLocal;
3840
import de.symeda.sormas.backend.disease.DiseaseConfigurationFacadeEjb.DiseaseConfigurationFacadeEjbLocal;
3941
import de.symeda.sormas.backend.event.EventFacadeEjb.EventFacadeEjbLocal;
42+
import de.symeda.sormas.backend.feature.FeatureConfigurationFacadeEjb.FeatureConfigurationFacadeEjbLocal;
4043
import de.symeda.sormas.backend.outbreak.OutbreakFacadeEjb.OutbreakFacadeEjbLocal;
4144
import de.symeda.sormas.backend.person.PersonFacadeEjb.PersonFacadeEjbLocal;
4245
import de.symeda.sormas.backend.region.District;
@@ -57,6 +60,8 @@ public class DiseaseFacadeEjb implements DiseaseFacade {
5760
private PersonFacadeEjbLocal personFacade;
5861
@EJB
5962
private DiseaseConfigurationFacadeEjbLocal diseaseConfigurationFacade;
63+
@EJB
64+
private FeatureConfigurationFacadeEjbLocal featureConfigurationFacade;
6065

6166
@Override
6267
public List<DiseaseBurdenDto> getDiseaseBurdenForDashboard(
@@ -80,8 +85,13 @@ public List<DiseaseBurdenDto> getDiseaseBurdenForDashboard(
8085
eventFacade.getEventCountByDisease(new EventCriteria().region(regionRef).district(districtRef).reportedBetween(from, to));
8186

8287
//outbreaks
83-
Map<Disease, Long> outbreakDistrictsCount = outbreakFacade
84-
.getOutbreakDistrictCountByDisease(new OutbreakCriteria().region(regionRef).district(districtRef).reportedBetween(from, to));
88+
Map<Disease, Long> outbreakDistrictsCount;
89+
if (featureConfigurationFacade.isFeatureEnabled(FeatureType.OUTBREAKS)) {
90+
outbreakDistrictsCount = outbreakFacade
91+
.getOutbreakDistrictCountByDisease(new OutbreakCriteria().region(regionRef).district(districtRef).reportedBetween(from, to));
92+
} else {
93+
outbreakDistrictsCount = new HashMap<>();
94+
}
8595

8696
//last report district
8797
Map<Disease, District> lastReportedDistricts = caseFacade.getLastReportedDistrictByDisease(caseCriteria, true, true);

sormas-ui/src/main/java/de/symeda/sormas/ui/MainScreen.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ public View getView(String viewName) {
230230
if (permitted(UserRight.CONFIGURATION_ACCESS)) {
231231
AbstractConfigurationView.registerViews(navigator);
232232
menu.addView(
233-
OutbreaksView.class,
233+
FacadeProvider.getFeatureConfigurationFacade().isFeatureEnabled(FeatureType.OUTBREAKS) ? OutbreaksView.class : CountriesView.class,
234234
AbstractConfigurationView.ROOT_VIEW_NAME,
235235
I18nProperties.getCaption(Captions.mainMenuConfiguration),
236236
VaadinIcons.COGS);

0 commit comments

Comments
 (0)