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

Commit 8c37fd9

Browse files
* Add taskContext column and filter to the task directory SORMAS-Foundation#3279 Change-Id: I6718fdda0b2f644e021cdad5ce88f4e9ee4abe11 * Add region and district columns and filters to the task directory SORMAS-Foundation#3279 * Add task context entity name column and filter to the task directory SORMAS-Foundation#3279 * Rename contextEntityFreeText to freeText SORMAS-Foundation#3279 * Only show district filter when the user's district isn't set SORMAS-Foundation#3279 * Add suggestedStartDate and dueDate filters in the task directory SORMAS-Foundation#3278 * Add assigneeUserLike filter in the task directory SORMAS-Foundation#3278 * Add creatorUserLike filter in the task directory SORMAS-Foundation#3278 * Remove entity name column and add eventTitle to associatedLink caption in task directory SORMAS-Foundation#3279 * Fill in the date/epi week inputs after they have been applied SORMAS-Foundation#3278 The filter was working correctly, but once applied the related inputs were to be filled again * Ignore the dateFilterOption to set whether extra rows are displayed or not in task directory SORMAS-Foundation#3279
1 parent 00eff24 commit 8c37fd9

13 files changed

Lines changed: 500 additions & 46 deletions

File tree

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -807,6 +807,12 @@ public interface Strings {
807807
String promptSamplesSearchField = "promptSamplesSearchField";
808808
String promptSearch = "promptSearch";
809809
String promptSelectPeriod = "promptSelectPeriod";
810+
String promptTaskDateFrom = "promptTaskDateFrom";
811+
String promptTaskDateTo = "promptTaskDateTo";
812+
String promptTaskDateType = "promptTaskDateType";
813+
String promptTaskEpiWeekFrom = "promptTaskEpiWeekFrom";
814+
String promptTaskEpiWeekTo = "promptTaskEpiWeekTo";
815+
String promptTaskSearchField = "promptTaskSearchField";
810816
String promptTreatmentTextFilter = "promptTreatmentTextFilter";
811817
String promptTypeToAdd = "promptTypeToAdd";
812818
String promptUserSearch = "promptUserSearch";

sormas-api/src/main/java/de/symeda/sormas/api/task/TaskCriteria.java

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,23 @@
2626
import de.symeda.sormas.api.contact.ContactReferenceDto;
2727
import de.symeda.sormas.api.event.EventReferenceDto;
2828
import de.symeda.sormas.api.person.PersonReferenceDto;
29+
import de.symeda.sormas.api.region.DistrictReferenceDto;
30+
import de.symeda.sormas.api.region.RegionReferenceDto;
2931
import de.symeda.sormas.api.user.UserReferenceDto;
32+
import de.symeda.sormas.api.utils.DateFilterOption;
3033
import de.symeda.sormas.api.utils.IgnoreForUrl;
3134

3235
public class TaskCriteria extends BaseCriteria implements Serializable {
3336

3437
private static final long serialVersionUID = -9174165215694877625L;
3538

39+
public static final String FREE_TEXT = "freeText";
40+
public static final String ASSIGNEE_USER_LIKE = "assigneeUserLike";
41+
public static final String CREATOR_USER_LIKE = "creatorUserLike";
42+
3643
private TaskStatus taskStatus;
44+
private TaskContext taskContext;
45+
private String freeText;
3746
private TaskType taskType;
3847
private UserReferenceDto assigneeUser;
3948
private UserReferenceDto excludeAssigneeUser;
@@ -47,7 +56,13 @@ public class TaskCriteria extends BaseCriteria implements Serializable {
4756
private Date startDateTo;
4857
private Date statusChangeDateFrom;
4958
private Date statusChangeDateTo;
59+
// Used to re-construct whether users have filtered by epi weeks or dates
60+
private DateFilterOption dateFilterOption = DateFilterOption.DATE;
5061
private EntityRelevanceStatus relevanceStatus;
62+
private RegionReferenceDto region;
63+
private DistrictReferenceDto district;
64+
private String assigneeUserLike;
65+
private String creatorUserLike;
5166

5267
public TaskStatus getTaskStatus() {
5368
return taskStatus;
@@ -201,6 +216,15 @@ public Date getStatusChangeDateTo() {
201216
return statusChangeDateTo;
202217
}
203218

219+
public TaskCriteria dateFilterOption(DateFilterOption dateFilterOption) {
220+
this.dateFilterOption = dateFilterOption;
221+
return this;
222+
}
223+
224+
public DateFilterOption getDateFilterOption() {
225+
return dateFilterOption;
226+
}
227+
204228
public TaskCriteria relevanceStatus(EntityRelevanceStatus relevanceStatus) {
205229
this.relevanceStatus = relevanceStatus;
206230
return this;
@@ -210,4 +234,82 @@ public TaskCriteria relevanceStatus(EntityRelevanceStatus relevanceStatus) {
210234
public EntityRelevanceStatus getRelevanceStatus() {
211235
return relevanceStatus;
212236
}
237+
238+
public TaskContext getTaskContext() {
239+
return taskContext;
240+
}
241+
242+
public void setTaskContext(TaskContext taskContext) {
243+
this.taskContext = taskContext;
244+
}
245+
246+
public TaskCriteria taskContext(TaskContext taskContext) {
247+
this.taskContext = taskContext;
248+
return this;
249+
}
250+
251+
public RegionReferenceDto getRegion() {
252+
return region;
253+
}
254+
255+
public void setRegion(RegionReferenceDto region) {
256+
this.region = region;
257+
}
258+
259+
public TaskCriteria region(RegionReferenceDto region) {
260+
this.region = region;
261+
return this;
262+
}
263+
264+
public DistrictReferenceDto getDistrict() {
265+
return district;
266+
}
267+
268+
public void setDistrict(DistrictReferenceDto district) {
269+
this.district = district;
270+
}
271+
272+
public TaskCriteria district(DistrictReferenceDto district) {
273+
this.district = district;
274+
return this;
275+
}
276+
277+
public String getFreeText() {
278+
return freeText;
279+
}
280+
281+
public void setFreeText(String freeText) {
282+
this.freeText = freeText;
283+
}
284+
285+
public TaskCriteria freeText(String freeText) {
286+
this.freeText = freeText;
287+
return this;
288+
}
289+
290+
public String getAssigneeUserLike() {
291+
return assigneeUserLike;
292+
}
293+
294+
public void setAssigneeUserLike(String assigneeUserLike) {
295+
this.assigneeUserLike = assigneeUserLike;
296+
}
297+
298+
public TaskCriteria assigneeUserLike(String assigneeUserLike) {
299+
this.assigneeUserLike = assigneeUserLike;
300+
return this;
301+
}
302+
303+
public String getCreatorUserLike() {
304+
return creatorUserLike;
305+
}
306+
307+
public void setCreatorUserLike(String creatorUserLike) {
308+
this.creatorUserLike = creatorUserLike;
309+
}
310+
311+
public TaskCriteria creatorUserLike(String creatorUserLike) {
312+
this.creatorUserLike = creatorUserLike;
313+
return this;
314+
}
213315
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package de.symeda.sormas.api.task;
2+
3+
import de.symeda.sormas.api.i18n.I18nProperties;
4+
5+
public enum TaskDateType {
6+
7+
SUGGESTED_START_DATE,
8+
DUE_DATE;
9+
10+
public String toString() {
11+
return I18nProperties.getEnumCaption(this);
12+
}
13+
}

sormas-api/src/main/java/de/symeda/sormas/api/task/TaskIndexDto.java

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@
1717
*******************************************************************************/
1818
package de.symeda.sormas.api.task;
1919

20+
import java.io.Serializable;
21+
import java.util.Date;
22+
23+
import org.apache.commons.lang3.StringUtils;
24+
2025
import de.symeda.sormas.api.Disease;
2126
import de.symeda.sormas.api.ReferenceDto;
2227
import de.symeda.sormas.api.caze.CaseJurisdictionDto;
@@ -34,9 +39,6 @@
3439
import de.symeda.sormas.api.utils.pseudonymization.Pseudonymizer;
3540
import de.symeda.sormas.api.utils.pseudonymization.valuepseudonymizers.EmptyValuePseudonymizer;
3641

37-
import java.io.Serializable;
38-
import java.util.Date;
39-
4042
public class TaskIndexDto extends PseudonymizableIndexDto implements Serializable {
4143

4244
private static final long serialVersionUID = 2439546041916003653L;
@@ -58,6 +60,8 @@ public class TaskIndexDto extends PseudonymizableIndexDto implements Serializabl
5860
public static final String TASK_STATUS = "taskStatus";
5961
public static final String TASK_TYPE = "taskType";
6062
public static final String CONTEXT_REFERENCE = "contextReference";
63+
public static final String REGION = "region";
64+
public static final String DISTRICT = "district";
6165

6266
private String uuid;
6367
private TaskContext taskContext;
@@ -73,6 +77,8 @@ public class TaskIndexDto extends PseudonymizableIndexDto implements Serializabl
7377
@EmbeddedSensitiveData
7478
@Pseudonymizer(EmptyValuePseudonymizer.class)
7579
private ContactReferenceDto contact;
80+
private String region;
81+
private String district;
7682

7783
private TaskType taskType;
7884
private TaskPriority priority;
@@ -89,7 +95,7 @@ public class TaskIndexDto extends PseudonymizableIndexDto implements Serializabl
8995

9096
//@formatter:off
9197
public TaskIndexDto(String uuid, TaskContext taskContext, String caseUuid, String caseFirstName, String caseLastName,
92-
String eventUuid, Disease eventDisease, String eventDiseaseDetails, EventStatus eventStatus, EventInvestigationStatus eventInvestigationStatus, Date eventDate,
98+
String eventUuid, String eventTitle, Disease eventDisease, String eventDiseaseDetails, EventStatus eventStatus, EventInvestigationStatus eventInvestigationStatus, Date eventDate,
9399
String contactUuid, String contactFirstName, String contactLastName, String contactCaseFirstName, String contactCaseLastName,
94100
TaskType taskType, TaskPriority priority, Date dueDate, Date suggestedStart, TaskStatus taskStatus,
95101
String creatorUserUuid, String creatorUserFirstName, String creatorUserLastName, String creatorComment,
@@ -98,7 +104,7 @@ public TaskIndexDto(String uuid, TaskContext taskContext, String caseUuid, Strin
98104
String casePointOfEntryUuid, String contactReportingUserUuid, String contactRegionUuid, String contactDistrictUuid, String contactCommunityUuid,
99105
String contactCaseReportingUserUuid, String contactCaseRegionUuid, String contactCaseDistrictUuid, String contactCaseCommunityUuid,
100106
String contactCaseHealthFacilityUuid, String contactCasePointOfEntryUuid, String eventReportingUserUuid, String eventOfficerUuid, String eventRegionUuid,
101-
String eventDistrictUuid, String eventCommunityUuid) {
107+
String eventDistrictUuid, String eventCommunityUuid, String region, String district) {
102108
//@formatter:on
103109

104110
this.setUuid(uuid);
@@ -121,7 +127,11 @@ public TaskIndexDto(String uuid, TaskContext taskContext, String caseUuid, Strin
121127
eventJurisdiction =
122128
new EventJurisdictionDto(eventReportingUserUuid, eventOfficerUuid, eventRegionUuid, eventDistrictUuid, eventCommunityUuid);
123129

124-
this.event = new EventReferenceDto(eventUuid, eventDisease, eventDiseaseDetails, eventStatus, eventInvestigationStatus, eventDate);
130+
if (StringUtils.isNotBlank(eventTitle)) {
131+
this.event = new EventReferenceDto(eventUuid, StringUtils.capitalize(eventTitle));
132+
} else {
133+
this.event = new EventReferenceDto(eventUuid, eventDisease, eventDiseaseDetails, eventStatus, eventInvestigationStatus, eventDate);
134+
}
125135
}
126136

127137
ContactJurisdictionDto contactJurisdiction = null;
@@ -154,6 +164,8 @@ public TaskIndexDto(String uuid, TaskContext taskContext, String caseUuid, Strin
154164
this.creatorComment = creatorComment;
155165
this.assigneeUser = new UserReferenceDto(assigneeUserUuid, assigneeUserFirstName, assigneeUserLastName, null);
156166
this.assigneeReply = assigneeReply;
167+
this.district = district;
168+
this.region = region;
157169

158170
this.jurisdiction = new TaskJurisdictionDto(creatorUserUuid, assigneeUserUuid, caseJurisdiction, contactJurisdiction, eventJurisdiction);
159171
}
@@ -289,4 +301,19 @@ public TaskJurisdictionDto getJurisdiction() {
289301
return jurisdiction;
290302
}
291303

304+
public String getRegion() {
305+
return region;
306+
}
307+
308+
public void setRegion(String region) {
309+
this.region = region;
310+
}
311+
312+
public String getDistrict() {
313+
return district;
314+
}
315+
316+
public void setDistrict(String district) {
317+
this.district = district;
318+
}
292319
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -854,6 +854,10 @@ TaskContext.CONTACT = Contact
854854
TaskContext.EVENT = Event
855855
TaskContext.GENERAL = General
856856

857+
# TaskDateType
858+
TaskDateType.SUGGESTED_START_DATE = Suggested start date
859+
TaskDateType.DUE_DATE = Due date
860+
857861
# TaskPriority
858862
TaskPriority.HIGH = High
859863
TaskPriority.LOW = Low

sormas-api/src/main/resources/enum_fr-FR.properties

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -854,6 +854,10 @@ TaskContext.CONTACT = Contact
854854
TaskContext.EVENT = Événement
855855
TaskContext.GENERAL = Général
856856

857+
# TaskDateType
858+
TaskDateType.SUGGESTED_START_DATE = Date de début suggérée
859+
TaskDateType.DUE_DATE = Date d'échéance
860+
857861
# TaskPriority
858862
TaskPriority.HIGH = Élevée
859863
TaskPriority.LOW = Basse

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -843,6 +843,12 @@ promptSampleEpiWeekFrom = Sample date from epi week
843843
promptSampleEpiWeekTo = ... to epi week
844844
promtSampleDataType = Sample reference date
845845
promptSearch = Search...
846+
promptTaskSearchField = Case or contact ID/name, Event ID/title
847+
promptTaskDateType = Task reference date
848+
promptTaskDateFrom = Tasks from...
849+
promptTaskDateTo = ... to
850+
promptTaskEpiWeekFrom = Tasks from epi week...
851+
promptTaskEpiWeekTo = ... to epi week
846852
promptTreatmentTextFilter = Treatment details or executing staff member
847853
promptTypeToAdd = Type here to add...
848854
promptUserSearch = Search user

sormas-api/src/main/resources/strings_fr-FR.properties

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -830,6 +830,12 @@ promptSampleEpiWeekFrom = Date de l'échantillon de la semaine épi
830830
promptSampleEpiWeekTo = ... à la Semaine de l’Epi
831831
promtSampleDataType = Date de référence de l'échantillon
832832
promptSearch = Recherche...
833+
promptTaskSearchField = ID/nom du cas ou du contact, ID/titre de l'événement
834+
promptTaskDateType = Date de référence de la tâche
835+
promptTaskDateFrom = Tâches de...
836+
promptTaskDateTo = ... à
837+
promptTaskEpiWeekFrom = Tâches de la semaine de l'Epi...
838+
promptTaskEpiWeekTo = ... à la semaine de l’Epi
833839
promptTreatmentTextFilter = Détails du traitement ou membre du personnel d'exécution
834840
promptTypeToAdd = Tapez ici pour ajouter...
835841
promptUserSearch = Chercher utilisateur

sormas-backend/src/main/java/de/symeda/sormas/backend/task/TaskFacadeEjb.java

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@ public long count(TaskCriteria taskCriteria) {
354354
}
355355

356356
if (taskCriteria != null) {
357-
Predicate criteriaFilter = taskService.buildCriteriaFilter(taskCriteria, cb, task);
357+
Predicate criteriaFilter = taskService.buildCriteriaFilter(taskCriteria, cb, task, joins);
358358
filter = AbstractAdoService.and(cb, filter, criteriaFilter);
359359
}
360360

@@ -375,12 +375,26 @@ public List<TaskIndexDto> getIndexList(TaskCriteria taskCriteria, Integer first,
375375

376376
TaskJoins joins = new TaskJoins(task);
377377

378+
Expression<Object> region = cb.selectCase()
379+
.when(cb.isNotNull(joins.getCaseRegion()), joins.getCaseRegion().get(Region.NAME))
380+
.otherwise(
381+
cb.selectCase()
382+
.when(cb.isNotNull(joins.getContactRegion()), joins.getContactRegion().get(Region.NAME))
383+
.otherwise(joins.getEventRegion().get(District.NAME)));
384+
385+
Expression<Object> district = cb.selectCase()
386+
.when(cb.isNotNull(joins.getCaseDistrict()), joins.getCaseDistrict().get(District.NAME))
387+
.otherwise(
388+
cb.selectCase()
389+
.when(cb.isNotNull(joins.getContactDistrict()), joins.getContactDistrict().get(District.NAME))
390+
.otherwise(joins.getEventDistrict().get(District.NAME)));
378391
//@formatter:off
379392
cq.multiselect(task.get(Task.UUID), task.get(Task.TASK_CONTEXT),
380393
joins.getCaze().get(Case.UUID), joins.getCasePerson().get(Person.FIRST_NAME), joins.getCasePerson().get(Person.LAST_NAME),
381-
joins.getEvent().get(Event.UUID), joins.getEvent().get(Event.DISEASE), joins.getEvent().get(Event.DISEASE_DETAILS), joins.getEvent().get(Event.EVENT_STATUS), joins.getEvent().get(Event.EVENT_INVESTIGATION_STATUS),
382-
joins.getEvent().get(Event.START_DATE), joins.getContact().get(Contact.UUID), joins.getContactPerson().get(Person.FIRST_NAME),
383-
joins.getContactPerson().get(Person.LAST_NAME), joins.getContactCasePerson().get(Person.FIRST_NAME), joins.getContactCasePerson().get(Person.LAST_NAME),
394+
joins.getEvent().get(Event.UUID), joins.getEvent().get(Event.EVENT_TITLE), joins.getEvent().get(Event.DISEASE), joins.getEvent().get(Event.DISEASE_DETAILS),
395+
joins.getEvent().get(Event.EVENT_STATUS), joins.getEvent().get(Event.EVENT_INVESTIGATION_STATUS), joins.getEvent().get(Event.START_DATE),
396+
joins.getContact().get(Contact.UUID), joins.getContactPerson().get(Person.FIRST_NAME), joins.getContactPerson().get(Person.LAST_NAME),
397+
joins.getContactCasePerson().get(Person.FIRST_NAME), joins.getContactCasePerson().get(Person.LAST_NAME),
384398
task.get(Task.TASK_TYPE), task.get(Task.PRIORITY), task.get(Task.DUE_DATE), task.get(Task.SUGGESTED_START), task.get(Task.TASK_STATUS),
385399
joins.getCreator().get(User.UUID), joins.getCreator().get(User.FIRST_NAME), joins.getCreator().get(User.LAST_NAME), task.get(Task.CREATOR_COMMENT),
386400
joins.getAssignee().get(User.UUID), joins.getAssignee().get(User.FIRST_NAME), joins.getAssignee().get(User.LAST_NAME), task.get(Task.ASSIGNEE_REPLY),
@@ -390,7 +404,8 @@ public List<TaskIndexDto> getIndexList(TaskCriteria taskCriteria, Integer first,
390404
joins.getContactCommunity().get(Community.UUID), joins.getContactCaseReportingUser().get(User.UUID), joins.getContactCaseRegion().get(User.UUID),
391405
joins.getContactCaseDistrict().get(User.UUID), joins.getContactCaseCommunity().get(User.UUID), joins.getContactCaseHealthFacility().get(User.UUID),
392406
joins.getContactCasePointOfEntry().get(User.UUID), joins.getEventReportingUser().get(User.UUID), joins.getEventSurveillanceOfficer().get(User.UUID),
393-
joins.getEventRegion().get(Region.UUID), joins.getEventDistrict().get(District.UUID), joins.getEventCommunity().get(Community.UUID)
407+
joins.getEventRegion().get(Region.UUID), joins.getEventDistrict().get(District.UUID), joins.getEventCommunity().get(Community.UUID),
408+
region, district
394409
);
395410
//@formatter:on
396411

@@ -402,7 +417,7 @@ public List<TaskIndexDto> getIndexList(TaskCriteria taskCriteria, Integer first,
402417
}
403418

404419
if (taskCriteria != null) {
405-
Predicate criteriaFilter = taskService.buildCriteriaFilter(taskCriteria, cb, task);
420+
Predicate criteriaFilter = taskService.buildCriteriaFilter(taskCriteria, cb, task, joins);
406421
filter = AbstractAdoService.and(cb, filter, criteriaFilter);
407422
}
408423

@@ -452,6 +467,12 @@ public List<TaskIndexDto> getIndexList(TaskCriteria taskCriteria, Integer first,
452467
case TaskIndexDto.EVENT:
453468
expression = joins.getEvent().get(Event.START_DATE);
454469
break;
470+
case TaskIndexDto.DISTRICT:
471+
expression = district;
472+
break;
473+
case TaskIndexDto.REGION:
474+
expression = region;
475+
break;
455476
default:
456477
throw new IllegalArgumentException(sortProperty.propertyName);
457478
}

0 commit comments

Comments
 (0)