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

Commit 0867d07

Browse files
SORMAS-Foundation#2701: Event participant list adjustment (SORMAS-Foundation#2839)
* SORMAS-Foundation#2701: Event participant list adjustment * SORMAS-Foundation#2701: Repositioning of add button and making filters visible for admins * SORMAS-Foundation#2701: Make reset button working
1 parent e939725 commit 0867d07

10 files changed

Lines changed: 220 additions & 30 deletions

File tree

sormas-api/src/main/java/de/symeda/sormas/api/event/EventParticipantCriteria.java

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,16 @@ public class EventParticipantCriteria extends BaseCriteria implements Serializab
99

1010
private static final long serialVersionUID = 5981720569585071845L;
1111

12+
public static final String FREE_TEXT = "freeText";
13+
public static final String BIRTHDATE_YYYY = "birthdateYYYY";
14+
public static final String BIRTHDATE_MM = "birthdateMM";
15+
public static final String BIRTHDATE_DD = "birthdateDD";
16+
1217
private EventReferenceDto event;
18+
private String freeText;
19+
private Integer birthdateYYYY;
20+
private Integer birthdateMM;
21+
private Integer birthdateDD;
1322

1423
@IgnoreForUrl
1524
public EventReferenceDto getEvent() {
@@ -20,4 +29,42 @@ public EventParticipantCriteria event(EventReferenceDto event) {
2029
this.event = event;
2130
return this;
2231
}
32+
33+
public EventParticipantCriteria freeText(String freeText) {
34+
this.freeText = freeText;
35+
return this;
36+
}
37+
38+
public void setFreeText(String freeText) {
39+
this.freeText = freeText;
40+
}
41+
42+
@IgnoreForUrl
43+
public String getFreeText() {
44+
return freeText;
45+
}
46+
47+
public Integer getBirthdateYYYY() {
48+
return birthdateYYYY;
49+
}
50+
51+
public void setBirthdateYYYY(Integer birthdateYYYY) {
52+
this.birthdateYYYY = birthdateYYYY;
53+
}
54+
55+
public Integer getBirthdateMM() {
56+
return birthdateMM;
57+
}
58+
59+
public void setBirthdateMM(Integer birthdateMM) {
60+
this.birthdateMM = birthdateMM;
61+
}
62+
63+
public Integer getBirthdateDD() {
64+
return birthdateDD;
65+
}
66+
67+
public void setBirthdateDD(Integer birthdateDD) {
68+
this.birthdateDD = birthdateDD;
69+
}
2370
}

