From 40deec62619731792f33b7cfce06478c4512674f Mon Sep 17 00:00:00 2001 From: srosse <stephane.rosse@frentix.com> Date: Fri, 11 Dec 2020 12:55:28 +0100 Subject: [PATCH] OO-5146: only consider closed assignment in report --- .../grading/manager/GraderToIdentityDAO.java | 53 +++++++++++++++++++ .../model/GradersSearchParameters.java | 18 +++++++ .../modules/grading/ui/ReportResource.java | 4 +- 3 files changed, 73 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/olat/modules/grading/manager/GraderToIdentityDAO.java b/src/main/java/org/olat/modules/grading/manager/GraderToIdentityDAO.java index 2f0de04694c..a770b64178b 100644 --- a/src/main/java/org/olat/modules/grading/manager/GraderToIdentityDAO.java +++ b/src/main/java/org/olat/modules/grading/manager/GraderToIdentityDAO.java @@ -253,6 +253,9 @@ public class GraderToIdentityDAO { .append(" inner join record.grader as rel") .append(" inner join rel.identity as ident") .append(" inner join rel.entry as refEntry"); + if(searchParams.getClosedFromDate() != null && searchParams.getClosedToDate() != null) { + sb.append(" left join record.assignment as assignment"); + } applyGradersSearchParameters(sb, searchParams, false); if(searchParams.getGradingFrom() != null) { @@ -261,6 +264,15 @@ public class GraderToIdentityDAO { if(searchParams.getGradingTo() != null) { sb.and().append("record.dateOfRecord<=:gradingToDate"); } + + if(searchParams.getClosedFromDate() != null && searchParams.getClosedToDate() != null) { + sb.and().append("assignment.closingDate>=:closedFromDate and assignment.closingDate<=:closedToDate"); + } else if(searchParams.getClosedFromDate() != null) { + sb.and().append("assignment.closingDate>=:closedFromDate"); + } else if(searchParams.getClosedToDate() != null) { + sb.and().append("assignment.closingDate<=:closedToDate"); + } + sb.append(" group by refEntry.key"); TypedQuery<Object[]> query = dbInstance.getCurrentEntityManager() @@ -288,6 +300,9 @@ public class GraderToIdentityDAO { sb.append(" inner join rel.entry as refEntry") .append(" inner join refEntry.olatResource as refResource"); } + if(searchParams.getClosedFromDate() != null && searchParams.getClosedToDate() != null) { + sb.append(" left join record.assignment as assignment"); + } applyGradersSearchParameters(sb, searchParams, false); if(searchParams.getGradingFrom() != null) { @@ -296,6 +311,15 @@ public class GraderToIdentityDAO { if(searchParams.getGradingTo() != null) { sb.and().append("record.dateOfRecord<=:gradingToDate"); } + + if(searchParams.getClosedFromDate() != null && searchParams.getClosedToDate() != null) { + sb.and().append("assignment.closingDate>=:closedFromDate and assignment.closingDate<=:closedToDate"); + } else if(searchParams.getClosedFromDate() != null) { + sb.and().append("assignment.closingDate>=:closedFromDate"); + } else if(searchParams.getClosedToDate() != null) { + sb.and().append("assignment.closingDate<=:closedToDate"); + } + sb.append(" group by ident.key"); TypedQuery<Object[]> query = dbInstance.getCurrentEntityManager() @@ -398,6 +422,21 @@ public class GraderToIdentityDAO { GradingAssignmentDAO.applyAssignmentSearchParameters(sb, searchParams.getGradingFrom(), searchParams.getGradingTo()); sb.append(")"); } + + if(applyFromTo && (searchParams.getClosedFromDate() != null || searchParams.getClosedToDate() != null)) { + sb.and() + .append(" exists (select closedAssignment from gradingassignment as closedAssignment") + .append(" where closedAssignment.grader.key=rel.key"); + + if(searchParams.getClosedFromDate() != null && searchParams.getClosedToDate() != null) { + sb.and().append("closedAssignment.closingDate>=:closedFromDate and closedAssignment.closingDate<=:closedToDate"); + } else if(searchParams.getClosedFromDate() != null) { + sb.and().append("closedAssignment.closingDate>=:closedFromDate"); + } else if(searchParams.getClosedToDate() != null) { + sb.and().append("closedAssignment.closingDate<=:closedToDate"); + } + sb.append(")"); + } } @@ -471,6 +510,14 @@ public class GraderToIdentityDAO { GradingAssignmentDAO.applyAssignmentSearchParameters(sb, searchParams.getGradingFrom(), searchParams.getGradingTo()); + if(searchParams.getClosedFromDate() != null && searchParams.getClosedToDate() != null) { + sb.and().append("assignment.closingDate>=:closedFromDate and assignment.closingDate<=:closedToDate"); + } else if(searchParams.getClosedFromDate() != null) { + sb.and().append("assignment.closingDate>=:closedFromDate"); + } else if(searchParams.getClosedToDate() != null) { + sb.and().append("assignment.closingDate<=:closedToDate"); + } + sb.append(" group by rel.identity.key"); TypedQuery<Object[]> query = dbInstance.getCurrentEntityManager() @@ -511,6 +558,12 @@ public class GraderToIdentityDAO { if(applyDates && searchParams.getGradingTo() != null) { query.setParameter("gradingToDate", searchParams.getGradingTo(), TemporalType.TIMESTAMP); } + if(applyDates && searchParams.getClosedFromDate() != null) { + query.setParameter("closedFromDate", searchParams.getClosedFromDate(), TemporalType.TIMESTAMP); + } + if(applyDates && searchParams.getClosedToDate() != null) { + query.setParameter("closedToDate", searchParams.getClosedToDate(), TemporalType.TIMESTAMP); + } if(searchParams.getManager() != null) { query.setParameter("managerKey", searchParams.getManager().getKey()); } diff --git a/src/main/java/org/olat/modules/grading/model/GradersSearchParameters.java b/src/main/java/org/olat/modules/grading/model/GradersSearchParameters.java index accf4b78537..c028c9faf62 100644 --- a/src/main/java/org/olat/modules/grading/model/GradersSearchParameters.java +++ b/src/main/java/org/olat/modules/grading/model/GradersSearchParameters.java @@ -36,6 +36,8 @@ public class GradersSearchParameters { private Date gradingTo; private Date gradingFrom; + private Date closedToDate; + private Date closedFromDate; private Identity grader; private Identity manager; private List<GraderStatus> status; @@ -56,6 +58,22 @@ public class GradersSearchParameters { public void setGradingFrom(Date gradingFrom) { this.gradingFrom = gradingFrom; } + + public Date getClosedToDate() { + return closedToDate; + } + + public void setClosedToDate(Date closedToDate) { + this.closedToDate = closedToDate; + } + + public Date getClosedFromDate() { + return closedFromDate; + } + + public void setClosedFromDate(Date closedFromDate) { + this.closedFromDate = closedFromDate; + } public List<GraderStatus> getStatus() { return status; diff --git a/src/main/java/org/olat/modules/grading/ui/ReportResource.java b/src/main/java/org/olat/modules/grading/ui/ReportResource.java index cd5494e6648..18a9edbf6eb 100644 --- a/src/main/java/org/olat/modules/grading/ui/ReportResource.java +++ b/src/main/java/org/olat/modules/grading/ui/ReportResource.java @@ -164,8 +164,8 @@ public class ReportResource extends OpenXMLWorkbookResource { private void createGradersData(OpenXMLWorksheet gradersSheet, OpenXMLWorkbook workbook) { GradersSearchParameters searchParams = new GradersSearchParameters(); - searchParams.setGradingFrom(from); - searchParams.setGradingTo(to); + searchParams.setClosedFromDate(from); + searchParams.setClosedToDate(to); searchParams.setManager(manager); searchParams.setGrader(grader); searchParams.setReferenceEntry(referenceEntry); -- GitLab