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

Commit da87b84

Browse files
author
barnabartha
committed
SORMAS-Foundation#2890 - add user jurisdiction filter to campaign form data + fill region/district/community with the current user's jurisdiction
1 parent bd5e7dd commit da87b84

3 files changed

Lines changed: 57 additions & 7 deletions

File tree

sormas-backend/src/main/java/de/symeda/sormas/backend/campaign/data/CampaignFormDataFacadeEjb.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
import de.symeda.sormas.backend.campaign.form.CampaignFormMeta;
6868
import de.symeda.sormas.backend.campaign.form.CampaignFormMetaFacadeEjb;
6969
import de.symeda.sormas.backend.campaign.form.CampaignFormMetaService;
70+
import de.symeda.sormas.backend.common.AbstractAdoService;
7071
import de.symeda.sormas.backend.common.AbstractDomainObject;
7172
import de.symeda.sormas.backend.region.Area;
7273
import de.symeda.sormas.backend.region.Community;
@@ -98,9 +99,6 @@ public class CampaignFormDataFacadeEjb implements CampaignFormDataFacade {
9899
@EJB
99100
private CampaignFormMetaService campaignFormMetaService;
100101

101-
@EJB
102-
private CampaignFormMetaFacadeEjb.CampaignFormMetaFacadeEjbLocal campaignFormMetaFacade;
103-
104102
@EJB
105103
private RegionService regionService;
106104

@@ -239,7 +237,8 @@ public List<CampaignFormDataIndexDto> getIndexList(
239237
communityJoin.get(Community.NAME),
240238
root.get(CampaignFormData.FORM_DATE));
241239

242-
Predicate filter = campaignFormDataService.createCriteriaFilter(criteria, cb, root);
240+
Predicate filter = AbstractAdoService
241+
.and(cb, campaignFormDataService.createCriteriaFilter(criteria, cb, root), campaignFormDataService.createUserFilter(cb, cq, root));
243242
if (filter != null) {
244243
cq.where(filter);
245244
}

sormas-backend/src/main/java/de/symeda/sormas/backend/campaign/data/CampaignFormDataService.java

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,16 @@
3434
import javax.persistence.criteria.Root;
3535

3636
import de.symeda.sormas.api.campaign.data.CampaignFormDataCriteria;
37+
import de.symeda.sormas.api.user.JurisdictionLevel;
3738
import de.symeda.sormas.api.utils.DateHelper;
3839
import de.symeda.sormas.backend.campaign.Campaign;
3940
import de.symeda.sormas.backend.campaign.form.CampaignFormMeta;
40-
import de.symeda.sormas.backend.caze.Case;
4141
import de.symeda.sormas.backend.common.AbstractAdoService;
4242
import de.symeda.sormas.backend.common.AbstractDomainObject;
4343
import de.symeda.sormas.backend.region.Community;
4444
import de.symeda.sormas.backend.region.District;
4545
import de.symeda.sormas.backend.region.Region;
46+
import de.symeda.sormas.backend.user.User;
4647

4748
@Stateless
4849
@LocalBean
@@ -80,8 +81,41 @@ public Predicate createCriteriaFilter(CampaignFormDataCriteria criteria, Criteri
8081
}
8182

8283
@Override
83-
public Predicate createUserFilter(CriteriaBuilder cb, CriteriaQuery cq, From<?, CampaignFormData> from) {
84-
return null;
84+
public Predicate createUserFilter(CriteriaBuilder cb, CriteriaQuery cq, From<?, CampaignFormData> campaignPath) {
85+
final User currentUser = getCurrentUser();
86+
if (currentUser == null) {
87+
return null;
88+
}
89+
90+
Predicate filter = null;
91+
92+
final JurisdictionLevel jurisdictionLevel = currentUser.getJurisdictionLevel();
93+
if (jurisdictionLevel != JurisdictionLevel.NATION) {
94+
switch (jurisdictionLevel) {
95+
case REGION:
96+
final Region region = currentUser.getRegion();
97+
if (region != null) {
98+
filter = or(cb, filter, cb.equal(campaignPath.get(CampaignFormData.REGION).get(Region.ID), region.getId()));
99+
}
100+
break;
101+
case DISTRICT:
102+
final District district = currentUser.getDistrict();
103+
if (district != null) {
104+
filter = or(cb, filter, cb.equal(campaignPath.get(CampaignFormData.DISTRICT).get(District.ID), district.getId()));
105+
}
106+
break;
107+
case COMMUNITY:
108+
final Community community = currentUser.getCommunity();
109+
if (community != null) {
110+
filter = or(cb, filter, cb.equal(campaignPath.get(CampaignFormData.COMMUNITY).get(Community.ID), community.getId()));
111+
}
112+
break;
113+
default:
114+
return null;
115+
}
116+
}
117+
118+
return filter;
85119
}
86120

87121
public List<String> getAllActiveUuids() {

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
import de.symeda.sormas.api.region.AreaReferenceDto;
3030
import de.symeda.sormas.api.region.DistrictReferenceDto;
3131
import de.symeda.sormas.api.region.RegionReferenceDto;
32+
import de.symeda.sormas.api.user.UserDto;
33+
import de.symeda.sormas.ui.UserProvider;
3234
import de.symeda.sormas.ui.utils.AbstractEditForm;
3335
import de.symeda.sormas.ui.utils.CssStyles;
3436
import de.symeda.sormas.ui.utils.FieldHelper;
@@ -113,6 +115,21 @@ protected void addFields() {
113115
}
114116
});
115117
}
118+
119+
final UserDto currentUser = UserProvider.getCurrent().getUser();
120+
121+
if (currentUser.getRegion() != null) {
122+
cbRegion.setValue(currentUser.getRegion());
123+
cbRegion.setReadOnly(true);
124+
}
125+
if (currentUser.getDistrict() != null) {
126+
cbDistrict.setValue(currentUser.getDistrict());
127+
cbDistrict.setReadOnly(true);
128+
}
129+
if (currentUser.getCommunity() != null) {
130+
cbCommunity.setValue(currentUser.getCommunity());
131+
cbCommunity.setReadOnly(true);
132+
}
116133
}
117134
private void addInfrastructureListeners(ComboBox cbRegion, ComboBox cbDistrict, ComboBox cbCommunity) {
118135
cbRegion.addValueChangeListener(e -> {

0 commit comments

Comments
 (0)