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

Commit 07ab0f1

Browse files
committed
SORMAS-Foundation#2982 add area field to campaign data form
1 parent 6418761 commit 07ab0f1

7 files changed

Lines changed: 71 additions & 3 deletions

File tree

sormas-api/src/main/java/de/symeda/sormas/api/campaign/data/CampaignFormDataDto.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
package de.symeda.sormas.api.campaign.data;
2222

23+
import de.symeda.sormas.api.region.AreaReferenceDto;
2324
import java.util.Date;
2425
import java.util.List;
2526

@@ -143,4 +144,6 @@ public UserReferenceDto getCreatingUser() {
143144
public void setCreatingUser(UserReferenceDto creatingUser) {
144145
this.creatingUser = creatingUser;
145146
}
147+
148+
146149
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ public interface Captions {
144144
String campaignCampaignData = "campaignCampaignData";
145145
String campaignCampaignDataForm = "campaignCampaignDataForm";
146146
String campaignCampaignForm = "campaignCampaignForm";
147+
String CampaignFormData_area = "CampaignFormData.area";
147148
String CampaignFormData_campaign = "CampaignFormData.campaign";
148149
String CampaignFormData_campaignFormMeta = "CampaignFormData.campaignFormMeta";
149150
String CampaignFormData_formDate = "CampaignFormData.formDate";

sormas-api/src/main/java/de/symeda/sormas/api/region/AreaFacade.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,5 @@ public interface AreaFacade {
2828

2929
List<AreaReferenceDto> getByName(String name, boolean includeArchivedAreas);
3030

31+
List<AreaReferenceDto> getAreasByRegion(String uuid);
3132
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,7 @@ Campaign.creatingUser=Creating user
206206
CampaignFormData.campaign = Campaign
207207
CampaignFormData.campaignFormMeta = Form
208208
CampaignFormData.formDate = Form date
209+
CampaignFormData.area = Area
209210

210211
# CaseData
211212
caseCasesList=Cases list

sormas-backend/src/main/java/de/symeda/sormas/backend/region/AreaFacadeEjb.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,11 @@ public List<AreaReferenceDto> getByName(String name, boolean includeArchivedArea
138138
return service.getByName(name, includeArchivedAreas).stream().map(AreaFacadeEjb::toReferenceDto).collect(Collectors.toList());
139139
}
140140

141+
@Override
142+
public List<AreaReferenceDto> getAreasByRegion(String uuid) {
143+
return service.getByRegion(uuid).stream().map(AreaFacadeEjb::toReferenceDto).collect(Collectors.toList());
144+
}
145+
141146
public Area fromDto(@NotNull AreaDto source, Area target) {
142147
if (target == null) {
143148
target = new Area();

sormas-backend/src/main/java/de/symeda/sormas/backend/region/AreaService.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import javax.persistence.criteria.CriteriaBuilder;
88
import javax.persistence.criteria.CriteriaQuery;
99
import javax.persistence.criteria.From;
10+
import javax.persistence.criteria.Join;
11+
import javax.persistence.criteria.JoinType;
1012
import javax.persistence.criteria.Predicate;
1113
import javax.persistence.criteria.Root;
1214

@@ -33,7 +35,6 @@ public List<Area> getByName(String name, boolean includeArchivedEntities) {
3335
CriteriaBuilder cb = em.getCriteriaBuilder();
3436
CriteriaQuery<Area> cq = cb.createQuery(getElementClass());
3537
Root<Area> from = cq.from(getElementClass());
36-
3738
Predicate filter =
3839
cb.or(cb.equal(cb.trim(from.get(Area.NAME)), name.trim()), cb.equal(cb.lower(cb.trim(from.get(Area.NAME))), name.trim().toLowerCase()));
3940
if (!includeArchivedEntities) {
@@ -45,6 +46,23 @@ public List<Area> getByName(String name, boolean includeArchivedEntities) {
4546
return em.createQuery(cq).getResultList();
4647
}
4748

49+
public List<Area> getByRegion(String uuid) {
50+
CriteriaBuilder cb = em.getCriteriaBuilder();
51+
CriteriaQuery<Area> cq = cb.createQuery(getElementClass());
52+
Root<Area> from = cq.from(getElementClass());
53+
Join<Area,Region> join= from.join(Region.AREA);
54+
cq.select(from).where(cb.equal(join.get(Region.AREA),Area.ID));
55+
56+
/* Predicate filter =
57+
(Predicate) cq.select(from).where(cb.equal( Region.UUID,uuid)) */
58+
59+
Predicate filter = cb.and((Predicate) cq.select(from).where(cb.equal(join.get(Region.AREA),Area.ID),cb.equal(cb.trim(from.get(Area.NAME)), uuid.trim())));
60+
61+
cq.where(filter);
62+
63+
return em.createQuery(cq).getResultList();
64+
}
65+
4866
public Predicate buildCriteriaFilter(AreaCriteria criteria, CriteriaBuilder cb, Root<Area> areaRoot) {
4967
Predicate filter = null;
5068
if (StringUtils.isNotBlank(criteria.getTextFilter())) {

sormas-ui/src/main/java/de/symeda/sormas/ui/campaign/campaigndata/CampaignFormDataEditForm.java

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@
2323
import de.symeda.sormas.api.FacadeProvider;
2424
import de.symeda.sormas.api.campaign.data.CampaignFormDataDto;
2525
import de.symeda.sormas.api.campaign.form.CampaignFormMetaDto;
26+
import de.symeda.sormas.api.feature.FeatureType;
27+
import de.symeda.sormas.api.i18n.Captions;
28+
import de.symeda.sormas.api.i18n.I18nProperties;
29+
import de.symeda.sormas.api.region.AreaReferenceDto;
2630
import de.symeda.sormas.api.region.DistrictReferenceDto;
2731
import de.symeda.sormas.api.region.RegionReferenceDto;
2832
import de.symeda.sormas.ui.utils.AbstractEditForm;
@@ -31,12 +35,24 @@
3135

3236
import static de.symeda.sormas.ui.utils.LayoutUtil.fluidRowLocs;
3337
import static de.symeda.sormas.ui.utils.LayoutUtil.loc;
38+
import java.util.Objects;
3439

3540
public class CampaignFormDataEditForm extends AbstractEditForm<CampaignFormDataDto> {
3641

3742
public static final String CAMPAIGN_FORM_LOC = "campaignFormLoc";
43+
private AreaReferenceDto area;
44+
public static final String AREA = "area";
3845

39-
private static final String HTML_LAYOUT = fluidRowLocs(CampaignFormDataDto.CAMPAIGN, CampaignFormDataDto.FORM_DATE, "")
46+
47+
public AreaReferenceDto getArea() {
48+
return area;
49+
}
50+
51+
public void setArea(AreaReferenceDto area) {
52+
this.area = area;
53+
}
54+
55+
private static final String HTML_LAYOUT = fluidRowLocs(CampaignFormDataDto.CAMPAIGN, CampaignFormDataDto.FORM_DATE, CampaignFormDataEditForm.AREA)
4056
+ fluidRowLocs(CampaignFormDataDto.REGION, CampaignFormDataDto.DISTRICT, CampaignFormDataDto.COMMUNITY)
4157
+ loc(CAMPAIGN_FORM_LOC);
4258

@@ -52,6 +68,7 @@ public CampaignFormDataEditForm(boolean create) {
5268
}
5369
}
5470

71+
@SuppressWarnings("deprecation")
5572
@Override
5673
protected void addFields() {
5774
ComboBox cbCampaign = addField(CampaignFormDataDto.CAMPAIGN, ComboBox.class);
@@ -73,8 +90,30 @@ protected void addFields() {
7390

7491
addInfrastructureListeners(cbRegion, cbDistrict, cbCommunity);
7592
cbRegion.addItems(FacadeProvider.getRegionFacade().getAllActiveAsReference());
76-
}
7793

94+
if (FacadeProvider.getFeatureConfigurationFacade().isFeatureEnabled(FeatureType.INFRASTRUCTURE_TYPE_AREA)){
95+
ComboBox cbArea = addCustomField(CampaignFormDataEditForm.AREA,AreaReferenceDto.class,ComboBox.class);
96+
cbArea.setCaption(I18nProperties.getCaption(Captions.CampaignFormData_area));
97+
setRequired(true,CampaignFormDataEditForm.AREA);
98+
cbArea.addItems(FacadeProvider.getAreaFacade().getAllActiveAsReference());
99+
cbArea.addValueChangeListener(e -> {
100+
AreaReferenceDto area =(AreaReferenceDto) e.getProperty().getValue();
101+
102+
if(Objects.nonNull(area) && cbRegion.isEmpty()) {
103+
cbRegion.removeAllItems();
104+
cbRegion.addItems(FacadeProvider.getRegionFacade().getAllActiveByArea((area.getUuid())));
105+
} else if(Objects.isNull(area)){
106+
cbRegion.addItems(FacadeProvider.getRegionFacade().getAllActiveAsReference());
107+
}
108+
});
109+
cbRegion.addValueChangeListener(e -> {
110+
RegionReferenceDto region = (RegionReferenceDto) e.getProperty().getValue();
111+
if(Objects.nonNull(region)){
112+
cbArea.setValue(FacadeProvider.getRegionFacade().getRegionByUuid(region.getUuid()).getArea());
113+
}
114+
});
115+
}
116+
}
78117
private void addInfrastructureListeners(ComboBox cbRegion, ComboBox cbDistrict, ComboBox cbCommunity) {
79118
cbRegion.addValueChangeListener(e -> {
80119
RegionReferenceDto region = (RegionReferenceDto) e.getProperty().getValue();

0 commit comments

Comments
 (0)