sormas-api/src/main/java/de/symeda/sormas/api/event/EventParticipantIndexDto.java

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ public class EventParticipantIndexDto implements WithJurisdiction<EventParticipa
1919
public static final String PERSON_UUID = "personUuid";
2020
public static final String CASE_UUID = "caseUuid";
2121
public static final String EVENT_UUID = "eventUuid";
22-
public static final String NAME = "name";
22+
public static final String FIRST_NAME = "firstName";
23+
public static final String LAST_NAME = "lastName";
2324
public static final String SEX = "sex";
2425
public static final String APPROXIMATE_AGE = "approximateAge";
2526
public static final String INVOLVEMENT_DESCRIPTION = "involvementDescription";
@@ -30,7 +31,9 @@ public class EventParticipantIndexDto implements WithJurisdiction<EventParticipa
3031
private String eventUuid;
3132
@PersonalData
3233
@SensitiveData
33-
private String name;
34+
private String firstName;
35+
@SensitiveData
36+
private String lastName;
3437
private Sex sex;
3538
private String approximateAge;
3639
@SensitiveData
@@ -55,7 +58,8 @@ public EventParticipantIndexDto(
5558
this.personUuid = personUuid;
5659
this.caseUuid = caseUuid;
5760
this.eventUuid = eventUuid;
58-
this.name = firstName + " " + lastName;
61+
this.firstName = firstName;
62+
this.lastName = lastName;
5963
this.sex = sex;
6064
this.approximateAge = ApproximateAgeHelper.formatApproximateAge(approximateAge, approximateAgeType);
6165
this.involvementDescription = involvementDescription;
@@ -95,12 +99,20 @@ public void setEventUuid(String eventUuid) {
9599
this.eventUuid = eventUuid;
96100
}
97101

98-
public String getName() {
99-
return name;
102+
public String getFirstName() {
103+
return firstName;
104+
}
105+
106+
public void setFirstName(String firstName) {
107+
this.firstName = firstName;
108+
}
109+
110+
public String getLastName() {
111+
return lastName;
100112
}
101113

102-
public void setName(String name) {
103-
this.name = name;
114+
public void setLastName(String lastName) {
115+
this.lastName = lastName;
104116
}
105117

106118
public Sex getSex() {

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -716,6 +716,7 @@ public interface Strings {
716716
String promptEventDateTo = "promptEventDateTo";
717717
String promptEventEpiWeekFrom = "promptEventEpiWeekFrom";
718718
String promptEventEpiWeekTo = "promptEventEpiWeekTo";
719+
String promptEventParticipantsSearchField = "promptEventParticipantsSearchField";
719720
String promptEventsSearchField = "promptEventsSearchField";
720721
String promptFilterByPeriod = "promptFilterByPeriod";
721722
String promptNamePhoneEmail = "promptNamePhoneEmail";

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -760,6 +760,7 @@ promptEventDateFrom =Date of event from epi week
760760
promptEventDateTo = ... to
761761
promptEventEpiWeekFrom = Date of event from epi week
762762
promptEventEpiWeekTo = ... to epi week
763+
promptEventParticipantsSearchField = name, phone number
763764
promptEventsSearchField = ID, description
764765
promptNewCaseDateType = Case reference date
765766
promptPrescriptionTextFilter = Prescription details or prescribing clinician

sormas-backend/src/main/java/de/symeda/sormas/backend/event/EventParticipantFacadeEjb.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -235,13 +235,10 @@ public List<EventParticipantIndexDto> getIndexList(
235235
break;
236236
case EventParticipantIndexDto.APPROXIMATE_AGE:
237237
case EventParticipantIndexDto.SEX:
238+
case EventParticipantIndexDto.LAST_NAME:
239+
case EventParticipantIndexDto.FIRST_NAME:
238240
expression = person.get(sortProperty.propertyName);
239241
break;
240-
case EventParticipantIndexDto.NAME:
241-
expression = person.get(Person.LAST_NAME);
242-
order.add(sortProperty.ascending ? cb.asc(expression) : cb.desc(expression));
243-
expression = person.get(Person.FIRST_NAME);
244-
break;
245242
case EventParticipantIndexDto.CASE_UUID:
246243
expression = resultingCase.get(Case.UUID);
247244
break;

sormas-backend/src/main/java/de/symeda/sormas/backend/event/EventParticipantService.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
import javax.persistence.criteria.Root;
3333

3434
import de.symeda.sormas.api.event.EventParticipantCriteria;
35+
import de.symeda.sormas.api.utils.DataHelper;
36+
import de.symeda.sormas.backend.caze.Case;
3537
import de.symeda.sormas.backend.common.AbstractAdoService;
3638
import de.symeda.sormas.backend.common.AbstractCoreAdoService;
3739
import de.symeda.sormas.backend.person.Person;
@@ -138,11 +140,36 @@ public List<EventParticipant> getAllActiveByEvent(Event event) {
138140
public Predicate buildCriteriaFilter(EventParticipantCriteria criteria, CriteriaBuilder cb, Root<EventParticipant> from) {
139141

140142
Join<EventParticipant, Event> event = from.join(EventParticipant.EVENT, JoinType.LEFT);
143+
Join<Case, Person> person = from.join(EventParticipant.PERSON, JoinType.LEFT);
141144
Predicate filter = null;
142145
if (criteria.getEvent() != null) {
143146
filter = and(cb, filter, cb.equal(event.get(Event.UUID), criteria.getEvent().getUuid()));
144147
}
145148

149+
if (criteria.getFreeText() != null) {
150+
String[] textFilters = criteria.getFreeText().split("\\s+");
151+
for (int i = 0; i < textFilters.length; i++) {
152+
String textFilter = formatForLike(textFilters[i]);
153+
if (!DataHelper.isNullOrEmpty(textFilter)) {
154+
Predicate likeFilters = cb.or(
155+
cb.like(cb.lower(person.get(Person.FIRST_NAME)), textFilter),
156+
cb.like(cb.lower(person.get(Person.LAST_NAME)), textFilter),
157+
phoneNumberPredicate(cb, person.get(Person.PHONE), textFilter));
158+
filter = and(cb, filter, likeFilters);
159+
}
160+
}
161+
}
162+
163+
if (criteria.getBirthdateYYYY() != null) {
164+
filter = and(cb, filter, cb.equal(person.get(Person.BIRTHDATE_YYYY), criteria.getBirthdateYYYY()));
165+
}
166+
if (criteria.getBirthdateMM() != null) {
167+
filter = and(cb, filter, cb.equal(person.get(Person.BIRTHDATE_MM), criteria.getBirthdateMM()));
168+
}
169+
if (criteria.getBirthdateDD() != null) {
170+
filter = and(cb, filter, cb.equal(person.get(Person.BIRTHDATE_DD), criteria.getBirthdateDD()));
171+
}
172+
146173
filter = and(cb, filter, createDefaultFilter(cb, from));
147174

148175
return filter;

sormas-ui/src/main/java/de/symeda/sormas/ui/events/AbstractEventView.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ protected String getRootViewName() {
8383
protected void setSubComponent(Component newComponent) {
8484
super.setSubComponent(newComponent);
8585

86-
if (FacadeProvider.getEventFacade().isDeleted(getReference().getUuid())) {
86+
if (getReference() != null && FacadeProvider.getEventFacade().isDeleted(getReference().getUuid())) {
8787
newComponent.setEnabled(false);
8888
}
8989
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package de.symeda.sormas.ui.events;
2+
3+
import com.vaadin.v7.ui.AbstractSelect;
4+
import com.vaadin.v7.ui.ComboBox;
5+
import com.vaadin.v7.ui.TextField;
6+
7+
import de.symeda.sormas.api.event.EventCriteria;
8+
import de.symeda.sormas.api.event.EventParticipantCriteria;
9+
import de.symeda.sormas.api.event.EventParticipantIndexDto;
10+
import de.symeda.sormas.api.i18n.I18nProperties;
11+
import de.symeda.sormas.api.i18n.Strings;
12+
import de.symeda.sormas.api.person.PersonDto;
13+
import de.symeda.sormas.api.utils.DateHelper;
14+
import de.symeda.sormas.ui.utils.AbstractFilterForm;
15+
import de.symeda.sormas.ui.utils.FieldConfiguration;
16+
17+
public class EventParticipantsFilterForm extends AbstractFilterForm<EventParticipantCriteria> {
18+
19+
protected EventParticipantsFilterForm() {
20+
super(EventParticipantCriteria.class, EventParticipantIndexDto.I18N_PREFIX);
21+
}
22+
23+
@Override
24+
protected String[] getMainFilterLocators() {
25+
return new String[] {
26+
EventParticipantCriteria.BIRTHDATE_YYYY,
27+
EventParticipantCriteria.BIRTHDATE_MM,
28+
EventParticipantCriteria.BIRTHDATE_DD,
29+
EventParticipantCriteria.FREE_TEXT };
30+
}
31+
32+
@Override
33+
protected void addFields() {
34+
35+
ComboBox birthDateYYYY = addField(EventParticipantCriteria.BIRTHDATE_YYYY, ComboBox.class);
36+
birthDateYYYY.setInputPrompt(I18nProperties.getPrefixCaption(PersonDto.I18N_PREFIX, PersonDto.BIRTH_DATE_YYYY));
37+
birthDateYYYY.setWidth(140, Unit.PIXELS);
38+
birthDateYYYY.addItems(DateHelper.getYearsToNow());
39+
birthDateYYYY.setItemCaptionMode(AbstractSelect.ItemCaptionMode.ID_TOSTRING);
40+
ComboBox birthDateMM = addField(EventParticipantCriteria.BIRTHDATE_MM, ComboBox.class);
41+
birthDateMM.setInputPrompt(I18nProperties.getPrefixCaption(PersonDto.I18N_PREFIX, PersonDto.BIRTH_DATE_MM));
42+
birthDateMM.setWidth(140, Unit.PIXELS);
43+
birthDateMM.addItems(DateHelper.getMonthsInYear());
44+
ComboBox birthDateDD = addField(EventParticipantCriteria.BIRTHDATE_DD, ComboBox.class);
45+
birthDateDD.setInputPrompt(I18nProperties.getPrefixCaption(PersonDto.I18N_PREFIX, PersonDto.BIRTH_DATE_DD));
46+
birthDateDD.setWidth(140, Unit.PIXELS);
47+
48+
TextField searchField = addField(
49+
FieldConfiguration
50+
.withCaptionAndPixelSized(EventCriteria.FREE_TEXT, I18nProperties.getString(Strings.promptEventParticipantsSearchField), 200));
51+
searchField.setNullRepresentation("");
52+
}
53+
}

sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventParticipantsGrid.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,8 @@ public EventParticipantsGrid(EventParticipantCriteria criteria) {
8787
setColumns(
8888
EventParticipantIndexDto.UUID,
8989
EventParticipantIndexDto.PERSON_UUID,
90-
EventParticipantIndexDto.NAME,
90+
EventParticipantIndexDto.FIRST_NAME,
91+
EventParticipantIndexDto.LAST_NAME,
9192
EventParticipantIndexDto.SEX,
9293
EventParticipantIndexDto.APPROXIMATE_AGE,
9394
EventParticipantIndexDto.INVOLVEMENT_DESCRIPTION,

0 commit comments

Comments
 (0)