diff --git a/src/main/java/se/su/dsv/scipro/admin/panels/AdminMailPanel.java b/src/main/java/se/su/dsv/scipro/admin/panels/AdminMailPanel.java index 9f6589bdf3..cd37b0c9b3 100644 --- a/src/main/java/se/su/dsv/scipro/admin/panels/AdminMailPanel.java +++ b/src/main/java/se/su/dsv/scipro/admin/panels/AdminMailPanel.java @@ -144,7 +144,19 @@ public class AdminMailPanel extends Panel { DateTime start = new DateTime(); start = start.minusMonths(6); - dpp = new DatePickerPanel("datePanel", start.toDate(), null); + dpp = new DatePickerPanel("datePanel", start.toDate(), null) { + private static final long serialVersionUID = 8199436051263013307L; + + @Override + public void updateStartDate(AjaxRequestTarget target) { + updateUserSet(target); + } + + @Override + public void updateEndDate(AjaxRequestTarget target) { + updateUserSet(target); + } + }; add(dpp); } diff --git a/src/main/java/se/su/dsv/scipro/components/DatePickerPanel.java b/src/main/java/se/su/dsv/scipro/components/DatePickerPanel.java index a0b5022b3f..33ae3b1b61 100644 --- a/src/main/java/se/su/dsv/scipro/components/DatePickerPanel.java +++ b/src/main/java/se/su/dsv/scipro/components/DatePickerPanel.java @@ -11,11 +11,7 @@ import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.Model; - - - - -public class DatePickerPanel extends Panel{ +public abstract class DatePickerPanel extends Panel{ private static final long serialVersionUID = -5607127520132313062L; @@ -74,6 +70,7 @@ public class DatePickerPanel extends Panel{ @Override protected void onUpdate(AjaxRequestTarget target) { setStartDate(startDtf.getModelObject()); + updateStartDate(target); } }; @@ -85,7 +82,7 @@ public class DatePickerPanel extends Panel{ @Override protected void onUpdate(AjaxRequestTarget target) { setEndDate(endDtf.getModelObject()); - + updateEndDate(target); } }; @@ -128,4 +125,8 @@ public class DatePickerPanel extends Panel{ //model.getObject().setEndDate(dpm.getEndDate()); endDtf.setModelObject(dpm.getEndDate()); } + + public abstract void updateStartDate(AjaxRequestTarget target); + public abstract void updateEndDate(AjaxRequestTarget target); + } diff --git a/src/main/java/se/su/dsv/scipro/peer/panels/FilterFormRequestStatusPanel.html b/src/main/java/se/su/dsv/scipro/peer/panels/FilterFormRequestStatusPanel.html index 13185320cc..2082da651d 100644 --- a/src/main/java/se/su/dsv/scipro/peer/panels/FilterFormRequestStatusPanel.html +++ b/src/main/java/se/su/dsv/scipro/peer/panels/FilterFormRequestStatusPanel.html @@ -8,7 +8,7 @@ <wicket:panel> <div wicket:id="container"> - <label for="checkGroup">Filter by status:</label> + <label for="checkGroup">Filter by status</label> <div wicket:id="checkGroup"> <div wicket:id="statusView"> <input type="checkbox" wicket:id="statusCheckBox"></input> diff --git a/src/main/java/se/su/dsv/scipro/peer/panels/FilterFormReviewStatusPanel.html b/src/main/java/se/su/dsv/scipro/peer/panels/FilterFormReviewStatusPanel.html index 13185320cc..2082da651d 100644 --- a/src/main/java/se/su/dsv/scipro/peer/panels/FilterFormReviewStatusPanel.html +++ b/src/main/java/se/su/dsv/scipro/peer/panels/FilterFormReviewStatusPanel.html @@ -8,7 +8,7 @@ <wicket:panel> <div wicket:id="container"> - <label for="checkGroup">Filter by status:</label> + <label for="checkGroup">Filter by status</label> <div wicket:id="checkGroup"> <div wicket:id="statusView"> <input type="checkbox" wicket:id="statusCheckBox"></input> diff --git a/src/main/java/se/su/dsv/scipro/peer/panels/PeerRequestListPanel.html b/src/main/java/se/su/dsv/scipro/peer/panels/PeerRequestListPanel.html index 318374e249..2e8b07492f 100644 --- a/src/main/java/se/su/dsv/scipro/peer/panels/PeerRequestListPanel.html +++ b/src/main/java/se/su/dsv/scipro/peer/panels/PeerRequestListPanel.html @@ -6,15 +6,17 @@ <div class="span-24 prepend-top last"> <form wicket:id="form"> - <div class="span-6"> - <label>Filter by requesting author:</label> + <div class="span-5"> + <label>Filter by requesting author</label> <br /> <input wicket:id="filterAuthor" /> <br /> </div> - <div class="span-6" wicket:id="statusFilter"></div> + <div class="span-5" wicket:id="statusFilter"></div> + <label>Request created between</label><br /> + <div class="span-6" wicket:id="datePanel"></div> <div class="span-10" wicket:id="supervisorContainer"> - <label>Show only my projects:</label> + <label>Show only my projects</label> <br /> <input type="checkbox" wicket:id="supervisorCheckBox" /> <br /> diff --git a/src/main/java/se/su/dsv/scipro/peer/panels/PeerRequestListPanel.java b/src/main/java/se/su/dsv/scipro/peer/panels/PeerRequestListPanel.java index 06e4f9f10c..8e43b06773 100644 --- a/src/main/java/se/su/dsv/scipro/peer/panels/PeerRequestListPanel.java +++ b/src/main/java/se/su/dsv/scipro/peer/panels/PeerRequestListPanel.java @@ -3,6 +3,7 @@ */ package se.su.dsv.scipro.peer.panels; +import java.util.Date; import java.util.Iterator; import org.apache.wicket.ajax.AjaxRequestTarget; @@ -22,10 +23,12 @@ import org.apache.wicket.model.AbstractReadOnlyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.spring.injection.annot.SpringBean; +import org.joda.time.DateTime; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; import se.su.dsv.scipro.SciProSession; +import se.su.dsv.scipro.components.DatePickerPanel; import se.su.dsv.scipro.components.ItemsPerPageChoice; import se.su.dsv.scipro.data.dataobjects.Employee; import se.su.dsv.scipro.data.dataobjects.Student; @@ -137,6 +140,28 @@ public class PeerRequestListPanel extends Panel { }; params.setStatuses(statusFilter.getSelectedStatuses()); add(statusFilter); + + DateTime start = new DateTime(); + start = start.minusMonths(12); + params.setCreatedAfter(start.toDate()); + params.setCreatedBefore(new Date()); + final DatePickerPanel datePanel = new DatePickerPanel("datePanel", start.toDate(), null) { + private static final long serialVersionUID = 1502923890365050302L; + + @Override + public void updateStartDate(AjaxRequestTarget target) { + params.setCreatedAfter(getStartDate()); + updateTarget(target, params); + } + + @Override + public void updateEndDate(AjaxRequestTarget target) { + params.setCreatedBefore(getEndDate()); + updateTarget(target, params); + } + }; + add(datePanel); + final AjaxCheckBox supervisorProjects = new AjaxCheckBox("supervisorCheckBox", new Model<Boolean>()) { private static final long serialVersionUID = -7624763782876907386L; diff --git a/src/main/java/se/su/dsv/scipro/peer/panels/PeerReviewListPanel.html b/src/main/java/se/su/dsv/scipro/peer/panels/PeerReviewListPanel.html index b601ba03ce..c26d9acde5 100644 --- a/src/main/java/se/su/dsv/scipro/peer/panels/PeerReviewListPanel.html +++ b/src/main/java/se/su/dsv/scipro/peer/panels/PeerReviewListPanel.html @@ -6,15 +6,17 @@ <div class="span-24 prepend-top last"> <form wicket:id="form"> - <div class="span-6"> - <label>Filter by reviewing author:</label> + <div class="span-5"> + <label>Filter by reviewing author</label> <br/> <input wicket:id="filterAuthor"/> <br/> </div> - <div class="span-6" wicket:id="statusFilter"></div> + <div class="span-5" wicket:id="statusFilter"></div> + <label>Review commenced between</label><br /> + <div class="span-6" wicket:id="datePanel"></div> <div class="span-10" wicket:id="supervisorContainer"> - <label>Show only my projects:</label> + <label>Show only my projects</label> <br> <input type="checkbox" wicket:id="supervisorCheckBox"/> <br> diff --git a/src/main/java/se/su/dsv/scipro/peer/panels/PeerReviewListPanel.java b/src/main/java/se/su/dsv/scipro/peer/panels/PeerReviewListPanel.java index 80864939b6..5785550575 100644 --- a/src/main/java/se/su/dsv/scipro/peer/panels/PeerReviewListPanel.java +++ b/src/main/java/se/su/dsv/scipro/peer/panels/PeerReviewListPanel.java @@ -3,6 +3,7 @@ */ package se.su.dsv.scipro.peer.panels; +import java.util.Date; import java.util.Iterator; import org.apache.wicket.PageParameters; @@ -23,10 +24,12 @@ import org.apache.wicket.model.AbstractReadOnlyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.spring.injection.annot.SpringBean; +import org.joda.time.DateTime; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; import se.su.dsv.scipro.SciProSession; +import se.su.dsv.scipro.components.DatePickerPanel; import se.su.dsv.scipro.components.ItemsPerPageChoice; import se.su.dsv.scipro.data.dataobjects.Employee; import se.su.dsv.scipro.data.dataobjects.Student; @@ -159,6 +162,27 @@ public class PeerReviewListPanel extends Panel { } }; add(statusFilter); + + DateTime start = new DateTime(); + start = start.minusMonths(12); + params.setCreatedAfter(start.toDate()); + params.setCreatedBefore(new Date()); + final DatePickerPanel datePanel = new DatePickerPanel("datePanel", start.toDate(), null) { + private static final long serialVersionUID = -411662653140866688L; + + @Override + public void updateStartDate(AjaxRequestTarget target) { + params.setCreatedAfter(getStartDate()); + updateTarget(target, params); + } + + @Override + public void updateEndDate(AjaxRequestTarget target) { + params.setCreatedBefore(getEndDate()); + updateTarget(target, params); + } + }; + add(datePanel); final AjaxCheckBox supervisorProjects = new AjaxCheckBox("supervisorCheckBox", new Model<Boolean>()) { private static final long serialVersionUID = -6475334474261478489L; diff --git a/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/PeerRequestServiceImpl.java b/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/PeerRequestServiceImpl.java index 3f84e8a8a8..d152512515 100644 --- a/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/PeerRequestServiceImpl.java +++ b/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/PeerRequestServiceImpl.java @@ -2,6 +2,7 @@ package se.su.dsv.scipro.springdata.serviceimpls; import java.util.ArrayList; import java.util.Collection; +import java.util.Date; import java.util.List; import javax.annotation.Resource; @@ -132,6 +133,13 @@ public class PeerRequestServiceImpl extends AbstractQueryService<PeerRequest, Lo } } + private BooleanExpression createdBetween(Date from, Date to) { + if(from!=null&to!=null) + return QPeerRequest.peerRequest.dateCreated.between(from, to); + else + return null; + } + private BooleanBuilder statusFilter(Collection<RequestStatus> statuses){ BooleanBuilder e = new BooleanBuilder(); if(statuses!=null && !statuses.isEmpty()){ @@ -150,7 +158,8 @@ public class PeerRequestServiceImpl extends AbstractQueryService<PeerRequest, Lo private Predicate predicateFromParams(FilterParams params) { return isRequester(params.getAuthor()) .and(statusFilter(params.getStatuses())) - .and(supervisorIs(params.getSupervisor())); + .and(supervisorIs(params.getSupervisor())) + .and(createdBetween(params.getCreatedAfter(), params.getCreatedBefore())); } @Transactional ( readOnly = false ) diff --git a/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/PeerReviewServiceImpl.java b/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/PeerReviewServiceImpl.java index 2d05e5a36f..d90c1f3c1f 100644 --- a/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/PeerReviewServiceImpl.java +++ b/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/PeerReviewServiceImpl.java @@ -1,6 +1,7 @@ package se.su.dsv.scipro.springdata.serviceimpls; import java.util.ArrayList; +import java.util.Date; import java.util.List; import javax.annotation.Resource; @@ -55,7 +56,8 @@ public class PeerReviewServiceImpl extends AbstractQueryService<PeerReview, Long private Predicate predicateFromParams(FilterParams params) { return reviewerIs(params.getAuthor()) .and(statusFilter(params.isIncludeCompleted(), params.isIncludeAborted(), params.isIncludeInProgress())) - .and(supervisorIs(params.getSupervisor())); + .and(supervisorIs(params.getSupervisor())) + .and(startedBetween(params.getCreatedAfter(), params.getCreatedBefore())); } @@ -181,6 +183,14 @@ public class PeerReviewServiceImpl extends AbstractQueryService<PeerReview, Long private BooleanExpression isSubmitted(boolean isSubmitted){ return QPeerReview.peerReview.submitted.eq(isSubmitted); } + + private BooleanExpression startedBetween(Date from, Date to) { + if(from!=null&&to!=null) { + return QPeerReview.peerReview.dateCreated.between(from, to); + } + else + return null; + } //Construct a list from Iterable Object. private List<PeerReview> constructList(Iterable<PeerReview> reviews) { diff --git a/src/main/java/se/su/dsv/scipro/springdata/services/PeerRequestService.java b/src/main/java/se/su/dsv/scipro/springdata/services/PeerRequestService.java index 3b600d558f..dace639726 100644 --- a/src/main/java/se/su/dsv/scipro/springdata/services/PeerRequestService.java +++ b/src/main/java/se/su/dsv/scipro/springdata/services/PeerRequestService.java @@ -2,6 +2,7 @@ package se.su.dsv.scipro.springdata.services; import java.io.Serializable; import java.util.Collection; +import java.util.Date; import java.util.List; import org.springframework.data.domain.Page; @@ -36,6 +37,8 @@ public interface PeerRequestService extends GenericService<PeerRequest, Long>, Q private Employee supervisor; private Student author; private Collection<RequestStatus> statuses; + private Date createdAfter; + private Date createdBefore; public void setSupervisor(Employee supervisor) { this.supervisor = supervisor; @@ -55,6 +58,18 @@ public interface PeerRequestService extends GenericService<PeerRequest, Long>, Q public Student getAuthor() { return author; } + public void setCreatedAfter(Date createdAfter) { + this.createdAfter = createdAfter; + } + public Date getCreatedAfter() { + return createdAfter; + } + public void setCreatedBefore(Date createdBefore) { + this.createdBefore = createdBefore; + } + public Date getCreatedBefore() { + return createdBefore; + } } } diff --git a/src/main/java/se/su/dsv/scipro/springdata/services/PeerReviewService.java b/src/main/java/se/su/dsv/scipro/springdata/services/PeerReviewService.java index 65ea0d035c..8665f245f4 100644 --- a/src/main/java/se/su/dsv/scipro/springdata/services/PeerReviewService.java +++ b/src/main/java/se/su/dsv/scipro/springdata/services/PeerReviewService.java @@ -1,6 +1,7 @@ package se.su.dsv.scipro.springdata.services; import java.io.Serializable; +import java.util.Date; import java.util.List; import org.springframework.data.domain.Page; @@ -39,6 +40,8 @@ public interface PeerReviewService extends GenericService<PeerReview, Long>, Que private boolean includeCompleted; private boolean includeAborted; private boolean includeInProgress; + private Date createdAfter; + private Date createdBefore; public void setIncludeCompleted(boolean includeCompleted) { this.includeCompleted = includeCompleted; @@ -80,5 +83,21 @@ public interface PeerReviewService extends GenericService<PeerReview, Long>, Que return author; } + public void setCreatedAfter(Date createdAfter) { + this.createdAfter = createdAfter; + } + + public Date getCreatedAfter() { + return createdAfter; + } + + public void setCreatedBefore(Date createdBefore) { + this.createdBefore = createdBefore; + } + + public Date getCreatedBefore() { + return createdBefore; + } + } }