Show upcoming templates on the overview page

This commit is contained in:
Andreas Svanberg 2024-10-16 09:31:21 +02:00
parent 7a1b3d4744
commit 862dd59513
7 changed files with 57 additions and 5 deletions

@ -20,4 +20,6 @@ public interface GradingReportTemplateService {
* @return the end date of this grading report template, possibly {@code null}
*/
LocalDate getEndDate(GradingReportTemplate gradingReportTemplate);
List<GradingReportTemplate> getUpcomingTemplates(ProjectType projectType);
}

@ -227,4 +227,14 @@ public class GradingReportServiceImpl implements GradingReportTemplateService, G
return next.getValidFrom().minusDays(1);
}
}
@Override
public List<GradingReportTemplate> getUpcomingTemplates(ProjectType projectType) {
GradingReportTemplate current = getCurrentTemplate(projectType);
if (current == null) {
return gradingReportTemplateRepo.getTemplatesValidAfter(projectType, LocalDate.now(clock));
} else {
return gradingReportTemplateRepo.getTemplatesValidAfter(projectType, current.getValidFrom());
}
}
}

@ -5,6 +5,7 @@ import se.su.dsv.scipro.project.Project;
import se.su.dsv.scipro.system.ProjectType;
import java.time.LocalDate;
import java.util.List;
public interface GradingReportTemplateRepo extends JpaRepository<GradingReportTemplate, Long> {
GradingReportTemplate getTemplate(Project project);
@ -12,4 +13,6 @@ public interface GradingReportTemplateRepo extends JpaRepository<GradingReportTe
GradingReportTemplate getCurrentTemplate(ProjectType projectType, LocalDate now);
GradingReportTemplate getNextTemplate(GradingReportTemplate gradingReportTemplate);
List<GradingReportTemplate> getTemplatesValidAfter(ProjectType projectType, LocalDate date);
}

@ -11,6 +11,7 @@ import jakarta.persistence.EntityManager;
import se.su.dsv.scipro.system.ProjectType;
import java.time.LocalDate;
import java.util.List;
public class GradingReportTemplateRepoImpl extends GenericRepo<GradingReportTemplate, Long> implements GradingReportTemplateRepo {
@Inject
@ -46,4 +47,10 @@ public class GradingReportTemplateRepoImpl extends GenericRepo<GradingReportTemp
.and(template.validFrom.gt(gradingReportTemplate.getValidFrom())));
return findOne(template.projectType.eq(gradingReportTemplate.getProjectType()).and(template.validFrom.eq(validFrom)));
}
@Override
public List<GradingReportTemplate> getTemplatesValidAfter(ProjectType projectType, LocalDate date) {
return findAll(QGradingReportTemplate.gradingReportTemplate.projectType.eq(projectType)
.and(QGradingReportTemplate.gradingReportTemplate.validFrom.gt(date)));
}
}

@ -0,0 +1,18 @@
package se.su.dsv.scipro.admin.pages.grading;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import se.su.dsv.scipro.admin.pages.AbstractAdminProjectPage;
import se.su.dsv.scipro.report.GradingReportTemplate;
public class AdminGradingTemplateEditPage extends AbstractAdminProjectPage implements MenuHighlightGradingTemplates {
private static final String GRADING_REPORT_TEMPLATE_ID_PARAMETER = "id";
public AdminGradingTemplateEditPage() {
}
public static PageParameters getPageParameters(GradingReportTemplate gradingReportTemplate) {
PageParameters pageParameters = new PageParameters();
pageParameters.add(GRADING_REPORT_TEMPLATE_ID_PARAMETER, gradingReportTemplate.getId());
return pageParameters;
}
}

@ -47,20 +47,22 @@
<h2 wicket:id="name">Bachelor</h2>
<div class="hstack gap-3 flex-wrap align-items-start" wicket:id="templates">
<div class="card">
<div class="card" wicket:id="upcoming_templates">
<div class="card-header bg-info-subtle">
Upcoming template
</div>
<div class="card-body">
<dl>
<dt>Valid from</dt>
<dd>2024-10-31</dd>
<dd wicket:id="valid_from">2024-10-31</dd>
<dt>Note</dt>
<dd>Added a new criteria U14</dd>
<wicket:enclosure>
<dt>Note</dt>
<dd wicket:id="note">Added a new criteria U14</dd>
</wicket:enclosure>
</dl>
<span class="card-text">
<a href="#">View / Edit</a>
<a href="#" wicket:id="edit_template">View / Edit</a>
</span>
</div>
</div>

@ -43,6 +43,16 @@ public class AdminGradingTemplatesOverviewPage extends AbstractAdminProjectPage
add(new Label("valid_from", currentTemplate.map(GradingReportTemplate::getValidFrom)));
add(new NonEmptyLabel("note", Model.of("")));
add(new BookmarkablePageLink<>("view_template", AdminGradingTemplatePage.class, AdminGradingTemplatePage.getPageParameters(currentTemplate.getObject())));
IModel<List<GradingReportTemplate>> upcomingTemplates = model.map(gradingReportTemplateService::getUpcomingTemplates);
add(new ListView<>("upcoming_templates", upcomingTemplates) {
@Override
protected void populateItem(ListItem<GradingReportTemplate> item) {
item.add(new Label("valid_from", item.getModel().map(GradingReportTemplate::getValidFrom)));
item.add(new NonEmptyLabel("note", Model.of("")));
item.add(new BookmarkablePageLink<>("edit_template", AdminGradingTemplateEditPage.class, AdminGradingTemplateEditPage.getPageParameters(currentTemplate.getObject())));
}
});
}
}
}